MySQL多表查询(内连接/外连接)------详细

MySQL多表查询

一、多表查询
  当前的应用系统在存储数据的时候为了方便对数据进行管理,都不会将所有的数据存放在一个数据库表中
  比如:员工的个人资料和部门信息是分开存放在不同的表中的,但是员工个人信息中会标记出其所在的部门此时在进行员工信息查询时,会涉及到多个表

连接查询:同时涉及多个表的查询
连接条件或连接谓词:用来连接两个表的条件
一般格式:

[表名1.]<列名1> <比较运算符> [表名2.]<列名2>	
[表名1.]<列名1> BETWEEN [表名2.]<列名2> AND [表名2.]<列名3>

连接条件中的各连接字段类型必须是可比的,但名字不必相同

二、常见连接查询:内连接、外连接、复合条件连接

内连接——等值连接
例如:查询每个员工所在的部门
第1种:使用连接符: =

select * from emp,dept where Dept_id=dept.id;

第2种:使用:join … on…

select * from emp join dept on Dept_id=dept.id;

第3种:使用:inner join … on…

select * from emp inner join dept on Dept_id=dept.id;

 
非等值连接查询
员工信息表enginfo
MySQL多表查询(内连接/外连接)------详细_第1张图片
工资等级表salgrade
MySQL多表查询(内连接/外连接)------详细_第2张图片
查询语句:

select e.ename as '姓名',s.id as '等级' from enginfo e,salgrade s where e.sal BETWEEN s.local and s.maxline;

MySQL多表查询(内连接/外连接)------详细_第3张图片
 
自身连接
自身连接:一个表与其自己进行连接
需要给表起别名以示区别
由于所有属性名都是同名属性,因此必须使用别名前缀

例如:查询每门课程的先修课名称

SELECT Qir.cno,Qir.cname,Qir.cpno,sec.cname	
FROM course Qir,course sec	
WHERE Qir.cpno=sec.cno;

外连接

外联接可以是左向外联接、右向外联接在 FROM子句中指定外联接时,可以由下列几组关键字中的一组指定:

LEFT JOINLEFT OUTER JOIN
RIGHT JOINRIGHT OUTER JOIN	

左连接
左向外联接的结果集包括:LEFT OUTER,子句中指定的左表的所有行,而不仅仅是联接列所匹配的行
如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值

例如:

SELECT s.sno,sname,sex,age,dept,cno,grade FROM student s LEFT OUT JOIN sc ON s.sno=sc.sno;

右连接
右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值


 
MySQL多表查询(内连接/外连接)------详细_第4张图片
感谢每一个认真阅读我文章的人!!!
如果下面这些资料用得到的话可以直接拿走:

1、自学开发或者测试必备的完整项目源码与环境

2、测试工作中所有模板(测试计划、测试用例、测试报告等)

3、软件测试经典面试题

4、Python/Java自动化测试实战.pdf

5、Jmeter/postman接口测试全套视频获取

我个人整理了我这几年软件测试生涯整理的一些技术资料,包含:电子书,简历模块,各种工作模板,面试宝典,自学项目等。如果在学习或工作中遇到问题可以直接点击此链接进群询问,群里也会有大神帮忙解答,也可以手动添加群号 743262921 备注222

你可能感兴趣的:(软件测试,MySQL,测试,软件测试,测试类型,数据库,mysql,测试工程师)