首页 > 代码库 > Orcle基本语句(四)

Orcle基本语句(四)

  1 --显示员工的编号,姓名,工资,工资级别,所在部门的名称;(使用emp表)
  2 SELECT * FROM emp;
  3 SELECT * FROM salgrade;
  4 SELECT * FROM dept;
  5 SELECT e.empno, e.ename, e.sal, s.grade, d.dname
  6   FROM emp e, salgrade s, dept d
  7  WHERE e.sal BETWEEN s.losal AND s.hisal
  8    AND e.deptno = d.deptno;
  9 --现要求查询出每个雇员的姓名,工资,部门名称,工资在公司的等级(salgrade),及领导姓名及工资所在公司的等级
 10 SELECT e1.empno,
 11        e1.ename,
 12        e1.sal,
 13        s1.grade 员工工资等级,
 14        d.dname,
 15        e2.ename,
 16        e2.sal   领导工资,
 17        s2.grade 领导工资等级
 18   FROM emp e1, salgrade s1, salgrade s2, dept d, emp e2
 19  WHERE e1.sal BETWEEN s1.losal AND s1.hisal
 20    AND e1.deptno = d.deptno
 21    AND e1.mgr = e2.empno
 22    AND e2.sal BETWEEN s2.losal AND s2.hisal
 23  ORDER BY e1.sal;
 24 --外联接
 25 SELECT d.*, e.* FROM dept d, emp e WHERE d.deptno(+) = e.deptno; -- 右外联接(一)
 26 SELECT d.*, e.* FROM dept d, emp e WHERE d.deptno = e.deptno(+); --左外联接(一)
 27 SELECT d.*, e.* FROM dept d RIGHT JOIN emp e ON d.deptno = e.deptno; -- 右外联接(二)
 28 SELECT d.*, e.* FROM dept d LEFT JOIN emp e ON d.deptno = e.deptno; -- 左外联接(二)
 29 
 30 --查询员工编号,姓名,部门编号,部门名称(左外连接)
 31 SELECT e.empno, e.ename, e.deptno, d.dname
 32   FROM emp e
 33   LEFT JOIN dept d
 34     ON e.deptno = d.deptno;
 35 SELECT e.empno, e.ename, e.deptno, d.dname
 36   FROM emp e, dept d
 37  WHERE e.deptno = d.deptno(+);
 38 --查询员工编号,姓名,部门编号,部门名称(右外连接)
 39 SELECT e.empno, e.ename, e.deptno, d.dname
 40   FROM emp e
 41  RIGHT JOIN dept d
 42     ON e.deptno = d.deptno;
 43 SELECT e.empno, e.ename, e.deptno, d.dname
 44   FROM emp e, dept d
 45  WHERE e.deptno(+) = d.deptno;
 46 --查询30号部门的员工
 47 SELECT * FROM emp;
 48 SELECT * FROM emp e JOIN dept d USING (deptno) WHERE deptno = 30;
 49 
 50 --查询员工编号,姓名,部门编号,部门名称,职务编号,职务名称并且薪资大于8000 按照薪资降序排列 
 51 SELECT e.employee_id,
 52        e.last_name,
 53        d.department_id,
 54        d.department_name,
 55        e.salary,
 56        j.job_id,
 57        j.job_title
 58   FROM employees e
 59  INNER JOIN departments d
 60     ON e.department_id = d.department_id
 61  INNER JOIN jobs j
 62     ON e.job_id = j.job_id
 63  WHERE e.salary > 8000
 64  ORDER BY e.salary DESC;
 65 COMMIT;
 66 --查询所有部门的编号,部门名称,部门经理ID,部门经理姓名,部门所在的城市,国家,地区
 67 SELECT * FROM departments;
 68 SELECT * FROM locations;
 69 SELECT * FROM employees;
 70 SELECT * FROM countries;
 71 SELECT d.department_id   部门编号,
 72        d.department_name 部门名称,
 73        d.manager_id      部门经理id,
 74        e.last_name       部门经理姓名,
 75        l.city            部门所在城市,
 76        c.country_name     部门所在国家,
 77        l.state_province  部门所在地区
 78   FROM departments d
 79   LEFT JOIN employees e
 80     ON d.manager_id = e.manager_id
 81   LEFT JOIN locations l
 82     ON d.location_id = l.location_id
 83     LEFT JOIN countries c
 84     ON l.country_id = c.country_id
 85  ORDER BY d.department_id;
 86 --查询谁的工资比‘ABEL’
 87 select * from employees;
 88 SELECT first_name || last_name NAME, salary
 89   FROM employees
 90  WHERE salary >= (SELECT salary FROM employees WHERE last_name = Abel)
 91  ORDER BY salary;
 92 ----查询工资比7654高,同时与7788从事相同工作的全部雇员信息(emp)
 93 SELECT * FROM emp;
 94 SELECT *
 95   FROM emp
 96  WHERE sal > (SELECT sal FROM emp WHERE empno = 7654)
 97    AND job = (SELECT job FROM emp WHERE empno = 7788);
 98 --部门名称,部门员工数,部门平均工资,部门的最低收入雇员的姓名
 99 SELECT d.dname, e.deptno, tmp.c, tmp.a, tmp.m, e.ename
