联表查询

联表查询

查询语句结果如果在一张表中无法获取时,或者查询某写内容需要多张表时,这样就需要联表查询

联表查询基础在于外键的约束,使得表与表之间存在一定的关联。

联表查询的种类

     1. 连接查询:分为内连接外连接自连接

      ①内连接:相当于查询表A和表B之间交集部分数据

      ②外连接:

         左外连接:查询左表所有数据,以及两张表交集部分数据

         右外连接:查询右表所有数据,以及两张表交集部分数据

      ③自连接:当前表与自身的连接查询,自连接必须使用表别名  

   2. 子查询:通过使用表与表嵌套的方式  

如下表:

内连接

内连接是查询两张表之间的交集的部分

语法:

①隐式内连接
select 字段列表  from 表1,表2 where 两表连接条件  其它条件......;

②显示内连接
select 字段列表  from  表1   [inner]  join 表2  on  两表连接条件  where  其它条件....;

隐式内连接

举个例子:

select * from emp,dept 

效果展示:

发现数据特点多,而且仔细发现还存在重复出现的数据

因为当你如果没有添加【联表条件】时,会出现笛卡尔积现象,所以为了解决这个问题一定一定写【联表条件】

正确的例子:

select * from emp,dept where emp.deptno=dept.deptno

效果展示:

如果后续需要过滤某些数据时,可以在where条件后面继续添加条件语

显式内连接

举个例子:

select * from emp inner join dept on emp.deptno=dept.deptno

效果展示:

两者显式内连接和隐式内连接效果完全一样的。

外连接

左外连接:相当于查询左表所有数据包含表1和表2 交集部分的数据

右外连接:相当于查询右表所有数据包含表1和表2 交集部分的数据

语法:

①左外连接
select 字段列表  from  表1  left [outer] join  表2  on  两表连接条件  where  条件语句;

①右外连接
select 字段列表  from  表1  right [outer] join  表2  on  两表连接条件  where  条件语句;

左外连接

举个例子:

-- 左外连接
select * from emp left join dept on emp.deptno=dept.deptno;

效果展示:

右外连接

举个例子:

-- 右外连接
select * from emp right join dept on emp.deptno=dept.deptno;

效果展示:

会发现右外连接它会把表2(dept)中的deptno=40的也查询出来,即使左表(emp)没有员工在这个部门里面。

 自连接

自己与自己进行连接,必须给表起别名

语法:

①隐式自连接
select  字段列表   from   表A   as  别名1  表A  as  别名2    where   连接条件

②显示自连接
select  字段列表   from   表A   as  别名1   join   表A   as   别名2  on  连接条件

举个例子:

要求: 查询员工名称以及对应的领导名

分析: 查询的结果都在一张表中。但是设计员工表---领导表

select e.ename 员工姓名,l.ename 领导名 from emp e join emp l on e.mgr=l.empno;

效果展示:

子查询(嵌套查询)

把一次查询的结果作为另一个查询的条件值。这种方式就是嵌套查询。

语法:

select * from 表名 where 字段 [in|=] (select 字段 from 表名 where 条件)

例子:

根据部门名称查询到部门的编号

select * from emp where deptno=(
select deptno from dept where dname='研发部'
)

 

posted @ 2023-12-20 11:04  和哗  阅读(1038)  评论(0编辑  收藏  举报