MySQL笔记3——多表查询

学习目的:了解MySQL数据库中多表查询的含义,掌握多表查询的基本写法,掌握特殊的多表查询的写法,掌握内连接和外连接的区别。

重点:

  • 掌握多表查询的基本写法
  • 掌握内连接和外连接的区别

难点:

  • 外连接的用法和写法
  • 特殊的多表查询的写法:自连接、非等值连接等

什么是连接

  • 连接是在多个表之间通过一定的连接条件,使表之间发生关联,进而能从多个表之间获取数据。
  • 语法为:
SELECT    table1.column, table2.column
FROM    table1, table2
WHERE    table1.column1 = table2.column2;
  • 在 WHERE子句中书写连接条件。
  • 如果在多个表中出现相同的列名,则需要使用表名作为来自该表的列名的前缀。
  • N个表相连时,至少需要N-1个连接条件

多表连接类型

  • 按连接条件分:
    • 等值连接
    • 非等值连接
  • 按其他连接方法分
    • 外连接
    • 内连接3.1.4 多表连接写法
  • 多表连接包含多种写法,我们主要介绍:
    • 基本写法:绝大多数符合SQL标准,其它关系型数据也适用。
    • ANNSI 99写法:ANSI标准提供的写法,所有关系型数据库必须支持。

/*3.笛卡尔积:
	●第一个表中的所有行和第二个表中的所有行都发生连接:产生数据总数为两表数据总数相乘
	●笛卡尔积在下列情况产生:
		○ 连接条件被省略
		○ 连接条件是无效的
	●为了避免笛卡尔积的产生,通常需要在WHERE子句中包含一个有效的连接条件
*/
SELECT emp.empno,emp.ename,emp.deptno,dept.deptno,dept.loc	
	FROM emp,dept;

-- 3.等值连接
SELECT  emp.empno, emp.ename, emp.deptno, dept.deptno, dept.loc
	FROM  emp, dept
	WHERE  emp.deptno=dept.deptno AND sal>2000;
 -- 3.1使用表的别名限制有歧义的列名
SELECT  emp.empno, emp.deptno,dept.deptno, dept.loc
	FROM  emp, dept
	WHERE  emp.deptno=dept.deptno;

-- 4.非等值连接
SELECT   e.ename, e.sal, s.grade
	FROM  emp e,salgrade s
	WHERE e.sal
	BETWEEN s.losal AND s.hisal;

-- 5.多于两个表的连接:通常N个表,至少有N-1个关联关系
SELECT c.name,o.itemid
	FROM customer c, order o,item i
	WHERE c.custid = o.custid and o.ordid = i.ordid;

-- 6.自连接:一个表通过某种条件和本身进行连接的一种方式,同多表连接
SELECT m.empno,m.ename,w.empno,w.ename
	FROM emp w,emp m
	WHERE w.mgr=m.empno;
 /*ANSI SQL:1999标准的连接语法
除了上述自己的连接语法外,同时支持美国国家标准协会(ANSI)的SQL:1999标准的连接语法。
SELECT table1.column, table2.column
	FROM    table1
	[JOIN table2 
    ON(table1.column_name = table2.column_name)]| 
	[LEFT | RIGHT  OUTER JOIN table2 
    ON (table1.column_name = table2.column_name)];*/

-- 7.外部连接:左外(join左边的表为基表)、右外(join右边的表为基表),基表的内容全部显示
 -- 7.1 左外连接
SELECT e.ename,e.deptno,d.loc
	FROM emp e
	LEFT OUTER JOIN dept d  -- OUTER可写可不写
	ON  e.deptno=d.deptno;
 -- 7.1 右外连接
SELECT e.ename,e.deptno,d.loc
	FROM emp e
	RIGHT JOIN dept d  -- OUTER可写可不写
	ON  e.deptno=d.deptno;

/*8.本章小结
● 等值连接
● 不等值连接
● 自身连接
● 外连接*/

9.课后作业

  1. 显示员工SMITH的姓名,部门名称,直接上级名称
  2. 显示员工姓名,部门名称,工资,工资级别,要求工资级别大于4级。
  3. 显示员工KING和FORD管理的员工姓名及其经理姓名。
  4. 显示员工姓名,参加工作时间,经理名,参加工作时间,要求参加时间比经理早。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值