热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

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

1查询工资比scott高的员工信息A第一步:查询出scott这个员工的工资selectsalfromempwhereenameSCOTT;B第二步:查询出工资比scott高的员工信息select*fromempwheresal3000;总结:子查询的本质:多个select语句的嵌套2:子查询的知识体

1查询工资比scott高的员工信息 A第一步:查询出scott这个员工的工资 select sal from emp where ename = 'SCOTT'; B第二步:查询出工资比scott高的员工信息 select * fromemp where sal 3000; 总结: 子查询的本质:多个select语句的嵌套 2:子查询的知识体



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;

vcuuPC9wPgoKPHRhYmxlIGJvcmRlcj0="1" cellspacing="0" cellpadding="0">

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

和子查询返回的任意一个&#20540;比较

ALL

和子查询返回的所有&#20540;比较

ANY

SELECT employee_id,last_name,job_id,salary

FROM employees

WHERE salary

(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

(SELECT salary

FROM employees

WHERE job_id = 'IT_PROG')

AND job_id <> 'IT_PROC'

\

Eg: 比30号部门 任意一个员工薪高的员工信息 大于集合中的最小&#20540; 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

);


推荐阅读
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • Oracle分析函数first_value()和last_value()的用法及原理
    本文介绍了Oracle分析函数first_value()和last_value()的用法和原理,以及在查询销售记录日期和部门中的应用。通过示例和解释,详细说明了first_value()和last_value()的功能和不同之处。同时,对于last_value()的结果出现不一样的情况进行了解释,并提供了理解last_value()默认统计范围的方法。该文对于使用Oracle分析函数的开发人员和数据库管理员具有参考价值。 ... [详细]
  • MyBatis错题分析解析及注意事项
    本文对MyBatis的错题进行了分析和解析,同时介绍了使用MyBatis时需要注意的一些事项,如resultMap的使用、SqlSession和SqlSessionFactory的获取方式、动态SQL中的else元素和when元素的使用、resource属性和url属性的配置方式、typeAliases的使用方法等。同时还指出了在属性名与查询字段名不一致时需要使用resultMap进行结果映射,而不能使用resultType。 ... [详细]
  • 本文详细介绍了在ASP.NET中获取插入记录的ID的几种方法,包括使用SCOPE_IDENTITY()和IDENT_CURRENT()函数,以及通过ExecuteReader方法执行SQL语句获取ID的步骤。同时,还提供了使用这些方法的示例代码和注意事项。对于需要获取表中最后一个插入操作所产生的ID或马上使用刚插入的新记录ID的开发者来说,本文提供了一些有用的技巧和建议。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 本文介绍了通过mysql命令查看mysql的安装路径的方法,提供了相应的sql语句,并希望对读者有参考价值。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • Oracle10g备份导入的方法及注意事项
    本文介绍了使用Oracle10g进行备份导入的方法及相关注意事项,同时还介绍了2019年独角兽企业重金招聘Python工程师的标准。内容包括导出exp命令、删用户、创建数据库、授权等操作,以及导入imp命令的使用。详细介绍了导入时的参数设置,如full、ignore、buffer、commit、feedback等。转载来源于https://my.oschina.net/u/1767754/blog/377593。 ... [详细]
author-avatar
_子竹_
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有