1查询工资比scott高的员工信息

A 第一步:查询出scott这个员工的工资

select sal from emp

where ename = 'SCOTT';

B 第二步:查询出工资比scott高的员工信息

select * fromemp

where sal >3000;

总结:

子查询的本质:多个select语句的嵌套

2:子查询的知识体系搭建

A 合理的书写风格

B 子查询外面()不要忘记

C 子查询和主查询可以查询的是同一张表,也可以不是同一张表

只要子查询返回的结果,主查询可以用即可。

D 在什么地方可以防止子查询

select a,b,c                     ---OK,只能存放单行子查询,不能使多行子查询

from tab1                  ---OK 可以有子查询

where col in(em1,em2)       ---可以有子查询

col between a1 and a2

col > 222

col > ()

group by …                 ---不可以有子查询

having ….                  ---可以有子查询

order by …                 ---不可以有子查询

E 子查询的分类

1.单行操作符对应单行子查询,多行操作符对应多行子查询。

2.按照子查询返回的条目数,分为:单行子查询和多行子查询

3.单行子查询只能使用单行比较操作符(=  >   >=  <  <=  <>)

4.多行子查询只能使用多行比较操作符(int any all)

3 单行子查询

Eg:查询员工信息和141号工种一样的,薪水比143号员工工资高的员工

SQL> conn hr/123456

已连接。

SQL> select last_name,job_id,salary

2  FROM employees

3  WHERE job_id =

4                (SELECT job_id

5                 FROM employees

6                 WHERE employee_id = 141);

Eg:查询工资最低的员工信息

select last_name,job_id,salary

FROM employees

WHERE salary =

(SELECT MIN(salary)

FROM employees);

Eg:求各个部门编号和部门的最低工资(这个最低工资要比50号部门的最低工资要高)

思路分析:看子查询 看group by 和 having条件检索 看检索对象

//子查询:求50号部门的最低工资

à检索 各部门的最低工资  比50号部门的最低工资 大的部门号和部门最小工资

SELECT department_id,MIN(salary)

FROM employees

GROUP By department_id

HAVING MIN(salary) >

(SELECT MIN(salary)

FROM employees

WHERE department_id = 50);

4  查询部门名称是SALES的员工信息(2中方式)

方法1:子查询

SELECT *

FROM emp

WHERE DEPTNO = (SELECT deptno

FROM dept

WHERE dname = 'SALES');

方法2:多表查询

SELECT e.*

FROM emp e,dept d

WHERE e.deptno = d.deptno and d.dname = 'SALES';

注意:第二种(多表查询的执行速度比子查询的执行速度快,因为多表查询是一次将数据读到内存中进行读取,消耗内存而加快速度)

第一种(子查询要进行两次连接数据库的操作,连接数据库的操作是一个耗时操作,减低了速度)。

5 select后面要查询的列中可以是单行子查询,不可以是多行子查询

错误案例:

select ename,empno,(select deptno from emp) AA from emp;

正确案例:

select ename,empno,(select deptno from emp where EMPNO = 7369) AA from emp;

6 查询员工的姓名和薪水

select *

from (select ename,sal

from emp);

7 多行子查询

多行子查询只能使用多行比较操作符(in any all)

--eg 查询部门名称是*(不是)SALES 和 ACCOUNTING 的员工信息  2种方法

--eg 查询薪水 比30号部门 任意一个员工薪高的员工信息

-eg 查询薪水 比30号部门 所有员工 高的员工信息

查询部门名称是*(不是)SALES 和 ACCOUNTING 的员工信息  2种方法

select *

from emp

where deptno in

(select deptno

from dept

where dname = 'SALES' or dname = 'ACCOUNTING');

操作符

含义

IN

等于列表中的任何一个

ANY

和子查询返回的任意一个值比较

ALL

和子查询返回的所有值比较

ANY

SELECT employee_id,last_name,job_id,salary

FROM employees

WHERE salary < ANY

(SELECT salary

FROM employees

WHERE job_id = 'IT_PROG')

AND job_id <> 'IT_PROC';

ALL

SELECT employee_id,last_name,job_id,salary

FROM employees

WHERE salary < ALL

(SELECT salary

FROM employees

WHERE job_id = 'IT_PROG')

AND job_id <> 'IT_PROC'

Eg: 比30号部门 任意一个员工薪高的员工信息  大于集合中的最小值 any

select *

from emp

where sal > all(select sal

from emp

where deptno = 30);

等价于:

select *

from emp

where sal > (select max(sal)

from emp

where deptno = 30);

查询是经理的员工信息

分析:

SELECT *

FROM emp

WHERE empno in(经理的集合);

实际:

select *

from emp

where empno in

(

select mgr from emp

);

select *

from emp

where empno not in

(

select mgr

from emp

where mgr is not null

);

