查询结果去重
SELECT DISTINCT 列名 FROM 表名;
限制查询结果条数
LIMIT 开始行, 限制条数;
对查询结果排序(默认按照ASC升序排序)
ORDER BY 列名 ASC|DESC
asc:升序
desc:降序
按照多个列的值进行排序(用,分割)
ORDER BY 列1 ASC|DESC, 列2 ASC|DESC ...
排序和限制同时使用
ORDER BY 列名 LIMIT 限制数目
简单搜索条件(查询单个值)
需要把
搜索条件
放在WHERE
子句中SELECT * FROM student_info WHERE 条件(比如name = “大头”)
条件:
大于:> ,
小于:< ,
不等于:!= ,
之间:BETWEEN 1 AND 10
简单搜索条件(查询多个值中的一个)
需要把
搜索条件
放在WHERE
子句中SELECT * FROM 表名 WHERE 条件 IN(匹配条件一,匹配条件二)
例:查询user表中 名字为张三或者李四的用户
SELECT * FROM user WHERE name IN("张三",“李四”)
判断是否是NULL数据
SELECT * FROM 表名 WHERE 条件 IS NULL
例:查询user表中name为null的用户
SELECT * FROM user WHERE name IS NULL
多个条件联合查询
且:用AND连接
例:查询user表名字为张三且成绩大于75分的用户
SELECT * FROM user WHERE name = "张三" AND score > 75;
或:用OR连接
例:查询user表名字为张三或成绩大于75分的用户
SELECT * FROM user WHERE name = "张三" OR score > 75;
当AND 和OR一起用时 AND的优先级大于OR
模糊查询
关键词:LIKE
通配符:不能完整描述要查询的信息,那就用某个符号来替代这些模糊的信息
1: “%“”:代表一个字符串
例:查询user表 姓 “”张“的用户(张三丰啊分) / 查询user表 有 “”三“的用户
SELECT * FROM user WHERE name LIKE "张%";
SELECT * FROM user WHERE name LIKE "%三%";
2:_:代表任意一个字符
例:查询user表 姓 “”张“的用户(张三) / 查询user表 有 “”三“的用户
SELECT * FROM user WHERE name LIKE "张_";
SELECT * FROM user WHERE name LIKE "%三%";
转义通配符
如果待匹配的字符串中本身就包含普通字符
'%'
或者'_'
该咋办,怎么区分它是一个通配符还是一个普通字符呢?答:如果匹配字符串中需要普通字符
'%'
或者'_'
的话,需要在它们前边加一个反斜杠\
来和通配符区分开来,也就是说:
'\%'
代表普通字符'%'
'\_'
代表普通字符'_'
例:查询user表 姓 “”张“的用户(张%或者张_)
SELECT * FROM user
WHERE name LIKE "张\_";
分组数据
理解:比如一条语句中同时查询全校的各科目的平均分
示例语句:SELECT subject, AVG(score) FROM student_score GROUP BY subject;
| subject | AVG(score) | +-----------------------------+------------+
| 数学 | 73.0000 |
| 语文 | 73.2500 |
+-----------------------------+------------+
SELECT [DISTINCT] 查询列表
[FROM 表名]
[WHERE 布尔表达式]
[GROUP BY 分组列表 ]
[HAVING 分组过滤条件]
[ORDER BY 排序列表]
[LIMIT 开始行, 限制条数]
多表查询
子查询:
栗子:
查询张三的分数:SELECT * FROM student_score WHERE number = (SELECT number FROM student_info WHERE name = '张三');