当前位置:首页 > 数据库 > 3 Oracle多表查询

3 Oracle多表查询

2022年09月16日 22:40:26数据库8

3.1 执行sql文件

@文件地址名		--执行某个sql文件;

3.2 多表查询

  • 想要的数据不在同一张表,就需要多个表进行联查。

  • 多表查询也叫做表连接查询,其中的where条件就是连接条件。

  • 可以使用join来进行表连接,from 中的逗号换成join ,where换成on即可,join后面还可以另外跟where条件。

    select ...
    from 表1,表2...
    where...
    ...
    

3.3 外连接

  • 保留没有通过连接条件筛选的数据的时候使用外连接。

  • oracle用法

    • 想保留哪一张表的数据,应该在连接条件等号的另一边使用(+);
    select d.deptno,d.dname,count(empno)
    from dept d, emp e
    where d.deptno = e.deptno(+)
    group by d.deptno,d.dname
    
  • sql用法

    select d.deptno,d.dname,count(empno)
    from dept d join emp e
    on d.deptno = e.deptno
    group by d.deptno,d.dname
    

3.4 自连接

  • 表自己跟自己做多表连接查询,要查询的数据在同一张表但是不在同一行,就要使用自连接

    select a.ename||'''s manager is '||nvl(b.ename,' his wife')
    from emp a, emp b
    where a.mgr = b.empno(+)
    

3.5 子查询

  • 个查询的select语句里边嵌套了另一个select语句;

    select * from emp 
    where sal > (select sal from emp where ename = 'SCOTT')
    
  • 注意事项

    • 父查询和子查询可以是不同的表,子查询返回的结果父查询可以使用即可;

    • 父查询的select、from、where、having都可以嵌套子查询;

    • 单行子查询只能使用单行操作符,多行子查询只能使用多行操作符,单行操作符,就是对某个单一数据的比较操作 =|>|>=|<|<=等;

    • 多行操作符,就是对一个集合的比较操作(IN、ANY、ALL)

    select * from emp 
    where deptno in (select deptno from dept
    where dname ='SALES' or dname = 'ACCOUNTING')
    
    • 子查询中返回的null值影响最终计算结果;
    select * from emp
    where empno not in (select mgr from emp where mgr is not null)
    

3.6 集合运算

并集 union

全并集 union all

交集 intersect

差集 minus

select * from emp where deptno = 10
union
select * from emp where deptno = 20
  • 用命令break on deptno skip 2来去掉分组重复的deptno,使用break on null恢复;

  • 注意事项

    • 参与运算的各个集合必须列数相同,且类型一致;

    • 采用第一个集合的表头作为最终使用的表头,(别名也只能在第一个集合上起);

    • 可以使用括号修改各个sql执行的优先级;

3.7 新增数据

insert into 表名 values(val1,val2,.....) val1 val2 这些值要对应表的每列顺序

insert into 表名(列名,列名2.....) values(val1,val2,.....)

  • 字符串和日期加单引号;

  • "&"符号,可简化增删查改操作

    • 例:select * from &t; 再次输入/时,可快速查找;
  • 批处理

    --一次性将emp表中所有10号部门的员工,放到新表emp10中来。
    insert into emp10 select * from emp where deptno=10 ;  
    
    --一次性将 emp表中的指定列插入到表emp10中。		
    --注意:insert的列名,要和select的列名一致
    insert into emp10(empno, ename, sal, deptno)
    select empno, ename, sal, deptno	 from emp
    where deptno=10;  		
    --注意没有values关键字了。且列名必须一一对应	
    

3.8 修改数据

  • update 表名 set 列名1=值1,列名2=值2..... [where cond]

    • 例:update dept set dname='SUPPORT1',loc=null where deptno=50;

3.9 删除数据

  • delete from 表名 [where cond]

    • 例:delete from dept where deptno=50

3.10 rownum

  • rownum 是行号,伪列,并不是真实存在于表中的列,最好在排序前生成;

  • rownum只能使用<, <=符号,不能使用>,>=符号,除了>=1

    • select rownum,emp.* from emp order by sal desc;

作者:一个很酷的工程师
来源链接:https://www.cnblogs.com/chungeyuan/p/11413339.html

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/database/42313.html

分享给朋友:

“3 Oracle多表查询” 的相关文章

BUG  You have an error in your SQL syntax; check

BUG You have an error in your SQL syntax; check

java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server...

全面解析Redis

全面解析Redis

目录 一,问题引入: 什么是Redis? 3.redis的应用场景 4redis的下载与安装 radis的基本操作 数据存储类型介绍...

Mybatis中的${}和#{}区别

一、${}与#{}的区别 1、符号类型 (1)#{}:参数占位符,即预编译 (2)${} :字符串替换符,即SQL拼接 2、防注入问题 (1)#{}:很大程度上能防止sql 注入 (2)${}:不能防止sql 注入 3、参数替换位置 DBMS:数据库管理系统(D...

Linux (centos8)安装 MySQL 8 数据库(图文详细教程)

Linux (centos8)安装 MySQL 8 数据库(图文详细教程)

我的公众号 今天2021年4月23日。我买了阿里云centos服务器,安装mysql8.0,做一笔记,以供大家使用。 本教程手把手教你如何在 Linux 安装 MySQL 数据库,以 CentOS 8为例。 1. 下载并...

Spring Batch 读 10 万条记录,写到 MongoDB

实践内容 从 MariaDB 一张表内读 10 万条记录,经处理后写到 MongoDB 。 具体实现 1、新建 Spring Boot 应用,依赖如下: <!-- Web 应用 -->...

mysql之基础查询

mysql之基础查询

文章目录 DQL语言的学习 进阶1:基础查询 1.查询表中的单个字段 2.查询表中的多个字段 3.查询表中的所有字段 4.查询常量值...

mysql 查询数据库内存大小

mysql 查询数据库内存大小

查询某个数据库,指定数据库名:打开information_schema,在它之下查询 select concat(round(sum(data_length/1024/1024),2),'MB') as data from tables whe...

MySQL 查询指定时间范围内的数据

  说明 mysql 比较时间范围可以直接用 >=、<= 等比较运算符,也可以用 between and(两边都包含,都是闭区间);比较运算符更常用,因为 between and 能做的比较运算符也能做, bet...

会mysql不一定会sql

会mysql不一定会sql

1. 查询缓存 多数MySQL服务器都开启了查询缓存,相同的查询被执行多次,查询结果会被放到一个缓存中,这样,后续的相同的查询就不用操作表而直接访问缓存结果了。 //查询缓存不开启 $r= mysql_query("SELECT username...

mysql 查询表中前10条数据

mysql 查询表中前10(X)条数据 select * from user_dongtai LIMIT 0,10(X) 作者:Curry·DK 来源链接:https://blog.csdn.net/Wangdiankun/art...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。