SQL多表查询
来源:互联网 发布:大数据应用启示录 编辑:程序博客网 时间:2024/05/16 13:54
多表查询
2017年11月7日
17:49
基本概念
- SELECT * FROM emp , dept WHERE emp.deptno = dept.deptno;
WHERE消除了显示的笛卡儿积,但笛卡儿积实际是存在的,只是没有显示出来。多表查询的性能是很差的,当数据量大时必须避免使用。
表名称:一般建议使用。
- SELECT * FROM empe , dept d WHERE e.deptno = d.deptno;
多表查询操作的使用:
- 没有关联字段或关联条件的两张数据表是不可能实现多表查询的;
- 在进行多表查询这样复杂的操作时,分步骤解决问题。
表的链接
主要分为两种形式:
- 内连接(等值连接):所有满足条件的数据都会被显示出来;
- 外连接(左外连接、右外连接、全外连接):控制左表与右表的数据是否全部显示。
1、等值连接:以上的就是等值连接。
- SELECT * FROM empe , dept d WHERE e.deptno = d.deptno;
- 只有当e.deptno = d.deptno满足时的数据才显示。
2、外连接
让等值判断左右两边有一边的数据可以全部显示出来,如果要想实现外连接,则需要使用“(+)”的语法。
- 左外连接:字段 =字段(+)
- SELECT * FROM empe , dept d WHERE e.deptno = d.deptno(+);
- 右外连接:字段(+) = 字段
- SELECT * FROM empe , dept d WHERE e.deptno(+) = d.deptno;
没有(+)的表数据全显示
- 查找每个雇员的领导的姓名
第一步:实现emp表的自身关联查询
SELECTe.ename ,e.job , m.ename
FROM emp e , emp m
WHERE e.mgr = m.empno ;
第二部:控制显示数据
SELECTe.ename ,e.job , m.ename
FROM emp e , emp m
WHERE e.mgr = m.empno(+) ;
注:“(+)”标记只是Oracle才有的。
SQL1999语法;
SELECT [DISTINCT] *| 列 [别名]
FROM表名称1
[CROSS JOIN表名称2]
[NATURAL JOIN表名称2]
[JOIN表名称 ON(条件) | USING(字段)]
[LEFT | RIGHT | FULLOUTER JOIN表名称2]
1、交叉连接:CROSS JOIN,主要功能是产生笛卡儿积,简单地实现多表查询
- SELECT* FROM emp CROSS JOIN dept ;
2、自然连接:NATURAL JOIN,自动使用关联字段消除笛卡儿积(一般关联字段是外键,但是此处它是以名称相同为主),属于内连接概念。
- SELECT* FROM emp NATURAL JOIN dept;
再返回查询结果的时候,默认情况下会将关联字段设置在第一列上,重复列内容不再显示。
3、USING子句:
- SELECT* FROM emp JOIN deptUSING(deptno);
4、ON子句:
- SELECT * FROMemp e JOIN salgrade s ON(e.sal BETWEEN s.losal AND s.hisal) ;
5、外连接
左外连接:LEFT JOIN左边表数据全显示,右边表可为空
SELECT* FROM empLEFT JOIN deptUSING(deptno);
右外连接:
SELECT* FROM emp RIGHT JOIN deptUSING(deptno);
全外连接:
SELECT* FROM emp FULL JOIN deptUSING(deptno);
数据集合操作(查询的表结构必须相同)
SELECT …(结果1)
集合运算 结果1和结果2的结构必须相同
SELECT …(结果2)
1、并集:UNION(不重复显示相同数据)
2、并集:UNIONALL(重复显示相同数据)
3、交集:INTERSECT(返回交集数据)
4、差集:MINUS(返回结果1-结果2的差集)
- 多表查询 SQL
- 多表查询 SQL
- SQL多表查询
- sql多表查询
- SQL多表查询
- SQL多表查询
- sql 多表查询
- sql多表查询
- sql多表查询
- SQL多表查询
- SQL多表查询
- sql多表查询
- sql多表查询
- SQL --> 多表查询
- SQL多表查询
- 【SQL】多表查询
- SQL多表查询
- sql多表查询
- ubuntu安装hadoop
- 性能测试模式之RBI模式
- 出现The valid characters are defined in RFC 7230 and RFC 3986的原因及解决方式
- MyCAT 源码分析 —— SQL ON MongoDB
- 移动端如何让页面强制横屏
- SQL多表查询
- HTML 4.01 快速参考
- 1_0_10_Orcale_数据库服务启用
- Kotlin(2.8)泛型
- 康拓展开
- 浅谈OOP
- 最简单的方法搞定键盘遮挡
- springmvc文件上传
- atom前端常用插件