SQL限定查询

1.SQL语句

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的两点说明:

如果在使用LIKE进行限定查询的时候,没有设置任何的关键字,那么表示查询全部

SELECT * FROM emp WHERE ename LIKE %%’;

LIKE可以在任意的数据类型上使用

SELECT * FROM emp WHERE ename LIKE %A%’ OR sal LIKE ‘%1%’ OR hiredate LIKE ‘%81%’;

虽然所有的数据类型都支持LIKE,但是往往会在字符串上使用

原文地址:https://www.cnblogs.com/Hiramunderneath/p/15365000.html