SQL-联表查询

SQL-联表查询

徐徐
后端
发布于2023-09-24 20:24:45
🌺前言
介绍常见的几种sql多表查询

1.内连接

意义:代表查询两个表的交集

隐式写法 :

sql
select 字段列表 from 表1,表2 where 条件

select * from tb_emp,tb_dept where tb_emp.dept_id=tb_dept.id;
 -- 如果表的名字很长 可以为表起别名
select * from tb_emp e, tb_dept d where e.dept_id=d.id;

显示写法:

sql
select 字段名称 from 表1 [inner] join 表2 on 连接条件

select * from tb_emp  inner join tb_dept on tb_emp.dept_id=tb_dept.id;
select * from tb_emp e inner join tb_dept d on e.dept_id=d.id;
-- 上面的 inner可以省略。
select * from tb_emp e  join tb_dept d on e.dept_id=d.id;

2.外连接

1. 左外链接

意义:查询左表全部数据以及交集

sql
select 字段名称 from 表1 left [outer] join 表2 on条件
//表1和两表交集

2. 右外链接

意义:查询右表全部数据以及交集

sql
select 字段名称 from 表1 right [outer] join 表2 on条件
//表2和两表交集

select * from tb_emp e left outer join tb_dept d on e.dept_id = d.id;
select * from tb_emp e left join tb_dept d on e.dept_id=d.id;
 
-- 2.查询dept表的所有数据,和对应的员工信息(右外连接)
select * from tb_emp e right join tb_dept d on e.dept_id=d.id;

3.自连接

1. 自己和自己相连接查询。

sql
select * from A表 join A表 on 连表条件

4.子查询

一个查询结果作为一个查询语句的条件 -- 查询市场部的员工信息----- -- 子查询返回的结果一列一条记录。 这个时候可以用=

sql
select * from tb_emp where dept_id=(select id from tb_dept where name='市场部')
sql
-- 查询市场部和研发部员工的信息。in 
 -- -- 查询市场部和研发部员工的信息。
   -- a) 查询市场部和研发部的编号
	 select id from tb_dept where name in('市场部','研发部')
 
   -- b) 再员工表中根据部门编号查询员工信息
	 select * from tb_emp where dept_id in (select id from tb_dept where name in('市场部','研发部'))

5.组合查询

多个查询的结果 组合到一起。

sql union sql --->把这两条sql查询的结果组合到一起。如果有重复记录则合并成一条。 sql union all sql--->把这两条sql查询的结果组合到一起。如果有重复记录,不合并。

注意: 这两条sql返回的字段必须一样。

sql
	select name from tb_emp where salary>8000
	UNION 
	select * from tb_emp where age>40;

目录

文章最后更新于 2024-08-30 16:51:54
留言
暂无数据

~~空空如也