Fork me on GitHub

简单查询和限定查询

使用scott用户下的表

1.--查询表的所有内容

SELECT * FROM emp;

2.--查询员工编号,姓名,基本工资

SELECT e.empno,e.ename,e.sal
FROM emp e;

3.--查询职位并去掉重复

SELECT DISTINCT e.job
FROM emp e;

4.--查询员工编号,姓名,基本工资,月薪,年薪

SELECT e.empno 编号,e.ename 姓名,e.sal 月薪,e.sal*12 || '' 年薪,ROUND(e.sal/30,2) 日薪, '$' 货币
 FROM emp e;

5.--查询表中有多少条记录

SELECT COUNT(*) FROM emp;

6.--查询基本工资高于1500的全部员工信息

SELECT *
FROM emp e
WHERE e.sal>1500;

7.--查询基本工资小于等于2000的全部员工信息

SELECT *
FROM emp e
WHERE e.sal<=2000;

8.--查询姓名是smith的员工信息

SELECT *
FROM emp e
WHERE e.ename=UPPER('smith');

9.--查询职位是clerk的的员工信息

SELECT *
FROM emp e
WHERE e.job='CLERK';

10--查询职位不是clerk的的员工信息

SELECT *
 FROM emp e
  WHERE NOT e.job='CLERK';
 
 SELECT *
  FROM emp e
 WHERE e.job<>'CLERK';
  
 SELECT *
FROM emp e
 WHERE e.job!='CLERK';

11.--查询工资在1500~3000包含1500和3000的员工的信息

SELECT *
FROM emp e
WHERE e.sal BETWEEN 1500 AND 3000;

12.--查询职位是销售人员salesman并且工资高于1200的员工信息

SELECT *
FROM emp e
WHERE e.job='SALESMAN' AND e.sal>1200;

13.--要求查询中10部门中的经理或者20部门中的业务员

SELECT *
FROM emp e
WHERE (e.deptno=10 AND e.job='MANAGER')
OR (e.deptno=20 AND e.job='CLERK')

14.--查询不是业务员且工资大于2000的员工

SELECT *
FROM emp e
WHERE e.job<>'CLERK' AND e.sal>2000;

15.--查询出在1981年入职的员工

SELECT * 
FROM emp e
WHERE to_char(e.hiredate,'YYYY')='1981';

--判断内容是否为空is null ,is not null
16.--查询所有领取资金的员工的信息

SELECT *
FROM emp e
WHERE e.comm IS NOT NULL;

17.--查询所有不领取资金的员工的信息

SELECT *
FROM emp e
WHERE e.comm IS NULL;

18.--查询所有不领取资金同时工资大于2000的员工的信息

SELECT *
FROM emp e
WHERE e.comm IS NULL AND e.sal>2000;

19.--查询不收取佣金,或者收取佣金小于100元的员工

SELECT *
FROM emp e
WHERE e.comm IS NULL OR e.comm<100;

20.--查找收取佣金的员工的不同职位的工作
--先查找收取佣金的员工职位JOB

SELECT e.job
FROM emp e 
WHERE e.comm IS NOT NULL;

--发现职位重复使用distinct

SELECT DISTINCT e.job
FROM emp e
WHERE e.comm IS NOT NULL;

 

--列的范围查找in ,not in,有固定的多个条件才使用
-21.-查询出员工编号是7369,7788,7566的员工信息
--可以用OR来写

SELECT * 
FROM emp e
WHERE e.empno=7369 OR e.empno=7788 OR e.empno=7566

--用in来写可以省去很多代码

SELECT *
FROM emp e
WHERE e.empno IN (7369,7788,7566);

 

22.--查询出员工编号不是7369,7788,7566的员工信息

SELECT *
FROM emp e
WHERE e.empno NOT IN (7369,7788,7566);

 

--模糊查询 like not like 
--%匹配0个,1个或者多个字符
--_下划线只能匹配一个字符
23.--查询出员工姓名是S开头的员工信息

SELECT *
FROM emp e
WHERE e.ename LIKE 'S%';

 

24.--查询姓名第2个字母是M的员工信息

SELECT * 
FROM emp e
WHERE e.ename LIKE '_M%';

 

25.--查询姓名中包含F的员工信息
--先分析F可以出现在姓名中的任意位置用%来匹配

SELECT *
FROM emp e
WHERE e.ename LIKE '%F%'

26.--查询姓名长度为6或者长度超过6的员工信息

SELECT * 
FROM emp e
WHERE LENGTH(e.ename)>=6;


--也可以用下划线来匹配6个下划线

SELECT * 
FROM emp e
WHERE e.ename LIKE '______%';

 

27.--查询基本工资中包含1或者在81年入职的员工

SELECT * 
FROM emp e
WHERE e.sal LIKE '%1%' OR to_char(e.hiredate,'YYYY')='1981';

 

--换成AND

SELECT * 
FROM emp e
WHERE e.sal LIKE '%1%' AND to_char(e.hiredate,'YYYY')='1981';

28.--查询10部门中的所有经理,20部门中所有业务员,
--既不不是经理又不是业务员但工资大于2000元的所有员工
--同时员工姓名中包含S或者K

SELECT * 
FROM emp e
WHERE ((e.deptno=10 AND e.job='MANAGER')
OR (e.deptno=20 AND e.job='CLERK')
OR(e.job NOT IN('MANAGER','CLERK') AND e.sal>2000))
AND (e.ename LIKE '%S%'OR e.ename LIKE '%K%');

 

--order by 排序 ASC ASC可以省略,升序 DESC 降序 
29.--查询所有员工,并按工资由高到低排序 

SELECT * 
FROM emp e
ORDER BY e.sal DESC;

 

30.--查询所有员工,并按工资由低到高排序 

SELECT * 
FROM emp e
ORDER BY e.sal ASC;

 

--ASC可以不写

SELECT * 
FROM emp e
ORDER BY e.sal;

 

31.--查询所有业务员的详细信息,并且按照,基本工资由低到高排序

SELECT * 
FROM emp e
WHERE e.job='CLERK'
ORDER BY e.sal ASC;

 

32.--查询所有员工信息,要求按基本工资由高到低排序,如果工资相同按入职早,晚时间排序

SELECT *
FROM emp e
ORDER BY e.sal DESC ,e.hiredate ASC;

 

posted @ 2015-01-05 21:11  森林森  阅读(1105)  评论(0编辑  收藏  举报