连接查询

连接查询

在实际开发中,一般一个业务会对应多张表,因此大部分情况下都不是从单表中查询数据,而是多张表联合查询数据从而取出最终的结果。这也是关系型数据库存在的原因。

分类

根据年代划分:
SQL92:旧的语法
SQL99:较新的语法

根据表的连接方式划分:
内连接:分为等值连接,非等值连接,自连接
外连接:分为左外连接(左连接),右外连接(右连接)
全连接

笛卡尔积现象 (笛卡尔乘积现象)

现象:当两张表进行连接查询时,如果没有条件限制的话,最终查询结果条数将会是两张表记录条数的乘积。
避免笛卡尔乘积现象:添加条件进行过滤
取表的别名:提高执行效率,增强可读性

注:添加条件进行过滤并不会减少记录的匹配记录,仍然是两张表记录条数的乘积,只不过最终显示出来的是过滤之后的有效信息而已。

示例:

找到每个员工的部门名称
mysql> select dname,deptno from dept;//部门名称以及部门编号
+------------+--------+
| dname      | deptno |
+------------+--------+
| ACCOUNTING |     10 |
| RESEARCH   |     20 |
| SALES      |     30 |
| OPERATIONS |     40 |
+------------+--------+
4 rows in set (0.00 sec)


mysql> select ename,deptno from emp;//员工名称以及对应部门编号
+--------+--------+
| ename  | deptno |
+--------+--------+
| SMITH  |     20 |
| ALLEN  |     30 |
| WARD   |     30 |
| JONES  |     20 |
| MARTIN |     30 |
| BLAKE  |     30 |
| CLARK  |     10 |
| SCOTT  |     20 |
| KING   |     10 |
| TURNER |     30 |
| ADAMS  |     20 |
| JAMES  |     30 |
| FORD   |     20 |
| MILLER |     10 |
+--------+--------+
14 rows in set (0.00 sec)
使用:select ename,dname from emp,dept;
查出来的结果为两张表记录条数的乘积,即14*4=56。

过程:从员工表的第一位员工开始匹配,依次匹配四个部门而没有进行任何过滤,也就是说每一位员工均和四个部门进行了匹配。

进行 where 过滤:

select a.ename,b.dname from emp a,dept b where a.deptno=b.deptno;
结果为
mysql> select a.ename,b.dname from emp a,dept b where a.deptno=b.deptno;
+--------+------------+
| ename  | dname      |
+--------+------------+
| SMITH  | RESEARCH   |
| ALLEN  | SALES      |
| WARD   | SALES      |
| JONES  | RESEARCH   |
| MARTIN | SALES      |
| BLAKE  | SALES      |
| CLARK  | ACCOUNTING |
| SCOTT  | RESEARCH   |
| KING   | ACCOUNTING |
| TURNER | SALES      |
| ADAMS  | RESEARCH   |
| JAMES  | SALES      |
| FORD   | RESEARCH   |
| MILLER | ACCOUNTING |
+--------+------------+
14 rows in set (0.00 sec)

不再有冗余
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值