Oracle子查询详解!!!

发布网友 发布时间:1天前

我来回答

1个回答

热心网友 时间:1天前

子查询详解

子查询定义:子查询是一个嵌套在另一个查询中的SQL查询,执行顺序从内到外。

子查询使用原则:子查询必须放在圆括号内,并放在比较条件的右侧。单行子查询用单行运算符,多行子查询用多行运算符。

子查询类型:单行子查询和多行子查询。

示例:显示谁的薪水比Abel高。

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

单行子查询特点:仅返回一行,使用单行比较符。

单行比较运算符:=,>,>=,<,<=,>(不等于)

多行子查询中IN运算符:返回多行,使用多行比较符。

多行比较运算符:IN(等于列表中的任何成员),Any(比较子查询返回的每个值),All(比较子查询返回的全部值)。

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

SQL语句:select last_name,job_id from employees e where job_id=(select job_id from employees where employee_id='141');

子查询中使用组函数与HAVING子句:显示所有其薪水等于最低薪水的雇员的 last name、job ID 和 salary。

SQL语句:select last_name,job_id,salary from employees where salary=(select min(salary) from employees );

多行子查询中的ANY运算符:比较子查询返回的每个值。

示例:显示工作岗位不是 IT_PROG 的雇员,并且这些雇员的的薪水少于 IT_PROG 工作岗位的雇员的 ID、名字、工作岗位和薪水。

SQL语句:select s.employee_id,s.last_name,s.job_id,s.salary from employees s where s.salary 'IT_PROG';

多行子查询中的ALL运算符:比较子查询返回的全部值。

示例:显示那些薪水低于工作岗位 IT_PROG 的最低薪水,并且工作岗位不是 IT_PROG 的所有雇员。

SQL语句:select s.employee_id,s.last_name,s.job_id,s.salary from employees s where s.salary 'IT_PROG';

子查询练习:1.查询显示与 Zlotkey 在同一部门的雇员的 last name 和 hire date,结果中不包括 Zlotkey。

SQL语句: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.创建一个查询显示所有其薪水高于平均薪水的雇员的雇员号和名字。按薪水的升序排序。

SQL语句: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 的部门的雇员的雇员号和名字。

SQL语句: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。

SQL语句: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报告的雇员的名字和薪水。

SQL语句: 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。

SQL语句: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。

SQL语句: 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%');

数据操纵语言(DML):在Oracle中,数据操纵语言用于添加、更新或删除数据库中的数据。一个DML操作通常包含在一个被称为事务的逻辑单元中。

插入操作:使用INSERT语句添加新行到表中。语法格式为:Insert into table values。

插入带空值的行:有隐式方法和显示方法,隐式方法为省略字段列表中的列,显示方法为在values子句中指定null关键字。

插入日期格式的数据:可以使用'日/月/年'格式,例如'01/7月/2019',也可以使用Oracle的TO_DATE函数处理日期。

修改表中的数据:使用UPDATE语句,语法格式为:Update table set。

从表中删除数据:使用DELETE语句,语法格式为:Delete from table where。
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com

热门图文