背景图
SQL拾遗

2024年04月01日 作者头像 作者头像 ArnoX 编辑

SQL_header.png

SELECT 语句

SELECT column1, column2, ... #选取全部用 *
FROM table_name;

*SELECT DISTINCT 选取唯一值,重复值只保留一个

SELECT DISTINCT column1, column2, ...
FROM table_name;

WHERE 子句

SELECT column1, column2, ...
FROM table_name
WHERE condition;#仅提取满足condition条件的记录

*逻辑运算符:

=            等于
<>           不等于。注释:在 SQL 的一些版本中,该操作符可被写成 !=
>            大于
<            小于
>=           大于等于
<=           小于等于
BETWEEN      在某个范围内
LIKE         搜索某种模式
IN           指定针对某个列的多个可能值

*AND/OR

SELECT * from xyz WHERE val > 2000 AND val < 3000;
SELECT * from xyz WHERE sal > 2000 OR comm > 500;

ORDER BY 关键字

SELECT column1, column2, ...
FROM table_name
ORDER BY column1, column2, ... ASC|DESC;#ASC按升序排列,DESC按降序排列

INSERT INTO 语句

INSERT INTO table_name # 不指定列名
VALUES (value1,value2,value3,...);

INSERT INTO table_name (column1,column2,column3,...) # 指定列名
VALUES (value1,value2,value3,...);

UPDATE 语句

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition; #!!!谨防全部键值被更改,尽可能使用WHERE

DELETE 语句

DELETE FROM table_name
WHERE condition;#!!!谨防全部被删除,尽可能使用WHERE

LIMIT 子句

SELECT column_name(s)
FROM table_name
LIMIT number; # 规定要返回的记录的数目,大型表时用

LIKE 操作符

SELECT column1, column2, ...
FROM table_name
WHERE column LIKE pattern; # pattern接SQL通配符

通配符

%             替代 0 个或多个字符
_             替代一个字符
[charlist]    字符列中的任何单一字符
[^charlist]
或
[!charlist]   不在字符列中的任何单一字符

*例:
选取 name 以 "G"、"F" 或 "s" 开始的所有网站:

SELECT * FROM Websites
WHERE name REGEXP '^[GFs]';

IN 操作符(在 WHERE 子句中规定多个值)

SELECT column1, column2, ...
FROM table_name
WHERE column IN (value1, value2, ...);

BETWEEN 操作符(选取介于两个值之间的数据范围内的值)

SELECT column1, column2, ...
FROM table_name
WHERE column BETWEEN value1 AND value2; # 该值可为数字、字母、日期值等

JOIN相关

JOIN.png

UNION 操作符(合并两个或多个 SELECT 语句的结果)

默认选取不同的值,允许重复值用UNION ALL

SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;

建立库、表、约束

CREATE DATABASE dbname;
CREATE TABLE table_name
(
column_name1 data_type(size) constraint_name1,
column_name2 data_type(size) constraint_name2,
column_name3 data_type(size) constraint_name3,
....
);

NOT NULL、UNIQUE、PRIMARY KEY、FOREIGN KEY 约束

NOT NULL 约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。

CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255) NOT NULL,
Age int

);
UNIQUE 约束唯一标识数据库表中的每条记录。注意:每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束

CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
UNIQUE (P_Id)
)

PRIMARY KEY约束:主键必须包含唯一的值。主键列不能包含 NULL 值。每个表都应该有一个主键,并且每个表只能有一个主键。

CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (P_Id)
)

FOREIGN KEY约束:一个表中的外键指向另一个表中的 UNIQUE KEY(唯一约束的键)。

CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
FOREIGN KEY (P_Id) REFERENCES Persons(P_Id)
)

常用数据清洗方法汇总

#删除不必要的列:
ALTER TABLE tableName DROP COLUMN columnName;

#重命名列:
SELECT col_name AS new_col_name FROM tableName;

#处理重复值:
SELECT DISTINCT col_name FROM tableName;

#字符串处理,例如去除空格、替换特殊字符:
SELECT TRIM(col_name) FROM tableName;
SELECT REGEXP_REPLACE(col_name, '正则表达式', '替换字符') FROM tableName;

#数据合并:
SELECT A.*, B.* FROM Table_a A JOIN Table_b B ON A.id = B.id;