多表查询
笛卡尔积:两个集合相乘的结果
内连接 :
特点:内链接必须两张表同时满足匹配数据才会提取数据
显示内连接: select * from A inner join B on A.lie = B.列
隐士内连接: select * from A B where A.lie=B.列
外连接:
左外连接: left join 特点以左表为基准,右表为补充显示
右外连接:right join 特点 以右表为基准,左表为数据作为补充显示
oracle特有外连接 使用符号(+) 放置位置: 防在补充显示的表,跟等号左右无关
select * from A ,B where A.列 = B.列(+)
自连接: 自己跟自己做连接 select * from A A1 , A A2, where A1.列=A2.列
五表查询:
查询员工信息和员工的领导信息
查询部门信息 加入dept表 逗号隔开
查询员工的工资 e.sal between s.losal and s.hisql
查询领导的工资 e.sal between s2.losal and s2.hisql
子查询:
在查询语句中嵌套查询语句 可以多个
单行子查询: select * from A where A.列 = sql 语句 返回的唯一的值
多行子查询: select * from A where A 列 in (sql 语句返回单列多个值)
select * from A ,(sql语句临时) t where A 列 = t.列
exists : 存在的意思用来判断记录结果集是否存在 存在返回true 不存在返回false
查询有员工的部门信息
使用了主表的列做子查询 执行顺序跟普通子查询不一致,先提取主表记录作为条件使用
oracle rownum ; 虚拟列 是oracle 数据记录产生时 产生的一系列的序号(1,2,3) 为了实现分页显示 相当于 mysql limit .
简单实例: select rownum ,emp .* from emp;
集合
交集 取两个集合共同的补分 intersect A(1,2,3) B(2,3,4) A与B做交集(2,3)
并集 取两个集合取全部 去重 union A(1,2.3) B(2,3,4) A与B做并集(1,2,3,4)
差集 从一个集合去掉另外一个集合的补分 minus A(1,2,3) B(2,3,4) A与B做差集 (1)