1.子查询知识体系,单行子查询,多行子查询相关推荐

  1. 零基础带你学习MySQL—单行子查询和多行子查询(二十二)

    零基础带你学习MySQL-多行子查询(二十二) 一.什么是子查询? 子查询是指嵌入在其它 sql 语句中的 select 语句,也叫嵌套查询 二.什么是单行子查询? 单行子查询是指只返回一行数据的子查 ...

  2. mysql3表查询语句_MySQL基础语句三(多表查询)

    今天让我们来学习mysql的多表查询,爱学习的你就是我的好朋友哦! 多表设计的两种方式:通过id关联(还可以是其他不重复的字段) 通过外键关联 主键: 能够唯一表示数据表中的每个记录的字段或者字段的组 ...

  3. mysql更新id最大_我们可以在单个MySQL查询中更新具有最高ID的行吗?

    是的,我们可以做到.让我们首先创建一个表-mysql> create table DemoTable ( ID int, GameScore int ); 使用插入命令在表中插入一些记录-mys ...

  4. 用sqlserver查询数据的所有表名和行数找到餐饮管理软件菜品表名Course

    给HF酒店更换餐饮管理软件,要从原软件SQL2000数据库中导出菜品名称.价格和分类.表太多了,真不知道怎么会需要那么多表,TMD! 记得有一千多个菜品,所以我用命令查询数据库中所有表名和行数,最终找 ...

  5. 单行子查询 多行子查询 关联子查询 笔记

    1.连接基本语法 select columns_list from table_1 innner join table_2 on join_condition; eg:select e.empno,e ...

  6. oracle子查询子查询,Oracle 单行子查询和多行子查询

    --什么是单行子查询? --从子查询中返回一行结果的查询 select e.employee_id,e.last_name,e.salary from employees e where e.depa ...

  7. 嵌套套娃,MySQL子查询,单行与多行子查询,相关和不相关(关联)子查询,完整详细可收藏

    文章目录 1.需求分析与问题解决 2.单行子查询 3.多行子查询 4.相关子查询 5.抛一个思考题 子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从MySQL 4.1开始引入.SQL 中 ...

  8. Oracle数据库:子查询、单行子查询,多行子查询,in,any,all语句,子查询的练习案例

    Oracle数据库:子查询.单行子查询,多行子查询,in,any,all语句,子查询的练习案例 2022找工作是学历.能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开 ...

  9. Oracle的子查询【单行子查询和多行子查询】

    1.查询部分分为主查询和子查询: 2.根据返回值的记录多少分为单行子查询和多行子查询:单行子查询用单行比较符=连接:多行子查询用多行比较符in连接: 3.子查询的内容可以放在FROM后面,也可以放在W ...

最新文章

  1. ​2018你不得不看的国内CRM软件排行榜
  2. 货物与产品的区别_详解海外仓与保税仓的区别特点!
  3. 如何在html中写javascript代码,如何在本地html代码中使用javascript脚本
  4. 【Leetcode】14、Longest Common Prefix
  5. macpro如何清理磁盘空间_如何正确的清理C盘
  6. stdmove 跟 左键引用 区别_JavaScript 基本数据类型和引用类型的区别详解
  7. 25、Power Query-日期与时间数据处理
  8. 常用开源Jabber服务器介绍
  9. 今天,我要教妹子学会Spring:Aware、异步编程、计划任务
  10. 辽宁计算机应用考试报名时间,2021辽宁上半年计算机应用水平考试报名时间及方法...
  11. dump mysql database,Mysql Database 逻辑备份: mysqldump
  12. 《推荐系统笔记(七)》因子分解机(FM)和它的推广(FFM、DeepFM)
  13. 洛谷P3195 [HNOI2008]玩具装箱TOY——斜率优化DP
  14. 【通用权限管理】角色的分类管理,角色-用户组-职位职务-系统角色的设计上的迷惑也解开...
  15. c_数据结构_队的实现
  16. 钉钉 消息防撤回 分析
  17. Python链家广州二手房的数据爬取--数据爬取
  18. 显示器偏色测试软件,显示器偏色,如何解决显示器偏色?
  19. 华为畅享20plus能更鸿蒙不,甘南收购华为畅享20Plus尾插排线数据线耳机
  20. Java实现菱形图案

热门文章

  1. Java8 Lambda 表达式
  2. VTK:绘制带有rgb的单元格颜色用法实战
  3. JavaScript实现graphBridges图桥算法(附完整源码)
  4. boost::binary_search相关的测试程序
  5. boost::maximum_weighted_matching用法的测试程序
  6. boost::gil::pixels_are_compatible用法的测试程序
  7. ITK:将内核应用于非零图像中的每个像素
  8. VTK:可视化之Cursor3D
  9. VTK:网格之SplitPolyData
  10. OpenCV视频中的人脸标志检测