因为昨天突然有了写博客的想法,所以这两天乘着五一,把之前已经学了的知识点都写出来,往后就应该是一周一更。奋斗坚持!!!
1.限定查询
限定查询顾名思义 就是在数据查询时设置一些的过滤条件,只有满足指定条件的才能保留下来
select [distinct] {*| 列名| 表达式 , ...} from 表名
[where 条件表达式]
条件表达式:列名 比较操作符 要比较的值
•WHERE子句紧跟在FROM子句之后
在Oracle中<>为不等于使用。以上比较运算符可进行数值、字符串、日期之间进行比较。其中字符串数据和日期数据必须用单引号引起来,字符串数值区分大小写,日期数据一定要注意格式,默认格式为“DD-MON-RR”如“28-4月-2016”
1.查询职位为SALESMAN的员工编号、职位、入职日期
select empno,job,hiredate from emp where job='SALESMAN';
2.查询1985年12月31日之前入职的员工姓名及入职日期
select ename,hiredate from emp where hiredate>'31-12月-85';或者(转换函数后期解释)select ename,hiredate from emp where to_char(hiredate,'yyyy-mm-dd')>'1985-12-31';
3.查询部门编号不在10部门的员工姓名、部门编号
select ename,deptno from emp where deptno<>10;
或者 (使用not)
select ename,deptno from emp where not deptno=10;
between…and…判断要比较的值在某个范围in(集合列表)判断要比较的值是否和集合中某一直相等like(模糊查询)判断要比较的值是否满足部分匹配,通配符“_”表示一个字符串长度,“%”表示任意长度is、like、=区别is“是”什么、“=与什么一样”、like像什么
1.查询入职日期在82年至85年的员工姓名,入职日期 select ename,hiredate from empwhere hiredate between '01-1月-1982' and '31-12月-1985' 2.查询月薪在3000到5000的员工姓名,月薪 select ename,sal from emp where sal between 3000 and 5000; 3.查询部门编号为10或者20的员工姓名,部门编号 select ename,deptno from emp where deptno in(10,20); 还可以使用 "or" 4.查询经理编号为7902, 7566,7788的员工姓名 ,经理编号 select ename,mgr from emp where mgr in(7902,7566,7788);
例题(like)
5.查询员工姓名以W开头的员工姓名 select ename from emp where ename like 'W%'; 这道题在学习了字符函数之后还有where instr(ename,'W')=1;或者where substr(ename,1,1)='W'; 但是还是喜欢like,就因为代码能少敲 2.查询员工姓名倒数第2个字符为T的员工姓名。 select ename from emp where ename like '%T_'; 3.查询奖金为空的员工姓名,奖金 select ename,comm from emp where comm is null;(is null能查询空值)
当需要和多个条件表达式进行比较时,需要使用逻辑运算符 把多个表达式连接起来,逻辑运算符包括AND、OR、NOT,逻 辑表达式的结果为TRUE,FALSE,NULL
1.and:例如登录qq成功为true。只有账号和密码都为true的时候才能成功登录true;当其中一个为true其中一个为false时显示谁的错误这时不能登录为false;当其中一个为true其中一个不填写为null时,提示谁为null;当都错误时提示错误false;当其中一个false一个不填写时为false(这个不恰当)
2.or:例如去餐厅吃上饭为true。钱包有钱或银行卡有钱或都有钱必然能吃上饭true;钱包有钱true 但不知道银行卡有没有钱null能吃上饭true;钱包没钱但也不知道银行卡有没有钱,就得查银行卡才能确定能不能吃饭null;钱包银行卡都没钱肯定不能吃饭false(只考虑钱包和银行卡)
No. | 条件x | 条件y | and | or |
1 | true | true | true | true |
2 | true | null | null | true |
3 | true | false | false | true |
4 | false | false | false | false |
5 | false | null | false | null |
6 | null | null | null | null |
优先级 | 运算分类 | 举例 |
1 | 乘除 | *,\ |
2 | 加减,连接 | +,-,|| |
3 | 比较运算符 | =,<>,<,>,<=,>= |
4 | 特殊比较运算符 | between…and…,in,like,is null |
5 | 逻辑非 | not |
6 | 逻辑与 | and |
7 | 逻辑或 | not |
1..查询工资超过2000并且职位是MANAGER,或者职位是SALESMAN的员工姓名、职位、工资
select ename,job,sal from emp
where sal>2000 and job='MANAGER' or job= 'SALESMAN';
2.查询工资超过2000并且职位是MANAGER或SALESMAN的员工姓名 、职位、工资
select ename,job,sal from emp
where sal>2000 and (job='MANAGER' or job= 'SALESMAN');
3.查询部门在10或者20,并且工资在3000到5000之间的员工姓名 、部门、工资
select ename,job,sal from emp
where (sal between 3000 and 5000) and deptno in (10,20);
4.查询入职日期在81年,并且职位不是SALES开头的员工姓名、入职日期、职位
select ename,hiredate,job from emp where substr(hiredate,-2,2)='81' and job not like 'SALES%';
5.查询职位为SALESMAN或MANAGER,部门编号为10或者20,姓名 包含A的员工姓名职位部门编号
select ename,job,deptno from emp where job in('SALESMAN','MANAGER') and deptno in(10,20)
and instr(ename,'A')>0;
1.查询部门在20或30的员工姓名,部门编号,并按照工资升序排序
select ename,deptno from emp where deptno in(20,30) order by sal asc;
2.查询工资在2000-3000之间,部门不在10号的 员工姓名、部门编号、工资,并按照部门升序,工资降序排序
select ename,deptno,sal from emp where sal between 2000 and 3000 and deptno <>10
order by deptno asc,sal desc;
3.查询入职日期在82年至83年之间,职位以 SALES或者MAN开头的员工姓名、入职日期、职位,并按照入职日期降序排序
select ename,hiredate,job from emp
where substr(hiredate,-2,2)>='82' and substr(hiredate,-2,2)<='83' and job like 'SALES%' or job like 'MAN' order by hiredate desc;
1.查询入职时间在1982-7-9之后,并且不从事SALESMAN工作的 员工姓名、入职时间、职位
select ename,hiredate,job from emp
where hiredate>'9-7月-1982' and job <>'SALESMAN';
2.查询员工姓名的第三个字母是a的员工姓名
select ename from emp where ename like '__A%';
3.查询除了10、20号部门以外的员工姓名、部门编号。
select ename,deptno from emp where deptno not in(10,20);
4.查询部门号为30号员工的信息,先按工资降序排序,再按姓名升序排序
select ename,deptno,sal from emp where deptno=30
order by sal desc,ename asc;
5.查询没有上级的员工(经理号为空)的员工姓名
select ename from emp where mgr is null;
6.查询工资大于等于4500并且部门为10或者20的员工的姓名、工 资、部门编号
select ename,sal,deptno from emp where sal>=4500 and deptno in(10,20);