Oracle(sql)文盲大扫除思维导图系列(三)——多表连接查询子查询

继续上图

一些demo

--通过连接运算符可以实现多个表查询,连接是关系数据库模型的主要特点。
--在FROM子句中指出连接时有助于将连接操作与WHERE子句中的搜索条件区分开来。
--一般来说,连接查询比嵌套查询的效率高一点。所以,在Transact-SQL中推荐使用这种方法。
select * from emp;
select * from dept;
select * from salgrade;

--先来看内连接,内连接是最典型和最常用的连接运算,内连接通常通过连接谓词或运算符(如join on,natural join,cross join,=,>=,<=,in,not in,等)
--将两张表的列组合在一起,产生新的结果表。
--内连接包括:等值连接、非等值连接、自然连接、交叉连接(笛卡尔积连接A*B)

--等值连接,表之间的连接是通过相等的字段值连接起来的查询称为等值连接查询
--SQL1992,在where子句中进行多表连接
select ename,dname from emp,dept where emp.deptno = dept.deptno;
--SQL1999,使用join ... on ..的方式进行表连接
select ename,dname from emp join dept on (emp.deptno = dept.deptno);

--非等值连接,在等值查询的连接条件中不使用等号,而使用其它比较运算符就构成了非等值连接查询。
--可以使用的比较运算符有:> 、>、=、 <、 <=、 !=, 还可以使用BETWEEN…AND 之类的谓词
--SQL1992,在where子句中进行多表连接
select ename,grade from emp,salgrade where sal between losal and hisal;
select ename,grade from emp,salgrade where sal >= losal and sal <= hisal;
--SQL1999,使用join ... on ..的方式进行表连接
select ename,grade from emp join salgrade on (sal between losal and hisal);
select ename,grade from emp join salgrade on (sal >= losal and sal <= hisal);

--自然连接,自然连接是在两张表中寻找那些数据类型和列名都相同的字段,然后自动地将他们连接起来,并返回所有符合条件按的结果。
select emp.ename,dept.dname from emp natural join dept;
--这里我们并没有指定连接的条件,实际上oracle为我们自作主张的将,emp中的deptno和dept中的deptno做了连接,
--类似等值连接,区别在于自然连接会去重,而等值连接则不。

--交叉连接,交叉连接即返回这两个表的笛卡尔积
select * from emp cross join dept;

--外连接,外连接和内连接的主要区别在于:内连接只查询满足连接条件的记录,而外连接则将不能产生连接的数据也查询出来
--外连接可依据连接表保留左表, 右表或全部表的行而进一步分为左外连接, 右外连接和全连接

--右外连接,保留右边表不能产生连接的记录(多余的记录)
select ename, dname from emp e right join dept d on (e.deptno = d.deptno);

--左外连接,保留左边表不能产生连接的记录(多余的记录)
select e1.ename, e2.ename from emp e1 left join emp e2 on (e1.mgr = e2.empno);

--全外链接,把左边右边没不能产生连接的记录都查询出来
select ename, dname from emp e full join dept d on (e.deptno = d.deptno);

--自连接,为同一张表起不同的别名,然后当成两张表来用。自连接既可以用内连接,也可以用外连接。
select e1.ename,e2.ename from emp e1 join emp e2 on (e1.mgr = e2.empno);
select e1.ename,e2.ename from emp e1 right join emp e2 on (e1.mgr = e2.empno);
select e1.ename,e2.ename from emp e1 left join emp e2 on (e1.mgr = e2.empno);

--不用组函数,用自连接实现求最高薪水
--(1)先求出每一个员工比他薪水薪水少的员工
select e1.ename,e1.sal from emp e1 join emp e2 on (e1.sal < e2.sal);
--(2)去重
select distinct e1.ename,e1.sal from emp e1 join emp e2 on (e1.sal < e2.sal);
--(3)不在(2)中查询的结果中的就是最高薪水
select distinct sal from emp where sal not in
    (select distinct e1.sal from emp e1
  join emp e2
on (e1.sal < e2.sal)
);

--子查询,子查询本质上是嵌套进其他SELECT,UPDATE,INSERT,DELETE语句的一个被限制的SELECT语句
select max(sal) from emp;
select ename,sal from emp where sal =(select max(sal) from emp);

select t1.ename,t1.deptno from emp t1 join (
select deptno,max(sal) max_sal from emp group by deptno) t2
on(t1.deptno = t2.deptno and t1.sal = t2.max_sal)

今天先到这里。

时间: 2024-12-26 14:53:02

Oracle(sql)文盲大扫除思维导图系列(三)——多表连接查询子查询的相关文章

Oracle(sql)文盲大扫除思维导图系列(二)——常用sql函数

继续上图 一些demo select min(sal),max(sal),avg(sal),sum(sal),count(*) from emp; --having 对分组结果进行过滤 select deptno,avg(sal) from emp group by deptno having avg(sal) > 2000;

