几种连接查询的细节讲解

一:前置条件:数据库

#创建部门表
CREATE TABLE dept(
 did INT(11) PRIMARY KEY AUTO_INCREMENT,
  dname VARCHAR(20), des VARCHAR(30) 
  );

INSERT INTO dept(dname,des)VALUES("研发部门","撸代码"),("行政部门","养花") ,
("人事部","压工资")
	



#创建一张员工表 
CREATE TABLE emp( 
eid INT(11) PRIMARY KEY AUTO_INCREMENT, 
ename VARCHAR(20), 
esal DOUBLE, edesc VARCHAR(20) ,
did int (20));


INSERT INTO emp(ename,esal,edesc,did)VALUES
("马化腾",2000,"哈哈",1) ,
("马云",3000,"呵呵",1),
("宿华",4000,"kk",2),
("刘强东",5000,"ndn",2), 
("聪哥",6000,"网红是一家",3),
("吴亦凡",9000,"十八岁少女",3)



二非等值查询:

1.语法:
select * from 表1,表2
2.案例:
#查询员工的信息 以及部门的信息
SELECT d.,e. FROM dept d,emp e

结果:
在这里插入图片描述

总结:如上所示,一共出现了18条数据,这些数据是
dept:表三条数据
emp:表六条数据,
也就是每张表的每行互乘,即笛卡尔乘积 3*6 =18

缺陷:这么连接会产生大量的错误:,如图

在这里插入图片描述

三.连接查询

1.显示内连接
概念:使用mysql中inner join关键字来进行连接查询 就是显示内连接
#查询所有员工以及对应的部门的信息
SELECT d.,e. FROM dept d INNER JOIN emp e ON d.did=e.did
.
.
2.隐式内连接
概念:不使用inner join关键字来进行连接查询 就是隐式内连接,用where条件取代
SELECT d.,e. FROM dept d,emp e WHERE d.did=e.did

显示连接和隐式连接查询结果如图:

在这里插入图片描述

在这里插入图片描述

四:左外连接

1.语法:select * from 左表 left join 右表 on 匹配条件
2.匹配的规则:以左表为基准 右表一一进行匹配 如果可以匹配 则两表正常显示 如果不可以匹配,左表依然显示 右表设置为null
#不管部门下是否有员工 都需要查询出部门的信息
SELECT d.,e. FROM dept d LEFT JOIN emp e ON d.did=e.did

在这里插入图片描述

在这里插入图片描述

五:右外连接

1.语法:select * from 左表 right join 右表 on 匹配条件
2.匹配规则:以右为基准 左表一一进行匹配 如果可以匹配 则两表正常显示 如果不可以匹配 右表依然显示 左表设置为null
3.查询所有的员工的信息 不管是否有对应的部门
SELECT d.,e. FROM dept d RIGHT JOIN emp e ON d.did=e.did

在这里插入图片描述

在这里插入图片描述

六. 子查询

1.概念:一个查询语句嵌套另一个完成的查询语句
2.两种体现:A.一个子查询的结果当做另一查询语句条件使用 B.一个查询语句的结果当前另一个查询语 句的列来使用

第一种体现:

A.查询研发部门下所有的员工
B.分析: a.查询所有的员工 b.查询出部门是研发部门 c.关联条件 did
SELECT * FROM emp e WHERE e.did IN(SELECT d.did FROM dept d WHERE d.dname=“研发部门” )

第二种体现

A.查询出所有员工的信息 以及部门的名称
B.分析: 查询所有员工的信息 b.查询出部门的名称 c.关联条件 did
C.SELECT e.*,(SELECT d.dname FROM dept d WHERE d.did=e.did) AS dname FROM emp e

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值