Oracle子查询详解!!!

1. 什么是子查询

(1) 什么是子查询?

子查询是一个select语句,他是嵌在另一个select 语句中的子句

(2) 子查询执行的顺序是什么?

从内到外(先执行子查询再执行主查询)

2. 使用子查询

(1) 使用子查询的原则是什么?

1. 子查询放在圆括号中

2. 将子查询放在比较条件的右边

3. 在单行子查询中用单行运算符,在多行子查询中用多行运算符

(2) 有哪些类型的子查询?

单行子查询和多行子查询

(3) 写出谁的薪水比Abel高。

select y.last_name,y.salary from employees y where y.salary>( select e.salary from employees e where e.last_name='Abel');

3. 单行子查询

(1) 单行子查询的特点是什么?

仅返回一行

使用单行比较符

(2) 主查询对子查询结果的单行比较运算符有哪些?

= > >= < <= <>(不等于)

4. 在子查询中使用组函数与HAVING子句

(1) 什么是子查询错误?

使用子查询的一个常见错误是单行子查询返回了多行

5. 多行子查询中IN运算符

(1) 什么是多行子查询?

返回多于一行

使用多行比较符

(2) 主查询对子查询的多行比较运算符有哪些?

In:等于列表中的任何成员

Any 比较子查询返回的,每个值

All 比较子查询返回的全部值

1.单行子查询

显示那些 job ID 与雇员 141 相同的雇员的名字与 job ID。

select last_name,job_id from employees e where job_id=(select job_id from employees where employee_id='141');

显示 job ID 与雇员 141 相同,并且薪水 高于雇员 143 的那些雇员。

select last_name,job_id from employees e where job_id>(select job_id from employees where employee_id='141');

1.子查询中使用组函数

显示所有其薪水等于最低薪水的雇员的 last name、job ID 和 salary。

select last_name,job_id,salary from employees where salary=(select min(salary) from employees );

显示所有其最低薪水小于 部门 50 的最低薪水的部门号和最低薪水。

select department_id,min(salary) from employees group by department_id having min(salary)>( select min(salary) from employees group by department_id having department_id=50);

6. 多行子查询中的ANY运算符

(1) ANY运算符的作用是什么?

比较子查询返回的每个值

显示工作岗位不是 IT_PROG 的雇员,并且这些雇员的的薪水少于 IT_PROG 工作岗位

的雇员的 ID、名字、工作岗位和薪水。

select s.employee_id,s.last_name,s.job_id,s.salary from employees s where s.salary <any(select salary from employees e where job_id='IT_PROG' ) and job_id<> 'IT_PROG';

7. 多行子查询中的ALL运算符

(1) ALL运算符的作用是什么?

比较子查询返回的全部值

显示那些薪水低于工作岗位 IT_PROG 的最低薪水,并且工作岗位不是 IT_PROG 的

所有雇员。

select s.employee_id,s.last_name,s.job_id,s.salary from employees s where s.salary <all(select salary from employees e where job_id='IT_PROG' ) and job_id<> 'IT_PROG';

子查询小结练习

1.写一个查询显示与 Zlotkey 在同一部门的雇员的 last name

和 hire date,结果中不包括 Zlotkey。

select e.last_name,e.hire_date from employees e where department_id in(select em.department_id from employees em where em.last_name='Zlotkey') and e.last_name <>'Zlotkey';

2创建一个查询显示所有其薪水高于平均薪水的雇员的雇员号

和名字。按薪水的升序排序。

select e.last_name,e.employee_id from employees e where e.salary>(select avg(salary) from employees em) order by e.salary;

3.写一个查询显示所有工作在有任一雇员的名字中包含一个 u

的部门的雇员的雇员号和名字。

select e.last_name,e.employee_id from employees e where e.department_id in( select distinct em.department_id from employees em where em.last_name like '%u%');

.4显示所有部门地点号 (department location ID ) 是 1700

的雇员的 last name、department number 和 job ID

select e.last_name,e.department_id,e.phone_number,e.job_id from employees e where e.department_id in (select d.department_id from departments d where d.location_id=1700);

5显示每个向King报告的雇员的名字和薪水。

select work.last_name,work.salary from employees work,employees boss where work.manager_id=boss.employee_id and boss.employee_id in (select e.employee_id from employees e where e.last_name='King');

6显 示 在 Executive 部 门 的 每 个 雇 员 的 department

number、last name 和 job ID。

select e.department_id,e.last_name,e.job_id,e.phone_number from employees e where e.department_id in(select d.department_id from departments d where d.department_name='Executive');

7查询显示所有收入高于平均薪水并且工作在有任一雇员的名

字中带有一个 u 的部门的雇员的 employee numbers、last

names 和 salaries。

select e.employee_id,e.phone_number,e.last_name,e.salary from employees e where e.salary>( select avg(em.salary) from employees em ) and e.department_id in (select distinct es.department_id from employees es where es.last_name like '%u%');

8. 数据操纵语言(DML)INSERT的使用

(1) 数据操纵语言的作用是什么?

1.当添加,更新或者删除数据库中的数据时需要使用DML语句.DML依据的一个集合构成了一个被称为事务的逻辑单元.

(2) 添加一个新的行到表中使用什么语句?

Insert语句

(3) 插入数据语句的语法格式是什么?

Insert into table values

9. 插入带空值的行

(1) 插入带空值的行有几种方法?

1隐式方法:省略字段列表中的列

2.显示方法:在values 子句中指定null关键字

10. 插入日期格式的数据

(1) 插入日期格式的数据

1. ‘日/月/年’例子:’01/7月/2019’

2. To_date(‘2030-12-23’,’yyyy-mm-dd’’)

(2) 在Oracle中使用什么函数处理日期?

To_date

11. 从另一个表中复制行

(1) 如何从另一个表中复制行?

用一个查询写insert语句

不用values语句

在查询中列的数目啊哟匹配insert子句中列的数目

12. 在INSERT中使用默认值

(1) 在Oracle中插入数据时对于default值的处理有几种方式?

1. 你可以选择不插入那一列的数据,如果哪一列有默认值,则会插入默认值

2. 直接写default,会插入默认值

13. 修改表中的数据

(1) 使用什么语句来更新表中的数据?

Update修改已存在的行

(2) 更新数据语句的语法格式是什么?

Update table set

14. 从表中删除数据

(1) 使用什么语句来删除表中的数据?

Delete语句从表中删除已存在的行

(2) 删除数据语句的语法格式是什么?

Delete from table where

发布于 2019-05-13 16:19

文章被以下专栏收录