SQL 基础语法复习
1. 查询 SELECT
查询所有列:
sql
SELECT *
FROM 表名;
查询指定列:
sql
SELECT 列1, 列2
FROM 表名;
带条件查询:
sql
SELECT 列1, 列2
FROM 表名
WHERE 条件;
去重查询:
sql
SELECT DISTINCT 列名
FROM 表名;
2. 条件 WHERE
比较条件:
sql
WHERE 列名 = 值
WHERE 列名 <> 值
WHERE 列名 > 值
WHERE 列名 >= 值
WHERE 列名 < 值
WHERE 列名 <= 值
多个条件:
sql
WHERE 条件1 AND 条件2
WHERE 条件1 OR 条件2
范围查询:
sql
WHERE 列名 BETWEEN 值1 AND 值2;
集合查询:
sql
WHERE 列名 IN (值1, 值2, 值3);
模糊查询:
sql
WHERE 列名 LIKE '%关键字%';
空值查询:
sql
WHERE 列名 IS NULL;
WHERE 列名 IS NOT NULL;
3. 增 INSERT
插入一整行:
sql
INSERT INTO 表名
VALUES (值1, 值2, 值3);
指定字段插入:
sql
INSERT INTO 表名(列1, 列2, 列3)
VALUES (值1, 值2, 值3);
把查询结果插入表:
sql
INSERT INTO 表名(列1, 列2)
SELECT 列1, 列2
FROM 另一个表
WHERE 条件;
4. 删 DELETE
删除指定记录:
sql
DELETE FROM 表名
WHERE 条件;
删除所有记录:
sql
DELETE FROM 表名;
清空表:
sql
TRUNCATE TABLE 表名;
区别:
text
DELETE 可以带 WHERE,能删部分数据。
TRUNCATE 不能带 WHERE,一次清空整张表。
5. 改 UPDATE
修改指定记录:
sql
UPDATE 表名
SET 列名 = 新值
WHERE 条件;
一次修改多个字段:
sql
UPDATE 表名
SET 列1 = 新值1,
列2 = 新值2
WHERE 条件;
注意:
text
UPDATE 和 DELETE 不写 WHERE,会影响整张表。
6. 排序 ORDER BY
升序:
sql
SELECT *
FROM 表名
ORDER BY 列名 ASC;
降序:
sql
SELECT *
FROM 表名
ORDER BY 列名 DESC;
多个字段排序:
sql
SELECT *
FROM 表名
ORDER BY 列1 ASC, 列2 DESC;
说明:
text
ASC:升序,默认可以不写
DESC:降序
7. 聚合函数
统计个数:
sql
SELECT COUNT(*)
FROM 表名;
求和:
sql
SELECT SUM(列名)
FROM 表名;
平均值:
sql
SELECT AVG(列名)
FROM 表名;
最大值:
sql
SELECT MAX(列名)
FROM 表名;
最小值:
sql
SELECT MIN(列名)
FROM 表名;
常用聚合函数:
text
COUNT:统计数量
SUM:求总和
AVG:求平均值
MAX:求最大值
MIN:求最小值
8. 分组 GROUP BY
按某列分组统计:
sql
SELECT 分组列, 聚合函数(列)
FROM 表名
GROUP BY 分组列;
例子:
sql
SELECT XSBH, SUM(JE) AS 销售总金额
FROM XSCP
GROUP BY XSBH;
多列分组:
sql
SELECT 列1, 列2, COUNT(*)
FROM 表名
GROUP BY 列1, 列2;
规则:
text
SELECT 中的普通字段,必须出现在 GROUP BY 中。
没有出现在 GROUP BY 中的字段,必须放进聚合函数。
9. 分组后筛选 HAVING
sql
SELECT 分组列, 聚合函数(列)
FROM 表名
GROUP BY 分组列
HAVING 聚合条件;
例子:
sql
SELECT XSBH, SUM(JE) AS 销售总金额
FROM XSCP
GROUP BY XSBH
HAVING SUM(JE) >= 10000;
区别:
text
WHERE:分组前筛选普通记录
HAVING:分组后筛选统计结果
10. 分组 + 排序
sql
SELECT 分组列, 聚合函数(列) AS 别名
FROM 表名
GROUP BY 分组列
ORDER BY 聚合函数(列) DESC;
例子:
sql
SELECT XSBH, SUM(JE) AS 销售总金额
FROM XSCP
GROUP BY XSBH
ORDER BY SUM(JE) DESC;
也可以用别名排序:
sql
SELECT XSBH, SUM(JE) AS 销售总金额
FROM XSCP
GROUP BY XSBH
ORDER BY 销售总金额 DESC;
11. 连接查询
旧式写法:
sql
SELECT 表1.列, 表2.列
FROM 表1, 表2
WHERE 表1.关联列 = 表2.关联列;
标准写法:
sql
SELECT 表1.列, 表2.列
FROM 表1
JOIN 表2 ON 表1.关联列 = 表2.关联列;
三表连接:
sql
SELECT *
FROM 表1
JOIN 表2 ON 表1.关联列 = 表2.关联列
JOIN 表3 ON 表2.关联列 = 表3.关联列;
12. 子查询
作为条件:
sql
SELECT *
FROM 表名
WHERE 列名 IN (
SELECT 列名
FROM 另一个表
);
比较平均值:
sql
SELECT *
FROM SC sc1
WHERE Grade >= (
SELECT AVG(Grade)
FROM SC sc2
WHERE sc2.Sno = sc1.Sno
);
EXISTS:
sql
SELECT *
FROM 表1
WHERE EXISTS (
SELECT *
FROM 表2
WHERE 表2.关联列 = 表1.关联列
);
NOT EXISTS:
sql
SELECT *
FROM 表1
WHERE NOT EXISTS (
SELECT *
FROM 表2
WHERE 表2.关联列 = 表1.关联列
);
13. 集合查询
并集:
sql
SELECT 列名 FROM 表1
UNION
SELECT 列名 FROM 表2;
交集:
sql
SELECT 列名 FROM 表1
INTERSECT
SELECT 列名 FROM 表2;
差集:
sql
SELECT 列名 FROM 表1
EXCEPT
SELECT 列名 FROM 表2;
说明:
text
UNION:合并并去重
INTERSECT:取共同部分
EXCEPT:前者有、后者没有
14. 常用完整顺序
sql
SELECT 列名, 聚合函数(列)
FROM 表名
WHERE 普通条件
GROUP BY 分组列
HAVING 聚合条件
ORDER BY 排序列 ASC/DESC;
执行理解:
text
FROM:从哪张表来
WHERE:先筛选记录
GROUP BY:再分组
HAVING:筛选分组后的结果
SELECT:显示结果
ORDER BY:最后排序
15. 记忆口诀
text
查:SELECT FROM WHERE
增:INSERT INTO VALUES
删:DELETE FROM WHERE
改:UPDATE SET WHERE
分组:GROUP BY
组后筛选:HAVING
排序:ORDER BY