sql语句子查询(标量子查询,列子查询,行子查询),分页查询,联合查询
2024-01-08 16:41:27
出现在其他语句中的select 语句,称为子查询或者内查询
外部的查询语句,称为主查询或外查询
分类: 按子查询出现的位置
select 后面
from 后面
where 或having 后面
exists 后面(相关的子查询)
按结果集的行列数不同
标量子查询(结果集只有一行一列)
列子查询(结果集只有一列多行
行子查询(结果集有一行多列)
表字查询 (结果集一般为多行多列)
)
1.where 或having后面
- 标量子查询(单行子查询)
2.列子查询(多行子查询)
3.行子查询(多列多行)
特点:
子查询放在小括号内
子查询一般放在条件的右侧
标量子查询,一般搭配着单行操作符使用
列子查询,一般搭配着多行操作符是使用
in ,any/SOME,all
标量子查询
# 案例一,谁的工资比abel高
#1.查询abel的工资
SELECT salary
FROM employees
WHERE last_name ='Abel';
#2.查询员工的信息,满足1结果
SELECT *
FROM employees
WHERE salary >(
SELECT salary
FROM employees
WHERE last_name ='Abel'
);
# 案例二,返回job_id与141号员工相同,
# salary比143号员工多的员工,姓名,job_id和工资
#1.查询141号员工的job_id
SELECT job_id
FROM employees
WHERE employee_id =141;
#2.查询143号员工的salary
SELECT salary
FROM employees
WHERE employee_id=143;
#3.查询员工的姓名,job_id和工资,要求job_id =1并且salary>2
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
);
列子查询
# 案例1 返回location_id是1400或者1700的部门中的所有员工姓名
#1 查询location_id是1400或者1700的部门编号
SELECT DISTINCT department_id
FROM departments
WHERE location_id IN(1400,1700)
#2 查询员工姓名,要求部门号是1列表中的某一个
SELECT last_name
FROM employees
WHERE department_id IN(
SELECT DISTINCT department_id
FROM departments
WHERE location_id IN(1400,1700)
);
行子查询(结果集一行多列或者多行多列)
# 案例:查询员工编号最小的并且工资最高的员工信息
#1.查询最小的员工编号
SELECT MIN(employee_id)
FROM employees
#2.查询最高工资的
SELECT MAX(salary)
FROM employees
#3. 查询员工信息
SELECT *
FROM employees
WHERE employee_id = (
SELECT MIN(employee_id)
FROM employees
) AND salary =(
SELECT MAX(salary)
FROM employees
);
分页查询
应用场景,当要显示的数据,一页显示不全,需要分页提交sql的请求
语法:select 查询列表
form 表
【join type】 join 表2
ON 连接条件
WHERE 帅选条件
grounp by 分组字段
having 分组后的帅选
order by 排序的字段
limit offset,size;
offer要显示条目的起始索引(起始索引从0开始)
size 要显示的条目个数
特点:
1.limit 语句放在查询语句的最后
2.公式
要显示的页数page,每页的条目数size
select 查询列表
from 表
limit (page-1)*size,size;
size=10
page
1 0
2 10
3 20
#案例1: 查询前五条员工信息
SELECT * FROM employees LIMIT 0,5;
#案列2: 查询第11条-第25条
SELECT * FROM employees LIMIT 10,20;
# 案列3:有奖金的员工信息,并且工资较高的前10名显示出来
SELECT
*
FROM
employees
WHERE commission_pct IS NOT NULL
ORDER BY salary DESC
LIMIT 10;
联合查询
union 联合合并:将多条查询语句的结果合并成一个结果
语法:
查询语句1
UNION
查询语句2
UNION
应用场景:
要查询的结果来自多个表,且多个表没有直接的连接关系,但查询的信息一致时
特点:
1.要求多条查询语句的查询列数是一致的
2.要求多条查询语句的查询的每一列的类型和顺序最好一致
3.UNION关键字默认去重,如果使用union all 可以包含重复项
#案例: 查询部门编号>90或邮箱包含a的员工信息
SELECT * FROM employees WHERE email LIKE '%a%'
UNION
SELECT * FROM employees WHERE department_id>90;
文章来源:https://blog.csdn.net/weixin_50379372/article/details/135459202
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!