Oracle - 查询语句 - 多表关联查询
/*
SQL语句的历史版本
SQL89
比较多
SQL92
SQL99
多表关联查询
笛卡尔积
等值关联查询
非等值关联查询
左外连接
右外连接
全外连接
自连接
*/
----------------------------------92语法
--查询部门名称和员工名称(两张表的关联没有任何的约束条件)
SELECT * FROM EMP;
SELECT * FROM DEPT;
SELECT * FROM SALGRADE;
SELECT * FROM EMP,DEPT;
SELECT * FROM EMP,DEPT,SALGRADE;
--等值关联查询
SELECT * FROM EMP,DEPT WHERE EMP.DEPTNO = DEPT.DEPTNO;
SELECT DEPT.DNAME,EMP.ENAME FROM EMP,DEPT WHERE EMP.DEPTNO = DEPT.DEPTNO;
--查询sott所在的部门名称
SELECT DEPT.DNAME FROM EMP,DEPT WHERE EMP.DEPTNO = DEPT.DEPTNO AND EMP.ENAME = 'SCOTT';
--非等值关联查询
SELECT EMP.ENAME,EMP.SAL,SALGRADE.GRADE FROM EMP,SALGRADE WHERE EMP.SAL BETWEEN SALGRADE.LOSAL AND SALGRADE.HISAL;
--给表设置一个别名,这个别名只有当前查询有效
SELECT E.ENAME,E.SAL,S.GRADE FROM EMP E,SALGRADE S WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL;
--查询部门编号,部门名称,员工姓名,员工薪资,员工薪资等级
SELECT D.DEPTNO,D.DNAME,E.ENAME,E.SAL,S.GRADE FROM EMP E,DEPT D,SALGRADE S
WHERE E.DEPTNO = D.DEPTNO
AND E.SAL BETWEEN S.LOSAL AND S.HISAL;
--外连接:就是为了找回不符合条件的数据
SELECT DEPTNO,COUNT(*) FROM EMP GROUP BY DEPTNO;
SELECT D.DEPTNO,D.DNAME,E.ENAME FROM EMP E,DEPT D WHERE E.DEPTNO = D.DEPTNO;
--右外连接
SELECT D.DEPTNO,D.DNAME,E.ENAME FROM EMP E,DEPT D WHERE E.DEPTNO(+) = D.DEPTNO;
--左外连接
SELECT D.DEPTNO,D.DNAME,E.ENAME FROM EMP E,DEPT D WHERE E.DEPTNO = D.DEPTNO(+);
--修改数据
UPDATE EMP SET DEPTNO = NULL WHERE EMPNO = 7934;
COMMIT;
--自连接
SELECT * FROM EMP;
--查询当前员工和经理的名字
SELECT E.ENAME ,E.MGR ,M.ENAME,M.EMPNO FROM EMP E,EMP M
WHERE E.MGR = M.EMPNO(+); ----------------------------------99语法
--笛卡尔积
SELECT * FROM EMP E,DEPT D;
SELECT * FROM EMP E CROSS JOIN DEPT D;
--等值连接(就是自动匹配名字,类型相同的列)
SELECT * FROM EMP E NATURAL JOIN DEPT D;
SELECT * FROM EMP E JOIN DEPT D USING(DEPTNO);
SELECT * FROM EMP E JOIN DEPT D ON(E.DEPTNO = D.DEPTNO);
--非等值连接
SELECT * FROM EMP E JOIN SALGRADE S ON(E.SAL BETWEEN S.LOSAL AND S.HISAL);
--外连接
SELECT * FROM EMP E LEFT JOIN DEPT D USING(DEPTNO);
SELECT * FROM EMP E RIGHT JOIN DEPT D USING(DEPTNO);
SELECT * FROM EMP E FULL JOIN DEPT D USING(DEPTNO);
--自连接
SELECT E.ENAME,M.ENAME FROM EMP E JOIN EMP M ON(E.MGR = M.EMPNO);
SELECT E.ENAME,M.ENAME FROM EMP E LEFT JOIN EMP M ON(E.MGR = M.EMPNO);
--子查询(作为查询条件)
SELECT * FROM EMP WHERE SAL = (SELECT MAX(SAL) FROM EMP);
SELECT * FROM EMP WHERE SAL > (SELECT AVG(SAL) FROM EMP);
--子查询(作为一张虚拟的表)
SELECT * FROM EMP E ,(SELECT AVG(SAL) ASL,DEPTNO FROM EMP GROUP BY DEPTNO) T
WHERE E.SAL>T.ASL
AND E.DEPTNO = T.DEPTNO;
--单行子查询
SELECT * FROM EMP WHERE SAL = (SELECT MAX(SAL) FROM EMP);
--多行子查询
SELECT * FROM EMP E WHERE E.SAL IN(SELECT MAX(SAL) FROM EMP WHERE DEPTNO IS NOT NULL GROUP BY DEPTNO);
/*
IN:取其中之一相等就Ok
ALL:必须所有得都满足条件
SOME:满足一部分即可
*/
Oracle - 查询语句 - 多表关联查询的更多相关文章
- Oracle 数据库(oracle Database)Select 多表关联查询方式
Oracle数据库中Select语句语法及介绍 SELECT [ ALL | DISTINCT ] <字段表达式1[,<字段表达式2[,…] FROM <表名1>,<表名 ...
- oracle库两个表关联查询时用 count 报错【我】
oracle数据库,需要对两个表进行关联查询(根据两个字段),结果发现关联后不能改为 count 获取数量,报错如下: 同样的sql换到另外一个数据库就可以(只是因为数据量在千万级,所以很慢,用时40 ...
- mysql update语句添加表关联查询
UPDATE tab_game_version as a INNER JOIN tab_game_version as b ON a.id=b.idSET a.advert_data=0 where ...
- sql语句 两表关联查询计算数量
select sum(a1.`num`) from `order_orderlistrow` as a1 INNER JOIN `order_orderlist` as a2 on a1.`ord ...
- oracle02--多表关联查询
1. 多表(关联)查询 多表查询也称之为关联查询.多表关联查询等,主要是指通过多个表的关联来获取数据的一种方式. 1.1. 多表映射关系 一对多:A表的一行数据,对应B表中的多条.如:一个部门可以对应 ...
- Mybatis-plus多表关联查询,多表分页查询
学习plus真的觉得写代码真的越来越舒服了.昨天开始接触吧,只要学会了多表关联查询.plus就能随意搭配使用了. 关于怎么搭建的就自行了去研究了哦.这里直接进入主题. 我用的是springboot+m ...
- 多表关联查询(ORACLE版)
前言:这几天学习oracle,把自己对于关联查询的理解,记录下.如有错误请指正! 交叉连接: 交欢连接又称为“笛卡儿积连接”,是两个或多个表之间的无条件连接.一个表中所有的记录与其它表的所有的记录进行 ...
- oracle 两表关联查询
oracle 两表关联查询 CreationTime--2018年7月4日17点27分 Author:Marydon 情景描述 查询学生表student,sname,sex,age信息及所在班级c ...
- oracle多表关联查询和子查询
oracle多表关联查询和子查询 一.多表关联查询 例子: SQL> create table student1 ( sid ), sname ), sage )); Table created ...
随机推荐
- SQLServer__问题记录
“备份集中的数据库备份与现有的xx数据库不同” 参考链接: http://www.cnblogs.com/huangfr/archive/2012/08/09/2629687.html RESTOR ...
- LoadRunner之并发用户数与迭代关系---并发数与迭代的区别
Q1: 例如在LR里,我要测100个用户同时并发登陆所用时间,那我是不是在录制好脚本后,需要参数化“用户名”,“密码”以及在那个记事本里构造100个真实的用户名和密码? 然后运行Controller, ...
- python去掉BOM头的方法
今天在写批量生成身份证号造数据的时候出现了问题,其中一个是报不能转成int型,后经查找,发现是utf-8BOM头的问题. 什么是BOM? 在utf-8编码文件中BOM在文件头部,占用三个字节,用来标示 ...
- 2016阿里校招python研发面试
一面: 面:说说你们学校的主修课程. 学校开的全是尼玛java课,这个我是想了有一会的. 面:看你简历写了会jquery,来问你个简单的jquery问题 :jQuery支不支持css引入. 呵呵 面: ...
- SkyWalking 分布式追踪系统
随着微服务架构的流行,一些微服务架构下的问题也会越来越突出,比如一个请求会涉及多个服务,而服务本身可能也会依赖其他服务,整个请求路径就构成了一个网状的调用链,而在整个调用链中一旦某个节点发生异常,整个 ...
- Spring Boot配置方式
Spring提供了xml.注解.Java配置.groovy配置实现Bean的创建和注入. 配置元数据 无论xml配置.注解配置还是Java配置,都被称为配置元数据,所谓元数据即描述数据的数据.元数据本 ...
- msp430入门编程46
msp430中C语言的人机交互--基于状态机菜单
- CodeIgniter与Zend Acl结合实现轻量级权限控制
CodeIgniter与Zend Acl结合实现轻量级权限控制 Tag :CodeIgniter Zend Acl 权限控制 1. Zend_Acl简介 Zend_Acl 为权限管理提供轻量并灵活的访 ...
- HDU 4193 Non-negative Partial Sums【单调队列】
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4193 题意: 给定序列,可以把后面的连续的部分移到最前面来,问多少种移法使得最终得到的序列的前i项和 ...
- hdu6212 祖玛(区间DP)
题意 有一个长度为n的01串,我们可以在某个地方插入一个0或者1,那么如果有连续颜色相同的>=3个,那么这段就会消去,两边的合拢.问将所有01串消去,最少需要插入多少个.(n<=200) ...