SELECT语句其实并不要求一定要有FROM子句
执行SELECT 1
来测试数据库连接。
条件查询的语法
SELECT * FROM <表名> WHERE <条件表达式>
条件表达式可以用:
<条件1> AND <条件2>
<条件1> OR <条件2>
NOT <条件> 如:NOT class_id = 2 等价于 class_id <> 2
要组合三个或者更多的条件,就需要用小括号()表示如何进行条件运算。
分数在80以下或者90以上,并且是男生
SELECT * FROM students WHERE (score < 80 OR score > 90) AND gender = 'M';
如果不加括号:NOT优先级最高,其次是AND,最后是OR。
排序
SELECT id, name, gender, score FROM students ORDER BY score DESC;
DESC
表示“倒序”,从高到底- 默认的排序规则是
ASC
:“升序”,即从小到大。ASC可以省略 - 如果有
WHERE
子句,那么ORDER BY
子句要放到WHERE子句后面 - 如果score列有相同的数据,要进一步排序,可以继续添加列名。例如,使用
ORDER BY score DESC, gender
,表示先按score列倒序,如果有相同分数的,再按gender列排序
修改数据
INSERT INTO <表名> (字段1, 字段2, ...) VALUES (值1, 值2, ...);
UPDATE <表名> SET 字段1=值1, 字段2=值2, ... WHERE ...;
DELETE FROM <表名> WHERE ...;
分页查询
LIMIT <M> OFFSET <N>
如:
结果集从0号记录开始,最多取3条
SELECT *
FROM <表名>
ORDER BY <字段> DESC
LIMIT 3 OFFSET 0;
LIMIT 3
表示的意思是“最多3条记录”- 首先要确定每页需要显示的结果数量pageSize(这里是3),然后根据当前页的索引pageIndex(从1开始),确定LIMIT和OFFSET应该设定的值:
LIMIT
总是设定为pageSize;OFFSET
计算公式为pageSize * (pageIndex - 1)
聚合&分组
函数 | 说明 |
---|---|
COUNT | 查询列的行数 |
SUM | 计算某一列的合计值,该列必须为数值类型 |
AVG | 计算某一列的平均值,该列必须为数值类型 |
MAX | 计算某一列的最大值 |
MIN | 计算某一列的最小值 |
SELECT <字段1>, <字段2>,... COUNT(*) FROM <表名> GROUP BY <字段1>, <字段2>, ...
多表查询
SELECT * FROM <表名1> <别名1>, <表名2> <别名2>
连接查询
INNER JOIN
查询的写法:
- 先确定主表,仍然使用
FROM <表1>
的语法; - 再确定需要连接的表,使用
INNER JOIN <表2>
的语法; - 然后确定连接条件,使用
ON <条件...>
,这里的条件是s.class_id = c.id
,表示students表的class_id列与classes表的id列相同的行需要连接; - 可选:加上
WHERE
子句、ORDER BY
等子句。
SELECT ... FROM tableA ??? JOIN tableB ON tableA.column1 = tableB.column2
SELECT s.id, s.name, s.class_id, c.name class_name, s.gender, s.score
FROM students s
INNER JOIN classes c
ON s.class_id = c.id;
把tableA看作左表,把tableB看成右表
- INNER JOIN是选出两张表都存在的记录:
- LEFT OUTER JOIN是选出左表存在的记录:
- RIGHT OUTER JOIN是选出右表存在的记录:
- FULL OUTER JOIN则是选出左右表都存在的记录: