多表连接 多表查询

连接是在多个表之间通过一定的连接条件,使表之间发生关联,进而能从多个表之间获取数据。

  • 在 WHERE子句中书写连接条件。
  • 如果在多个表中出现相同的列名,则需要使用表名作为来自该表的列名的前缀。
  • N个表相连时,至少需要N-1个连接条件

可以给表起别名 来简化代码 也可以两个表中不重复的列名前不加所属表名

等值连接

select emp.ename,emp.deptno,dept.loc
FROM emp,dept
WHERE emp.deptno = dept.deptno

查询员工编号 员工姓名 及工作地点
此时 emp表里有deptno数据和dept里的deptno数据可以形成等值连接

 非等值连接

SELECT emp.ename,emp.sal,salgrade.grade
FROM emp,salgrade
WHERE emp.sal BETWEEN salgrade.losal AND salgrade.hisal;

使用AND运算符增加其它查询条件 可以连接两个以上的表(写在where子句里面)

自连接

就是把一个表命名做成多个表,相互连接

表通过某种条件和本身进行连接的一种方式,就如同多个表连接一样。

查询所有工作在NEW YORK和CHICAGO的员工姓名,员工编号,以及他们的经理姓名,经理编号。

SELECT worker.ename,worker.empno,manager.ename mgrname,manager.empno mgrno,loc
FROM emp worker,emp manager,dept
WHERE worker.mgr = manager.empno
AND worker.deptno = dept.deptno
AND loc in('NEW YORK','CHICAGO');

ANSI SQL:标准的连接语法

1.外部连接-----左连接

左外连接以FROM子句中的左边表为基表,该表所有行数据按照连接条件无论是否与右边表能匹配上,都会被显示出来。

使用左连接,查询每个员工的姓名,经理姓名,没有经理的King也要显示出来。
SELECT worker.ename,manager.ename
FROM emp worker
LEFT OUTER JOIN emp manager
ON worker.mgr = manager.empno
因为员工KING没有经理 但是也需要他被显示出来 所以以worker为基表 worker在from语句的左边

2.外部连接-----右连接

右外连接以FROM子句中的右边表为基表,该表所有行数据按照连接条件无论是否与左边表能匹配上,都会被显示出来。

使用右连接,查询每个员工的姓名,经理姓名,没有经理的King也要显示出来。
SELECT worker.ename,manager.ename
FROM emp manager
right OUTER JOIN emp worker
ON worker.mgr = manager.empno
因为员工KING没有经理 但是也需要他被显示出来 所以以worker为基表 worker在from语句的右边

3.CROSS JOIN 交叉连接 会造成笛卡尔积现象

/*交叉连接 笛卡尔积*/
SELECT worker.ename,manager.ename
FROM emp worker CROSS JOIN emp manager

4.自然连接  里面必须有相同字段

SELECT worker.ename,manager.ename
FROM emp worker NATURAL JOIN emp manager;

5.USING 连接表时字段名不变时可用

SELECT worker.ename,manager.ename
FROM emp worker JOIN emp manager
USING(deptno);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值