基本查询


SELECT [DISTINCT] <目标列表达式> [别名] [, <目标列表达式> [别名]] ...
FROM <表名或视图名> [别名] [, <表名或视图名> [别名]] ...
[WHERE <条件表达式>]
[GROUP BY <列名> [HAVING 条件表达式]]
[ORDER BY <列名> [ASC|DESC]]
[LIMIT <页大小> [ OFFSET <页数>]];

去重

去重后聚集函数将对每个分组进行而不是整个结果表。

SELECT DISTINCT name FROM Student;

分组

SELECT DISTINCT name FROM Student GROUP BY class;

模糊查询

  • %:匹配零个或多个字符。
    • 左模糊:WHERE NAME LIKE '%张',能走索引,性能最好。
    • 右模糊:WHERE NAME LIKE '张%',通常不走索引,全表扫描,性能差。
    • 全模糊:WHERE NAME LIKE '%张%',不走索引,全表扫描,性能最差。
  • _:匹配任意单个字符。
SELECT * FROM Student WHERE Sname LIKE '张_';

聚合函数


  • COUNT(*):统计元组的个数。
  • COUNT(列名):一列中值的个数。
  • SUM(列名):计算一列值的和。
  • AVG(列名)计算一列值的平均值。
  • MAX(列名):求一列值的最大值。
  • MIN(列名):求一列值的最小值。

多表查询


传统写法:

SELECT Student.Sno, Sname, Cno, Grade
FROM Student, SC
WHERE Student.Sno = SC.Sno;

标准 JOIN 写法:

SELECT s.Sno, s.Sname, c.Cno, c.Grade
FROM Student s
JOIN SC c ON s.Sno = c.Sno;