2.6 优先规则

求值运算

优先级

1

算术运算

2

连字操作

3

比较操作

4

is [not] null, like, [not] in

5

[not] between

6

not 逻辑条件

7

and 逻辑条件

8

or 逻辑条件

优先规则:优先规则定义表达式求值和计算的顺序,表中列出了默认的优先顺序。你可以用圆括号括住你想要先计算的表达式来覆盖默认的优先顺序。
2.6.1 示例一

查询工作岗位是 SA_REP 或者工作岗位是 AD_PRES 并且薪水大于 15000 的员工姓名、工作 ID 以及薪水。
select last_name,job_id,salary from employees where job_id = 'SA_REP' or job_id='AD_PRES' and salary > 15000

mysql查询全部员工的总工资 sql查询所有员工的总工资_数据库

2.6.2 示例二

查询工作岗位是 SA_REP 或者是 AD_PRES 并且他们的薪水大于 15000 的员工姓名、工作 ID 以及薪水。
select last_name,job_id,salary from employees where (job_id = 'SA_REP' or job_id='AD_PRES') and salary > 15000;

mysql查询全部员工的总工资 sql查询所有员工的总工资_升序_02


2.7 使用 ORDER BY 排序

2.7.1ORDER BY 子句作用

用 ORDER BY 子句排序

ASC: 升序排序,默认

DESC: 降序排序

ORDER BY 子句:用于对结果集进行排序处理,提供了升序排序(ASC)与降序排序(DESC)如果不指定排序规则默认为升序排序。在排序中也可以使用没有包括在SELECT 子句中的列排序。如果未使用 ORDER BY 子句,排序次序就未定义,并且 Oracle 服务器可能对于相同查询的两次执行取回行的顺序不同。

2.7.2ORDER BY 语法

ORDER BY 子句在 SELECT 语句的最后

ORDER BY 后侧指定需要排序列

ASC 以升序排序行 (这是默认排序)

DESC 以降序排序行

2.7.3 升序规则

对于数字值,小的值在前面显示—例如,1–999。

对于日期,早的日期在前面显示—例如,01-1-92 在 01-1-95 前面 。

对于字符值,依字母顺序显示—例如,A 第一,Z 最后。

对于空值,升序排序时显示在最后,降序排序时显示在最前面

2.7.3.1 示例

select last_name,hire_date,salary,commission_pct
from employees order by commission_pct;

mysql查询全部员工的总工资 sql查询所有员工的总工资_多列_03

2.7.4 列号排序
可以使用投影的列的序号指定排序列,但是不推荐此种做法。
2.7.4.1 示例

select last_name,hire_date,salary,commission_pct
from employees order by 2;

mysql查询全部员工的总工资 sql查询所有员工的总工资_mysql查询全部员工的总工资_04


2.7.5 用列别名排序

可以使用列的别名指定排序列。

2.7.5.1 示例

select last_name as name,hire_date,salary,commission_pct from employees order by name;

mysql查询全部员工的总工资 sql查询所有员工的总工资_升序_05

2.7.6 多列排序
多列排序:可以用多列排序查询结果。在 ORDER BY 子句中,多个指定的列名之间用逗号分开。如果想要对某个列倒序排序需则在该列名后面指定 DESC。
2.7.6.1 示例:

select hire_date,salary from employees order by hire_date,salary desc;

mysql查询全部员工的总工资 sql查询所有员工的总工资_升序_06

2.7.7SELECT 语句的执行顺序如下:

FROM 子句

WHERE 子句

SELECT 子句

ORDER BY 子句

2.8 约束与排序小节练习
2.8.1 创建一个查询,显示收入超过 $12,000 的雇员的名字和
薪水。

答案:select last_name,salary from employees where salary > 12000;

mysql查询全部员工的总工资 sql查询所有员工的总工资_执行顺序_07

2.8.2 创建一个查询,显示雇员号为 176 的雇员的名字和部门
号。

答 案 : select last_name,department_id from
employees where employee_id = 176;

mysql查询全部员工的总工资 sql查询所有员工的总工资_升序_08

2.8.3 显示所有薪水不在 5000 和 12000 之间的雇员的名字和
薪水。

答案:select last_name,salary from employees
where salary not between 5000 and 12000;

mysql查询全部员工的总工资 sql查询所有员工的总工资_mysql查询全部员工的总工资_09

mysql查询全部员工的总工资 sql查询所有员工的总工资_执行顺序_10

2.8.4 显示受雇日期在 2002 年 2 月 20 日 和 2007 年 5 月
1 日 之间的雇员的名字、岗位和受雇日期。按受雇日期
顺序排序查询结果。

答 案 : select last_name,job_id, hire_date
from employees where hire_date between '22-2
月-02' and '01-5 月-07' order by hire_date;

mysql查询全部员工的总工资 sql查询所有员工的总工资_数据库_11

2.8.5 显示所有在部门 20 和 50 中的雇员的名字和部门号,并
以名字按字母顺序排序。

答 案 : select last_name,department_id from
employees where department_id in (20,50)
order by last_name;

mysql查询全部员工的总工资 sql查询所有员工的总工资_数据库_12

2.8.6 列出收入在 $5,000 和 $12,000 之间,并且在部门 20
或 50 工作的雇员的名字和薪水。将列标题分别显示为
Employee 和 Monthly Salary。

答 案 : select last_name "Employee",salary
"Monthly Salary" from employees where salary
between 5000 and 12000 and department_id in (20,50);

mysql查询全部员工的总工资 sql查询所有员工的总工资_数据库_13

2.8.7 显示每一个在 2004 年受雇的雇员的名字和受雇日期。
答 案 : select last_name ,hire_date from
employees where hire_date like ‘%04’;
2.8.8 显示所有没有主管经理的雇员的名字和工作岗位。

答案:select last_name,job_id from employees
where manager_id is null;

mysql查询全部员工的总工资 sql查询所有员工的总工资_数据库_14

2.8.9 显示所有有佣金的雇员的名字、薪水和佣金。以薪水和佣
金的降序排序数据。

答 案 : select last_name ,salary ,
commission_pct from employees where
commission_pct is not null order by salary
desc ,commission_pct desc;

mysql查询全部员工的总工资 sql查询所有员工的总工资_数据库_15

2.8.10 显示所有名字中第三个字母是 a 的雇员的名字。

答案: select last_name from employees where
last_name like '__a%';

mysql查询全部员工的总工资 sql查询所有员工的总工资_mysql查询全部员工的总工资_16

2.8.11 显示所有名字中有一个 a 和一个 e 的雇员的名字。

答案: select last_name from employees where
last_name like '%a%' and last_name like '%e%';

mysql查询全部员工的总工资 sql查询所有员工的总工资_数据库_17

2.8.12 显示所有工作是销售代表 (SA_REP) 或者普通职员
(ST_CLERK) ,并且薪水不等于 $2,500 、 $3,500 或
$7,000 的雇员的名字、工作和薪水。

答 案 : select last_name,job_id,salary from
employees where job_id in
('SA_REP','ST_CLERK') and salary not in (2500,3500,7000);

mysql查询全部员工的总工资 sql查询所有员工的总工资_执行顺序_18

2.8.13 显示所有佣金总计为 20% 的雇员的名字、薪水和佣
金。

方法一 : select last_name,salary,commission_pct
from employees where commission_pct = 0.2;

mysql查询全部员工的总工资 sql查询所有员工的总工资_数据库_19

方法法二 : select last_name,salary,commission_pct
from employees where commission_pct = .20;

mysql查询全部员工的总工资 sql查询所有员工的总工资_升序_20