MySQL SQL多表查询语句各种连接

一、多表查询

sql 复制代码
#多表查询 笛卡尔积
select * from emp , dept where emp.dept_id = dept.id ;

二、内连接

sql 复制代码
#隐藏式连接
Select emp.name , dept.name from emp,dept where emp.dept_id = dept.id;
​
#起别名
Select e.name, d.name from emp e,dept d where e.dept_id = d.id ;
​
#显示内连接
#查询每一个员工的姓名,及关联的部门的名称
Select e.name , d.name from emp e inner join dept d on e.dept_id = d.id;

三、外连接

sql 复制代码
#1.查询emp表的所有数据,和对应的部门信息(左外连接)
Select e.* , d.name from emp e left outer join dept d on d.id = e.dept_id;
 
#2.查询dept表的所有数据,和对应的员工信息(右外连接)
Select d.* , e.* from emp e right outer join dept d on d.id = e.dept_id;
​
常用左外连接

四、联合查询

sql 复制代码
Select * from emp where id < 5
union
Select * from emp where age = 10;

五、子查询

1.标量子查询

sql 复制代码
#子查询返回的结果是单个值(数字、字符串、日期等),最简单的形式,这种子查询成为标量子查询。
​
#1.查询"销售部"的所有员工信息
#a.查询"销售部"部门id
Select id from dept where name = '销售部';
​
#b.根据销售部id,查询员工信息
Select * from emp where dept_id = 4;
​
#合并
Select * from emp where dept_id = ( select id from dept where name = '销售部' );
​
 
#2.查询在"方东白"入职之后的员工信息
#a.查询方东自的入职日期
Select entrydate from emp where name = '方东自';
​
#b.查询指定入职日期之后入职的员工信息
Select * from emp where entrydate > '2009-09-12';
​
#合并
Select * from emp where entrydate > (select entrydate from emp where name = '方东自');

2.列子查询

sql 复制代码
#1.查询销售部和市场部所有员工信息
#a.查询销售部和市场部的部门id
Select id from dept where name = '销售部' or name = '市场部';
​
#b.根据部门id,查询员工信息
Select * from emp where dept_id in (2,4);
​
#合并
Select * from emp where dept_id in (select id from dept where name = '销售部' or name = '市场部');
​
#2.查询比财务部所有人工资都高的员工信息
#a.查询所有财务部人员工资
Select id from dept where name = '财务部';
Select salary from emp where dept_id = 3;
Select salary from emp where dept_id = (select id from dept where name = '财务部');
​
#b.比财务部所有人工资都高的员工信息
Select * from emp where salary >all (select salary from emp where dept_id = (select id from dept where name = '财务部'));
​
#3.查询比研发部其中任意一人工资高的员工信息
#a.查询研发部所有人工资
Select salary from emp where dept_id = (select id from dept where name = '研发部');
​
#b.比研发部其中任意一人工资高的员工信息
Select * from emp where salary > any (select salary from emp where dept id = (select id from dept where name = '研发部'));

3.行子查询

sql 复制代码
#子查询返回的结果是一行(可以是多列),这种子查询称为行子查询
#常用的操作符:=、<>、IN、NOTIN
​
#1.查询张无忌的薪资及领导相同的员工信息
#a.查询张无忌的薪资及直属领导
Select salary, manager id from emp where name = '张无忌';
​
#b.查询与张无忌的薪资及直属领导相同的员工信息
Select * from emp where salary = 12500 and managerid = 1;
​
Select * from emp where (salary, managerid) = (12500,1);
​
Select * from emp where (salary, managerid) = (select salary,manager id from emp where name = '张无忌');

4.表子查询

sql 复制代码
#子查询返回的结果是一行(可以是多列),这种子查询称为行子查询
#常用的操作符:=、<>、IN、NOTIN
​
#1.查询张无忌的薪资及领导相同的员工信息
#a.查询张无忌的薪资及直属领导
Select salary, manager id from emp where name = '张无忌';
​
#b.查询与张无忌的薪资及直属领导相同的员工信息
Select * from emp where salary = 12500 and managerid = 1;
​
Select * from emp where (salary, managerid) = (12500,1);
​
Select * from emp where (salary, managerid) = (select salary,manager id from emp where name = '张无忌');
相关推荐
高级程序源5 小时前
django校园寻物通失物招领平台32261-计算机课程设计、毕业设计
vue.js·python·mysql·小程序·django·flask·课程设计
KIDULT°5 小时前
MySQL系列 (1):数据库原理
运维·数据库·mysql·云计算
kimnoic5 小时前
Python数据库学习心得:SQLite、MySQL、PostgreSQL优缺点
开发语言·python
我不是程序员三三5 小时前
透明加密软件偶发解密异常排错实录:文件时能打开时乱码
数据库·域智盾
snhna5 小时前
向量数据库深度实战:从 HNSW 到 pgvector、Milvus 选型与 RAG 落地
数据库·人工智能·python·postgresql·milvus
天行健,君子而铎6 小时前
数据分类分级的范式转换:从规则匹配到场景化高准确率一键部署
网络·数据库·安全
别动我齐刘海6 小时前
C++ 工程化学习
java·linux·前端·c++·学习·机器学习·机器人
牛战士coding6 小时前
MySQL 读写分离完整链路:主从复制、多数据源与 @DS 路由
数据库·mysql
必须得开心呀6 小时前
python编写带界面的软件,需要安装哪些插件
开发语言·python
goehou7 小时前
MCP 查数实战:让 LLM 安全地查数据库(只读账号、SQL 校验、参数漂移)
数据库·ai·llm·教程·mcp·function calling