连表查询
外连接:
select dname, nu
from dept d, (select count(1) nu, deptno from emp
group by deptno)
e
where
d.deptno(+)=e.deptno;
看+和, 主表在,的左边就叫左外连接主表在,的右边叫右连接。
99连接
交叉连接 cross join --->笛卡尔积
自然连接(主外键、同名列) natural
join -->等值连接
join using连接(同名列) -->等值连接
[inner]join on连接 -->等值连接非等值自连接 (解决一切) 关系列必须区分
left|right [outer] join on|using -->外连接
full join
on|using -->全连接满足直接匹配,不满足相互补充null ,确保所有表的记录都至少出现一次。
1、交叉连接
Select * from
emp cross join dept;
2、自然连接
Select * from
emp natual join dept;
Select deptno,e.ename,d.dname
from emp e natural join dept d;
在指定列过程中同名列归共同所有(*除外)。
3、using 连接
Select
deptno,e.ename,d.dname from emp e join dept d using (deptno);
4、on连接
-- natrual 等值
select ename,
dname
from emp
natural join
dept
where deptno =
30;
--using
select ename,
dname from emp join dept using (deptno) where deptno =
30;
--on
select ename,
dname
from emp
join dept
on emp.deptno =
dept.deptno
where emp.deptno = 30;
视图
视图是建立在表、结合集、视图上的虚拟表
1、简化:select 查询语句
2、重用:封装select语句命名
3、隐藏:内部细节
4、区分:相同数据不同查询
不是所有的用户都有创建视图的权限
1、前提: create view -->组 connect resource dba
2、授权: -->sqlplus /nolog
a)、sys登录 conn sys/123456@orcl as sysdba
b)、授权: grant dba to scott;
回收: revoke dba from scott;
c)、重新登录
create or
replace view 视图名 as select语句 [with read only];
要求:所有列必须存在名称。
对视图的删除不会删除原有表的数据
drop view 视图名;
索引
索引是建立在表上的可选对象;索引的关键在于通过一组排序后的索引键来取代默认的全表扫描检
索方式,从而提高检索效率
索引在逻辑上和物理上都与相关的表和数据无关,当创建或者删除一个索引时,不会影响基本的表;
索引一旦建立,在表上进行 DML 操作时(例如在执行插入、修改或者删除相关操作时),oracle 会
自动管理索引,索引删除,不会对表产生影响
索引对用户是透明的,无论表上是否有索引,sql 语句的用法不变
oracle创建主键时会自动在该列上创建索引。
索引: 提高查询速度的一种手段 -->目录
1、唯一性较好字段适合建立索引
2、大数据量才有效果
3、主键|唯一: 唯一索引
create index 索引名 on表名 (字段列表...)
drop index 索引名
create index
idx_emp on emp(sal,ename);
drop index
idx_emp;
select * from
emp order by sal,ename;