ORACLE SQL 查询

ORACLE SQL 查询

开发工具与关键技术:Oracle PLSQL Developer
作者:邓高发
撰写时间:2019年05月5日
首先一张表名为EMP的表,下图是表中所有数据
ORACLE SQL 查询
使用WHERE字句可筛选出想要的数据 :SELECT 列名 FROM 表名 WHERE 运算符 值
常用的单行比较运算符如下:

运算符 描述
= 等于
<>或!= 不等于

大于
< 小于
= 大于等于
<= 小于等于
BETWEEN…AND… 在某个范围内
IN 等于值列表中的一个
LIKE 用于模糊查询, %代表任意个字符,_代表一个字符
IS NULL 为空
还有逻辑运算符
操作符 含义
AND 连接多个条件,并且同时成立
OR 连接多个条件,只要其中一个成立
NOT 对于给出条件的否定

举个简单的例子:查询出DEPTNO为10的所有数据
ORACLE SQL 查询
也可以用 IN 来代替图中的=
使用 BETWEEN … AND … 可查询出数值在某一范围的数据
比如,查询SAL在1000到3000之间的数据,如下图就是 BETWEEN … AND …的用法
也可以用大于等于 >=AND小于等于 <= 来写这个例子,查询出来的效果是一样的
ORACLE SQL 查询
使用 LIKE 运算选择类似的值和字符或数字,
例如查询ENAME包含SC的数据
ORACLE SQL 查询
使用IN 运算符查询出列表中包含的值,
例如,查询DEPT为10或20的数据
也可以使用逻辑或的OR操作符来连接两个条件,查询出来的效果一样如下图
ORACLE SQL 查询
使用AND的操作符可查询同时符合多个条件的数据
例如,查询DEPTNO为10且JOB为CLERK的数据,语句如下,
SELECT * FROM EMP WHERE DEPTNO = 10 AND JOB =‘CLERK’,查询出以下数据
ORACLE SQL 查询
使用 IS NULL 查询出某一字段为空的数据
例如,查询COMM为空的数据
SELECT * FROM EMP WHERE COMM IS NULL
ORACLE SQL 查询
接下来引入一张新表,表名为DEPT,数据如下
ORACLE SQL 查询
多表查询,多表查询可以从多个表中获取数据,多表连接的情况下,后面需要加WHERE的有效条件,
否则会产生笛卡尔集,如果WHERE条件无效也会产生笛卡尔集,笛卡尔集就是会把两个表中的数据条数进交叉相乘,数据量庞大。 多表连接的情况下,可以在表名后面进行重命名,以便书写
连接N个表需要N-1个条件
使用等值连接,可查询出在EMP表中DEPTNO在DEPT表中所对应的数据,语法如下
SELECT E.EMPNO ,E.DEPTNO,D.DEPTNO,D.DNAME,D.LOC
FROM EMP E,DEPT D
WHERE E.DEPTNO = D.DEPTNO
查询出以下结果
ORACLE SQL 查询
同时使用SOL1999语法也可以实现上图的效果,语法如下:
SELECT E.EMPNO ,E.DEPTNO,D.DEPTNO,D.DNAME,D.LOC FROM EMP E JOIN DEPT D
ON E.DEPTNO = D.DEPTNO
SOL1999的关键词为 表一 JOIN 表二 ON 连接条件
使用USING字句也可进行多表连接,语句如下
SELECT E.EMPNO ,E.DEPTNO,D.DEPTNO,D.DNAME,D.LOC FROM EMP E JOIN DEPT D
USING(DEPTNO)
查询结果一样,但USING()中包含两个表同时含有的列名,并且在查询中不能出现USING()中的列名,
否则就会报错
使用外连接可查询出不满足条件的数据,外连接: 两个表在连接过程中除了返回满足连接的行以外还返回左(或右)表中不满足条件的行 ,这种连接称为左(或右)外连接。
外连接的符号为(+),当(+)在左边时查询出右表不满足,
条件的数据,为右外连接,右边则相反
使用右外连接查询DEPT表中没有对应的DEPTNO,语法如下
SELECT E.EMPNO ,E.DEPTNO,D.DEPTNO,D.DNAME,D.LOC
FROM EMP E,DEPT D
WHERE E.DEPTNO(+) = D.DEPTNO 查询出结果如下

使用SQL1999语法:
SELECT E.EMPNO ,E.DEPTNO,D.DEPTNO,D.DNAME,D.LOC
FROM EMP E RIGHT JOIN DEPT D
ON E.DEPTNO = D.DEPTNO
SQL1999语法的外连接关键词为LEFT JOIN(左外连接)、RIGHT JOIN(右外连接)