基本查询
SELECT * FROM <表名>
SELECT
关键字可以直接计算, 不适用FROM
关键作用:SELECT 1
验证数据库是否连接成功SELECT
查询结果始终是个二维表
条件查询
-
WHERE
设定查询条件 -
第一种:
SELECT * FROM <表名> WHERE <条件表达式>
-
第二种:
- 条件表达式:
<条件1> AND <条件2>
- 或者是
OR
满足两个条件之一就可以
- 条件表达式:
-
第三种:
NOT
- 可以使用
<>
表示
-
NOT
优先级最高, 其次是AND
和OR
-
()
可以改变优先级 -
IN
:SELECT * FROM students WHERE score in (90, 91);
-
The IN operator is a shorthand for multiple OR conditions.
-
BETWEEN
: The BETWEEN operator is inclusive: begin and end values are included. -
SELECT * FROM students WHERE score BETWEEN 60 AND 90;
常用表达式条件
=
: 相等>
: 大于>=
: 大于或相等<
: 小于<>
: 不等LIKE
: 判断相似:SELECT * FROM students WHERE name LIKE '%明';
%进行相似匹配
投影查询
- 只希望返回某些列数据
SELECT 列1, 列2, 列3 FROM...
- 结果集的列表列名, 可以有别名
SELECT 列1 列1别名, 列2, 列2别名 FROM..
排序
-
查询结果通常按照主键
id
排序 -
ORDER BY
按照从低到高排 -
默认升序,
ASC
-
再加上
DESC
表示倒序 -
SELECT id, name, gender, score FROM students ORDER BY score DESC;
-
根据两个数据, 排序时, 先根据第一个排序, 第一个相同的时候, 再根据第二个排序
-
排序方式跟在条件
WHERE
后面
分页
-
分页通过截取实现:
LIMIT <M> OFFSET <N>
-
SELECT * FROM students ORDER BY score DESC LIMIT 3 OFFSET 0;
-
结果集从0开始, 最多取3条
-
SQL记录集的索引从0开始
LIMIT
: 总是设定为pagesize
OFFSET
: 计算:pagesize * (pageIndex - 1)
-
OFFSET
: 超出最大值, 返回空数组 -
注意:
OFFSET
: 默认是0- MySQL:
OFFSET
可以省略 <N>
越大, 查询效率越低
聚合查询
-
统计总数, 平均数等计算, 可以使用聚合函数
-
COUNT()
: 查询所有的列的行数 -
SELECT COUNT(*) num FROM students;
: 设置别名, 便于统计 -
聚合查询配合添加查询, 查询满足条件的列数
-
常用聚合函数
SUM
: 计算某一列的合计值, 该列必须是数值类型AVG
: 计算某一列的平均值, 该列必须是平均值MAX
: 计算某一列的最大值MIN
: 计算某一列的最小值MAX
和MIN
不限定数值类型, 如果是字符类型, 会返回排序最后和排序最前的字符FLOOR
: 向下取整CEILING
: 向上取整
-
如果没有查询到任何数据,
COUNT
返回0, 其他返回NULL
-
GROUP BY
: 对数据进行分组查询计算 -
SQL引擎, 不能把多个
name
的值放入同一行记录中. 聚合查询的列中, 只能放入分组的列
多表查询
SELECT * FROM <表1> <表2>
- 结果是两个表的
乘积
- 重复的属性名, 通过设置别名解决
- 也可以对表, 设置别名
SELECT s.id sid, s.name, s.gender, s.score, c.id cid, c.name cname FROM students s, classes c;
- 多表查询, 也可以添加
where
条件
连接查询
- 先确定一个主表作为结果集, 其他表有选择的连接到主表
- 内连接查询
INNER JOIN
- 确定主表
FROM <表1>
- 确定需要连接的表:
INNER JOIN <表2>
- 确定连接条件:
ON <条件1>
- 可选: 使用
WHERE
,ORDER BY
等
- 确定主表
- 外连接:
LEFT OUTER JOIN
- 包含关系:
INNER
: 两张表都存在的数据LEFT OUTER JOIN
: 左表存在的数据RIGHT OUTER JOIN
: 右表存在的数据FULL OUTER JOIN
: 左右都存在的数据 MySQL不支持
FROM x, y
使用笛卡尔积, 效率低, 所以不能用WHERE
替代内连接运算