07多表查询

消除笛卡尔积,必须有关联字段;

SELECT *

FROM emp,dept

WHERE emp.deptno=dept.deptno;

都习惯与将关联字段设置为同名;

任何时候多表查询都必须存在有关联关系,没有关联关系是没有多表查询的;

强烈建议用别名;

SELECT e.*,d.dname

FROM emp e ,dept d

WHERE e.deptno=d.deptno;

 

案例1:要求查询出每个雇员的编号、姓名、职位、基本工资、部门名称、部门位置

SELECT e.empno,e.ename,e.job,e.sal,d.dept,d.loc

FROM emp e ,dept d

WHERE e.deptno=d.deptno;

 

案例2:要求查询出每个雇员的编号、姓名、职位、基本工资、工资等级

SELECT e.empno,e.ename,e.job,e.sal,s.grade

FROM emp e ,salgrade s

WHERE e.sal BETWEEN s.losal AND s.hisal;

 

案例3:要求查询出每个雇员的编号、姓名、职位、基本工资、部门名称、工资等级

SELECT e.empno,e.ename,e.job,e.sal,d.dept,s.grade

FROM emp e ,dept d,salgrade s

WHERE e.deptno=d.deptno AND e.sal BETWEEN s.losal AND s.hisal;

 

以上用的where字句都是使用了内连接;内连接中不满足条件的不出现;

外连接:左外连接、右外连接、全外连接;如果考虑数据不全的时候就使用外连接;

左外连接

SELECT e.empno,e.ename,e.job,e.sal,d.dept,d.loc

FROM emp e ,dept d

WHERE e.deptno=d.deptno(+);--左表不满足条件的出现了;

 

右外连接

SELECT e.empno,e.ename,e.job,e.sal,d.dept,d.loc

FROM emp e ,dept d

WHERE e.deptno(+)=d.deptno;--右表不满足条件的出现了;

 

SQL:1999语法

左外连接:SELECT * FROM emp e LEFT OUTER JOIN dept d ON (e.deptno=d.deptno);

SELECT * FROM emp e RIGHT OUTER JOIN dept d ON (e.deptno=d.deptno);

SELECT * FROM emp e FULL OUTER JOIN dept d ON (e.deptno=d.deptno);

 

集合查询

UNION:取消重复元素,将所有集合合并,如果要重复数据用UNION ALL

UNION ALL:

SELECT * FROM EMP

UNION ALL

SELECT * FROM EMP WHERE DEPTNO=10;

INTERSECTT:交集

MINUS:差集

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
三表查询是指在同一条SQL语句中查询三个或更多的表,并将它们连接起来。下面是一个MySQL的三表查询例子: 有三张表: ``` employees: +----+-------+--------+----------+ | id | name | gender | hiredate | +----+-------+--------+----------+ | 1 | Tom | M | 2015-07-01 | | 2 | Jerry | F | 2016-09-12 | | 3 | Bob | M | 2017-02-15 | +----+-------+--------+----------+ departments: +----+------------+ | id | name | +----+------------+ | 1 | Sales | | 2 | Marketing | | 3 | HR | +----+------------+ employee_departments: +----+-------------+---------------+ | id | employee_id | department_id | +----+-------------+---------------+ | 1 | 1 | 1 | | 2 | 1 | 2 | | 3 | 2 | 2 | | 4 | 3 | 3 | +----+-------------+---------------+ ``` 三表查询语句如下: ``` SELECT employees.name, departments.name FROM employees JOIN employee_departments ON employees.id = employee_departments.employee_id JOIN departments ON employee_departments.department_id = departments.id; ``` 查询结果如下: ``` +-------+-----------+ | name | name | +-------+-----------+ | Tom | Sales | | Tom | Marketing | | Jerry | Marketing | | Bob | HR | +-------+-----------+ ``` 这个例子中,我们想要查询每个员工所在的部门。我们使用了 `JOIN` 来连接三张表,第一个 `JOIN` 连接了 employees 和 employee_departments 表,第二个 `JOIN` 连接了 employee_departments 和 departments 表。最终结果是返回了每个员工的名字和他们所在的部门

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值