1. 分页查询
应用场景:当要显示的数据,一页显示不全,需要分页提交sql请求
语法:
SELECT 查询列表
FROM 表
JOIN TYPE 表2
ON 连接条件
WHERE 筛选条件
GROUP BY 分组字段
HAVING 分组后的筛选
ORDER BY 排序后的字段
LIMIT offset,size
offset: 要显示的条目的起始索引(起始索引从0开始)
size:要显示的条目个数
offset是可选的,默认为0
#案例1:查询前五条员工信息
SELECT * FROM employees LIMIT 0,5
SELECT * FROM employees LIMIT 5
#案例2:有奖金的员工信息,并且工资较高的前十名显示出来
SELECT *
FROM employees
WHERE commission_pct IS NOT NULL
ORDER BY salary DESC
LIMIT 10;
特点:
- 起始条目索引从0开始
- limit子句放在查询语句的最后
- 公式:select * from 表 limit (page-1)*sizePerPage, sizePerPage
假如:
每页显示条目数sizePerPage
要显示的页数 page
2. 联合查询
应用场景:要查询的结果来自多个表,且多个表没有直接的连接关系,但查询的信息一致时
语法:
select 字段|常量|表达式|函数 【from 表】 【where 条件】 union 【all】
select 字段|常量|表达式|函数 【from 表】 【where 条件】 union 【all】
select 字段|常量|表达式|函数 【from 表】 【where 条件】 union 【all】
.....
select 字段|常量|表达式|函数 【from 表】 【where 条件】
案例:
#1.查询部门编号>90或者邮箱中包含a的员工信息
#当查询结果来自一个表时,可以用之前的方法,也可以用联合查询
SELECT *
FROM employees
WHERE email LIKE '%a%'
OR department_id > 90;
SELECT *
FROM employees
WHERE email LIKE '%a%'
UNION
SELECT *
FROM employees
WHERE department_id > 90;
#当查询结果来自多个表时:
#查询中国用户中男性的信息以及外国用户中男性的信息
SELECT id,cname,csex FROM T_CA WHERE csex='男'
UNION
SELECT t_id,tName,tGender FROM T_UA WHERE tGender='male'
特点:
1、多条查询语句的查询的列数必须是一致的
2、多条查询语句的查询的列的类型几乎相同
3、union代表去重,union all代表不去重
3. 查询相关测试题讲解
已知表stuinfo:id 学号、name 姓名、email 邮箱:john@126.com,gradeID 年级编号,sex 性别:男 女 age 年龄
表grade:id 年级编号、gradeName 年级名称
# 查询所有学员的邮箱的用户名(注:邮箱中@前面的字符)
SELECT SUBSTR(email, 1, instr('@')-1) 用户名
FROM stuinfo
# 查询男生和女生的个数
SELECT COUNT(*) 个数,sex
FROM stuinfo
GROUP BY sex;
# 查询年龄大于18岁的所有学生的姓名和年级名称
SELECT name, gradeName
FROM stuinfo s
JOIN grade g
ON s.gradeID=g.id
WHERE s.age > 18;
# 查询哪个年级的学生的最小年龄大于20岁
(1)查询每个年级的学生的最小年龄
SELECT MIN(age)
FROM stuinfo
GROUP BY gradeID;
(2)在(1)结果集中查找>20的年级编号
SELECT gradeID
FROM stuinfo
GROUP BY gradeID;
HAVING MIN(age)>20;