sql中的join连接之内连接、左外连接、右外连接
实际应用中所需要的数据,经常会需要查询两个或两个以上的表。这种查询两个或两个以上数据表或视图的查询叫做连接查询。连接查询通常建立在存在相互关系的父子表之间。
场景创建
创建如下场景
CREATE TABLE T_Stu(--学生表
stuId int,--学号
depId int,--系号
stuName char(20),--姓名
stuSex char(20)--性别
);
CREATE TABLE T_Dep(--系表
depId int,--系号
depName char(20)--系名字
);
INSERT INTO T_Stu VALUES (1,101,"aaa","男"),(3,103,"ccc","女");
INSERT INTO T_Dep VALUES (101,"数学"),(102,"计算机"),(103,"电子商务");
T_Stu表—学生表
T_Dep表—系表
join连接的分类
交叉连接
相当与笛卡尔积,左表和右表组合。
sql语句
SELECT * FROM t_stu join t_dep ;
查询结果
内连接
关键字:inner join,inner可以省略
查询学生表中所有学生的个人信息
sql语句
SELECT * FROM t_stu join t_dep on t_stu.depId =t_dep.depId ;
执行结果
此处的on也可以用where代替
外连接
内连接所指定的两个数据源处于平等的地位。而外连接不同,外连接以一个数据源为基础,将另外一个数据源与之进行条件匹配。
内连接返回两个表中所有满足连接条件的数据记录。外连接不仅返回满足连接条件的记录,还将返回不满足连接条件的记录。
左外连接
左外连接又称左连接,是指以左边的表为基础表进行查询。
根据指定连接条件关联右表,获取基础表以及和条件匹配的右表数据,未匹配条件的右表对应的字段位置填上NULL
查询所在系号是103的学生的姓名和系名称
sql语句
SELECT t_stu.StuName ,t_dep.depName FROM t_stu LEFT JOIN t_dep on t_stu.depId =103 and t_stu.depId = t_dep.depId
执行结果
写在left join左边的为左表,写在left join右边的为右表。
当将上面的t_stu LEFT JOIN t_dep 换成 t_dep LEFT JOIN t_stu时执行结果为
右外连接
右外连接又称右连接,是指以右边的表为基础表,在内连接的基础上也查询右边表中有记录,而左边的表中没有记录的数据(左边用NULL值填充)
查询所在系号是103的学生的姓名和系名称
sql语句
SELECT t_stu.StuName ,t_dep.depName FROM t_stu RIGHT JOIN t_dep on t_stu.depId =103 and t_stu.depId = t_dep.depId
执行结果