1.限定行初步
使用where子句,可以限制查询满足条件的行,where 子句能够比较字段值、文字值、算术表达式或函数,内部由字段名、比较条件和比较值三个部分组成。
在where子句中字符串和日期必须包含在单引号中,数字常数不需要。尤其需要注意的是,虽然说SQL语句是大小写不敏感的,但是在使用where子句进行条件限定时,这个比较值是大小写敏感的。
例如:查询部门编号为30的员工姓名和工资:
select ename,sal from emp where deptno=30,
查询员工工作为的员工姓名和工资:
select ename,sal from emp where job='SALESMAN';
在where子句中,比较条件不仅有“=”,还包括“>”、“>=”、“<”、“<=”、“<>”、“!=”、“^=”,其中最好三个均可代表不等于。4
2.限定行进阶
- BETWEEN.......AND.......条件
使用between条件可以查询显示上下限之间的行。例如希望查询出雇员表中薪水在1000~1800元之间的员工姓名和薪水。
可以使用下面的SQL语句:
select ename,sal from emp where sal between 1000 and 1800;
- IN条件
IN条件也称为成员条件,用于查询出所选字段中符合指定的一组值中的一个。例如希望查询出部门编号是10或30的员工信息,可以使用的SQL语句如下:
select * from emp where deptno in(10,30);
同样的,IN(value1,value2,value3)本质上的是由Oracle转变成一组OR条件:a = value1 or a = value2 or a = value3,所以使用IN条件也没有得到性能的提高。
- LIKE条件
LIKE条件查询通常也称为通配符查询,可以使用两个通配符来构造需要匹配的字符模板,其中“%”表示零个或多个字符,“_”表示一个字符,这里提到的字符既可以是文字也可以是数字。例如查询名字中含有‘A’的员工姓名:
select ename from emp where ename like '%A%';
查询姓名第二个字母是‘C’的员工姓名:
select ename from emp where ename like '_C%';
当查询或者匹配中含有通配符“%”、“_”的时候,可以使用ESCAPE选项,该选项可以指定换码符是什么,
例如:查询姓名含有“AD_”的员工姓名:
select ename from emp where ename like '%AD$_%' escape '$';
‘$’号后面的‘_’就不会被看成是通配符,因为escape指定了‘$’为转码符。
- NULLL条件
NULL条件,包括IS NULL条件和IS NOT NULL条件。IS NULL条件用于判断空值,在=Oracle中,空值的含义为难以获得的、未指定的、未知的或者不适用的。这种学术的描述对软件开发人员意义不大,但判断空值时不可以使用“=”进行判断,因为NULL不能等于或不等于任何值。
例如查询没有上级领导的员工:
- 逻辑条件
前面使用的都是单个的比较条件,有时候一个比较条件往往难以满足查询的需求,这时候可以使用逻辑条件将多个比较条件组合起来使用。SQL语言的三个逻辑运算符分别是AND、OR和NOT,其含义顾名思义,就是与、或和非。
例如:查询员工工资大于2000,小于3000元的员工信息:
- 优先规则
优先规则定义表达式求值和计算的顺序,默认的优先顺序如下;
(1)算术运算。
(2)连字操作。
(3)比较操作。
(4)IS[NOT] NULL、LIKE、[NOT] IN。
(5)[NOT] BETWEEN。
(6)NOT 逻辑条件。
(7)AND逻辑条件。
(8)OR逻辑条件。
和Java语言一样,在编写SQL语句时,可以使用圆括号括住想要先计算的表达式来覆盖默认的优先顺序。