内、外连接

1.内连接:利用内连接可获取两表的公共部分的记录
例:select u1.username,u2.username from ut_info1 u1 inner join ut_info2 u2 on u1.id=u2.id
2.左外连接:select u1.username,u2.username from ut_info1 u1 left outer join ut_info2 u2 on u1.id=u2.id
    select u1.username,u2.username from ut_info1 u1, ut_info2 u2 where u1.id=u2.id(+)
3.右外连接:select u1.username,u2.username from ut_info1 u1 right outer join ut_info2 u2 on u1.id=u2.id
    select u1.username,u2.username from ut_info1 u1, ut_info2 u2 where u1.id(+)=u2.id
4.全连接:select u1.username,u2.username from ut_info1 u1 full outer join ut_info2 u2 on u1.id=u2.id
5.子查询
  子查询在SELECT、UPDATE、DELETE语句内部可以出现SELECT语句。内部的SELECT语
  句结果可以作为外部语句中条件子句的一部分,也可以作为外部查询的临时表。子查询的类
  型有: 
a.单行子查询:不向外部返回结果,或者只返回一行结果。 
b.多行子查询:向外部返回零行、一行或者多行结果。 
例1(单行子查询):查询出销售部(SALES)下面的员工姓名,工作,工资;
分析:所需的结果信息都在Emp表中,可以先从Dept表中
查询出销售部对应的部门号,然后根据当前部门号再到Emp表中查询出符合该部门的员工
记录即可;SQL> SELECT ENAME,JOB,SAL FROM EMP  
 WHERE DEPTNO=(SELECT DEPTNO FROM DEPT WHERE DNAME='SALES') 
例2:查询出Emp表中比任意一个销售员(“SALESMAN”)工资低的员工姓名、工作、工资
分析:销售员在Emp表中有很多条记录,每个人工资不相等,如果返回“比任意员工的工资
还低”的条件,返回比“最高工资还低”即可。如果用子查询做,子查询中就会返回多条记
录。用普通的关系符(>、<等)运行就会出错。这时候需要用关键字ANY。ANY放在比较运
算符后面,表示“任意”的意思。
SQL> SELECT ENAME,JOB,SAL FROM EMP 
   WHERE SAL<ANY (SELECT SAL FROM EMP WHERE JOB='SALESMAN')
解析:<any:比子查询结果中任意的值都小,也就是说,比子查询结果中最大值还小,那么
同理>any表示比子查询结果中最小的还大
例3:查询出比所有销售员的工资都高的员工姓名,工作,工资。 
分析 :ANY可以表示任意的,但本案例中要求比所有销售员工资都高,那么就要使用另外一个
关键字ALL。ALL与关系操作符一起使用,表示与子查询中所有元素比较。  
SQL> SELECT ENAME,JOB,SAL FROM EMP 
   WHERE SAL>ALL (SELECT SAL FROM EMP WHERE JOB='SALESMAN')
解析:>ALL:比子查询结果中所有值还要大,也就是说,比子查询结果中最大值还要大。
<ALL表示比最小值还要小。 
6.视图 
a.概述:视图将一个查询的结果作为一个表来使用,因此视图可以被看做是存储的查询或一个虚拟表。
    视图来源于表,所有对视图数据的修改最终都会被反映到视图的基表中,这些修改必须服从
    基表的完整性约束,并同样会触发定义在基表上的触发器。
b.存储:视图不会要求分配存储空间,视图中也不会包含实际的数据。视图只是定义了一个查询,视
    图中的数据是从基表中获取,这些数据在视图被引用时动态的生成。由于视图基于数据库中
    的其他对象,因此一个视图只需要占用数据字典中保存其定义的空间,而无需额外的存储空间。
c.作用:用户以不同的形式来显示基表中的数据,其强大之处在于它能够根据不同用户的需求来对基表
    中数据进行整理。
常见作用:通过视图可以设定允许用户访问的列和数据行,从而为表提供了额外的安全控制 ;
    隐藏数据复杂性 ;
    视图中可以使用连接(join),用多个表中相关的列构成一个新的数据集。此视图就对用户隐藏
    了数据来源于多个表的事实。

7.a.truncate在各表上无论大的还是小的都非常快。如果有rollback命令delete将被撤销,而truncate则不会被撤销。
  b.TRUNCATE是一个DDL语言,向其他所有的DDL语言一样,他将被隐式提交,不能对TRUNCATE使用ROLLBACK命令。
  c.truncate将重新设置高水平线和所有索引。在对整个表或索引进行完全浏览时,经过truncate操作后的表比
   delete操作后的表要快得多。
  d.TRUNCATE不能触发任何DELETE触发器。
  e.不能授予任何人清空他人的表的权限
  f.当表被清空后表和表的索引讲重新设置成初始大小,而delete则不能
  g.不能清空父表。

 

posted @ 2013-08-30 12:50  High阔天空  阅读(334)  评论(0)    收藏  举报