MySQL数据库教程 第九章多表查询操作
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
9.3 内连接查询
9.3.1 等值连接
等值连接是在ON子句的连接条件“join_condition”中使用“=”比 较运算符指定两张表中要进行匹配的字段,从而在两张表生成的笛卡 儿积记录中筛选出满足条件的记录。
使用等值连接实现如下功能:查询每位员工的编号、姓名、职位 、月薪、部门编号、部门名称、部门所在地。
9.3 内连接查询 9.3.1 等值连接
• 【示例9-6】内连接查询—等值连接
select e.empno, e.ename, e.job, e.sal, d.deptno, d.dname, d.loc from emp e inner join dept d on e.deptno=d.deptno;
显示结果中的记录总条数为56、字段有11个。这是因为dept表中 的记录有4条、字段有3个,emp表中的记录有14条、字段有8个,所 以显示结果中的记录条数为4*14=56、字段数为3+8=11;而显示结 果中的前3个字段属于dept表,后8个字段属于emp表。
由于交叉连接只是执行笛卡尔积操作,并不会通过具体的查询条 件对记录进行过滤,所以在实际开发中可以使用交叉连接生成大量的 测试数据,除此之外交叉连接查询的结果并无多大的实际意义。因此 ,还需要使用下面要讲解的内连接和外连接查询操作对满足条件的记 录进行筛选。
9.1 交叉连接查询
交叉连接(CROSS JOIN)是对两个或者多个表进行笛卡儿积操作 ,所谓笛卡儿积就是关系代数里的一个概念,表示两个表中的每一行 数据任意组合的结果。比如:有两个表,左表有m条数据记录,x个 字段,右表有n条数据记录,y个字段,则执行交叉连接后将返回m*n 条数据记录,x+y个字段。
9.3 内连接查询
9.3.1 等值连接
在实现该功能之前,我们先来分析一下需求:
(1)要查询的员工信息分别位于emp表和dept表中,因此需要使用连 接查询。
要查询的员工编号(empno)、姓名(ename)、职位(job)、月 薪(sal)位于emp表中;部门名称(dname)、部门所在地(loc) 位于dept表中;部门编号(deptno)为两个表中的关联字段,因此 连接条件应该为“emp.deptno = dept.deptno”。
9.3 内连接查询
9.3.1 等值连接
• 【示例9-7】执行结果如下:
9.3 内连接查询
9.3.2 非等值连接
非等值连接是在ON子句的连接条件“join_condition”中使用“>” 、“>=”、“<”、“<=”、“<>”或者“!=”这些表示不等关系的比较运算 符指定两张表中要进行匹配的不等条件,从而在两张表生成的笛卡儿 积记录中筛选出满足条件的记录。
9.1 交叉连接查询
• 交叉连接查询使用的是CROSS JOIN关键字,其语法格式如下 所示:
select * from table1 cross join table2;
9.1 交叉连接查询
• 【示例9-4】交叉连接查询(笛卡儿积)
select * from dept cross join emp;
9.3 内连接查询 9.3.1 等值连接
• 【示例9-6】执行结果如下:
9.3 内连接查询
9.3.1 等值连接
• 【示例9-7】内连接查询—等值连接(SQL92)
select e.empno, e.ename, e.job, e.sal, d.deptno, d.dname, d.loc from emp e, dept d where e.deptno=d.deptno;
9.2 自然连接查询
自然连接(NATURAL JOIN)是一种特殊的连接查询,该操作会 在关系表生成的笛卡儿积记录中,根据关系表中相同名称的字段进行 记录的自动匹配(如果关系表中该字段的值相同则保留该记录,否则 舍弃该记录),然后去除重复字段。
• 自然连接是通过NATURAL JOIN关键字来实现连接查询的, 其SQL语法如下所示:
• 【示例9-1】创建dept部门表
create table dept( deptno int(2) primary key, dname varchar(14), loc varchar(13)
);
• 【示例9-2】为dept部门表同时插入多条数据
insert into dept values (10, 'Accounting', 'New York'), (20, 'Research', 'Dallas'), (30, 'Sales', 'Chicago'), (40, 'Operations', 'Boston');
• 内连接是通过INNER JOIN关键字来实现连接查询的,其SQL 语法如下所示:
select column_name1, column_name2, ··· from table1[[as] t1] [inner] join table2 [[as] t2] on join_condition [where where_condition];
select column_name1, column_name2, ··· from table1 natural join table2;
9.2 自然连接查询
• 【示例9-5】自然连接查询
select * from dept natural join emp;
9.3 内连接查询
内连接(INNER JOIN)是使用频率最高的连接查询操作,所谓内 连接就是指在两张或多张表生成的笛卡儿积记录中筛选出与连接条件 相匹配的数据记录,过滤掉不匹配的记录。也就是说使用内连接的查 询结果中只存在满足条件的记录。
第九章 多表查询操作
本章主要内容
主要内容
1
交叉连接查询
2wk.baidu.com
自然连接查询
3
内连接查询
4
外连接查询
5
子查询
6
多表查询练习
讲述了单表查询操作,但是在实际开发中往往需要针对两张甚至 更多张数据表进行操作,而这多张表之间需要使用主键和外键关联在 一起,然后使用连接查询来查询多张表中满足要求的数据记录。
当相互关联的多张表中存在意义相同的字段时,便可以利用这些 相同字段对多张表进行连接查询。连接查询主要分为交叉连接查询、 自然连接查询、内连接查询和外连接查询四种。