Oracle | SQL操作符高级查询

2019-03-01  本文已影响0人  Ada54

1. DISTINCT 消除重复行

2. NULL 操作

3. IN 操作

4. BETWEEN…AND…操作

5. LIKE 模糊查询

6. 集合运算 INTERSECT(交集) / UNION ALL(并集) / UNION(并集) / MINUS(补集)

7. 连接查询

(1)内联接 ( inner join )

(2)外联接 ( outer join )


1. DISTINCT 消除重复行

SELECT DISTINCT DEPTNO FROM EMP;

2. NULL操作

记录中有缺少的数据值,就是空值(NULL值)

空值不等于0或者空格,空值是指未赋值、未知或不可用的值

SELECT ENAME,JOB,SAL,COMM FROM EMP WHERE SAL<2000 AND COMM IS NULL;

NULL 值用 IS NULL ,非 NULL 值用 IS NOT NULL

3. IN 操作

查询出工作职责是SALESMAN、PRESIDENT或者ANALYST的员工

SELECT ENAME,JOB,SAL FROM EMP WHERE job IN ('SALESMAN', 'PRESIDENT', 'ANALYST');

对应 IN 操作有 NOT IN,用法一样,结果相同

4. BETWEEN…AND…操作

SELECT ename,job,sal FROM EMP WHERE sal BETWEEN 1000 AND 2000;

所指的范围包括边界


5. LIKE模糊查询

显示员工名称以J开头以S结尾的员工的姓名、工资和工资

SELECT ENAME,JOB,SAL FROM EMP WHERE ENAME LIKE 'J%S';

%:表示零个或者多个任意字符。

 _:代表一个任意字符


6. 集合运算 INTERSECT(交集) / UNION ALL(并集) / UNION(并集) / MINUS(补集)

集合运算就是将两个或者多个结果集组合成为一个结果集

INTERSECT(交集):返回两个查询共有的记录

UNION ALL(并集):返回各个查询的所有记录,包括重复记录

UNION(并集):返回各个查询的所有记录,不包括重复记录

MINUS(补集):返回第一个查询检索出的记录减去第二个查询检索出的记录之后剩余的记录

注:查询所返回的列数以及列的类型必须匹配,列名可以不同

(1)MINUS (补集)

查询出dept表中哪个部门下没有员工

只需求出dept表中的部门号和emp表中的部门号的补集

SELECT DEPTNO FROM DEPT 

MINUS

SELECT DEPTNO FROM EMP;

(2)UNION (并集)

把若干条记录一次性插入到一张表

INSERT INTO DEPT

SELECT 50,'公关部','台湾' FROM DUAL

UNION SELECT 60,'研发部','西安' FROM DUAL

UNION SELECT 70,'培训部','西安' FROM DUAL

注:DUAL表作为一个虚表存在,因为oracle的查询操作语句必须满足格式,所以某些非查询操作可以通过dual表来实现

      Dual表是每个数据库创建时默认生成的,该表仅有一列一行

7. 连接查询

内联接(inner join)

外联接(outer join):左外联接 left outer join ,右外联接 right outer join,全外联接 full outer join 

Oracle中左外联接和右外联接可用(+)表示;全外联接不可用(+)表示

(1)内联接 (inner join / join)

请查询出工资大于2000元的,员工姓名,部门,工作,工资

部门名称在dept中,其他的信息在emp表中,需要内联接

SELECT e.ENAME,e.JOB,e.SAL,d.DNAME

FROM EMP e  INNER JOIN DEPT d  ON  e.DEPTNO=d.DEPTNO 

WHERE e.SAL>2000

注:INNER JOIN 可省略 INNER

或者写成

SELECT e.ENAME,e.JOB,e.SAL,d.DNAME

FROM emp e,dept d

WHERE e.deptno = d.deptno AND e.SAL>2000;

(2)外联接(outer join) - 右外联接 (right outer join / right  join )

右表的记录全部表示出来,而左表只会显示符合搜索条件的记录

左表记录不足的地方均为NULL

请查询出每个部门下的员工姓名,工资

SELECT e.ENAME,e.JOB,e.SAL,d.DNAME

FROM EMP e RIGHT OUTER JOIN DEPT d ON e.DEPTNO=d.DEPTNO

或者写成

SELECT e.ENAME,e.JOB,e.SAL,d.DNAME

FROM EMP e ,DEPT d

WHERE e.DEPTNO (+)= d.DEPTNO

注 :  (+) 是Oracle专用的联接符,+ 表示补充,即哪个表有加号,这个表就是匹配表。如果加号写在左表,右表就是全部显示,所以是右联接。

(3)外联接(outer join) - 左外联接 (right outer join / right  join )

左表的记录全部表示出来,而右表只会显示符合搜索条件的记录

右表记录不足的地方均为NULL

(4)全外联接 (full outer join/ full  join)

左表和右表都不做限制,所有的记录都显示,两表不足的地方均为NULL

上一篇下一篇

猜你喜欢

热点阅读