Oracle 学习(三)多表联查

目录

  • Oracle 学习(三)多表联查
  • 一、99语法
  • 二、至少两种方式行转列
  • 三、分页

Oracle 学习(三)多表联查

@

一、99语法

Oracle学习(二)中我们学习了92语法,现在我们学习一下99语法

sql 1999语法

1.1.cross join 笛卡尔积
select * from emp cross join dept;
1.2.natural join 自然连接

当两个表不具有相同列名,进行cross join,具有相同列名,自动匹配

select * from emp e natural join dept d;
1.3.on子句,添加链接条件,相当于92语法的等值连接

相当于92语法的等值连接

select * from emp e join dept d on e.deptno=d.deptno

相当于92语法的非等值连接

select * from emp e join salgrade sg on e.sal between sg.losal and sg.hisal
1.4.left outer join

左表中数据全部显示,游标没有数据直接显示空

select * from emp left outer join dept d on e.deptno=d.deptno
1.5.right outer join

右表全部显示,没有数据显示空

select * from emp right outer join dept d on e.deptno=d.deptno
1.6.full outer join
select * from emp full outer join dept d on e.deptno=d.deptno
1.7.inner outer join

inner join 和 join一样

select * from emp e inner outer join dept d on e.deptno=d.deptno
1.8.using

除了使用on表示连接条件,也可以使用using

使用using会少一列,因为deptno为连接列,不归属任何一张表

select * from emp e join dept d using(deptno)

二、至少两种方式行转列

姓名 语文 数学 英语
王五 88 99 50
2.1.decode
select ss.name,
    max(decode(ss.subject,'语文',ss.score)) 语文,
    max(decode(ss.subject,'数学',ss.score)) 数学,
    max(decode(ss.subject,'英语',ss.score)) 英语,
from student_score ss group by ss.name  
2.2.case when then
select ss.name,
    max(case ss.subject
        when '语文' then ss.score
    end) 语文,
    max(case ss.subject
        when ‘数学’ then ss.score
    end) 数学,
    max(case ss.subject
        when '英语' then ss.score
    end) 英语
from student_score ss group by ss.name  
2.3.join
select ss01.name,ss01.score 语文,ss02.score 数学,ss03.score 英语
  from(select ss.name,ss.score
        from student_score as
        where ss.subject='语文') ss01
  join(select ss.name,ss.score
        from student_score as
        where ss.subject='数学') ss02
  join(select ss.name,ss.score
        from student_score as
        where ss.subject='英语') ss03
  on ss01.name = ss03.name;

三、分页

必须内部放入一个字段,否则rn是可活动的

select * from  (select emp.*,rownum rn from emp) where rn>2 and rn <5

原文地址:https://www.cnblogs.com/littlepage/p/11784879.html

时间: 2024-10-23 00:25:52

Oracle 学习(三)多表联查的相关文章

Oracle学习(三):单行函数

1.知识点:可以对照下面的录屏进行阅读 SQL> --字符函数 SQL> --字符串的转换 SQL> select lower('hellO WORld') 转小写,upper('hellO WORld') 转大写,initcap('hello world') 首字母大写 2 from dual; SQL> --substr(a,b) 从a中,第b位开始取,取右边所有的字符 SQL> select substr('Hello World',4) from dual; SQL&

Oracle学习——dmp文件(表)导入与导出

前言 关于dmp文件我们用的还是比较多的,dmp文件它是作为oracle导入和导出表使用的文件格式,今天就将dmp文件导出和导入进行学习. dmp文件导出 dmp文件导出用的比较多的一般是三种,他们分别是:导出整个数据库实例下的所有数据.导出指定用户的所有表.导出指定表. 这里已我的数据库为例,进行介绍,我的Oracle数据库实例为"ORACLE",查看自己数据库实例可以从"任务管理器-->服务"中进行查看,如下图 打开命令行: 1,将数据库ORACLE完全导

Oracle学习笔记八 表空间

表空间 表空间是一个或多个数据文件的集合,所有的数据对象都存放在指定的表空间中,但主要存放的是表, 所以称作表空间 . 分区表 当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下降,这时就应该考虑对表进行分区.表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据在物理上存放到多个表空间(物理文件上),这样查询数据时,不至于每次都扫描整张表. 注意:已经存在的表没有方法可以直接转化为分区表 Oracle允许用户将一个表分成多个分区,用户可以执行查询,只访问表中的特定分区,也

oracle学习 三(持续更新中)

关于ora 01219问题的解决 之前学习oracle的时候练习去建立表空间,建了很多之后手动删除了,之后再使用自己创建的用户名登陆数据库就会造成数据库 ORA-01031: ORACLE initialization or shutdown in progress 这个错误,查了多方的资料之后,发现你可能需要使用DOS去真正的删掉那几个表空间,这样才能继续使用你的用户名和密码登陆 方法如下: 1. 运行输入:sqlplus /nolog 2. 以sysdba的角色登录:connect sys/

oracle学习 六 删除表空间,数据文件的语句以及导入导出dmp文件的方法(持续更新中)

要想删除表空间就要先删除数据文件 例如这个例子 CREATE TABLESPACE STHSGIMGDB_SPACE11 DATAFILE 'D:\ORACLEDATABASE\JinHuaDataBase\STHSGIMGDB_SPACE11_01' SIZE 1M AUTOEXTEND ON NEXT 50M MAXSIZE UNLIMITED, 'D:\ORACLEDATABASE\JinHuaDataBase\STHSGIMGDB_SPACE11_02' SIZE 1M AUTOEXTE

Oracle 学习----:创建表(主键自增)

一.创建表 create table testTable ( Id numbere, name varchar2(100), age number, createTime date, primary key(Id) ) 二.创建序列 create sequence seq_test 三.创建触发器 create or replace trigger autoId before insert on testTable for each Row when (NEW.ID is null) begin

oracle 学习笔记 复制表结构

1.复制表结构以及数据 create table d_table_name as select * from s_table_name;  ---注意并不会创建索引 2.只复制表结构 create table d_table_name as select * from s_table_name where 1=2; 3.只复制数据 (1).两个表结构一样 insert into d_table_name select * from s_table_name; (2).两个表的结构不一样,只复制部

oracle学习之多表查询,子查询以及事务处理

多表查询的基础是采用笛卡尔集: 最终的行数 = 表1的行数 * 表2的行数 最终的列数 = 表1的列数 + 表2的列数 过滤笛卡尔集的关键是写连接条件,N张表至少需要N-1个条件. 多表查询例子1,等值与不等值连接,查询员工信息,员工号,姓名,月薪 和部门名称 注意,有歧义的字段必须指定是哪个表,否则将会报错. 当等值连接不成立的时候,想要保留一边的数据,这时需要使用外连接技术! 左外连接的写法,即想保留等号左边的数据,那么在等号右侧添加(+) 自连接,比如查询员工信息,显示为:xxx's bo

Oracle将两张表的数据插入第三张表且第三张表中不存在

1.由于是先查再插所以不能使用insert into table1() values(), 要使用insert into table1() select * table2,不能使用values. 2.因为是多张表故查询和插入的时候需要指定是哪张表,否则会报错:指定列模糊. 3.三张表联查时可多次使用inner join等连接语法. 总结:在逻辑上SQL与Code实现基本一致,但是SQL的速度非常快,在具体实现上SQL需要非常强的逻辑性但是会省去很多写code的功夫. insert into SP