网站为什么吸引人,php网站编程,做汽车配件出口用什么网站好些,业之峰内外连接 一、内连接二、外连接1、左外连接2、右外连接 表的连接分为内连和外连。
一、内连接
内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选。只不过为了让sql的可读性更好#xff0c;我们使用其他的关键字进行内连接。
语法#xff1a;
SELECT ... FRO… 内外连接 一、内连接二、外连接1、左外连接2、右外连接 表的连接分为内连和外连。
一、内连接
内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选。只不过为了让sql的可读性更好我们使用其他的关键字进行内连接。
语法
SELECT ... FROM t1 INNER JOIN t2 ON 连接条件 [INNER JOIN t3 ON 连接条件] ... AND 其他条件;说明
SQL中大写的表示关键字[ ]中代表的是可选项。 下面是一些练习的数据表
雇员信息表数据库文件
三张表单 员工表emp 雇员编号empno 雇员姓名ename雇员职位job雇员领导编号mgr雇佣时间hiredate。 工资月薪sal奖金comm部门编号deptno。 部门表dept
部门编号deptno部门名称dname部门所在地点loc。 工资等级表salgrade
等级grade此等级最低工资losal此等级最高工资hisal。 1.1 显示SMITH的名字和部门名称
很明显员工名称和部门名称分别在两张表中empdept。我们想要同时显示员工名称和部门名称就需要我们对表进行内连接emp inner join dept由于内连接是按照笛卡尔积的方式进行连接的连接后有一些数据并不是真实有效的所以我们还要对数据进行筛选on emp.deptnodept.deptno。最后我们只要员工SMITH的相关信息所以我们可以使用where条件进行筛选。
select ename, dname from emp inner join dept on emp.deptnodept.deptno where enameSMITH;可以看出这种写法我们将笛卡儿积的过滤条件单独挑出这让我们的where子句的筛选条件更加清晰。
二、外连接
外连接分为左外连接和右外连接。
1、左外连接
如果进行联合查询要求要保证左侧的表要完全显示我们就说是左外连接。
SELECT ... FROM t1 LEFT JOIN t2 ON 连接条件 [LEFT JOIN t3 ON 连接条件] ... AND 其他条件;给出一张学生表学生表中的name代表的是学生的姓名id代表的是学生的学号。如下 再给出一张成绩表其中的id代表的是考试学生的学号grade代表的是学生的成绩。如下 注意观察这两张表 学生表中的3,4号学生在成绩表中是没有成绩的可能是缺考了 成绩表中的11号学生在学生表中是不存在的可能学生表统计漏了
现在我们如果使用内连接进行连接显示学号很姓名的我们发现有一些信息会因为不存在而被筛选掉。
select * from stu inner join exam on stu.idexam.id;1.1 查询所有学生的成绩如果这个学生没有成绩也要将学生的个人信息显示出来
可以看出题目要求学生表的信息要被完全展示而成绩表中的信息如果实在不满足连接条件可以被忽略。
所以我们可以使用左外连接保证左边的表要被完全显示
select * from stu left join exam on stu.idexam.id;观察表格 学生表中的信息被完全被展示出来了就算在成绩表中找不到id与之匹配。同时因为找不到所以其对应的列全部以NULL进行填充 而成绩表中的11号id因为无法匹配而被筛选掉了。
2、右外连接
如果联合查询右侧的表要求要被完全显示我们就说是右外连接。
语法
SELECT ... FROM t1 RIGHT JOIN t2 ON 连接条件 [RIGHT JOIN t3 ON 连接条件] ... AND 其他条件;2.1 查询所有的成绩就算这个成绩没有学生与它对应也要将成绩信息显示出来
可以看出题目要求成绩表的信息要被完全展示而学生表中的信息如果实在不满足连接条件可以被忽略。
所以我们可以使用右连接保证右边的表要被完全显示(当然也可以调换表的顺序然后使用左外连接)
select * from stu right join exam on stu.idexam.id;观察表格 成绩表中的信息被完全被展示出来了就算在学生表中找不到id与之匹配。同时因为找不到所以其对应的列全部以NULL进行填充 而学生表中的34号id因为无法匹配而被筛选掉了。
案例列出部门名称和这些部门的员工信息同时列出没有员工的部门
部门名称和的员工信息显然来自于不同的表中所以我们需要连接两张表。同时列出没有员工的部门意味着我们要以部门为主。所以我们可以使用外连接。连接条件就是部门的部门号要等于员工所在的部门号相等即dept.deptnoemp.deptno。
select dept.dname, emp.ename from dept left join emp on dept.deptnoemp.deptno;