oracle中的多表查询和子查询以及一些注意事项

多表查询就是使用两张表及其以上的查询。首先需要知道几个名词,笛卡尔积,内连接,外连接,子查询。

1)笛卡尔积

  所谓笛卡尔积其实就是两张表数据的条数相乘得到的最后结果,例如表1有10条数据,表2有4条数据,那么经过笛卡尔积之后最后的结果为40条数据,使用笛卡尔积缺点比较多,会产生很多没有用的数据。

2)内连接

  内连接分为隐式和显示两种,显示就是使用inner join关键字,而隐式就是使用where关键字,根据关联字段建立的条件,例如where t1.id=t2.id 这就是隐式。

3)外连接

  外连接也分两种,左外连接,右外连接。

  左外连接:使用left join 关键字,它返回的是左表的所有记录,如果右表中没有满足条件的记录,则返回空值。

  右外连接:使用right join 关键字,意思和左外连接相反。  

  在oracle中有一个特殊的符号(+),用它也可以达到左右外连接的效果,用法例如:e2.empno(+) =e3.empno,表示如果e3表在e2表中没有满足关系的记录,就返回空值。

4)子查询

  子查询就是嵌套查询,例如 select .. from (selec....) where(select....),写法不一样,但就是这样的。

5)exists 关键字

  exists(查询语句):数据量大时非常高效,当查询语句有结果的时候返回true否则返回false
例如查询有员工的部门信息

select *
from dept d
where exists
(select * from emp e where e.deptno=d.deptno);

6)集合运算

  集合运算:(将查询结果合并,应用场景:应用在来自不同数据的表时)
  交集:intersect
  并集:union(去除重复的,并且排序)/union all(不去除重复的)
  差集:minus关键字

  集合运算的注意事项:
    1.列的类型要一致
    2.按照顺序书写
    3.列的数量要一致,如果不足用null空值补全。

原文地址:https://www.cnblogs.com/jasonboren/p/10914209.html

时间: 2024-10-28 04:43:50

oracle中的多表查询和子查询以及一些注意事项的相关文章

第五章 复杂查询 5-2 子查询

一.子查询和视图 1.子查询:子查询就是一张一次性视图.子查询将用来定义视图的SELECT语句直接用于FROM子句中. 注:子查询的名称是一次性的,因此不会像视图那样保存在存储介质(硬盘)中,在SELECT语句执行之后就消失了. 2.SELECT语句的执行顺序. 子查询作为内层查询会首先执行. 3.增加子查询的层数 原则上子查询的层数没有限制,但是随着子查询嵌套层数的增加,SQL语句会变得越来越难读懂,性能也会越来越差.因此,应尽量避免使用多层嵌套的子查询. 二.子查询的名称 原则上,子查询必须

ORACLE 多表连接与子查询

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

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

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

Mysql数据库理论基础之五--SELECT单多表查询、子查询、别名

一.简介 由MySQL AB公司开发,是最流行的开放源码SQL数据库管理系统,主要特点: 1.是一种数据库管理系统 2.是一种关联数据库管理系统 3.是一种开放源码软件,且有大量可用的共享MySQL软件 4.MySQL数据库服务器具有快速.可靠和易于使用的特点 5.MySQL服务器工作在客户端/服务器模式下,或嵌入式系统中 InnoDB存储引擎将InnoDB表保存在一个表空间内,该表空间可由数个文件创建.这样,表的大小就能超过单独文件的最大容量.表空间可包括原始磁盘分区,从而使得很大的表成为可能

单表查询、多表查询和子查询

查询语句: select SELECT-LIST from  TB where QYAKUDUCATION; 简单查询: select * from TB_NAME; select FIED1,FIED2 from TB_NAME; 投影 select [distinct] * from TB_NAME where QYAKUDUCATION;选择  #distinct重复的值只显示一次 from子句:要查询的关系   表,多个表,其他的select语句 where子句:指定布尔关系表达式, =

MySQL 外连接、内连接,连接查询、多表查询、子查询、视图

MySQL连接查询.多表查询.子查询: 连接查询:事先将两张或多张表join,根据join的结果进行查询: [导入hellodb.sql数据库],输入密码即可 [[email protected] home]# mysql -uroot -p  mydb < /home/hellodb.sql     hellodb.sql数据库下载链接:http://pan.baidu.com/s/1pJKK4w7 密码:a0re [查看students表] mysql> select * from stu

MySQL多表查询和子查询

多表查询:    交叉链接:笛卡尔乘积    自然连接:两个表建立等值关系    外连接:两个表没有等值关系        左外连接:以左边的表为准,不管右边的表有没有值            ...IEFT JOIN... ON ...        右外链接:以右边的表为准,不管左边的表有没有值            ...RIGHT JOIN... ON ...    自连接:自己连接自己    子查询:所有的数据都来自于一张表    比较操作中使用子查询:子查询只能返回单个值:    I

oracle中的dual表详解

oracle中的dual表详解 1.DUAL表的用途 Dual 是 Oracle中的一个实际存在的表,任何用户均可读取,常用在没有目标表的Select语句块中 --查看当前连接用户 SQL> select user from dual; USER ------------------------------ SYSTEM --查看当前日期.时间 SQL> select sysdate from dual; SYSDATE ----------- 2007-1-24 1 SQL> sele

mysql查询语句 和 多表关联查询 以及 子查询

原文地址: http://blog.csdn.net/github_37767025/article/details/67636061 1.查询一张表: select * from 表名: 2.查询指定字段:select 字段1,字段2,字段3-.from 表名: 3.where条件查询:select 字段1,字段2,字段3 frome 表名 where 条件表达式: 例:select * from t_studect where id=1; select * from t_student wh

sql查询语句学习,多表查询和子查询以及连接查询

一.交叉连接查询 这种查询方式基本不会使用,原因就是这种查询方式得到的是两个表的乘积(笛卡儿集) 语法就是select * from a,b: 二.内连接查询,可以有效的去除笛卡尔集现象 内连接查询分为两类: 隐式内连接 select * from A,B where 条件 隐式连接使用别名:select * from A 别名1,B 别名2 where 别名1.xx=别名2.xx: 显示内连接 select * from A inner join B on 条件 (inner可以省略) 显示连