[玩转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; 

wKioL1O45AzS1w3FAACVKHFW-oM458.jpg


如果WHERE里边判断字符串或日期的条件需要使用单引号'.

SELECT last_name,job_id, department_id 
FROM   employees 
WHERE  last_name = 'Whalen'; 

wKioL1O45OTBjCfTAABU_OgQdqk719.jpg


条件中字符串型大小写敏感.

SELECT last_name,job_id, department_id 
FROM   employees 
WHERE  last_name = 'WHALEN'; 

wKioL1O45TrCE6JkAAAP2K8Lev8345.jpg


若不知道大小写可以使用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'; 
wKiom1O45cTw3ZVHAABa395m1SM381.jpg

UPPER函数将需要查询的列全部转化为大写.

LOWER函数将需要查询的列全部转化为小写.


SQL比较表达式

=

等于

大于

>=

大于等于

<

小于

<= 

小于等于

<>

不等于也可以写成 != ^=推荐使用!=

BETWEEN … AND …    

大于等于某个值,小于等于某个值

IN(set) 

判断是否在集合里边

LIKE  

模糊查询

IS NULL 

判断是否是NULL


--查询月薪小于等于3000美金的员工 
SELECT last_name,salary 
FROM   employees 
WHERE  salary <= 3000; 

wKiom1O48L3RVeMKAAC0WOBqjY4273.jpg


--查询大于等于2500美金或者小于等于3500美金的员工 SELECT last_name,salary 
FROM   employees 
WHERE  salary 
BETWEEN 2500 AND 3500; 

wKioL1O48SaAxAaHAACr8UHrJTM906.jpg


--查询manager_id 等于 100 或者 101 或者 201的员工 
SELECT employee_id,last_name, salary, manager_id 
FROM   employees 
WHERE  manager_id IN (100, 101, 201); 

wKiom1O48aeQ5ZVoAAEz9Mb-xn4061.jpg

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%'; 

wKioL1O48nfjuHUAAABwQuvtp3E987.jpg


若要匹配的字符中包含特殊字符%或者_要进行ESCAPE指定的转义符转义.

--查找JOB_Id包含SA_的员工 
SELECT employee_id,last_name, job_id 
FROM   employees 
WHERE  job_id LIKE '%SA\_%' ESCAPE '\'; 

wKiom1O483my-PQ0AAETmYUnCsc349.jpg


--查找manager_id为null的员工 
SELECT last_name,manager_id 
FROM   employees 
WHERE  manager_id IS NULL; 

wKiom1O4873y-EC6AAAx54JB_RA920.jpg


--查找manager_id不为null的员工 
SELECT last_name,manager_id 
FROM   employees 
WHERE  manager_id IS NOT NULL; 

wKioL1O49BTDEba1AACb_Gk2eFk881.jpg


逻辑运算符

 

AND OR NOT与计算机"与或非"逻辑相同.

--查询职位为manager并且薪水大于等于10000美金的员工 
SELECT employee_id,last_name, job_id, salary 
FROM   employees 
WHERE  salary >= 10000 
AND    job_id LIKE '%MAN%'; 

wKioL1O49N2SKHaIAAEA4Tsx3Ow048.jpg


--查询职位不是IT_PROG、ST_CLERK、SA_REP的员工
SELECT last_name,job_id 
FROM   employees 
WHERE  job_id NOT IN ('IT_PROG','ST_CLERK', 'SA_REP');

wKioL1O49Sqi9DRHAADPt9ZK7xQ434.jpg


运算符优先级


算数表达式 

链接表达式 

比较表达式 

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; 

wKioL1O49j-Co8ooAAF9B7GTcBc677.jpg


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出现的位置,但是不推荐使用这种方式.

wKioL1O49tGiIHFBAAD4fQ8zGPQ773.jpg


ORDER BY可对应多个排序

--department_id升序排序,salary降序排列 
SELECT last_name,department_id, salary 
FROM   employees 
ORDER  BY department_id, salary DESC; 

wKiom1O494DSrsUlAADifrAmeY4783.jpg

若排序时出现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 的值 .

wKioL1O49_vR8IvxAADZzA9kQ7Y991.jpg


若变量内容是字符串或者日期需要加上单引号

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; 

wKioL1O4-gWxS6soAAJRA98CDbU522.jpg


相同变量提示输入两次.

第一次出现用两个&&以后出现使用一个&即可.

SELECT employee_id,last_name, job_id, &&column_name 
FROM   employees 
ORDER  BY &column_name; 

wKioL1O4-z7goxNlAAIhFwAIiSo216.jpg


使用DEFINE定义变量可直接运行变量SQL语句.

wKioL1O4_fixXrMLAASGNnFbC8I272.jpg


设定verify OFF可以去除提示信息

wKioL1O4_vSiL5goAAD4m5zXUnM880.jpg


--------------------------------------------------------------------------------------
版权所有,转载时必须以链接方式注明源地址,否则追究法律责任!

QQ    :   413844436
Email  :   softomg@163.com
Blog   :   http://blog.csdn.net/softomg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值