整理自廖雪峰SQL教程
1 查询数据
1.1 基本查询
使用SELECT查询的基本语句 SELECT * FROM <表名> 可以查询一个表的所有行和所有列的数据。
1.2 条件查询
条件查询的语法就是:
SELECT * FROM <表名> WHERE <条件表达式>
条件运算按照NOT、AND、OR的优先级进行,即NOT优先级最高,其次是AND,最后是OR。加上括号可以改变优先级。
常用的条件表达式
条件 | 举例 |
---|---|
使用<>判断不相等 | score <> 80 |
使用LIKE判断相似 | name LIKE ‘ab%’ |
1.3 投影查询
使用 SELECT 列1, 列2, 列3 则可以仅返回指定列,这种操作称为投影。
使用 SELECT 列1, 列2, 列3 FROM … 时,还可以给每一列起个别名,这样,结果集的列名就可以与原表的列名不同。它的语法是 SELECT 列1 别名1, 列2 别名2, 列3 别名3 FROM … 。
1.4 排序
要根据其他条件排序怎么办?可以加上 ORDER BY 子句。
如果要反过来,按照=从高到底排序,我们可以加上 DESC 表示“倒序”。
如果score列有相同的数据,要进一步排序,可以继续添加列名。例如,使用 ORDER BY score DESC, gender 表示先按score列倒序,如果有相同分数的,再按gender列排序。
如果有WHERE子句,那么ORDER BY子句要放到WHERE子句后面。例如,查询一班的学生成绩,并按照倒序排序。
1.5 分页查询
使用 LIMIT M OFFSET N 可以对结果集进行分页,每次查询返回结果集的一部分
分页查询的关键在于,首先要确定每页需要显示的结果数量pageSize,然后根据当前页的索引pageIndex,确定LIMIT和OFFSET应该设定的值:
LIMIT 总是设定为 pageSize;
OFFSET 计算公式为 pageSize * (pageIndex - 1) 。
在MySQL中,LIMIT 15 OFFSET 30 还可以简写成 LIMIT 30, 15 。
1.6 聚合查询
我们可以使用SQL内置的COUNT()函数查询:SELECT COUNT(*) FROM students
除了COUNT()函数外,SQL还提供了如下聚合函数:SUM, AVG, MAX, MIN
对于聚合查询,SQL还提供了“分组聚合”的功能。SELECT class_id, COUNT(*) num FROM students GROUP BY class_id 可以一目了然地看出各个班级的学生人数。
1.7 多表查询
SELECT查询不但可以从一张表查询数据,还可以从多张表同时查询数据。查询多张表的语法是:SELECT * FROM <表1> <表2> 。
笛卡尔查询:使用多表查询可以获取M x N行记录;
多表查询的结果集可能非常巨大,要小心使用。
1.8 连接查询
INNER JOIN是最常用的一种JOIN查询,它的语法是 SELECT … FROM <表1> INNER JOIN <表2> ON <条件…> ;
还有 LEFT/RIGHT/FULL OUTER JOIN
2 修改数据
2.1 INSERT
INSERT语句的基本语法是:
INSERT INTO <表名> (字段1, 字段2, …) VALUES (值1, 值2, …) ;
2.2 UPDATE
UPDATE语句的基本语法是:
UPDATE <表名> SET 字段1=值1, 字段2=值2, … WHERE … ;
2.3 DELETE
DELETE语句的基本语法是:
DELETE FROM <表名> WHERE …;