JAVA思维导图系列:多线程初级

感觉自己JAVA基础太差了,重新看一遍,已思维导图的方式记录下来 多线程初级 进程 独立性 拥有独立资源 独立的地址 无授权其他进程无法访问 动态性 与程序的区别是:进程是动态的指令集合,而程序是静态的指令集合 加入时间概念 有自己的生命周期和不同的状态 并发性 多个进程可以在单核处理器并发执行 多个进程互不影响 和并行的区别:并行是同一时刻多个进程在多个处理器上同时执行 而并发是指在同一时刻只能执行一条指令,但互相切换迅速,宏观上看是执行多个指令 线程 线程相对于进程如同进程相对于操作系统 多

JAVA思维导图系列:多线程中级

多线程中级,包含控制线程的几种方法.线程的同步.线程组,有返回值的线程.线程之前的通信.线程池和线程的几个相关类 线程同步 当多个线程访问同一资源时,加synchronized对资源进行加锁 synchronized可以修饰代码块,修饰方法 只对可以改变竞争资源的方法加锁 只有多线程才会出现线程安全问题 释放锁的条件 同步方法.代码块结束 出现未处理的异常 调用wait,将本线程置为就绪状态 sleep或者yield.suspend不会释放同步锁 同步锁(Lock),显示加锁.释放锁 读写锁(R

JAVA思维导图系列:多线程0基础

感觉自己JAVA基础太差了,又一次看一遍,已思维导图的方式记录下来 多线程0基础 进程 独立性 拥有独立资源 独立的地址 无授权其它进程无法訪问 动态性 与程序的差别是:进程是动态的指令集合,而程序是静态的指令集合 增加时间概念 有自己的生命周期和不同的状态 并发性 多个进程能够在单核处理器并发运行 多个进程互不影响 和并行的差别:并行是同一时刻多个进程在多个处理器上同一时候运行 而并发是指在同一时刻仅仅能运行一条指令,但互相切换迅速,宏观上看是运行多个指令 线程 线程相对于进程如同进程相对于操

JavaScript中各大板块思维导图

学习的道路就是要不断的总结归纳,好记性不如烂笔头,so,下面将po出8张javascript相关的思维导图. 思维导图小tips:思维导图又叫心智图,是表达发射性思维的有效的图形思维工具 ,它简单却又极其有效,是一种革命性的思维工具.思维导图运用图文并重的技巧,把各级主题的关系用相互隶属与相关的层级图表现出来,把主题关键词与图像.颜色等建立记忆链接,思维导图充分运用左右脑的机能,利用记忆.阅读.思维的规律,协助人们在科学与艺术.逻辑与想象之间平衡发展,从而开启人类大脑的无限潜能.思维导图因此具有

[Java 并发] Java并发编程实践 思维导图 - 第三章 对象的共享

根据<Java并发编程实践>一书整理的思维导图. 第一部分: 第二部分: 第三部分:

画思维导图的三招十八式

思维导图在生活中是一种很常见的图表,因为它的实用性所以使用的人越来越多,但是怎么样绘制思维导图却成为了困扰的问题,下面小编给大家分享画思维导图的两种操作方法. 绘制工具:电脑 迅捷画图 操作方法介绍: 方法一:利用在线网站画思维导图 1.小编讲述的绘制方法是用在线网站进行绘制使用的,迅捷画图是小编经常使用的一个在线编辑网站,想要使用该在线网站的朋友可以在百度搜索迅捷画图点击进去进行编辑使用. 2.这里讲述的是思维导图,在新建文件中选择思维导图进行新建使用就可以,会转入到在线编辑面板中进行下一步绘

ORACLE 多表连接与子查询

Oracle表连接 SQL/Oracle使用表连接从多个表中查询数据 语法格式: select 字段列表from table1,table2where table1.column1=table2.column2; 说明: 在where子句中指定连接条件 当被连接的多个表中存在同名字段时,必须在该字段前加上"表名"作为前缀. 连接的类型 Oracle8i之前的表连接: 等值连接(Equijoin) 非等值连接(Non-Equijoin) 外连接(Outer join):-->左外连

15款最好用的思维导图(心智图 )工具

思维导图也叫心智图,是一项流行的全脑式学习方法,用来表示词,思路,任务或其他与围绕着一个中央关键词或想法项目的示意图.通过径向,图形和非线性的方式提出意见,思维导图鼓励头脑风暴的方法来规划和组织任务.虽然思维导图的分支表示分层树形结构,其放射状排列扰乱通常与呈现更加线性的视觉线索层次相关概念的优先次序. 在这里,我们选择了一些最好的思维导图工具,让您能够快速探索思路,与同事协作和编辑你的内容.下面的大多数工具是免费的,享受! 您可能感兴趣的相关文章 网站开发中很有用的 jQuery 效果[附源码