[玩转SQL]:02 条件语句与排序
SELECT 更高的用法可以使用WHERE提供查询条件.
WHERE语句
语法:
SELECT * | {[DISTINCT] column|expression [alias]...} FROM table [WHERE condition(s)];
通过WHERE后边子句的表达返回True or False来判断是否满足条件.
WHERE子句不可以使用别名.
WHERE通常跟在FROM后边.
--查询deparment_id为90的列 SELECT employee_id,last_name, job_id, department_id FROM employees WHERE department_id = 90;
如果WHERE里边判断字符串或日期的条件需要使用单引号‘.
SELECT last_name,job_id, department_id FROM employees WHERE last_name = ‘Whalen‘;
条件中字符串型大小写敏感.
SELECT last_name,job_id, department_id FROM employees WHERE last_name = ‘WHALEN‘;
若不知道大小写可以使用upper或者lower函数
SELECT last_name,job_id, department_id FROM employees WHERE UPPER(last_name) = ‘WHALEN‘;
SELECT last_name,job_id, department_id FROM employees WHERE LOWER(last_name) = ‘whalen‘;
UPPER函数将需要查询的列全部转化为大写.
LOWER函数将需要查询的列全部转化为小写.
SQL比较表达式
= | 等于 |
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
<> | 不等于 也可以写成 != ^= 推荐使用!= |
BETWEEN … AND … | 大于等于某个值,小于等于某个值 |
IN(set) | 判断是否在集合里边 |
LIKE | 模糊查询 |
IS NULL | 判断是否是NULL值 |
--查询月薪小于等于3000美金的员工 SELECT last_name,salary FROM employees WHERE salary <= 3000;
--查询大于等于2500美金或者小于等于3500美金的员工 SELECT last_name,salary FROM employees WHERE salary BETWEEN 2500 AND 3500;
--查询manager_id 等于 100 或者 101 或者 201的员工 SELECT employee_id,last_name, salary, manager_id FROM employees WHERE manager_id IN (100, 101, 201);
manager_id IN (100, 101, 201)
等同于
manager_id = 100 OR manager_id= 101 OR manager_id = 201
若使用IN方式在运行时数据库自动转换为OR方式.
若注重可读性使用IN.
若注重速度使用OR.
匹配查询
% 匹配 0-N个字符
_ 匹配 1个字符
--查找first_name S开头的员工 SELECT first_name FROM employees WHERE first_name like ‘S%‘;
若要匹配的字符中包含特殊字符%或者_ 要进行ESCAPE指定的转义符转义.
--查找JOB_Id包含SA_的员工 SELECT employee_id,last_name, job_id FROM employees WHERE job_id LIKE ‘%SA\_%‘ ESCAPE ‘\‘;
--查找manager_id为null的员工 SELECT last_name,manager_id FROM employees WHERE manager_id IS NULL;
--查找manager_id不为null的员工 SELECT last_name,manager_id FROM employees WHERE manager_id IS NOT NULL;
逻辑运算符
AND OR NOT 与计算机"与或非"逻辑相同.
--查询职位为manager并且薪水大于等于10000美金的员工 SELECT employee_id,last_name, job_id, salary FROM employees WHERE salary >= 10000 AND job_id LIKE ‘%MAN%‘;
--查询职位不是IT_PROG、ST_CLERK、SA_REP的员工 SELECT last_name,job_id FROM employees WHERE job_id NOT IN (‘IT_PROG‘,‘ST_CLERK‘, ‘SA_REP‘);
运算符优先级
↑算数表达式
↑链接表达式
↑比较表达式
↑IS [NOT] NULL, LIKE, [NOT] IN
↑[NOT] BETWEEN
↑!= <> ^=
↑NOT
↑AND
↑OR
如果不确定优先级可以使用小括号来提高优先级.
ORDER BY排序
相同SQL查询的结果有时会返回的相同数据不同顺序的情况.
ASC 升序 (默认是此选项)
DESC 降序
ORDER BY 是放在SQL语句的最后边.
--查询入职时间并以升序排序 SELECT last_name,job_id, department_id,hire_date FROM employees ORDER BY hire_date;
ORDER BY 可以使用列别名
--查询所有员工的年终奖并以从高到底排列 SELECT employee_id,last_name, salary*12 lol FROM employees ORDER BY lol DESC;
可简写为
SELECT employee_id,last_name, salary*12 lol FROM employees ORDER BY 3 DESC;
数字对应colums出现的位置
ORDER BY可对应多个排序
--department_id升序排序,salary降序排列 SELECT last_name,department_id, salary FROM employees ORDER BY department_id, salary DESC;
若排序时出现NULL值
ASC NULL放在最后
DESC NULL放在最开始
可通过NULLS FIRST 或者 NULLS LAST指定NULL值的位置.
引用变量
变量字符 & 或者 &&
SELECT employee_id,last_name, salary, department_id FROM employees WHERE employee_id = &employee_num;
每次执行会提示输入变量&employee_num的值.
若变量内容是字符串或者日期需要加上单引号
SELECT last_name,department_id, salary*12 FROM employees WHERE job_id = ‘&job_title‘
一条SQL中可使用多个变量.
SELECT employee_id,last_name, job_id, &column_name FROM employees ORDER BY &column_name;
相同变量提示输入两次.
第一次出现用两个&&以后出现使用一个&即可.
SELECT employee_id,last_name, job_id, &&column_name FROM employees ORDER BY &column_name;
使用DEFINE定义变量可直接运行变量SQL语句.
设定verify OFF可以去除提示信息
本文出自 “会飞的唐老鸭” 博客,请务必保留此出处http://softomg.blog.51cto.com/9068693/1435037
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。