1.使用逻辑运算符时,优先等级从高到低依次是:not,and,or。
2.union:可以把第一个查询语句中的所有数据行与第二个查询语句的所有数据行相加,消除重复行,最终返回结果。union all不消除重复行。
select empno,ename from emp
where ename like 'A%' or ename like 'B%'
union
select empno,ename from emp
where ename like 'B%' or ename like 'C%'
3.intersect:集合交运算,返回两个查询结果同时存在的数据。
4.minus:集合差运算,返回第一个查询中存在而第二个查询中不存在的数据。
5.外连接:将表中的列全部检索出来,而不论该列数据在另一个表中是否有匹配的数据,如果有相应的匹配数据,那么表示执行的查询按照内 连接查询的形式执行。如果没有相对应的匹配数据,则相应表中对应的内容是空值。
下面是左外连接(+号在左边,如果在右边则是右外连接)
select ename,d.deptno,dname
from emp e,dept d
where e.deptno(+)=d.deptno
order by ename
6.内连接:把两个表连接成一个临时表,在这个表中,仅包含那些满足连接条件的记录行。内连接有两种方式:等价连接非等价连接。
7.自连接:把某一个表中的行同该表中另一些行连接起来。自连接主要用于比较相同的信息,但是所比较的列必须有相同的或者兼容的类型。
select worker.ename||'的经理是::'||manager.ename
from emp worker,emp manager
where worker.mgr=manager.empno
8.group by:在select子句中只能有两种类型表达式,一种是合计函数,一种是出现在group by子句后面的列名,没有出现在group by子句后面 的列名不可以出现在select 子句的非合计函数表达式中。如果在select语句中没有出现group by子句,则不能在select子句中同时出现单个 列名和合计函数的混合现象。如果要限制分组中的数据,则可以使用having子句而不能使用where子句。
9.使用子查询要遵循的原则:(单行,多行,多列子查询)
(1)子查询必须使用括号括起来,否则无法判断子查询语句的开始和结束。
(2)子查询只能出现在where子句中比较运算符的右端。
(3)不能在子查询语句中包含order by子句,而外查询语句可以有一个order by子句。
(4)子查询允许嵌套多层。
(5)在子查询中可以使用两种比较运算符,即单行运算符和多行运算符。
10.单行子查询比较运算符:=,>,>=,<,<=,<>。如果在单行子查询中返回了多行数据,那么这个子查询就是错误的。
11.多行子查询比较运算符:
in:等于列表中的任何一个值
any:与子查询返回的每一个值进行比较,<any:表示小于最大值,=any:与in运算符等价,>any:表示大于最小值。
all:与子查询返回的所有值进行比较,<all:小于最小值,>all:大于最大值。
12:如果子查询返回了多个列的数据,那么称该子查询为多列子查询。
select ename,job,hiredate,sal,deptno
from emp
where(sal,nvl(comm,-1)) in (select sal,nvl(comm,-1) from emp where deptno=20);
update emp set(job,deptno)=(select job,deptno from emp where empno=7499);
select a.ename,a.deptno,a.sal,b.avgsalary from emp a,
(select deptno,avg(sal) as avgsalary from emp group by deptno) b
where a.deptno=b.deptno and a.sal>b.avgsalary;
2.union:可以把第一个查询语句中的所有数据行与第二个查询语句的所有数据行相加,消除重复行,最终返回结果。union all不消除重复行。
select empno,ename from emp
where ename like 'A%' or ename like 'B%'
union
select empno,ename from emp
where ename like 'B%' or ename like 'C%'
3.intersect:集合交运算,返回两个查询结果同时存在的数据。
4.minus:集合差运算,返回第一个查询中存在而第二个查询中不存在的数据。
5.外连接:将表中的列全部检索出来,而不论该列数据在另一个表中是否有匹配的数据,如果有相应的匹配数据,那么表示执行的查询按照内 连接查询的形式执行。如果没有相对应的匹配数据,则相应表中对应的内容是空值。
下面是左外连接(+号在左边,如果在右边则是右外连接)
select ename,d.deptno,dname
from emp e,dept d
where e.deptno(+)=d.deptno
order by ename
6.内连接:把两个表连接成一个临时表,在这个表中,仅包含那些满足连接条件的记录行。内连接有两种方式:等价连接非等价连接。
7.自连接:把某一个表中的行同该表中另一些行连接起来。自连接主要用于比较相同的信息,但是所比较的列必须有相同的或者兼容的类型。
select worker.ename||'的经理是::'||manager.ename
from emp worker,emp manager
where worker.mgr=manager.empno
8.group by:在select子句中只能有两种类型表达式,一种是合计函数,一种是出现在group by子句后面的列名,没有出现在group by子句后面 的列名不可以出现在select 子句的非合计函数表达式中。如果在select语句中没有出现group by子句,则不能在select子句中同时出现单个 列名和合计函数的混合现象。如果要限制分组中的数据,则可以使用having子句而不能使用where子句。
9.使用子查询要遵循的原则:(单行,多行,多列子查询)
(1)子查询必须使用括号括起来,否则无法判断子查询语句的开始和结束。
(2)子查询只能出现在where子句中比较运算符的右端。
(3)不能在子查询语句中包含order by子句,而外查询语句可以有一个order by子句。
(4)子查询允许嵌套多层。
(5)在子查询中可以使用两种比较运算符,即单行运算符和多行运算符。
10.单行子查询比较运算符:=,>,>=,<,<=,<>。如果在单行子查询中返回了多行数据,那么这个子查询就是错误的。
11.多行子查询比较运算符:
in:等于列表中的任何一个值
any:与子查询返回的每一个值进行比较,<any:表示小于最大值,=any:与in运算符等价,>any:表示大于最小值。
all:与子查询返回的所有值进行比较,<all:小于最小值,>all:大于最大值。
12:如果子查询返回了多个列的数据,那么称该子查询为多列子查询。
select ename,job,hiredate,sal,deptno
from emp
where(sal,nvl(comm,-1)) in (select sal,nvl(comm,-1) from emp where deptno=20);
update emp set(job,deptno)=(select job,deptno from emp where empno=7499);
select a.ename,a.deptno,a.sal,b.avgsalary from emp a,
(select deptno,avg(sal) as avgsalary from emp group by deptno) b
where a.deptno=b.deptno and a.sal>b.avgsalary;