我的Oracle数据库学习笔记
Day 6带where的查询语句
文章目录
- 我的Oracle数据库学习笔记
- 带条件的查询 (结果集中仅显示满足条件的记录)
- 1.查询10部门的员工信息(编号,姓名,职位,工资,部门编号)
- 2.查询不是10号部门的员工信息(编号,姓名,职位,工资,部门编号)
- 3.查询工资高于1500(不含)的员工信息(编号,姓名,职位,工资,部门编号)
- 查询工资高于1500(含)的员工信息(编号,姓名,职位,工资,部门编号)
- 4 .在查询语句使用逻辑运算符 not ,and, or
- 5 .在条件中判断select语句部分的表达式的值
- 6 .在条件中使用SQL运算符: like ,between ... and , in , is null
- 6.1 like '使用通配符的表达式'
- 查询员工姓名中包含A字符的员工信息(编号,姓名,职位,工资,部门编号)
- 查询员工姓名中以A字符开头的员工信息(编号,姓名,职位,工资,部门编号)
- 查询员工姓名中以S字符结尾的员工信息(编号,姓名,职位,工资,部门编号)
- 查询员工姓名中第二个字符为A字符的员工信息(编号,姓名,职位,工资,部门编号)
- 查询员工姓名中倒数第三个字符为M的员工信息(编号,姓名,职位,工资,部门编号)
- 查询员工姓名以A开头或者以'S'结尾的员工信息(编号,姓名,职位,工资,部门编号)
- 查询员工姓名不以‘A'开头的员工信息(编号,姓名,职位,工资,部门编号)
- 查询员工姓名不以A开头并且也不以'S'结尾的员工信息(编号,姓名,职位,工资,部门编号)
- 6.2 between ...and
- 6.3 in in(值列表) 匹配值列表中任意一个值 ,值列表之间使用逗号
- 6.4 is null 判断值是否为null 不包含‘null'也不包含'',也不包含0
- 7.使用连接符把多列的值连接为一列显示
- 7.2 使用 || 连接符
带条件的查询 (结果集中仅显示满足条件的记录)
- 语法:
select 列名列表
from 表名
[where 查询条件];
- 运算符:
1)算术运算符: + - * / %
2)条件运算符 : =,!=(<>),>,>=,<,<=, any,all,some
注意: any, all不能单独使用,要和其他 6个条件运算符一起使用
any和some是等价的
3) 逻辑运算符:not, and ,or not -->and–>or
4)SQL运算符: like, in, between and , is null, 相反值: not like ,not in,not between
and ,is not null.
Like 与通配符一起使用:
%:任意长度的字符
_:一个字符
5)sql连接符:
concat(s1,s2)
s||s2: || 连接符
1.查询10部门的员工信息(编号,姓名,职位,工资,部门编号)
select empno,ename,job,sal,deptno
from emp
where deptno=10;
2.查询不是10号部门的员工信息(编号,姓名,职位,工资,部门编号)
select empno,ename,job,sal,deptno
from emp
where deptno !=10;
与上面的语句等效
select empno,ename,job,sal,deptno
from emp
where deptno <> 10;
3.查询工资高于1500(不含)的员工信息(编号,姓名,职位,工资,部门编号)
select empno,ename,job,sal,deptno
from emp
where sal>1500;
查询工资高于1500(含)的员工信息(编号,姓名,职位,工资,部门编号)
select empno,ename,job,sal,deptno
from emp
where sal>=1500;
4 .在查询语句使用逻辑运算符 not ,and, or
4.1 查询10号部门中工资高于1500的员工(编号,姓名,职位,工资,部门编号) -->and
select empno,ename,job,sal,deptno
from emp
where deptno=10 and sal>1500;
4.2 查询工资高于3000(含)或工资低于1000(含)的员工信息(编号,姓名,职位,工资,部门编号)–>or
select empno,ename,job,sal,deptno
from emp
where sal >=3000 or sal <=1000;
5 .在条件中判断select语句部分的表达式的值
查询年薪高于15000(含)员工信息(编号,姓名,职位,工资,年薪)
select empno,ename,job,sal,sal*12 yearsal
from emp
--where yearsal >=15000; --条件出现错误 :"yearsal 标识符无效",错误原因为:此名为别名,不能在where条件中使用别名判断
where sal *12 >=15000;
6 .在条件中使用SQL运算符: like ,between … and , in , is null
6.1 like ‘使用通配符的表达式’
like 与 通配符一起使用进行判断 。通配符:
%:有任意长度的字符 (包含0个)
_:表示此处有一个字符
适用于字符类型的值
查询员工姓名中包含A字符的员工信息(编号,姓名,职位,工资,部门编号)
select empno,ename,job,sal,deptno
from emp
where ename like '%A%';
查询员工姓名中以A字符开头的员工信息(编号,姓名,职位,工资,部门编号)
select empno,ename,job,sal,deptno
from emp
where ename like 'A%';
查询员工姓名中以S字符结尾的员工信息(编号,姓名,职位,工资,部门编号)
select empno,ename,job,sal,deptno
from emp
where ename like '%S';
查询员工姓名中第二个字符为A字符的员工信息(编号,姓名,职位,工资,部门编号)
select empno,ename,job,sal,deptno
from emp
where ename like '_A%';
查询员工姓名中倒数第三个字符为M的员工信息(编号,姓名,职位,工资,部门编号)
select empno,ename,job ,sal,deptno
from emp
where ename like '%M__'; --注意,两个下划线之间没有空格的
查询员工姓名以A开头或者以’S’结尾的员工信息(编号,姓名,职位,工资,部门编号)
select empno,ename,job,sal,deptno
from emp
where ename like 'A%' or ename like '%S';
------------------------------ like 取反 : not like
查询员工姓名不以‘A’开头的员工信息(编号,姓名,职位,工资,部门编号)
select empno,ename,job,sal,deptno
from emp
where ename not like 'A%';
查询员工姓名不以A开头并且也不以’S’结尾的员工信息(编号,姓名,职位,工资,部门编号)
select empno,ename,job,sal,deptno
from emp
where ename not like 'A%' and ename not like '%S';
与上面的效果等效
select empno,ename,job,sal,deptno
from emp
where not (ename like 'A%' or ename like '%S');
6.2 between …and
指定范围的条件: between … and
between 下限值 and 上限值。 (包含上限值与下限值的)
适用于:数值类型和日期类型
注意: between …and 前后的值如果写反:
between 上限值 and 下限值
查询结果为: 不出现错误,同时没有任何数据显示
查询工资在1000~3000之间的员工信息(编号,姓名,职位,工资,部门编号)
select empno,ename,job,sal,deptno
from emp
where sal >=2000 and sal <=3000;
-- between and
select empno,ename,job,sal ,deptno
from emp
where sal between 2000 and 3000;
思考一下,下面的SQL语句的结果为?
select empno,ename,job,sal,deptno
from emp
where sal between 3000 and 2000; -- 结果为:A, 出现错误 B 正确显示结果 C 不报错,同时没有任何信息显示 选项为:C
--------------between ... and 取反 : not between .. and ..
查询员工工资不在2000~3000之间的员工信息(编号,姓名,职位,工资,部门编号)
select empno ,ename,job,sal,deptno
from emp
where sal <2000 or sal >3000;
与上面的SQL等效
select empno,ename,job,sal,deptno
from emp
where not (sal >=2000 and sal <=3000);
与上面的SQL等效
select empno,ename,job,sal,deptno
from emp
where sal not between 2000 and 3000;
6.3 in in(值列表) 匹配值列表中任意一个值 ,值列表之间使用逗号
分隔 .注意:值列表中的值不能带有通配符
查询10部门和20部门的员工信息(编号,姓名,职位,工资,部门编号)
select empno,ename,job,sal,deptno
from emp
where deptno =10 or deptno=20;
-- in
select empno,ename,job,sal,deptno
from emp
where deptno in(10,20);
查询职位为‘CLERK’或者是‘MANAGER’的员工信息(编号,姓名,职位,工资,部门编号)
select empno ,ename,job,sal,deptno
from emp
where job ='CLERK' or job='MANAGER';
--in
select empno,ename,job,sal,deptno
from emp
where job in('CLERK','MANAGER');
----------------in 取反 not in
查询不是10部门也不是20部门的员工信息(编号,姓名,职位,工资,部门编号)
select empno,ename,job,sal,deptno
from emp
where deptno!=10 and deptno <> 20;
-- not
select empno ename,job,sal,deptno
from emp
where not (deptno=10 or deptno=20);
--not in
select empno ename,job,sal,deptno
from emp
where deptno not in(10,20);
查询职位不是‘CLERK’同时也不是‘MANAGER’的员工信息(编号,姓名,职位,工资,部门编号)–>not in
select empno,ename,job,sal,deptno
from emp
where job not in('CLERK','MANAGER');
6.4 is null 判断值是否为null 不包含‘null’也不包含’’,也不包含0
查询奖金为null的员工信息(编号,姓名,职位,工资,奖金,部门编号)
select empno,ename,job,sal,comm,deptno
from emp
where comm is null;
查询公司的总裁的信息(编号,姓名,职位,部门编号)
select empno,ename,job,deptno
from emp
where mgr is null;
-- is null 取反 is not null
查询有奖金的员工信息(编号,姓名,职位,工资,奖金,部门编号)
select empno,ename,job,sal,comm,deptno
from emp
where comm is not null;
7.使用连接符把多列的值连接为一列显示
7.1 使用函数 concat(s1,s2) 把s2的值连接到s1的后面,成为一个新的字符值
查询员工的信息 (编号姓名,职位,工资)
select concat(empno,ename) empInfo,job,sal
from emp;
查询员工的信息 (编号姓名职位,工资)
select concat(empno,ename,job),sal --出现错误 ,参数个数先效,原因:concat仅写两个参数
from emp;
解决方式,嵌套调用concat函数 ,
concat(concat(concat(s1,s2),s3),s4)
select concat(concat(empno,ename),job) empinfo,sal
from emp;
7.2 使用 || 连接符
##### 查询员工的信息 (编号姓名,职位,工资)
select empno||ename as empinfo,job,sal
from emp;
查询员工的信息 (编号姓名职位,工资)
select empno||ename||job||sal empinfo
from emp;
查询员工信息(编号–>姓名)
select empno||'-->'||ename as empInfo
from emp;