100   FROM dept d,
101        emp e,
102        (SELECT e.deptno, COUNT(e.deptno) c, AVG(sal) a, MIN(sal) m
103        FROM emp e GROUP BY e.deptno) tmp
104  WHERE d.deptno = e.deptno
105  AND e.sal = tmp.m;
106 --求出每个部门的最低工资的雇员信息
107 SELECT *
108   FROM emp e, (SELECT MIN(sal) m FROM emp GROUP BY deptno) tmp
109  WHERE e.sal = tmp.m;
110  SELECT *
111   FROM emp e
112  WHERE e.sal in (SELECT MIN(sal) m FROM emp GROUP BY deptno);
113 ----查询工资与10部门中的任意一个人相等的员工信息
114 select * from emp;
115 SELECT * FROM emp WHERE sal in (SELECT sal FROM emp WHERE deptno =  10);
116 SELECT * FROM emp WHERE sal = ANY(SELECT sal FROM emp WHERE deptno =  10);
117 --查询所有是部门经理的员工(employees)
118 SELECT * FROM employees;
119 SELECT *
120   FROM employees
121  WHERE employee_id IN (SELECT manager_id FROM employees) ORDER BY employee_id;
122  SELECT *
123   FROM employees e1
124  WHERE  EXISTS(SELECT manager_id FROM employees e2 WHERE e1.employee_id = e2.manager_id) ORDER BY employee_id;
125 ----查询所有不是部门经理的员工(employees)
126 SELECT *
127   FROM employees
128  WHERE employee_id  <> ALL(SELECT manager_id FROM employees WHERE manager_id IS NOT NULL ) ORDER BY employee_id;
129  SELECT *
130   FROM employees
131  WHERE  employee_id NOT IN (SELECT manager_id FROM employees WHERE manager_id IS NOT NULL) ORDER BY employee_id;
132  SELECT *
133   FROM employees e1
134  WHERE NOT EXISTS(SELECT manager_id FROM employees e2 WHERE e1.employee_id = e2.manager_id) ORDER BY employee_id;
135  --查询所有员工人数不少于3人的部门信息(employees)
136  SELECT * FROM departments;
137  SELECT * FROM employees;
138  SELECT d.*,tmp.c
139    FROM departments d INNER JOIN
140         (SELECT department_id,COUNT(employee_id) c FROM employees GROUP BY department_id) tmp
141   ON tmp.c >= 3 AND d.department_id = tmp.department_id;
142  ----查询姓名,职位,薪资在按照 职位,薪资 去重复之后存在的数据
143  SELECT ename,job,sal FROM emp WHERE exists(select distinct job,sal from emp);
144 --查询是本部门入职最早的但不是部门经理的员工
145 SELECT * FROM employees;
146 --1.查询本部门入职最早的员工
147 SELECT MIN(hire_date) FROM employees GROUP BY department_id;
148 --2.查询不是部门经理的员工
149 SELECT *
150   FROM employees e1
151  WHERE NOT EXISTS(SELECT manager_id FROM employees e2 WHERE e1.employee_id = e2.manager_id) ORDER BY employee_id; 
152 --3.结合1、2给出本部门入职最早的但不是部门经理的员工
153 SELECT *
154   FROM employees e1
155  WHERE NOT EXISTS
156  (SELECT manager_id
157           FROM employees e2
158          WHERE e1.employee_id = e2.manager_id)
159    AND hire_date IN
160        (SELECT MIN(hire_date) FROM employees GROUP BY department_id)
161  ORDER BY employee_id;
162 --查询所有工资超过本部门平均工资的员工
163 --1. 查询各个部门的平均工资
164 SELECT department_id,AVG(salary) avgsa FROM employees GROUP BY department_id;
165 --2.
166 SELECT e.*, tmp.avgsa
167   FROM employees e,
168        (SELECT department_id, AVG(salary) avgsa
169           FROM employees
170          GROUP BY department_id) tmp
171  WHERE e.department_id = tmp.department_id
172    AND e.salary > tmp.avgsa;
173 
174 --查询所有换过职务的员工
175 SELECT e.*,jh.* FROM employees e,job_history jh WHERE e.employee_id = jh.employee_id; 
176 SELECT e.*, jh.*
177   FROM employees e
178  INNER JOIN job_history jh
179     ON e.employee_id = jh.employee_id;

 

Orcle基本语句(四)