基本查询
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: 总是设定为pagesizeOFFSET: 计算: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替代内连接运算