1 where子句语法
where子句是对select基本主干语句的扩充,用来在查询中过滤行。
语法:
select * | {[DISTINCT] column | expression [alias],…} from table
[where condition(s)];
where子句紧随FROM子句,where子句后可跟一个或多个条件表达式。
2 整体框架

3 where子句的内容
可以比较列的值,比较算术表达式的值或者函数的值。但是不能跟列的别名,满足where条件之后的值才会输出。
- 列名:如果列的值是数值,可以直接写,如果列的值是字符或日期,需要加单引号。
如:
select ename,sal from emp where empno=7369;
select ename,sal from emp where ename=‘SMITH’;
SELECT last_name, job_id, department_id
FROM employees
WHERE last_name = ‘WHALEN’; - 比较运算表达式:
可以使用>,<,=,>=,<=,<>,!=,between … and … ,in, like ,is null
其中<>和!=都表示不等于
between … and …表示区间等效于>= and <=
in表示从列表中取值,等效于 or … or 语句。
空值不能用等号或不等号来匹配。
like模糊匹配,可以使用%匹配一个或多个字符,_匹配任意一个字符
如:
SELECT last_name FROM employees WHERE last_name BETWEEN ‘King’ AND ‘Smith’;
SELECT employee_id, manager_id, department_id
FROM employees
WHERE last_name IN (‘Hartstein’, ‘Vargas’);
找出2005年1月至12月入职的人员:此时日期格式为数据库默认的格式。
SELECT last_name, hire_date
FROM employees
WHERE hire_date LIKE ‘%05’;
列出没有奖金的人员信息
select * from emp where comm is null; - 逻辑运算符:
可以使用and ,or ,not
如:
查询工资大于等于1100并且工作是CLERK的员工信息
select empno,ename,job,sal from emp
where sal>=1100 and job=‘CLERK’; - 优先级规则:
算数运算符>连接符>比较符>is [not] null,like,[not] in>[not] between>不等于>not>and>or
小括号改变优先级
如:
查询工作是SALESMAN或者PRESIDENT的员工中,工资大于1500的员工。
select ename,job,sal from emp
where (job=‘SALESMAN’ or job=‘PRESIDENT’) and sal>1500;
4 练习题
查看如下表members结构:
Name Nulls Type
MEMBER_ID NOT NOLL VARCHAR2 (6)
FIRST_NAME VARCHAR2 (50)
LAST_NAME NOT NOLL VARCHAR2 (50)
ADDRESS VARCHAR2 (50)
CITY VARCHAR2 (25)
STATE VARCHAR2 (3)
列出state满足以字母A开头且后面只有一个字符的成员信息,如下哪个SQL正确?
A)SELECT * FROM MEMBERS WHERE state LIKE ‘%A_’ ;
B)SELECT * FROM MEMBERS WHERE state LIKE ’ A_% ’ ;
C)SELECT * FROM MEMBERS WHERE state LIKE ‘A_’;
D)SELECT * FROM MEMBERS WHERE state LIKE ‘A%’;
【答题小贴士】:
1、以墨天轮文章的形式解析题目并给出答案
2、将墨天轮文章链接发送到此文的评论区




