DQL语句
- [----- 》数据库文件 点击此链接下载 《-------](https://download.csdn.net/download/weixin_45260385/15452324)
-
- (1) 基础查询
- (2) 条件查询 (AND , OR , NOT)
- (3) 模糊查询 (like,between and , in .......)
- (4) 排序查询 (order by)
- (5) 常见函数
-
- ---------------------------单行函数---------------------------
- 单行函数 --- 字符函数 ① ~ ⑧:
- ① length() 字符长度
- ② concat() 字符拼接
- ③ upper() ,lower() 大写,小写
- ④ substr() (全称:substring) 截取
- ⑤ trim()
- ⑥ lpad() 左填充长度
- ⑦ rpad() 右填充长度
- ⑧ replace() 置换
- 单行函数 --- 数字函数 ① ~ ⑤:
- ① round() 四舍五入
- ② ceil() 向上取整
- ③ floor() 向下取整
- ④ truncate() 截断
- ⑤ mod() 取余
- 单行函数 --- 日期函数 ① ~ ⑤:
- ① now() 返回当前系统日期+时间
- ② curdate() 返回当前系统日期,不包含时间
- ③ curtime() 返回当前时间,不包含日期
- ④ str_to_date() 字符转日期
- ⑤ year() ,month() ,day() 分别获取年月日
- 单行函数 --- 流程控制函数 ① ~ ②:
- ① if()
- ② case()
- ---------------------------分组函数---------------------------
- 分组函数的特点
- 分组函数 --- 简单使用 :
- ① sum(),avg(),max(),min(),count()
- 分组函数 --- 搭配distinct :
- ① sum() + distinct
- ② count() + distinct
- -------------------------------------------------------------------
- (6) 分组查询 (group by)
- (7) 连接查询
- 内连接
- 外连接
- (8) 子查询
- (9) 分页查询 (limit)
- (10) 联合查询 (union)
----- 》数据库文件 点击此链接下载 《-------
(1) 基础查询
① 基础查询语句
SELECT * FROM employees ;
② 查询常量值
SELECT 'andy';
③ 查询表达式
SELECT 50+50*50 ;
④ 查询函数
SELECT VERSION() ;
⑤ 起别名
ps : 可省略 AS , 中间有空格即可
ps : 别名建议打双引号
练习一:
SELECT 100*50 AS "结果" ;
练习二:
SELECT
last_name AS "姓",
first_name AS "名"
FROM
employees
⑥ 去重
使用 DISTINCT 关键字 进行去重
# 查询员工表中所有 部门编号 (不要重复)
SELECT DISTINCT
department_id
FROM
employees;
⑦ CONCAT 连接
使用 CONCAT 关键字 进行字段连接
# 拼接字段内容
SELECT
CONCAT( last_name, first_name ) AS "结果"
FROM
employees;
-------------------------------------------------------------------
(2) 条件查询 (AND , OR , NOT)
AND : 都是 true 才为 true ,否则为 false
OR : 至少有一个为 true 则为 true ,否则为 false
NOT : 取反,true 为 false,false 为 true
# 案例:查询部门编号不在 90-110 之间 或者 工资高于 15000 的员工信息
SELECT
*
FROM
employees
WHERE
NOT ( department_id >= 90 AND department_id <= 110 )
OR salary >= 15000;
-------------------------------------------------------------------
(3) 模糊查询 (like,between and , in …)
简单通配符:
% : 任意多个字符(包含0个字符)
_ : 任意单个字符
转义符:
\
escape
① like 关键字
练习一 (%):
# 案例:查询 first_name 为 d 开头的员工信息
SELECT
*
FROM
employees
WHERE
first_name LIKE 'd%';
练习二 (% _):
# 案例:查询 first_name 中第一个字符为d,第三个字符为n的员工信息
SELECT
*
FROM
employees
WHERE
first_name LIKE 'd_n%';
练习三 (% _ \ ):
# 案例:查询 last_name 中第二个字符为_的员工信息
SELECT
*
FROM
employees
WHERE
last_name LIKE '_\_%';
练习四 (% _ escape ):
此时 $ 相当于 \ (推荐)
# 案例:查询 last_name 中第二个字符为_的员工信息
SELECT
*
FROM
employees
WHERE
last_name LIKE '_$_%' ESCAPE '$';
② between and 关键字
# 案例:查询 工资在 10000-20000 的员工信息
SELECT
*
FROM
employees
WHERE
salary BETWEEN 10000 AND 20000 ;
③ in 关键字
# 案例:查询 工作编号 为 AD_VP,SA_MAN,PR_REP 的员工信息
SELECT
*
FROM
employees
WHERE
job_id IN ("AD_VP" , "SA_MAN" , "PR_REP") ;
④ is null 关键字
# 案例:查询 奖金率 为 null的员工编号,奖金率
SELECT
employee_id,
commission_pct
FROM
employees
WHERE
commission_pct IS NULL ;
⑤ is not null 关键字
# 案例:查询 奖金率 不为 null的员工编号,奖金率
SELECT
employee_id,
commission_pct
FROM
employees
WHERE
commission_pct IS NOT NULL ;
-------------------------------------------------------------------
(4) 排序查询 (order by)
DESC: 降序排序 (从高到低)
ASC: 升序排序 (从低到高)
练习一 (DESC , ASC):
# 案例:查询员工信息,并按照工资从高到低排序
SELECT
*
FROM
employees
ORDER BY
salary DESC;
(可以不加ASC,默认排序方式为ASC)
# 案例:查询员工信息,并按照工资从低到高排序
SELECT
*
FROM
employees
ORDER BY
salary ASC;
练习二 (添加筛选条件):
# 案例:查询员工编号>=90的员工信息,按入职时间的先后进行排序
SELECT
*
FROM
employees
WHERE
employee_id >= 90
ORDER BY
hiredate ASC;
练习三 (按表达式的别名排序):
# 案例:按年薪的高低显示员工的信息和年薪
SELECT
*,
salary*12*(1+IFNULL(commission_pct,0)) 年薪
FROM
employees
ORDER BY
年薪 DESC;
练习四 (按函数排序):
# 案例:按姓的长度显示员工的姓和工资
SELECT
LENGTH( last_name ) 姓的长度,
last_name,
salary
FROM
employees
ORDER BY
LENGTH( last_name ) DESC;
# 案例:将员工信息先按工资降序排序,再按员工编号升序排序
SELECT
*
FROM
employees
ORDER BY
salary DESC,
employee_id ASC;
练习五 (按多个字段主次排序):
-------------------------------------------------------------------
(5) 常见函数
---------------------------单行函数---------------------------
单行函数 — 字符函数 ① ~ ⑧:
① length() 字符长度
SELECT LENGTH('abcde')
② concat() 字符拼接
SELECT CONCAT("aaa","bbb","ccc") 结果;
③ upper() ,lower() 大写,小写
# 将姓变大写,名变小写,然后进行拼接
SELECT
CONCAT(UPPER( last_name ),LOWER( first_name )) 姓名
FROM
employees;
④ substr() (全称:substring) 截取
ps : 下标从 1 开始
练习一 :
# 截取李四,从第四个开始一直到最后
SELECT SUBSTR("张三和李四",4) 结果;
练习二 :
# 截取张三
SELECT SUBSTR("张三和李四",1,2) ;
练习三 (concat,substr,upper,lower):
# 案例:姓中首字符大写,其他字符小写,然后用_拼接,显示出来
SELECT
CONCAT(
UPPER(SUBSTR( last_name, 1, 1 )),
"_",
LOWER(SUBSTR( last_name, 2 ))) 结果
FROM
employees;
⑤ trim()
默认去除前面和后面的空格
前面指的是:第一个不为空格的字符之前的所有空格
后面指的是:最后一个不为空格的字符之后的所有空格
练习一 (去空格):
# 去除前面和后面的空格
SELECT TRIM(" a a a ") 结果 ;
练习二 (去指定字符):
前面 aa 的个数是奇数,所以剩下一个
SELECT TRIM("aa" FROM "aaaaaaaaabbbaaaaaaaa") 结果 ;
⑥ lpad() 左填充长度
用指定的字符实现 左填充 指定长度
SELECT LPAD("aaa",6,"b") 结果 ;
⑦ rpad() 右填充长度
用指定的字符实现 右填充 指定长度
SELECT RPAD("aaa",6,"b") 结果 ;
⑧ replace() 置换
用 cc 去 替换 aa
SELECT REPLACE("aaaabbaaaa","aa","cc") 结果 ;
单行函数 — 数字函数 ① ~ ⑤:
① round() 四舍五入
# 四舍五入
SELECT ROUND(5.5) ;
# 四舍五入 (第二个参数表示保留的小数位数)
SELECT ROUND(5.55,1) ;
② ceil() 向上取整
# 向上取整
SELECT CEIL(2.00002) ;
③ floor() 向下取整
# 向下取整
SELECT floor(2.99999) ;
④ truncate() 截断
# 截断,保留几位小数(不进位)
SELECT TRUNCATE(2.9999,1) ;
⑤ mod() 取余
# 取余
SELECT MOD(10,3) ;
单行函数 — 日期函数 ① ~ ⑤:
① now() 返回当前系统日期+时间
SELECT NOW() ;
② curdate() 返回当前系统日期,不包含时间
SELECT CURDATE() ;
③ curtime() 返回当前时间,不包含日期
SELECT CURTIME() ;
④ str_to_date() 字符转日期
SELECT STR_TO_DATE("21-2-2021","%d-%c-%Y") ;
⑤ year() ,month() ,day() 分别获取年月日
SELECT YEAR(NOW()) ;
单行函数 — 流程控制函数 ① ~ ②:
① if()
参数一:表达式
参数二:表达式为真时的结果
参数三:表达式为假时的结果
SELECT IF(1<2,"Yes","No") ;
② case()
/*
案例:查询员工的工资
当部门号为30 , 显示工资为2倍
当部门号为40 , 显示工资为3倍
当部门号为50 , 显示工资为4倍
其他部门,显示工资不变
*/
SELECT salary 原工资,department_id 部门号,
CASE department_id
WHEN 30 THEN salary*2
WHEN 40 THEN salary*3
WHEN 50 THEN salary*4
ELSE salary
END 新工资
FROM employees;
---------------------------分组函数---------------------------
分组函数的特点
常见的分组函数:sum()求和,avg()平均,max()最大值,min()最小值,count()个数
特点:
1:sum() 和 avg() 一般用于处理数值型
2:max(),min(),count() 可以处理任何类型
3:以上分组函数都忽略null值
4:可以和distinct进行搭配使用
5:count()函数,一般使用count(*)统计行数
6:和分组函数一同查询的字段要求是group by后的字段
(分组函数一般用来统计,只有一个结果,而查询的字段有多个结果,表格不规则)
分组函数 — 简单使用 :
① sum(),avg(),max(),min(),count()
SELECT
SUM( salary ) 总工资,
AVG( salary ) 平均工资,
MAX( salary ) 最高工资,
MIN( salary ) 最低工资,
COUNT( salary ) 工资份数
FROM
employees;
分组函数 — 搭配distinct :
① sum() + distinct
SELECT
SUM( salary ) 总工资,
SUM( DISTINCT salary ) 去重后的总工资
FROM
employees;
② count() + distinct
SELECT
COUNT( department_id ) 部门数,
COUNT( DISTINCT department_id ) 去重后的部门数
FROM
employees;
-------------------------------------------------------------------
(6) 分组查询 (group by)
分组查询的特点
数据源 | 位置 | 关键字 | |
---|---|---|---|
分组前筛选 | 原始表 | group by子句的前面 | where |
分组后筛选 | 分组后的结果集 | group by子句的后面 | having |
1:分组函数作条件时要放在having子句中
2:能用分组前筛选的,就优先考虑分组前筛选
3:group by 子句支持单个字段分组,多个字段分组,表达式和函数分组(不常用)
4:也可以添加排序 (排序放在整个分组查询的最后)
① 简单使用 group by
#查询每个工种的最高工资
SELECT
job_id 工种,
MAX( salary ) 最高工资
FROM
employees
GROUP BY
job_id
② 添加分组前筛选
练习一 :
#案例1:查询邮箱中包含a字符的每个部门的平均工资
SELECT
department_id 部门,
AVG( salary ) 平均工资
FROM
employees
WHERE
email LIKE "%a%"
GROUP BY
部门
练习二 :
#案例2:查询每个领导手下有奖金的员工的最高工资
SELECT
manager_id 领导,
MAX( salary )
FROM
employees
WHERE
commission_pct IS NOT NULL
GROUP BY
领导
③ 添加分组后筛选 (having)
个人理解:
案例一:查询哪些部门的员工个数>2
当前面的结果(即每个部门的员工个数)不为表中的字段时
需要先查询出前面的结果后才可以找出哪些员工个数>2,此时需要使用having
ps:一开始错误的觉得可以直接放在where中。
where只能对表中已存在的字段进行操作(不知道理解的对不对)
而此时每个部门的员工个数在表中并不存在,需要先进行统计,再找>2的
mysql中这些关键字是按照如下顺序进行执行的:from, Where, Group By
Having, Order by。 从这看出,假如在where中找员工个数大于2的,那么
还没进行分组,找的就不是每个部门的了,即使没报错结果也不对了。(xia bi bi)
练习一 :
#案例1:查询哪些部门的员工个数>2
SELECT
department_id 部门,
COUNT(*) 员工个数
FROM
employees
GROUP BY
部门
HAVING
员工个数 > 2
练习二 :
#案例二:查询每个工种有奖金的最高工资>12000的工种编号和最高工资
SELECT
job_id 工种,
MAX( salary ) 最高工资
FROM
employees
WHERE
commission_pct IS NOT NULL
GROUP BY
job_id
HAVING
最高工资 > 12000
练习三 :
/*案例三:查询领导编号>102的每个领导手下的员工最低工资>5000
的领导编号是哪个,以及其最低工资
*/
SELECT
manager_id 领导编号,
MIN( salary ) 最低工资
FROM
employees
WHERE
manager_id > 102
GROUP BY
领导编号
HAVING
最低工资 > 5000
④ 按函数分组
#案例:按员工姓名的长度分组,查询每一组的员工个数,筛选员工个数>5的有哪些
SELECT
LENGTH( last_name ) 员工姓名长度,
COUNT(*) 员工个数
FROM
employees
GROUP BY
员工姓名长度
HAVING
员工个数 > 5
⑤ 按多个字段分组
#案例:查询每个部门每个工种的员工的平均工资,并且按平均工资的高低显示
SELECT
AVG( salary ) 平均工资,
department_id 部门编号,
job_id 工种
FROM
employees
GROUP BY
部门编号,
工种
ORDER BY
平均工资 DESC
-------------------------------------------------------------------
(7) 连接查询
---------------------------sql92标准---------------------------
① 等值连接 (sql92标准)
练习一 :
# 案例一:查询员工名和对应的部门名
SELECT
last_name,
department_name
FROM
employees e,
departments d
WHERE
e.department_id = d.department_id
练习二 :
# 案例二:查询员工名,工种编号,工种名
SELECT
last_name,
e.job_id,
job_title
FROM
jobs j,
employees e
WHERE
j.job_id = e.job_id
练习三 (加筛选):
# 案例三:查询有奖金的员工名,部门名
SELECT
last_name,
d.department_id
FROM
employees e,
departments d
WHERE
commission_pct IS NOT NULL
AND e.department_id = d.department_id
练习四 (加筛选):
# 案例四:查询城市名中第二个字符为o的部门名和城市名
SELECT
department_name,
city
FROM
departments d,
locations l
WHERE
d.location_id = l.location_id
AND city LIKE "_o%"
练习五 (加分组):
# 案例:查询每个城市的部门个数
SELECT
COUNT(*),
city
FROM
departments d,
locations l
WHERE
d.location_id = l.location_id
GROUP BY
city
练习六 (加排序):
#案例:查询每个工种的工种名和员工的个数,并且按员工个数降序
SELECT
job_title 工种名,
COUNT(*) 员工个数
FROM
jobs j,
employees e
WHERE
j.job_id = e.job_id
GROUP BY
工种名
ORDER BY
员工个数 DESC
练习七 (三表连接):
#案例:查询员工名,部门名和所在的城市
SELECT
last_name 员工名,
department_name 部门名,
city 城市
FROM
employees e,
departments d,
locations l
WHERE
e.department_id = d.department_id
AND d.location_id = l.location_id
② 非等值连接 (sql92标准)
#案例:查询员工的工资和工资级别
SELECT
salary 工资,
grade_level 工资级别
FROM
employees e,
job_grades j
WHERE
salary BETWEEN j.lowest_sal
AND j.highest_sal
③ 自连接 (sql92标准)
先从 employees表 中找到员工名以及他所对应的领导编号
然后再通过领导编号找到领导名
(相当于要查询两次employees表,所以将一张表起两个别名,当作两张表来操作)
#案例:查询员工名和上级的名称
SELECT
e.employee_id 员工编号,
e.last_name 员工名,
m.employee_id 上级编号,
m.last_name 上级名
FROM
employees e,
employees m
WHERE
e.manager_id = m.employee_id
---------------------------sql99标准---------------------------
内连接
① 等值连接 (sql99标准)
练习一 :
# 案例:查询员工名,部门名
SELECT
last_name 员工名,
department_name 部门名
FROM
employees e
INNER JOIN departments d ON e.department_id = d.department_id
练习二 (加筛选):
# 案例:查询名字中包含e的员工名和工种名
SELECT
last_name 员工名,
j.job_title 工种名
FROM
employees e
INNER JOIN jobs j ON e.job_id = j.job_id
WHERE
last_name LIKE "%e%"
练习三 (添加分组加筛选):
# 案例:查询部门个数>3的城市名和部门个数
SELECT
city,
COUNT(*) 部门个数
FROM
departments d
INNER JOIN locations l ON d.location_id = l.location_id
GROUP BY
city
HAVING
部门个数 >3
练习四 (加排序):
# 案例:查询哪个部门的部门员工个数>3的部门名和员工个数,并按个数降序
SELECT
department_name 部门名,
COUNT(*) 员工个数
FROM
departments d
INNER JOIN employees e ON d.department_id = e.department_id
GROUP BY
部门名
HAVING
员工个数 > 3
ORDER BY
员工个数 DESC
练习五 (三表连接):
# 案例:查询员工名,部门名,工种名,并按部门名降序
SELECT
last_name 员工名,
department_name 部门名,
job_title 工种名
FROM
employees e
INNER JOIN departments d ON e.department_id = d.department_id
INNER JOIN jobs j ON e.job_id = j.job_id
ORDER BY
部门名 DESC
② 非等值连接 (sql99标准)
练习一 :
# 案例:查询员工的工资级别
SELECT
salary 工资,
grade_level 工资级别
FROM
employees e
INNER JOIN job_grades j ON salary BETWEEN j.lowest_sal
AND j.highest_sal
练习二 (加筛选,排序,分组) :
# 案例:查询员工个数>20的工资级别,并且按工资级别降序
SELECT
grade_level 工资级别,
COUNT(*) 个数
FROM
employees e
INNER JOIN job_grades j ON salary BETWEEN j.lowest_sal
AND j.highest_sal
GROUP BY
工资级别
HAVING
个数 > 20
ORDER BY
工资级别 DESC
③ 自连接 (sql99标准)
#案例:查询姓名中包含字符k的员工名和上级的名称
SELECT
e1.last_name 员工名,
e2.last_name 上级名称
FROM
employees e1
INNER JOIN employees e2 ON e1.manager_id = e2.employee_id
WHERE
e1.last_name LIKE "%k%"
外连接
外连接的应用场景和特点:
应用场景:用于查询一个表中有,另一个表中没有的记录
(需要不匹配的记录null时)
特点:
1、 外连接的查询结果为主表中的所有记录
如果 从表 中有和他匹配的,则显示匹配的值
如果 从表 中没有和他匹配的,则显示null
外连接查询结果 = 内连接结果 + 主表 中有而 从表 中没有的记录
2、 左外连接,left join 左边的是主表
右外连接,right join 右边的是主表
① 左(右)外连接
练习一 :
# 案例:查询男朋友不在boys表中的女生名
SELECT
b.NAME,
bo.id,
bo.boyName
FROM
beauty b
LEFT OUTER JOIN boys bo ON b.boyfriend_id = bo.id
WHERE
bo.id IS NULL
右外连接,结果相同,将left 改为 right ,再把两表的位置交换即可
# 案例:查询男朋友不在boys表中的女生名
SELECT
b.NAME,
bo.id,
bo.boyName
FROM
boys bo
RIGHT OUTER JOIN beauty b ON b.boyfriend_id = bo.id
WHERE
bo.id IS NULL
练习二 :
# 案例:查询哪个城市没有部门
SELECT
city,
d.*
FROM
locations l
LEFT JOIN departments d ON l.location_id = d.location_id
WHERE
department_id IS NULL
练习三 :
# 查询部门名为SAL或IT的员工信息
SELECT
d.department_id 部门编号,department_name 部门名,
e.*
FROM
departments d
LEFT JOIN employees e ON d.department_id = e.department_id
WHERE
department_name IN ("SAL","IT")
② 交叉连接
展示结果类似两表的笛卡尔乘积
SELECT
b.*,
bo.*
FROM
beauty b
CROSS JOIN boys bo
-------------------------------------------------------------------
(8) 子查询
① where 后面的标量子查询
标量子查询:结果集只有一行一列
练习一 :
# 查询工资比 Abel 高的员工信息
SELECT *
FROM employees
WHERE salary > (
SELECT salary
FROM employees
WHERE last_name = "Abel"
)
练习二 :
# 案例:返回job_id 与 141号员工相同,salary 比143号员工多的员工姓名,job_id 和工资
SELECT last_name,job_id,salary
FROM employees
WHERE job_id = (
SELECT job_id
FROM employees
WHERE employee_id = 141
)
AND salary > (
SELECT salary
FROM employees
WHERE employee_id = 143
)
练习三 :
#案例:返回公司工资最少的员工的last_name,job_id和salary
SELECT last_name,job_id,salary
FROM employees
WHERE salary = (
SELECT MIN(salary)
FROM employees
)
练习四 :
#案例4:查询最低工资大于50号部门最低工资的部门id和其最低工资
SELECT department_id,MIN(salary)
FROM employees
GROUP BY department_id
HAVING MIN(salary) > (
SELECT MIN(salary)
FROM employees
WHERE department_id = 50
)
② where 后面的列子查询 (in,any,some,all)
列子查询:结果集只有一列多行
练习一 :
#列子查询(多行子查询)
# 案例1:返回location_id是1400或1700的部门中的所有员工姓名
SELECT last_name
FROM employees e
WHERE department_id IN (
SELECT department_id
FROM departments d
WHERE location_id IN(1400,1700)
)
练习二 :
#案例2:返回其它工种中比job_id为"IT_PROG"部门任一工资低的员工的员工号,姓名,job_id 以及 salary
SELECT employee_id,last_name,job_id,salary
FROM employees
WHERE salary < ANY(
SELECT salary
FROM employees
WHERE job_id = "IT_PROG"
) AND job_id <> "IT_PROG"
③ where 后面的行子查询
行子查询:结果集只有一行多列
#行子查询(结果集一行多列或多行多列)
# 案例:查询员工编号最小并且工资最高的员工信息
SELECT *
FROM employees
WHERE (employee_id,salary) = (
SELECT MIN(employee_id),MAX(salary)
FROM employees
)
④ select 后面的标量子查询
# 案例:查询每个部门的员工个数
SELECT d.*,(
SELECT COUNT(*)
FROM employees e
WHERE e.department_id = d.department_id
) 个数
FROM departments d
⑤ from 后面的表子查询
表子查询:结果集一般为多行多列
(必须起别名)
#案例:查询每个部门的平均工资的工资等级
SELECT ag.*,g.grade_level
FROM (
SELECT department_id,AVG(salary) sa
FROM employees
GROUP BY department_id
) ag
INNER JOIN job_grades g
ON ag.sa BETWEEN g.lowest_sal AND g.highest_sal
s
③ exists 后面的表子查询 (相关子查询)
练习一 :
#案例:查询有员工的部门名
#(个人理解:员工表中有该部门id,该部门一定有员工)
SELECT department_name
FROM departments d
WHERE EXISTS(
SELECT *
FROM employees e
WHERE e.department_id = d.department_id
)
练习二 :
把beauty 表中id=10的删去,再测试
#案例:查询没有女朋友的男生信息
SELECT *
FROM boys bo
WHERE NOT EXISTS(
SELECT *
FROM beauty b
WHERE b.boyfriend_id = bo.id
)
-------------------------------------------------------------------
(9) 分页查询 (limit)
分页查询的应用场景和特点
应用场景:当要显示的数据,一页显示不全,需要分页提交sql请求
limit offset,size
offset:要显示条目的起始索引(起始索引从0开始) 若为0可以省略
size:要显示的条目个数
特点:
1、 limit语句放在查询语句的最后面
2、 公式:
当要显示的页数为page, 每页的条目数为size
limit (page-1)*size , size
例如size=10
page 起始
0 0
1 10
2 20
练习一 :
# 案例1:查询前五条员工信息
SELECT
*
FROM
employees
LIMIT 5
练习二 :
# 案例2:查询第11条 - 第25条员工信息
SELECT
*
FROM
employees
LIMIT 10,15
练习三 :
# 案例3:查询有奖金的员工信息,并且工资较高的前10名显示出来
SELECT
*
FROM
employees
WHERE
commission_pct IS NOT NULL
ORDER BY
salary DESC
LIMIT 10
-------------------------------------------------------------------
(10) 联合查询 (union)
联合查询的应用场景特点:
联合查询:将多条查询语句的结果合并为一个结果
语法:
查询语句1
union
查询语句2
union
查寻语句3
.....
特点:
1、要求多条查询语句的查询列数是一致的
2、要求多条查询语句的每一列的类型和顺序最好一致
3、union关键字默认去重,如果使用union all可以包含重复项