MySQL学习第三天
- 连接查询
如果有其它观点可以提出来奥
连接查询
什么是连接查询
多张表连起来查询。
如果把全部数据存储在一张表内的话,会导致数据重复,导致数据的冗余。(在一个数据集合中重复的数据叫做数据冗余)
连接查询分类
根据语法划分:
SQL92
SQL99
SQL99语法结构更清晰一些,表的连接条件和后来的where条件分离了。
SQL92如果使用where的话麻烦一些
根据表结构划分
内连接
等值连接
非等值连接
自连接
外连接
左外连接(左连接)
右外连接(右连接)
全连接(说是挺少用的)
内连接
之等值连接
最大特点:条件是等量关系(相等)
案例:查询每个员工部门名称,要求显示员工和部门名
select
e.ename,d.dname
from
emp e
inner join // inner可以省略,带着的话代码可读性好点
dept d
on
e.deptno = d.deptno;
效果
±——-±———–+
| ename | dname |
±——-±———–+
| CLARK | ACCOUNTING |
| KING | ACCOUNTING |
| MILLER | ACCOUNTING |
| SMITH | RESEARCH |
| JONES | RESEARCH |
| SCOTT | RESEARCH |
| ADAMS | RESEARCH |
| FORD | RESEARCH |
| ALLEN | SALES |
| WARD | SALES |
| MARTIN | SALES |
| BLAKE | SALES |
| TURNER | SALES |
| JAMES | SALES |
±——-±———–+
总结内连接
之等值连接
两张表连接,条件是一个等量关系的(相等)就叫做等值连接
内连接
之非等值连接
非等值连接这个最大特点是:连接条件中的关系是非等量关系。
直接总结把,这么简单不用案例了把。
总结内连接
之非等值连接
两张表连接,条件不是一个等量关系(不相等)就叫做非等值连接
内连接
之自连接
最大特点是:一张表看成两张表来使用。就是自己连接自己。
案例
select
e.ename as ‘员工表’,b.ename as ‘领导表’
from
emp e
inner join
emp b
on
e.mgr = b.empno;
效果
±——-±——-+
| 员工表 | 领导表 |
±——-±——-+
| SMITH | FORD |
| ALLEN | BLAKE |
| WARD | BLAKE |
| JONES | KING |
| MARTIN | BLAKE |
| BLAKE | KING |
| CLARK | KING |
| SCOTT | JONES |
| TURNER | BLAKE |
| ADAMS | SCOTT |
| JAMES | BLAKE |
| FORD | JONES |
| MILLER | CLARK |
±——-±——-+
内连接
之自连接总结
就是把一张表看成两张来使用,然后寻找两张表有共同点的地方
就把它们利用起来
外连接
什么是外连接和内连接有什么区别呢?
内连接
AB表,匹配查询,如果能匹配上就展示出来,匹配不上直接干掉,你看都看不见。不分主和副表,两张表平等。
外连接
AB俩张表,分主表和副表。主表是查询的只不过在查询的时候带上了副表,之后匹配它不像内连接那样(匹配不上直接干掉,你看都看不见)就算匹配不上它也会显示出来,只不过是以null的形式。
左连接和右连接都有自己的语法
左连接是
left join
右连接是
right join
案例
查询出哪些部门没有员工
select
d.*
from
emp e
right join
dept d
on
e.deptno = d.deptno
where
e.empno is null;
效果
±——-±———–±——-+
| DEPTNO | DNAME | LOC |
±——-±———–±——-+
| 40 | OPERATIONS | BOSTON |
±——-±———–±——-+
外连接主要特点
主表数据元素无条件全部查询出来
笛卡尔积现象
在表连接查询这个方面有一种现象被称为笛卡尔积现象。
笛卡尔积现象:
当两张表进行连接查询的时候,没有任何条件进行限制最终查询结果是两张表记录条数的乘积。
那么我们应该怎么避免笛卡尔积现象呢?
上面说了没有条件,我们当然是加条件啦。
但是
避免了笛卡尔积现象不会减少匹配次数哦(就是两张表记录条数的乘积)只不过显示的是有效值,就是适合条件的值。
关于表的别名好处
第一:执行效率高
第二:可读性好
‘
如果字段中出现同名的字段用定义别名就很舒服了,随便说一下如果字段名重名MySQL是识别不了的。
使用和定义
select
e.ename,d.dname
from
emp e,dept d
标识重点黄色基本都要记住除了英文这个也要(滑稽)