条件语句与排序
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';
![select.jpg wKiom1O45cTw3ZVHAABa395m1SM381.jpg](https://i-blog.csdnimg.cn/blog_migrate/78cc0281d86b2c29aab8292043bdd3ab.jpeg)
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 ORmanager_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可以去除提示信息
--------------------------------------------------------------------------------------
版权所有,转载时必须以链接方式注明源地址,否则追究法律责任!
Email : softomg@163.com
Blog : http://blog.csdn.net/softomg