一. 子查询定义
1. 定义:
嵌套在其他语句内部的select语句称为子查询或内查询,
外面的语句可以是insert、update、delete、select等,一般select作为外面语句较多
外面如果为select语句,则此语句称为外查询或主查询
2. 分类:
1、按出现位置
select后面:
仅仅支持标量子查询
from后面:
表子查询
where或having后面:
标量子查询
列子查询
行子查询
exists后面:
标量子查询
列子查询
行子查询
表子查询
2、按结果集的行列
标量子查询(单行子查询):结果集为一行一列
列子查询(多行子查询):结果集为多行一列
行子查询:结果集为多行多列
表子查询:结果集为多行多列
二. 子查询SQL代码演示
#案例一. 查询和 Zlotkey相同部门的员工姓名和工资
#第一步:查询 Zlotkey的部门
SELECT department_id
FROM employees
WHERE last_name = 'Zlotkey'
#第二步:查询部门号=第一步的姓名和工资
SELECT last_name,salary
FROM employees
WHERE department_id = (
SELECT department_id
FROM employees
WHERE last_name = 'Zlotkey'
);
#2.查询工资比公司平均工资高的员工的员工号,姓名和工资。
#第一步:查询平均工资
SELECT AVG(salary)
FROM employees
#第二步:查询工资 >第一步的员工号,姓名和工资。
SELECT last_name,employee_id,salary
FROM employees
WHERE salary>(
SELECT AVG(salary)
FROM employees
);
#3.查询各部门中工资比本部门平均工资高的员工的员工号, 姓名和工资
#第一步:查询各部门的平均工资
SELECT AVG(salary),department_id
FROM employees
GROUP BY department_id
#第二步:连接第一步结果集和 employees表,进行筛选
SELECT employee_id,last_name,salary,e.department_id
FROM employees e
INNER JOIN (
SELECT AVG(salary) ag,department_id
FROM employees
GROUP BY department_id
) ag_dep
ON e.department_id = ag_dep.department_id
WHERE salary>ag_dep.ag;
三. 分页查询定义
一、应用场景
当要查询的条目数太多,一页显示不全
二、语法
select 查询列表
from 表
limit 【offset】, size;
注意:
offset代表的是起始的条目索引,默认从0开始
size代表的是显示的条目数
公式:
假如要显示的页数为page,每一页条目数为size
select 查询列表
from 表
limit (page-1)*size,size;
四. 分页查询SQL代码演示
#案例 1:查询前五条员工信息
SELECT * FROM employees LIMIT 0,5;
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 ;