当一个SELECT子句中包含函数或者表达式时,查询的结果集对应的字段就是
使用这个函数或者表达式作为字段名,可读性差。为此可以为这样的字段添加别名。
那么结果集就会以这个别名作为该字段的名字,若希望区分大小写,并且包含空格。
则别名必须要使用双引号包含起来,也可以在列别名在列名后之间加或不加一个关键字AS
select ename,sal,sal*12 from emp; select ename,sal,sal*12 as "员工 年薪" from emp; select ename,sal,sal*12 as "annual SAL" from emp;--包含空格或需要区分大小写时使用双引号"" select ename,sal,sal*12 as annual_SAL from emp;
比较运算符:>,<,>=,<=,!=,<>,=
> | 大于 |
< | 小于 |
>= | 大于或等于 |
<= | 小于或等于 |
!= | 不等于 |
<> | |
= | 等于 |
在SELECT子句中查询的条件,在WHERE子句中可以使用比较操作符限制查询的结果
--查询10号部门的员工 select * from emp where deptno=10; --查询职员表中职位是'SALESMAN'的职员 select ename,sal,job from emp where job='SALESMAN'; --查询职员表中薪水低于2000的职员 select * from emp where sal<2000; --查询不属于10号部门的员工 select * from emp where deptno<>10; select * from emp where deptno!=10; --查询在1982-1-1以后入职的员工 select * from emp where hiredate>to_date('1982-01-01','YYYY-MM-DD');
在SQL操作中,如果希望返回的结果必须满足多个条件,应该使用AND
逻辑操作符连接这些条件。
在SQL操作中,如果希望返回的结果满足多个条件之一即可,应该使用OR
逻辑操作符连接这些条件。
注意:AND的优先级高于OR,可以通过加括号()来提升OR的优先级。
--查询薪水大于1000并且职位是’CLERK' 的职员信息 select ename,sal,job from emp where sal>1000 and job='CLERK'; --查询薪水大于1000或者职位是’CLERK' 的职员信息(满足其一即可) select ename,sal,job from emp where sal>1000 or job='CLERK'; --查询工资>1000与(工作是SALESMAN或工作是CLERK)的员工 --job='CLERK'和job='SALESMAN'的顺序会影响查询结果,原因在于AND比OR的优先级高 SELECT ename,sal,job FROM emp WHERE sal>1000 AND job='CLERK' OR job='SALESMAN'; --可通过加括号()来提升OR的优先级 select ename,sal,job from emp where sal>1000 and (job='SALESMAN' or job='CLERK');
LIKE
关键字用于模糊匹配字符串,LIKE需要借助两个通配符比较:
下划线_
:表示单一的一个字符
百分号%
:表示任意个字符(0~多个)
--查看名字第二个字母是A最后一个字母是N的员工 select ename from emp where ename like '_A%N';--MARTIN
IN(list)
判断是否在列表中(包含在列表中)
NOT IN(list
)是否不在列中(不包含在列表中)
(通常拿来判断子查询结果,判断查询结果在不在另一个查询结果当中,或配合子查询)
--查看职位是CLERK或SALESMAN的员工(相当于查询职位是 CLERK OR SALESMAN) select ename,job from emp where job in('CLERK','SALESMAN'); --查看部门号不是10和20的员工(相当于查询部门号不是10和20 deptno<>10 AND deptno<>20) select ename,deptno from emp where deptno not in(10,20);
该操作符用来查询符合某个值域范围条件的数据,
常见在使用数字类型的数据范围上,但字符类型和日期类型也同样适用。
--查看工资在1500到3000之间的员工? sal>=1500 AND sal<=3000 select ename,sal from emp where sal between 1500 and 3000;
空值NULL
是一个特殊的值,比较的时候不能使用"="号,必须使用IS NULL
或IS NOT NULL
,否则不能得到正确的结果。
--判断奖金为NULL和不为NULL的员工信息 SELECT ename,comm FROM emp WHERE comm IS NULL; SELECT ename,comm FROM emp WHERE comm IS NOT NULL;
ANY与ALL是配合>,>=,<,<=使用的
>ANY(list)
:大于列表中最小的,即大于列表中其中之一>ALL(list)
:大于列表中最大的,即大于列表中所有<ANY(list)
:小于列表中最大的,即小于列表中其中之一<ALL(list)
:小于列表中最小的,即小于列表中所有
ANY和ALL常用在子查询中。
select ename,sal from emp where sal >any(1500,2500,3000); select ename,sal from emp where sal >all(1500,2500,3000); select ename,sal from emp where sal <any(1500,2500,3000); select ename,sal from emp where sal <all(1500,2500,3000); --查询10号部门中工资大于20号部门中工资最高的员工 select * from emp where deptno=10 and sal>all(select sal from emp where deptno=20);
DISTINCT
在SELECT
子句当中使用。
数据表中有可能存储相同数据的行,当执行查询操作时默认情况会显示所有行,不管查询结果是否有重复数据。
当重复数据没有实际意义, 经常会需要去掉重复值,使用DISTINCT
实现。
--查看公司有哪些职位? select distinct job from emp; --DITINCT还可以对多列进行去重,但不可以在需要去重的字段前再添加其他查询的字段。 SELECT ename,DISTINCT job FROM emp;--报错:缺失表达式 --多个字段的去重原则是:查询的结果中,这几个字段值的组合是没有重复的,也就是对这些字段值的组合进行去重。 select distinct job,deptno from emp;