您的位置:首页 > 数据库 > MySQL

MySQL学习第三天

2020-07-25 18:48 369 查看

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

标识重点黄色基本都要记住除了英文这个也要(滑稽)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: