3.选出所需要的数据列
SELECT [DISTINCT]*|列[别名],列[别名],列[别名]
1.确定数据来源
FROM 表名称 [别名]
2.筛选数据行
[WHERE 限定条件(s)]
SELECT子句使整个语法左后才会被执行的子句,但是如果要进行数据筛选,必须要是用若干个条件
关系运算:>、=、<、>= 、<= 、!=
范围运算:BETWEEN..AND
空判断:IS NULL、IS NOT NULL;
IN判断:IN、NOT IN、exists()(复杂查询)
模糊查询:LIKE、NOTLIKE
以上的限定符都只能够判断一次,如果出现若干个限定符,那么就需要进行若干个限定符的连接,可以使用逻辑运算AND(与)、OR(或)、NOT(非)
与操作表示的所有的判断条件都满足时返回真(TRUE)
或操作表示若干个判断条件只要有一个满足就返回真(TRUE)
以上给出的判断符号是SQL中的标准支持,其他的数据库可能有自己扩充的内容
2.关系运算符
关系运算符主要进行大小的判断
1.实例:查询工资低于1200的雇员(不包含1200)
SELECT * FROM emp WHERE sal<1200;
2.实例查询出工资是3000的雇员
SELECT * FROM emp WHERE sal=3000;
对于“=”需要注意的是,在Oracle数据库之中,数据是区分大小写的
对与不等于的判断符号有两个
3.查询职位不是办事员的雇员(职位是job字段,办事员的职位名称CLERK)
对于不等于的判断有两个符号!=、<>
SELECT * FROM emp WHERE job<>'CLERK';
3.逻辑运算
逻辑运算可以保证连接多个条件,如果要连接主要是用AND、OR完成
1.实例:要求查询出不是办事员,但是工资低于3000的雇员
SELECT * FROM emp WHERE job<>'CLERK' AND sal<3000;
2.查询出职位不是办事员也不是销售的雇员信息
第一个条件:job<>'CLERK';
第二个条件:job<>'SALESMAN'
SELECT * FROM emp WHERE job<>'CLERK' AND job<>'SALESMAN';
3.查询出职位是办事员,或者工资低于1200的所有雇员
第一个条件:job='CLERK';
第二个条件:sal<1200
两个条件满足一个即可,使用OR连接
SELECT * FROM emp WHERE job='CLERK' OR sel<1200;
4.处理AND和OR还可以使用NOT进行求反即使TRUE变为FALSE、FALSE变为TRUE
SELECT * FROM emp WHERE NOT sal>2000
此时表示的是工资小于等于2000
4.范围运算BETWEEN..AND
主要功能时进行范围的查询,使用语法:
WHERE 字段|数值 BETWEEN 最小值 AND 最大值
实例:查询出工资在1500~3000之间的所有雇员
SELECT * FROM emp WHERE sal BETWEEN 1500 AND 3000
使用BETWEEN..AND 是一个运算符,而是用关系与逻辑的组合属于两个运算符,效率会更高
在Oracle中的所有运算符都不受数据类型的控制,在之前的使用的是数字进行了判断,除了数字之外,还可以用字符串或者日期来进行判断
1.实例:查询出所有在1981年雇佣的雇员信息
可以按照已有的数据结构通过字符串来描述日期
SELECT * FROM emp WHERE hiredate BETWEEN‘01-1月-81' AND ’31-12月-1981'
5.空判断
null从数据库定义上来讲属于一个未知的数据,任何情况下如果任何一个数字与null进行计算,还是结果为null
SELECT null+1 FROM emp;
某些数据列是允许存在null,但是对于null不能使用关系运算进行判断,关系可以判断的是数据,null不是空字符串也不是数字,在SQL语句之中只能IS NULL来判断为空,以及IS NOT NULL(NOT字段IS NULL)判断不为空
1.实例:查询出所有领取佣金的雇员信息(comm字段表示的是佣金,如果领取,comm内容不是null)
SELECT * FROM emp WHERE comm IS NULL;
6.IN操作符(谓词IN)
IN指的是根据一个指定的范围进行数据查询
1.查询出雇员编号是7369、7566的雇员信息
SELECT * FROM emp WHERE empno=7369 OR empno=7566 ;
面对指定数据范围的时候可以进行IN操作
SELECT * FROM emp WHERE empno IN(7369,7566);
在使用NOT IN的时候,如果查找的数据范围之中包含null值,不会有任何的结果返回,IN操作无此限制
2.关系IN操作中出现null
SELECT * FROM emp WHERE empno IN(7369,7566,null);
3.观察NOT IN中出现null
SELECT * FROM emp WHERE empno NOT IN(7369,7566,null);
7.模糊查询LIKE(核心)
LIKE可以实现数据的模糊查询操作,如果要想使用LIKE则必须使用如下的两个匹配信号:
“_":匹配任意的一位符号
"%":匹配任意的符号(包含匹配0位、1位、多位)
1.查询所有雇员姓名中以字母A开头的雇员信息
第一个字母是固定的,后边的内容随意
SELECT * FROM emp WHERE ename LIKE ‘A%’;
2.查询所有雇员姓名中第二个字母是M的所有信息
第一位可以任意,但是必须战役为,使用“_",后边的位随意
SELECT * FROM emp WHERE ename LIKE ‘_A%’;
3.查询雇员姓名中任意位置上存在有字幕A的雇员信息
开头、结尾、中间都可以,使用“%A%”
SELECT * FROM emp WHERE ename LIKE %A%’;
4.关于LIKE的两点说明:
SELECT * FROM emp WHERE ename LIKE %%’;
LIKE可以在任意的数据类型上使用
SELECT * FROM emp WHERE ename LIKE %A%’ OR sal LIKE ‘%1%’ OR hiredate LIKE ‘%81%’;