oracle where exists 练习
时间: 2023-10-23 16:13:00 浏览: 92
您好!对于练习使用 Oracle 的 WHERE EXISTS 子句,您可以尝试以下示例:
假设有两个表,一个是 "orders" 表,包含订单信息,另一个是 "customers" 表,包含客户信息。我们的目标是找出在 "orders" 表中有订单的那些客户。
```sql
SELECT *
FROM customers c
WHERE EXISTS (
SELECT 1
FROM orders o
WHERE o.customer_id = c.customer_id
);
```
上述查询将返回在 "orders" 表中有订单的所有客户的信息。
希望这个示例对您有所帮助!如果您有任何其他问题,请随时提问。
相关问题
请使用Oracle11g软件下默认账户scott提供的emp表和dept表完成如下SQL练习题,请找出员工工资均大于1000的部门其员工信息【要求使用exists子查询】,用一条语句输出。
可以使用以下SQL语句来实现:
```
SELECT *
FROM emp
WHERE EXISTS (
SELECT 1
FROM dept
WHERE emp.deptno = dept.deptno
AND deptno IN (
SELECT deptno
FROM emp
GROUP BY deptno
HAVING AVG(sal) > 1000
)
);
```
解释一下以上SQL语句的思路:
- 首先,我们需要找到工资均大于1000的部门编号。为此,我们需要对emp表进行分组,计算每个部门的平均工资,并筛选出工资均大于1000的部门编号。这可以通过以下子查询实现:
```
SELECT deptno
FROM emp
GROUP BY deptno
HAVING AVG(sal) > 1000
```
- 接着,我们需要找到所有属于这些部门的员工。这可以通过检查每个员工所在的部门编号是否在上一步筛选出的部门编号列表中来实现。使用EXISTS子查询可以很容易地实现这一点。
最终输出的结果将包含所有工资均大于1000的部门中的所有员工信息。
请使用Oracle 11g软件下默认账户scott提供的emp表和dept表完成如下SQL练习题,要求将sql语句及执行结果截图上传。 1. 请统计各部门的薪水情况:要求提供部门id、员工数、最高/最低/平均工资,对结果列取别名后展示。 2. 请找出比30号部门的所有员工工资都高的其他部门的员工信息。 3. 请找出各部门工资最高的员工, 展示其员工姓名、工资、所在部门名字【要求使用派生表实现】。 4. 找出其manager id为7698或7566,工资在1500-2850之外的,职位为CLERK或 ANALYST的员工信息。 5. 请找出工资大于2000的职员数最多的部门,列出部门号,工资大于2000的员工数。 6. 请找出员工工资均大于1000的部门其员工信息【要求不使用exists子查询】。 7. 请找出员工工资均大于1000的部门其员工信息【要求使用exists子查询】。 8. 请找出BLAKE所管理的员工信息。 9. 请找出以’S’开头或结尾的职位为MANAGER的员工信息及其所在部门名。 10. 创建视图,其内容为MANAGER的员工信息, 并通过视图插入新的MANAGER员工信息并对其进行删除【要求该视图只能针对MANAGER类型的员工记录进行操作】。
抱歉,由于我是一个AI语言模型,无法提供截图服务。但我可以给你提供SQL语句。
1.
```
SELECT d.deptno AS "部门ID", COUNT(e.empno) AS "员工数",
MAX(e.sal) AS "最高工资", MIN(e.sal) AS "最低工资", AVG(e.sal) AS "平均工资"
FROM emp e, dept d
WHERE e.deptno = d.deptno
GROUP BY d.deptno;
```
2.
```
SELECT *
FROM emp
WHERE sal > ALL (SELECT sal
FROM emp
WHERE deptno = 30)
AND deptno != 30;
```
3.
```
SELECT e.ename AS "员工姓名", e.sal AS "工资", d.dname AS "所在部门名"
FROM emp e, dept d,
(SELECT deptno, MAX(sal) AS max_sal
FROM emp
GROUP BY deptno) max_sal_emp
WHERE e.deptno = d.deptno
AND e.deptno = max_sal_emp.deptno
AND e.sal = max_sal_emp.max_sal;
```
4.
```
SELECT *
FROM emp
WHERE (mgr = 7698 OR mgr = 7566)
AND sal NOT BETWEEN 1500 AND 2850
AND (job = 'CLERK' OR job = 'ANALYST');
```
5.
```
SELECT d.deptno AS "部门号", COUNT(*) AS "员工数"
FROM emp e, dept d
WHERE e.deptno = d.deptno
AND e.sal > 2000
GROUP BY d.deptno
HAVING COUNT(*) >= ALL (SELECT COUNT(*)
FROM emp
WHERE sal > 2000
GROUP BY deptno);
```
6.
```
SELECT e.*
FROM emp e, dept d
WHERE e.deptno = d.deptno
GROUP BY e.deptno
HAVING MIN(e.sal) > 1000;
```
7.
```
SELECT e.*
FROM emp e
WHERE EXISTS (SELECT *
FROM dept d
WHERE e.deptno = d.deptno
GROUP BY d.deptno
HAVING MIN(e.sal) > 1000);
```
8.
```
SELECT *
FROM emp
WHERE mgr = (SELECT empno
FROM emp
WHERE ename = 'BLAKE');
```
9.
```
SELECT e.*, d.dname
FROM emp e, dept d
WHERE e.deptno = d.deptno
AND (e.job LIKE 'S%' OR e.job LIKE '%S')
AND e.job = 'MANAGER';
```
10.
```
CREATE VIEW manager_view AS
SELECT *
FROM emp
WHERE job = 'MANAGER';
INSERT INTO manager_view
VALUES (10000, 'NEW MANAGER', 'MANAGER', NULL, SYSDATE, 3000, NULL, 20);
DELETE FROM manager_view
WHERE ename = 'NEW MANAGER';
```
阅读全文