一、选择限定数据行
- 选择限定数据行的作用
将需要检索的数据从所有数据中进行分离,
- 例如:在员工表中检索所有在10部门的员工
- 选择限定数据行的语法
- 使用WHERE子句可以返回限定的数据行
- 语法:
SELECT [DISTINCT] {* | column | expression…} FROM table WHERE condition(s)
- WHERE子句紧跟在FROM子句之后
- condition(s)表示条件表达式,
通常格式为:列名 比较操作符 要比较的值
- 比较操作符
比较操作符:
= > >= < <= <>(!=)
等于 大于 大于等于 小于 小于等于 不等于
二、使用WHERE子句
- 比较数值型数据
- 例如:
SELECT ename,job,deptno FROM emp WHERE deptno = 10;
- 比较字符型数据
- 字符型数据作为被比较的值时,必须用单引号引起来
- 字符型数据区分大小写
- 例如:
SELECT ename,job,deptno FROM emp WHERE job = 'CLERK';
- 比较日期型数据
- 日期型数据作为被比较的值时,必须使用单引号引起来
- 日期型数据是区分日期的表达形式的,默认的日期形式DD-MM-YY
- 例如:
SELECT ename,job,deptno FROM emp WHERE hiredate >'01-1月-85';
三、特殊比较运算符
- BETWEEN..AND..运算符
- 表示:判断要比较的值是否在某个范围内
- 例如:
SELECT ename,sal FROM emp WHERE sal BETWEEN 1000 AND 1500;
- IN(集合列表)运算符
- 表示:判断要比较的值是否和集合列表中的任何一个值相等
- 例如:
SELECT empno,ename,sal,mgr FROM emp WHERE mgr IN( 7902, 7566,7788);
- LIKE运算符
- 表示:判断要比较的值是否满足部分匹配,也叫模糊查询。模糊查询中有两个通配符
- % 代表零或任意更多的字符
- _ 代表一个字符
单独使用:- 例如:
SELECT ename FROM emp WHERE ename LIKE 'S%';
组合使用:
- 例如:
SELECT ename FROM emp WHERE ename LIKE '_L%';
- 可以使用ESCAPE标识实现对“%”和“_”的查找
- 例如:查询JOB以“MAN_”开头的雇员信息
SELECT ename,job FROM emp WHERE job LIKE 'MAN@_%' ESCAPE '@';
- IS NULL运算符
- 表示:判断要比较的值是否为空值NULL
- 例如:
SELECT ename,mgr FROM emp WHERE mgr IS NULL;
四、逻辑运算符
当需要和多个条件表达式进行比较时,需要使用逻辑运算符把多个表达式连接起来,逻辑运算符包括AND、OR、NOT,逻辑表达式的结果为TRUE,FALSE,NULL。
- 逻辑与(AND)
用来连接多个条件表达式。如果每一个条件表达式的结果都为TRU个表达式的结果才为TRUE。
- AND:要求两个条件都为真,结果才为真。
- 例如:
SELECT empno,ename,job,sal FROM emp WHERE sal >= 1100 AND job = 'CLERK';
- 逻辑或(OR)
用来连接多个条件表达式。只要有一个条件表达式的结果为TRUE,整个表达式的结果就为TRUE。
- OR:只需要两个条件中的一个为真,结果就返回真。
- 例如:
SELECT empno,ename,job,sal FROM emp WHERE sal >= 1100 OR job = 'CLERK';
- 逻辑非(NOT)
用来对条件表达式取反。TRUE取反为FALSE,FALSE取反为TRUE。
- NOT运算符还可以和BETWEEN…AND、LIKE、IS NULL一起使用
- WHERE deptno NOT IN (10,20)
- WHERE sal NOT BETWEEN 3000 AND 5000
- WHERE ename NOT LIKE ‘ D% ’
- WHERE mgr IS NOT NULL
- 例如:
SELECT ename,job FROM emp WHERE job NOT IN ('CLERK' ,'MANAGER','ANALYST');
- 运算符的优先级
括号的优先级高于其他操作符,可以强制改变优先权。
- 优先级顺序如下:
算术运算符> 连接运算符>比较运算符>特殊比较运算符>逻辑非>逻辑与>逻辑或- 例如1:
SELECT ename,job,sal FROM emp WHERE job = 'SALESMAN' OR job = 'PRESIDENT' AND sal > 1500;
- 例如2:
SELECT ename,job,sal FROM emp WHERE (job ='SALESMAN' OR job = 'PRESIDENT') AND sal > 1500;
注意比较结果有什么不同
五、ORDER BY 子句
- 使用ORDER BY子句
- 使用ORDER BY子句能过对查询结果集进行排序,语法结构如下:
- 语法:
SELECT [DISTINCT] {* | column | expression…} FROM table WHERE condition(s) ORDER BY {列名|表达式|列别名|列序号} [ASC | DESC]
- 可以按照列名,表达式,列别名,结果集的列序号排序
- ASC:升序,默认值
- DESC:降序
- ORDER BY 子句必须写在SELECT语句的最后
- 排序规则(以升序为例)
- 数字升序排列小值在前,大值在后。即按照数字大小顺序有小到大排序。
- 日期升序排列相对较早的日期在前,较晚的日期在后。例如:‘01-SEP-06’在‘01-SEP-07’前。
- 字符升序排列按照字母由小到大的顺序排列。即由A-Z排序;中文升序按照字典顺序排序。
- 空值在升序排列中排在最后,子降序排列中排在最开始。
1> 按照列名排列
- 例如1:
SELECT ename,deptno,sal,hiredate FROM emp ORDER BY hiredate;
- 例如2:
SELECT ename,deptno,sal,hiredate FROM emp ORDER BY hiredate DESC; //注意:默认的情况下是升序
2>按照列别名排序
- 例如:
SELECT ename,deptno,sal*12 AS annsal FROM emp ORDER BY annsal;
3>多列参与排序
- 参与排序的多列都可以指定升序或者降序
- ORDER BY子句中可以写没在SELECT列表中出现的列
- 例如:
SELECT ename,deptno,sal FROM emp ORDER BY deptno,sal DESC;
4>按照结果集序列号排序
- ORDER BY子句后列名可以用数字来代替,这个数字是SELECT语句后列的顺序号。
- 例如:
SELECT ename,deptno,sal FROM emp ORDER BY 2,3 DESC;
网友评论