1.集合运算:
UNION运算符返回两个集合去掉重复元素后的所有记录。
例:查询属于部门10与部门20的所有员工信息。
select * from emp where deptno=10
union select * from emp where deptno=20;
UNIONALL 返回两个集合的所有记录,包括重复的。
例:查询工资在500~1500或在1000~2000范围的员工信息(这是两个工资级别)。
select * from emp where sal between 500 and 1500 union all select * from emp where sal
between 1000 and 1500
INTERSECT运算符返回同时属于两个集合的记录。
例:查询工资在500~1500又在1000~2000范围的员工信息(这是两个工资级别)。
select * from emp where sal between 500 and 1500
intersect select * from emp where sal
between 1000 and 1500
MINUS返回属于第一个集合,但不属于第二个集合的记录。
例:查询属于500~1500但不属于1000~2000范围的员工信息。
select * from emp where sal between 500 and 1500
minus select * from emp where sal
between 1000 and 1500
2.多表查询
等值连接:只有两张表中的数据没有null值的时候才显示 如果左表或者右表中查出的数据有Null值 不予显示
例:查询员工信息,要求显示员工的编号,姓名,月薪和部门名称
select e.empno,e.ename,e.sal,d.dname
from emp e,dept d
where e.deptno=d.deptno;
不等值连接:
例:查询员工的工资级别:编号 姓名 月薪和级别
select e.empno,e.ename,e.sal,s.grade
from emp e,salgrade s
外连接:
左外连接:where e.deptno=d.deptno 当连接条件不成立时,等号左边所代表的表的信息仍然显示
右外连接:where e.deptno=d.deptno 当连接条件不成立时,等号右边所代表的表的信息仍然显示
左外连接的写法: where e.deptno=d.deptno(+)
右外连接的写法: where e.deptno(+)=d.deptno
实现上面的效果:
select d.deptno,d.dname,count(e.empno)
from emp e,dept d
where e.deptno(+)=d.deptno
group by d.deptno,d.dname
order by 1;
自连接:利用表的别名,将同一张表视为多张表
例:查询员工信息:xxx的老板是yyy
select e.ename||‘的老板是‘||b.ename
from emp e, emp b
where e.mgr=b.empno;
使用SQL99标准的连接查询(JOIN..ON..)
内连接
只返回满足连接条件的数据(两边都有的才显示)。
select e.*, d.*
from emp e
inner join dept d
on e.deptno=d.deptno
-- 也可以省略inner关键字。
左外连接
左边有值才显示。
select e.*, d.*
from emp e
left outer join dept d
on e.deptno=d.deptno
-- 也可以省略outer关键字
右外连接
右边边有值才显示。
select e.*, d.*
from emp e
right outer join dept d
on e.deptno=d.deptno
-- 也可以省略outer关键字
满外联接
任一边有值就会显示。
select e.*, d.*
from emp e
full outer join dept d
on e.deptno=d.deptno
-- 也可以省略outer关键字
交叉连接:
叉集,就是笛卡尔积
select e.*, d.*
from emp e
cross join dept d
-- 没有连接条件
3.DML,Data Manipulation Language,数据操作语言
插入数据(Insert into):
插入全部列
插入部分列
插入空值
使用 & 变量(创建脚本)
例:
SQL> insert into emp (empno, ename, sal) values (&empno, &ename, &sal)
SQL> insert into emp (empno, ename, sal) values (&empno, ‘&ename‘, &sal)
SQL> update emp set ename=‘&new_name‘ where empno=&empno
SQL> select empno,ename,&col from emp;
可以在命令行sqlplus或是iSQL*Plus中演示。
从其它表中拷贝数据
insert into mytable
select mycolums from ...
更新数据(Update)
删除数据(Delete)
删除所有的记录:
Delete 效率高
Truncate 效率低
4.事务:
事务是由完成若干项工作的DML语句组成的
保存点
设置事务隔离级别:
QL99标准是有4个隔离级别,但Oracle只支持2个:
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
set feedback on 设置开启每次执行完语句之后打印结果信息
set feedback off 不打印结果信息
set timing on oracle的记录时间开启
set timing off 记录时间关闭
版权声明:本文为博主原创文章,未经博主允许不得转载。