`
莹nyynew
  • 浏览: 4618 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

嵌套查询

阅读更多

一个select...From...Where查询语句块可以嵌套在另一个select...From...Where查询块的Where子句
中,称为嵌套查询。外层查询称为父查询,主查询。内层查询称为子查询,从查询。
子查询可以嵌套多层,子查询查询到的结果又成为父查询的条件。子查询中不能有order by分组语句。
先处理子查询,再处理父查询。
----------------------------
1
简单嵌套查询
    
查询选修课程号为'101'并且成绩高于学生号为'9501101'的所有学生的成绩.
select * from sclass
where cno='101' and degree>=
(select degree from sclass where sno='9501101'and cno='101')
select * from
成绩表
where
课程成绩<=
(select
课程成绩 from 成绩表 where 学号='20020001'and 课程代号='2002030002')
----------------------------
2
[not] in的嵌套查询
   
查询有选修了课程的学生。
select sno,sname from student
where sno in(Select distinct sno from sclass)
查询没有选修了课程的学生。
select sno,sname from student
where sno not in(Select distinct sno from sclass)

select
学生表.学号,学生表.姓名,成绩表.课程成绩,成绩表.课程代号 from 学生表,成绩表
where
学生表.学号=成绩表.学号
and
学生表.院系名称 in(Select distinct 院系名称 from 学生表)
       
----------------------------
3
some | any | all 的嵌套查询
语法:
scalar_expression{=|<>|!=|>|>=|!>|<|<=|!<}
{some|any|ALL}(
子查询)
SOME
SQL中的逻辑运算符号,如果在一系列比较中,有些为TRUE,那么就为TRUE
     ANY
SQL中的逻辑运算符号,如果在一系列比较中,任何一个为TRUE,那么就为TRUE
ALL
SQL中的逻辑运算符号,如果在一系列比较中,全部都为TRUE,那么就为TRUE

any的嵌套查询和some的嵌套查询功能是一样的。
早期的SQL仅仅允许使用any,后来的版本为了和英语的any相区分,引入了some
同时还保留了any关键词。
select degree from sclass where cno='101'
go
select *
from sclass
where cno='101' and degree >some|any(select degree from sclass where cno='101')
go
select sno from sclass where cno='101'
go
select *
from student
where sno=some|any(select sno from sclass where cno='101')
go
select
学生表.学号,学生表.姓名,学生表.院系名称,成绩表.课程代号,成绩表.课程成绩
from
成绩表,学生表
where
成绩表.学号=学生表.学号
and
学生表.院系名称 =some|any(select 院系名称 from 学生表 where 性别='')
select
学生表.学号,学生表.姓名,学生表.院系名称,成绩表.课程代号,成绩表.课程成绩
from
成绩表,学生表
where
成绩表.学号=学生表.学号
and
成绩表.课程成绩 <all(select 课程成绩 from 成绩表 where 课程代号='2002030001')

select emp.empno,emp.ename,emp.job,emp.sal
from scott.emp
where sal >some|any(select sal from scott.emp where job='MANAGER');
   
any的查询过程等价于两步的执行过程。
     (1)
执行“select sal from scott.emp where job='MANAGER'”,其结果如图4.22所示。
    
     (2)
查询到3个薪水值297528502450,父查询执行下列语句。
        select emp.empno,emp.ename,emp.job,emp.sal from scott.emp
where sal >2975 or sal>2850 or sal>2450;
        SELECT emp.empno,emp.ename,emp.job,emp.sal
FROM scott.emp
where sal >all(select sal from scott.emp where job='MANAGER');
       
all的嵌套查询与【some】的步骤相同。
     (1)
子查询,结果如图4.22所示。
     (2)
父查询执行下列语句。
     SELECT emp.empno,emp.ename,emp.job,emp.sal
FROM scott.emp
WHERE sal >2975 and sal>2850 and sal>2450;
----------------------------
4
exists的嵌套查询
EXISTS
SQL中的逻辑运算符号,如果子查询包含一些行,那么就为TRUE
语法为:exists 子查询
子查询是一个受限的SELECT语句,不允许有COMPUTE子句和INTO关键字。
exists
为存在之意,它只查找满足条件的哪些记录,一旦找到第一个匹配的记录后,就马上停止查找

SELECT column1 FROM table1 WHERE EXISTS ( SELECT column1 FROM table2 WHERE table1.column1
= table2.column1 );
select * from student
where exists(select * from sclass where sclass.sno=student.sno)
select * from
学生表
where exists(select * from
成绩表 where 成绩表.学号=学生表.学号)

    SELECT emp.empno,emp.ename,emp.job,emp.sal
FROM scott.emp,scott.dept
WHERE exists (SELECT * FROM scott.emp WHERE scott.emp.deptno=scott.dept.deptno);
----------------------------
5
。交并差操作:
交操作的嵌套查询:
    
交操作就是集合中交集的概念。属于集合A且属于集合B的元素总和就是交集。  
     (select deptno from scott.emp) intersect (select deptno from scott.dept);  
并操作的嵌套查询:
    
并操作就是集合中并集的概念。属于集合A或集合B的元素总和就是并集。
(select id,sno from student) union (select id,sno from sclass);
      (select deptno from scott.emp) union (select deptno from scott.dept);   
   
  
差操作的嵌套查询:
    
差操作就是集合中差集的概念。属于集合A且不属于集合B的元素总和就是差集。
     (select deptno from scott.dept) minus (select deptno from scott.emp);
      
《并、交和差操作的嵌套查询要求属性具有相同的定义,包括类型和取值范围。》
----------------------------
总结:
性能:
子查询很重要的一个方面就是性能表现。便利性是有代价的,
它取决于你所使用的表和声明的大小,数量和复杂性,还有你可能会允许你的
应用软件做处理工作。每一个查询在被主查询作为资源使用之前,
都将被完整地单独处理。如果可能的话,创造性地使用JOIN声明可以以较少的
滞后时间提供出相同的信息。
技巧:
子查询除非能确保内层select只返回一个行的值,否则应在外层where子句中用
一个in限定符,即要返回多个值,要用in或者not in哦,所以当在编译过程中出
子查询只返回一个值的错误时,就要考虑是不是要用innot in拉~

分享到:
评论

相关推荐

    数据库的嵌套查询实验.doc

    数据库嵌套查询实验报告 数据库嵌套查询实验是数据库管理系统中一个重要的实验项目。该实验的主要目的是让学生进一步掌握 SQL Server 的使用方法,学会利用 Transact-SQL 语言表达嵌套查询语句,理解相关的 SQL ...

    数据库表的连接和嵌套查询实验报告

    实验报告的主题是“数据库表的连接和嵌套查询”,它旨在帮助用户深入理解SQL Server查询分析器的使用,以及如何运用Transact-SQL语言进行多表连接查询和嵌套查询。实验环境为Microsoft Windows XP操作系统搭配...

    嵌套查询总结例子

    ### 嵌套查询在Oracle分页中的应用与优化 #### 概述 在数据库查询中,嵌套查询是一种常见的技术手段,尤其在处理复杂的数据筛选、排序与分页时显得尤为重要。Oracle作为一款功能强大的关系型数据库管理系统,提供...

    数据库实验5嵌套查询.doc

    数据库实验5嵌套查询 数据库实验5嵌套查询实验报告,主要涵盖了数据库查询语言的基础知识和嵌套查询的操作。通过本实验,学生可以掌握数据库查询语言的基本方法和主要函数的使用方法,了解各种连接查询的概念、功能...

    数据库实验报告——数据库嵌套查询

    【实验报告——数据库嵌套查询】 实验报告涵盖了数据库查询的基础和高级操作,特别是关于嵌套查询的使用。嵌套查询是SQL语言中的一个重要概念,它允许我们构建更复杂的查询结构,通过在一个查询内部嵌入另一个查询...

    SQL Server嵌套查询.pdf

    在探讨SQL Server嵌套查询时,我们首先要了解嵌套查询的概念。嵌套查询,也被称作子查询或非相关子查询,是指在一个SELECT语句的条件部分内部执行另一个SELECT语句的情况。通过嵌套查询,我们可以构建出一系列简单...

    sql嵌套查询练习题

    sql 语句的嵌套查询完整题,只要能全部做完,那查询的问题就不大了

    嵌套查询和集合查询

    嵌套查询和集合查询是数据库查询中的两种重要技术,它们允许我们执行更复杂的数据筛选和组合操作。在SQL中,这两种查询方式可以帮助我们获取多层条件下的数据,并且能够处理集合之间的关系。 嵌套查询,顾名思义,...

    数据库多表查询及嵌套查询子查询语句示例

    4.复杂嵌套查询:select * from duobiao where year(日期)=2006 and monnth(日期)=5 and 姓名 in (select 负责人 from bumenbiao where 负责人 in (select 姓名 from kjbdsjk where 年龄&gt;20)) order by 编号 ...

    delphi对access表的嵌套查询实例

    当我们需要从Access数据库中获取复杂的数据时,嵌套查询就显得尤为重要。嵌套查询允许我们在一个查询内部嵌入另一个查询,以实现更复杂的逻辑和数据筛选。 本文将深入探讨如何在Delphi中使用Access数据库进行嵌套...

    数据库的嵌套查询实验

    ### 数据库的嵌套查询实验知识点详解 #### 实验目的与要求 本次实验的主要目标是让学生深入了解并掌握如何使用SQL Server查询分析器进行嵌套查询。通过本实验,学生能够熟悉利用`SELECT`语句执行复杂的嵌套查询,...

    C#+SQL 数据库嵌套查询一例(附代码)

    C#+SQL 数据库嵌套查询一例(附代码),以订单和职工信息为基准,来综合查询订单信息,先查询没有订单的员工信息,然后查询至少经过一次订单的员工信息查询,而后将嵌套查询结果显示于窗体的dataGridView对象中,对...

    数据库SQL编写的嵌套查询

    在SQL语言中,嵌套查询是一种非常强大的工具,它允许在一个查询内部嵌入另一个查询,以实现更复杂的逻辑和数据筛选。以下将详细介绍标题和描述中提到的几个嵌套查询的例子,以及它们所代表的知识点。 1. **子查询...

    实验4 数据库的嵌套查询实验(2学时).doc

    数据库嵌套查询实验 数据库嵌套查询是数据库管理系统中的一种重要查询方式,在实际应用中广泛使用。数据库嵌套查询实验是帮助学生掌握 SQL Server 查询分析器的使用方法,并加深对 SQL 语言的嵌套查询语句的理解。 ...

    表的连接和嵌套查询

    本实验主要关注两种高级查询技术:表的连接和嵌套查询,这些都是SQL语言中的核心概念。实验旨在帮助用户熟练掌握SQL Server查询分析器的使用,并通过实际操作理解多表连接查询和嵌套查询的语法。 **表的连接**是将...

    VB 嵌套查询

    在VB(Visual Basic)编程中,嵌套查询是一种高级技巧,它允许你在一个查询内部执行另一个查询,以处理更复杂的数据库操作或者数据过滤。嵌套查询通常用于处理多个表之间的关联,或者对数据进行多层筛选。下面我们将...

    嵌套查询解决分页问题

    嵌套查询在数据库操作中是一种常见的技术,特别是在处理分页问题时,可以有效地减少服务器资源的消耗,提高应用程序的性能。在本文中,我们将深入探讨如何使用嵌套查询来解决分页问题,以及在MySQL和SQL Server中...

    数据库嵌套查询

    数据库嵌套查询是数据库操作中的一个重要概念,尤其在复杂的数据分析和信息检索中扮演着关键角色。嵌套查询,也称为子查询或内部查询,是指在一个SQL查询语句中嵌入另一个查询语句,用于从数据库中获取所需数据。...

    嵌套查询与数据更新

    这个讲述的是嵌套查询与数据更新的ppt,它能帮助我们更好的学会嵌套查询的方法

    数据库嵌套查询总结

    数据库嵌套查询总结 还有其他数据库使用总结,稍后上传

Global site tag (gtag.js) - Google Analytics