开发者社区> 技术mix呢> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

1.子查询知识体系,单行子查询,多行子查询

简介:
+关注继续查看

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

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

select sal from emp

where ename = 'SCOTT';

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

select * fromemp

where sal >3000;

总结:

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

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

合理的书写风格

子查询外面()不要忘记

子查询和主查询能够查询的是同一张表,也能够不是同一张表

     仅仅要子查询返回的结果,主查询能够用就可以。

在什么地方能够防止子查询

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 …                 ---不能够有子查询

子查询的分类

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

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

3.单行子查询仅仅能使用单行比較操作符(=  >   >=  <  <=  <>

4.多行子查询仅仅能使用多行比較操作符(int any all

单行子查询

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;

查询员工的姓名和薪水

select *

from (select ename,sal

     from emp);

多行子查询

多行子查询仅仅能使用多行比較操作符(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

);

 






本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/5193739.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
子查询
子查询
0 0
子查询(2)
如果子查询的执行依赖于外部查询,通常情况下都是因为子查询中的表用到了外部的表,并进行了条件关联,因此每执行一次外部查询,子查询都要重新计算一次,这样的子查询就称之为 关联子查询 。相关子查询按照一行接一行的顺序执行,主查询的每一行都执行一次子查询。
0 0
子查询(1)
子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从MySQL 4.1开始引入。
0 0
子查询 | 学习笔记
快速学习子查询。
0 0
子查询漫谈
分享子查询的优化技术及分布式数据库中处理子查询的一些心得
0 0
使用子查询
一、语法 SELECT SELECT_LIST FROM TABLE WHERE EXPR OPERATOR (SELECT SELECT_LIST FROM TABLE);子查询(内查询)在主查询(外查询)之前执行。
459 0
where子查询
限定查询(WHERE子句)       之前的查询是将一张表的全部记录查询出来,那么现在如果希望可以根据指定的条件查询的话,则必须指定限定查询。       格式:            [SELECT] [{DISTINCT}] [* |具体的列别名FROM表名称] [{WHERE 条件(s)}]            例:查询出工资大5000的雇员的信息。
756 0
10. 子查询
<div style="font-family:微软雅黑; font-size:14px; line-height:21px; widows:auto">        子查询就是在查询语句中嵌套另一个查询,子查询支持多层嵌套。</div> <div style="font-family:微软雅黑; font-size:14px; line-height:21px; widows:aut
719 0
子查询,原来可以这样子的
1、原句子: SELECT * FROM tbl_time_table WHERE course_id in (SELECT course_id FROM tbl_student_course where student_id={$student_id}) 2、优化后: SELECT t.
372 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载