精华内容
下载资源
问答
  • SQL嵌套查询总结

    2020-09-14 14:27:09
    是我写的一个结合UINON的嵌套查询. 将五个方面的报表放到一个临时表里,再从临时表里,将所要的数据查询出来.
  • 主要介绍了MySQL嵌套查询的使用技巧,结合实例形式较为详细的分析了MySQL嵌套查询参数设置、使用方法与注意事项,需要的朋友可以参考下
  • 嵌套查询糟糕的优化在上面我提到过,不考虑特殊的情况,联表查询要比嵌套查询更有效。尽管两条查询表达的是同样的意思,尽管你的计划是告诉服务器要做什么,然后让它决定怎么做,但有时候你非得告诉它改怎么做。否则...
  • 查询学生的选修课程情况 首先引入知识点:连接查询其实就是对于多个表进行笛卡尔积。 select Student.*,Sc.* from TEST.Student,TEST.SC where Student.Sno=Sc.Sno 上面的例子是等值查询,where的条件是‘=’ ,也...
  • 一、连接查询 连接查询:同时涉及两个以上的表的查询 [.] [.] 连接字段:连接条件中的列名称 如:Sno为上面例子中的连接字段 注意:连接字段类型必须是可比的,但名字不必相同 1.等值与非等值连接查询 (等值连接:...
  • 查询游戏历史成绩最高分前100 Sql代码 SELECT ps.* FROM cdb_playsgame ps WHERE ps.credits=(select MAX(credits) FROM cdb_playsgame ps1 where ps.uid=ps1.uid AND ps.gametag=ps1.gametag) AND ps.gametag='...
  • 嵌套查询在数据库查询统计中的应用示例,Vb数据库嵌套查询操作实例源码。在本示例中可设置查询运算符,指定名称,指定条件选项,也就是可运用上部分的SQL操作符,比如“>”以及any等查询关键字,有VB6的用户,可打开...
  • 【3.60】查询所有选修了1号课程的学生姓名。 SELECT Sname FROM Student WHERE EXISTS (SELECT * FROM SC WHERE Sno=Student.Sno AND Cno='1'); 带有EXIST谓词的子查询。带IN谓词,ANY和ALL 谓词的子...
  • 嵌套查询 接着上一篇说 带有EXISTS谓词的查询 EXISTS:存在 带有EXISTS 谓词的子查询不返回任何数据,只产生逻辑真值“true”或逻辑假值“false”。 如果返回true,主查询会执行,返回false,主查询就不再执行。 因为...
  • 数据库嵌套查询总结

    2017-12-14 13:12:32
    数据库嵌套查询总结 还有其他数据库使用总结,稍后上传
  • 内外层相关嵌套查询

    2018-01-17 19:00:15
    数据库操作 内外层相关嵌套查询语句sql,各类实例分析
  • 包含多个数据实例,由简入繁,涉及各种函数的应用,多重完整嵌套查询。适合入门小白,面试知识点契合度高。
  • 1.作者是在校学生,利用课余时间精心整理平时数据库实验报告,希望能记录数据库的学习进展。 2. 本资源内容为:(1)熟练掌握...(2)掌握多表的连接查询与嵌套查询语句的正确写法和实验操作方法。 3. 欢迎参考交流!
  • 嵌套查询和集合查询

    2018-08-06 09:29:37
    数据库嵌套查询和集合查询,数据库嵌套查询和集合查询
  • 由EXISTS引出的子查询,其目标列表达式通常都用 * ,因为带EXISTS的子查询只返回真值或假值,给出列名无实际意义。 NOT EXISTS谓词: 若内层查询结果非空,则外层的WHERE子句返回假值 若内层查询结果为空,则外层的...
  • 嵌套查询

    千次阅读 2019-09-08 20:30:32
    嵌套查询三、嵌套查询1. 带有 in 谓词的子查询例1: 查询与 "李四" 在同一个系学习的学生例2 : 查询选修了课程名为 "信息系统" 的学生学号和姓名2. 带有比较运算符的子查询3. 带有 any (some) 或 all 谓词的子查询4. ...

    三、嵌套查询

    在 SQL 语言中, 一个select-from-where 语句称为一个查询块,将一个查询块嵌套在另一个和查询块的 where 子句或者 having 短语的条件中的查询称为 嵌套查询

    例如:

    select Sname              /*外层查询或父查询*/
    from Student
    where Sno in
    		(select Sno       /*内层查询或子查询*/
    		from SC
    		where Cno='2');
    

    本例中, 下层查询块 select Sno from SC where Cno=‘2’ 是嵌套在上层查询块 select Sname from Student where Sno in 的 where 条件中的
    上层的查询块称为外层查询父查询,下层查询块称为内层查询子查询

    SQL 语言允许多层嵌套查询, 即一个子查询还可以嵌套其他子查询,需要特别注意的是
    子查询的 select 语句中不能使用 order by 子句, order by子句只能对最终查询结果排序

    嵌套查询使用户可以用多个简单查询构成复杂的查询,从而增强 SQL 的查询能力,以层层嵌套的方式来构造程序正是 SQL 中 “结构化” 的含义所在

    1. 带有 in 谓词的子查询

    在嵌套查询中, 子查询的结果往往是一个集合,所以谓词 in 是嵌套查询中最经常使用的谓词

    例1: 查询与 “李四” 在同一个系学习的学生

    先分步来完成此查询, 然后再构造嵌套查询

    1. 确定 “李四” 所在的系名
    select Sdept
    from Student 
    where Sname='李四'
    
    1. 查找所有再 CS 系学习的学生
    select Sno,Sname,Sdept
    from Student
    where Sdept='CS'
    

    结果为

        Sno      Sname      Sdept
    --------------------------------
    201215121     李四        CS
    201215122     刘六        CS
    

    将第一步查询嵌入到第二步查询的条件中, 构造嵌套查询如下:

    select Sno,Sname,Sdept
    from Student
    where Sdept in
    	(select Sdept
    	 from Student
    	 where Sname='李四');
    

    本例中, 子查询的查询条件不依赖于父查询, 称为不相关子查询

    一种求解方法是由里向外处理,即先执行子查询,子查询的结果用于建立其父查询的查找条件得到如下的语句:

    select Sno,Sname,Sdept
    from Student
    where Sdept in('CS')
    

    然后执行该语句

    本例中的查询也可以用自身连接来完成:

    select S1.Sno,S1.Sname,S1.Sdept
    from Student S1, Student S2
    where S1.Sdept=S2.Sdept and S2.Sname='李四'
    

    还能用带 exists 谓词的子查询来完成(下方有介绍)

    可见,实现一个查询请求有多种方法,当然不同的方法其执行效率可能会有差别,甚至会差别很大,这就是数据库编程人员应该掌握的数据库性能调优技术

    例2 : 查询选修了课程名为 “信息系统” 的学生学号和姓名

    本查询涉及学号,姓名和课程名三个属性,学号和姓名存放再 Student 表中,课程名存放在 Course 表中,但 Student 与 Course 两个表之间没有直接联系, 必须通过 SC 表建立它们二者直接按的联系,所以此查询实际上涉及三个关系

    select Sno,Sname                        // 3. 最后在 Student 关系中取出 Sno 和 Sname
    from Student
    where Sno in
    	 (select Sno                        // 2. 然后在 SC 关系中找出选修了3号课程的学生学号
    	  from SC
    	  where Cno in
    	 	 (select Cno                    // 1. 首先在 Course 关系中找出'信息系统'的课程号,结果为3号
    	 	  from Course
    	 	  where Cname='信息系统'
    	 	 )
    	  );
    

    本例可以用连接查询实现:

    select Student.Sno,Sname
    from Student,SC,Course
    where Student.Sno=SC.Sno and
    		SC.Cno=Course.Cno and
    		Course.Cname='信息系统';
    

    有些嵌套查询可以用连接运算替代, 有些是不能替代的
    从上面两个 SQL 语句中可以看到, 查询涉及多个关系时,用嵌套查询局部求解层次清楚,易于构造,具有结构化程序设计的优点,
    相比于连接运算,目前商用关系数据库管理系统对嵌套查询的优化做的还不够完善,所以在实际应用中,能用用连接运算表达的查询尽可能采用连接运算

    以上两个 SQL 语句中的子查询的查询条件不依赖于父查询, 这类子查询称为不相关子查询, 不相关子查询时较简单的一类子查询
    如果子查询的查询条件依赖于父查询,这类子查询称为相关子查询,整个查询语句称为相关嵌套查询语句

    2. 带有比较运算符的子查询

    带有比较运算符的子查询是指父查询与子查询之间用比较运算符进行连接,当用户能确切知道内层查询返回的是单个值时,可以用 >, < , = , >= , <= , != , 或<> 等比较运算符

    • 例1 : 查询与 '李四 ’ 在同一个系的学生

    由于一个学生只能在一个系学习,也就是说内查询的结果是一个值,因此可以用 = 代替 in

    select Sno,Sname,Sdept
    from Student
    where Sdept=
    	(select Sdept
         from Student
         where Sname='李四');
    
    • 例2 : 找出每个学生超过他自己选修课程平均成绩的课程号
    select Sno,Cno
    from SC x
    where Grade>=(select avg(Grade)    //某学生的平均成绩
                  from SC y
                  where y.Sno=x.Sno);
    

    x 是表 SC 的别名, 又称为元组变量,可以用来表示 SC 的一个元组,
    内层查询时求一个学生所有选修课程平均成绩的, 至于是那个学生的平均成绩要看参数 x.Sno 的值, 而该值是和父查询相关的,因此这类查询被称为相关子查询

    这个语句的一种可能的执行过程采用以下三个步骤:

    // 1. 从外层查询中取出 SC 的一个元组 x, 将元组 x 的 Sno 值(201215121) 传送给内层查询
    select avg(Grade)
    form SC y
    where y.Sno='201215121'
    
    // 2. 执行内层查询,得到值 88(平均成绩的近似值), 用该值代替内层查询, 得到外层查询
    select Sno,Cno
    from SC x
    where Grade>=88
    
    // 3. 执行这个查询,得到
    select Sno,Cno
    from SC x
    where Grade>=88;
    
    然后从外层查询取出下一个元组重复上述 1 ~ 3 步骤的处理, 知道外层的 SC 元组全部处理完毕,结果为
    
    // 学号 和 课程号
    (201215121,1)
    (201215121,3)
    (201215122,2)
    

    求解相关子查询不能像求解不相关子查询那样一次将子查询求解出来,然后求解父查询, 内层查询由于与外层查询有关,因此必须 反复求值

    3. 带有 any (some) 或 all 谓词的子查询

    子查询返回单值时可以用比较运算符,但返回多值时要用 any (有的系统用some) 或 all 谓词修饰符
    而使用 any 或 all 谓词时则必须同时使用比较运算符

    表达式含义
    >any大于子查询结果中的某个值
    >all大于子查询结果中的所有值
    <any小于子查询结果中的某个值
    <all小于子查询结果中的所有值
    >=any大于等于子查询结果中的某个值
    >=all大于等于子查询结果中的所有值
    <=any小于等于子查询结果中的某个值
    <=all小于等于子查询结果中的所有值
    =any等于子查询结果中的某个值
    =all等于子查询结果中的所有值 (通常没有实际意义)
    != (或<>) any不等于子查询结果中的某个值
    != (或<>) all不等于子查询结果中的任何一个值
    • 例1 : 查询非计算机系比计算机系任意一个学生年龄小的学生姓名和年龄
    select Sname,Sage
    from Student
    where Sage<any(select Sage
    			   from Student
    			   where Sdept='CS')
    		   and Sdept<>'CS'
    
    // Sage<any    Sdept<>'CS'   这时父查询块的条件
    
    -- 结果如下
         Sname      Sage
    ---------------------------
    	 王明        18
    	 张力        19  
    

    关系型数据库管理系统执行此查询时,首先处理子查询,找出 CS 系中所有学生的年龄,构成以恶搞集合 (20,19)
    然后处理父查询,找所有不是 CS 系且年龄小于 20 或者 19 的学生

    本查询也可以用聚集函数来实现,首先用子查询找出 CS 系中最大年龄 (20), 然后在父查询中查所有非 CS 系且年龄小于 20 岁的学生

    select Sname,Sage
    from Student
    where Sage<
    		(select max(Sage)
    		 from Student
    		 where Sdept='CS')
    	and Sdept<>'CS';
    
    • 例2 : 查询非计算机系中比计算机系所有学生年龄都小的学生姓名及年龄
    select Sname,Sage
    from Student
    where Sage<all
    		(select Sage
    		 from Student
    	 	 where Sdept='CS')
    	 and Sdept<>'CS'
    
    -- 查询结果
        Sname   Sage
    --------------------
         王明     18
    

    关系数据库管理系统执行此查询时,首先处理子查询,找出 CS 系中所有学生的年龄,构成一i个集合 (20,19)
    然后处理父查询,找所有不是 CS 系且年龄既小于 20 ,也小于 19 的学生

    本查询同样也可以用聚集函数实现

    select Sname,Sage
    from Student 
    where Sage<
    		(select min(Sage)
    		 from Student
    		 where Sdept='CS')
    	and Sdept<>'CS'
    

    事实上,用聚集函数实现子查询通常比直接用 any 或 all 查询效率要高

    any (或aome), all 谓词与聚集函数, in 谓词的等价转换关系

    <> 或 !=<<=>>=
    anyin<max<=max>min>=min
    allnot in<min<=min>max>=max

    = any 等价于 in 谓词, <any 等价于 <max ,<>all 等价于 not in 谓词, <all 等价于 <min

    4. 带有 exists 谓词的子查询

    带有 exists 谓词的子查询不返回任何数据,只产生逻辑真值 “true” 和逻辑假值 “false”

    • 例1 : 查询选修了1号课程的学生姓名

    本查询涉及 Student 表和 SC 表,可以在 Student 中依次取每个元组的 Sno 值,用此值去检查 SC 表,若 SC 中存在这样的元组,其 Sno 值等于此 Student.Sno 值,并且其 Cno=‘1’,则取此 Student.Sname 送入结果表

    select Sname
    from Student
    where exists
    	(select *
    	 from SC
    	 where Sno=Student.Sno and Cno='1');
    

    使用存在量词 exists 后,若内层查询结果为非空,则外层的 where 子句返回真值,否则返回假值
    由 exists 引出的子查询,其目标列表达式通常都用 * ,因为带 exists 的子查询只返回真值或假值,给出列名无实际意义

    使用存在量词 not exists 后,若内层查询结果为空,则外层的 where 子句返回真值,否则返回假值

    • 例2 : 查询没有选修1号课程的学生姓名
    select Sname
    from Student
    where not exists
    	(select*
    	 from SC
    	 where Sno=Student.Sno and Cno='1');
    

    一些带 exists 或 not exists 谓词的子查询不能被其他形式的子查询等价替换,但所有带 in 谓词,比较运算符,any 和 all 谓词的子查询都能用带 exists 谓词的子查询等价替换

     // 查询与 "李四"  在同一个系学习的学生
     select Sno,Sname,Sdept
     from Student S1
     where exists
     	(select*
     	 from Student S2
     	 where S2.Sdept=S1.Sdept and
     	 	S2.Sname='李四');
    

    由于带 exists 量词的相关子查询只关心内层查询是否有返回值,并不需要差具体值,因此其效率并不一定低于不相关子查询,有时是高效的方法

    • 例3:查询选修了全部课程的学生姓名

    sql没有全称量词 (for all),但是可以把带有全称量词的谓词转换为等价的带有存在量词的谓词

    由于没有全称量词,可将题目的意思转换成等价的用存在量词的形式, 查询这样的学生:没有一门课程是他不选修的
    从而用 exist / not exist 来实现带全称量词的查询

    select Sname
    from Student
    where not exists
    	(select*
    	 from Course
    	 where not exists
    	 	(select*
    	 	 from SC
    	 	 where Sno=Student.Sno
    	 	 	and Cno=Course.Cno));
    
    • 例4:查询至少选修了学生201215122选修的全部课程的学生号码

    本查询可以用逻辑蕴涵来表达:查询学号为x的学生,对所有的课程y,只要201215122学生选修了课程y,则x也选修了y,形式化表示如下:

    它的表达的语义为:不存在这样的课程y,学生201215122选修了y,而学生x没有选

    select distinct Sno
    from SC SCX
    where not exists
    		(select*
    	 	from SC SCY
    	 	where SCY.Sno='201215122' and
    	 			not exists
    	 			(select*
    	 			 from SC SCZ
    	 			 where SCZ.Sno=SCX.Sno and
    	 	 		 SCZ.Cno=SCY.Cno));
    
    展开全文
  • 今天小编就为大家分享一篇laravel多条件查询方法(and,or嵌套查询),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 内容索引:C#源码,数据库应用,嵌套 C#+SQL 数据库嵌套查询一例(附代码),以订单和职工信息为基准,来综合查询订单信息,先查询没有订单的员工信息,然后查询至少经过一次订单的员工信息查询,而后将嵌套查询结果...
  • 使学生进一步掌握SQL Server查询分析器的使用方法,熟悉通过SELECT语句对数据库进行嵌套查询的操作。 二、实验内容  熟练掌握数据查询中的嵌套和统计查询的操作方法。  在SQL Server查询分析器中使用IN、比较符、...
  • sql数据库的嵌套查询

    2014-03-13 10:58:54
    sql数据库的嵌套查询整理,一些简单的嵌套查询,很容易掌握。
  • 4.复杂嵌套查询:select * from duobiao where year(日期)=2006 and monnth(日期)=5 and 姓名 in (select 负责人 from bumenbiao where 负责人 in (select 姓名 from kjbdsjk where 年龄>20)) order by 编号 ...
  • Vue查询生成器Vue的查询生成器。...控制嵌套组的最大深度。 易于使用纯CSS和插槽进行自定义。 布局可以序列化和还原。 Vuex兼容。 TypeScript支持。 安装yarn添加query-builder-vue npm install query-builder-vue
  • SQL语句嵌套查询

    2013-02-03 14:50:09
    基于SQL2005的嵌套查询,包括返回一个值的子查询、返回一组值的子查询(使用ANY谓词查询、使用IN谓词查询、使用ALL谓词查询使用EXISTS查询)。附有详细的表信息。
  • 数据查询2—连接查询:同时涉及两个以上的表的查询 连接条件:用来连接两个表的条件 [.] [.] 连接字段:连接条件中的列名称(注意:连接字段类型必须是可比的,但名字不必相同) 连接查询—(1)等值与非等值连接查询:...
  • 数据库 嵌套查询 加盟业务 (Join operations) Join operations and nested queries both works to combine the data, which is allocated in different tables to make a single result. Both the join and nested ...

    数据库 嵌套查询

    加盟业务 (Join operations)

    Join operations and nested queries both works to combine the data, which is allocated in different tables to make a single result. Both the join and nested query operations are similar but there are some differences which help a user to choose between them on specific situations.

    连接操作和嵌套查询都可以合并数据,这些数据分配在不同的表中以产生单个结果。 连接和嵌套查询操作都相似,但是存在一些差异,可以帮助用户在特定情况下在它们之间进行选择。

    Let's look at how join works and what are its types?

    让我们看看联接的工作原理以及它的类型是什么?

    A join operation is used to combine related tuples or rows from two or more different tables or relations, if and only if, the condition which is given is satisfied.

    当且仅当满足给定条件时,联接操作才用于组合来自两个或多个不同表或关系的相关元组或行。

    Join operations are of two types,

    连接操作有两种类型,

    1. Inner join

      内部联接

      1. Theta join
      2. Equi join
      3. Natural join
    2. Outer join

      外加入

      1. Left outer join
      2. Right outer join
      3. Full outer join

    1)内部加入 (1) Inner join)

    An Inner Join is used when a user has to combine related tuples with similar attributes and the tuples which are left are discarded in resulting table or relation.

    当用户必须将具有相似属性的相关元组合并,而剩下的元组在结果表或关系中被丢弃时,将使用内部联接

    a) Theta join: Theta join is used when a user has to combine tuples from different tables or relations, If and only if they satisfy the theta condition. It is denoted by θ. Theta Join can use all types of comparative operators.

    a)Theta联接 :当用户必须组合来自不同表或关系的元组时,且仅当它们满足theta条件时,才使用Theta联接。 用θ表示。 Theta Join可以使用所有类型的比较运算符。

    Example: Suppose T1(A1, A2, ..., AN) and T2(B1, B2, ..., BN) are two tables given whose not a single value of attributes is same then the combined result will be T1 union T2= θ.

    示例 :假设给定T1(A1,A2,...,AN)和T2(B1,B2,...,BN)是两个表,它们的单个属性值都不相同,那么合并后的结果将为T1并集T2 =θ 。

    b) Equi Join: Equi Join is used when a user has to use equality operator in Theta join.

    b)等值连接 :当用户必须在Theta连接中使用等值运算符时,将使用等值连接。

    Example: Two tables are given Employee and Project.

    示例:给两个表Employee和Project。

    Employee:

    雇员:

    Emp.I.d.NameSection
    202Anubhav verma2B
    203Smita singh3B
    Emp.Id 名称 部分
    202 阿努巴夫维玛 2B
    203 史密塔·辛格(Smita Singh) 3B

    Project:

    项目:

    StandardProjects
    2BC++
    2BPython
    3BJava
    3BAdobe
    标准 专案
    2B C ++
    2B Python
    3B Java
    3B 土坯

    After combining them through Equi Join, we get

    通过Equi Join合并它们后,我们得到

    Employee Details:

    员工详细信息:

    Emp.I.d.NameSectionStandardProjects
    202Anubhav verma2B2BC++
    202Anubhav verma2B2BPython
    203Smita singh3B3BJava
    203Smita singh3B3BAdobe
    Emp.Id 名称 部分 标准 专案
    202 阿努巴夫维玛 2B 2B C ++
    202 阿努巴夫维玛 2B 2B Python
    203 史密塔·辛格(Smita Singh) 3B 3B Java
    203 史密塔·辛格(Smita Singh) 3B 3B 土坯

    C) Natural Join: Natural Join is used when there has to be at least one common tuples attribute between two tables or relations. The attributes must have the same name and domain. Natural Join does not use any comparative operator. Natural Join works between those tuples whose attributes values are the same in both the tables and relations. It is denoted by .

    C)自然联接 :当两个表或关系之间必须至少有一个公共元组属性时,使用自然联接。 这些属性必须具有相同的名称和域。 自然联接不使用任何比较运算符。 自然联接在表和关系中属性值相同的那些元组之间工作。 用表示。

    Example: Two tables are given Student and Subject.

    示例:给了两个表Student和Subject。

    Student:

    学生:

    Roll no.NameClass
    4Aman10
    7Raghav11
    8Sameer12
    卷号 名称
    4 阿曼 10
    7 拉加夫 11
    8 沙美尔 12

    Subject:

    学科:

    ClassSubjects
    10Maths
    11Science
    12Biology
    科目
    10 数学
    11 科学
    12 生物学

    The Resulting table is:

    结果表为:

    Student ⋈ Subjects

    学生⋈科目

    Roll no.NameClassSubjects
    4Aman10Maths
    7Raghav11Science
    8Sameer12Biology
    卷号 名称 科目
    4 阿曼 10 数学
    7 拉加夫 11 科学
    8 沙美尔 12 生物学

    2)外加入 (2) Outer Join)

    An Outer Join is used when a user has to combine all the tuples with attributes without any discarding in resulting table or relation.

    当用户必须将所有元组与属性组合而不会在结果表或关系中进行任何丢弃时,将使用外部联接。

    a) Left outer join: This operation is used when the user has to include tuples from the Left table in the resulting table. If the tuples in the Right side of the table are not similar to the Left side of the table then the tuples of the right side are made NULL.

    a)左外部联接 :当用户必须在结果表中包括“左”表中的元组时,将使用此操作。 如果表右侧的元组与表左侧的元组不同,则将右侧的元组设为NULL。

    Example,

    例,

    Left Side Table:

    左侧桌:

    AB
    203Taj Palace
    205Royal plaza
    207Hotel Villas
    一个
    203 泰姬陵宫
    205 皇家广场
    207 别墅酒店

    Right Side Table:

    右侧表:

    AB
    203Karan
    204Raghubir
    205Satyam
    一个
    203 卡兰
    204 拉格比尔
    205 萨蒂扬

    Resultant Table:

    结果表:

    ABCD
    203Taj Palace203Karan
    205Royal plaza205Satyam
    207Hotel Villas------
    一个 C d
    203 泰姬陵宫 203 卡兰
    205 皇家广场 205 萨蒂扬
    207 别墅酒店 --- ---

    b) Right outer join: This operation is used when the user has to include tuples from the right table in the resulting table. If the tuples in the left side of the table are not similar to the right side of the table then the tuples of the right side are made NULL.

    b)右外部联接:当用户必须在结果表中包括来自右表的元组时,使用此操作。 如果表左侧的元组与表的右侧不相似,则将右侧的元组设为NULL。

    Example,

    例,

    Left Side Table:

    左侧桌:

    AB
    203Taj Palace
    205Royal plaza
    207Hotel Villas
    一个
    203 泰姬陵宫
    205 皇家广场
    207 别墅酒店

    Right Side Table:

    右侧表:

    AB
    203Karan
    204Raghubir
    205Satyam
    一个
    203 卡兰
    204 拉格比尔
    205 萨蒂扬

    Resultant Table:

    结果表:

    ABCD
    203Taj Palace203Karan
    ------204Raghubir
    205Taj Palace205Satyam
    一个 C d
    203 泰姬陵宫 203 卡兰
    --- --- 204 拉格比尔
    205 泰姬陵宫 205 萨蒂扬

    c) Full outer join: This operation is used when the user has to include tuples from both sides in the resulting table. If the tuples are not the same in both the tables, then the not similar attributes are made NULL.

    c)完全外部联接:当用户必须在结果表的两侧都包含元组时,将使用此操作。 如果两个表中的元组都不相同,则将不相似的属性设置为NULL。

    Example,

    例,

    Left Side Table:

    左侧桌:

    AB
    203Taj Palace
    205Royal plaza
    207Hotel Villas
    一个
    203 泰姬陵宫
    205 皇家广场
    207 别墅酒店

    Right Side Table:

    右侧表:

    AB
    203Karan
    204Raghubir
    205Satyam
    一个
    203 卡兰
    204 拉格比尔
    205 萨蒂扬

    Resultant Table:

    结果表:

    ABCD
    203Taj Palace203Karan
    ------204Raghubir
    205Taj Palace205Satyam
    207Hotel Villas------
    一个 C d
    203 泰姬陵宫 203 卡兰
    --- --- 204 拉格比尔
    205 泰姬陵宫 205 萨蒂扬
    207 别墅酒店 --- ---

    Let's look at how nested query works?

    让我们看看嵌套查询是如何工作的?

    嵌套查询 (Nested query)

    A Nested query also is known as Subquery, sub-selector, an inner query is a SELECT query within another SQL query, which is embedded within the WHERE or HAVING Clause.

    嵌套查询也称为Subquerysub-selector ,内部查询是另一个SQL查询中的SELECT查询,该查询嵌入在WHERE或HAVING子句中。

    The data which is used in Nested query is returned by the nested query and used in the form of the condition in the main query, which further restricts so that the retrieval of the data should not be followed.

    嵌套查询返回的嵌套查询中使用的数据以主查询中条件的形式使用,这进一步受到限制,因此不应遵循对数据的检索。

    The rules which are followed by nested queries are,

    嵌套查询遵循的规则是:

    1. A nested query must always be enclosed within parentheses.

      嵌套查询必须始终用括号括起来。

    2. An ORDER BY command can be used by the main query but not by the nested query. For the ORDER BY command, in nested query GROUP BY command can be used to perform the same function.

      主查询可以使用ORDER BY命令,但嵌套查询不能使用。 对于ORDER BY命令,可以在嵌套查询GROUP BY命令中执行相同的功能。

    3. For the Column purpose, A nested query must return a single column within the Select* Clause.

      出于列目的,嵌套查询必须在Select *子句中返回单个列。

    4. For the Row purpose, a nested query may use to return multiple columns.

      出于行目的,嵌套查询可用于返回多个列。

    5. The nested queries that return more than one row can only be used with multiple value operators, such as IN or NOT IN operator.

      返回多行的嵌套查询只能与多个值运算符一起使用,例如IN或NOT IN运算符。

    6. Those values that evaluate to a BLOB, ARRAY, CLOB, or NCLOB cannot include any references in the SELECT LIST.

      那些评估为BLOB,ARRAY,CLOB或NCLOB的值不能在SELECT LIST中包含任何引用。

    7. A nested query cannot form towards a union. Only the statement, which is a single SELECT, is allowed.

      嵌套查询无法形成并集。 仅允许单个SELECT语句。

    8. A nested query cannot be appearing within a set function immediately.

      嵌套查询不能立即出现在set函数中。

    9. Within the nested query, The BETWEEN operator can be used but not with a nested query.

      在嵌套查询中,可以使用BETWEEN运算符,但不能与嵌套查询一起使用。

    Repeatedly, Nested queries are mostly used with the SELECT statement. They can also be used within another nested query, INSERT, UPDATE or DELETE.

    重复地, 嵌套查询通常与SELECT语句一起使用。 它们也可以在另一个嵌套查询INSERT,UPDATE或DELETE中使用。

    带有SELECT语句的嵌套查询 (Nested queries with the SELECT statement)

    Nested queries are most often used with the SELECT statement. Its syntax is as follows,

    嵌套查询最常与SELECT语句一起使用。 其语法如下,

    Example: The Engineers table with their salaries record is given,

    示例:给出了带薪水记录的Engineers表,

    IDNameAgeAddressSalary
    1Arun34Kanpur30,000
    2Kamal23Lucknow34,000
    3Ajay32Mumbai25,000
    4Shubham28Delhi26,000
    5Anurag26Bangalore24,000
    6Shivam27Hyderabad23,000
    7karan24Noida32,000
    8Himanshu33Chennai20,000
    ID 名称 年龄 地址 薪水
    1个 阿伦 34 坎普尔 30,000
    2 卡马尔 23 拉克瑙 34,000
    3 阿杰 32 孟买 25,000
    4 Shubham 28 新德里 26,000
    5 阿努拉格 26 班加罗尔 24,000
    6 湿婆 27 海得拉巴 23,000
    7 卡兰 24 野田 32,000
    8 Himanshu 33 钦奈 20,000

    Now, The Nested query for the following records,

    现在,嵌套查询以下记录,

    SQL> SELECT *
       FROM Engineers 
       WHERE ID IN (SELECT ID 
             FROM Engineers
             WHERE SALARY > 26,000) ;
    
    

    The result is,

    结果是

    IDNameAgeAddressSalary
    1Arun34Kanpur30,000
    2Kamal23Lucknow34,000
    7karan24Noida32,000
    ID 名称 年龄 地址 薪水
    1个 阿伦 34 坎普尔 30,000
    2 卡马尔 23 拉克瑙 34,000
    7 卡兰 24 野田 32,000

    带有UPDATE语句的嵌套查询 (Nested queries with the UPDATE statement)

    The nested query can be used with the UPDATE statement in Conjunction. By using the nested query with the UPDATE statement, we can update either single or multiple columns in the table.

    嵌套查询可以与Conjunction中的UPDATE语句一起使用。 通过将嵌套查询与UPDATE语句一起使用,我们可以更新表中的单列或多列。

    Example: Suppose the Engineers_rally table is already given with the data of Engineers table. Now through the nested query, we are going to update the salary section by 2 times in the Engineers table for all those engineers whose age is greater than 27.

    例如:假设Engineers_rally表已经与工程师表的数据给出。 现在,通过嵌套查询,对于年龄在27岁以上的所有工程师,我们将在Engineers表中将薪金部分更新2倍。

    QUERY: Nested query to update the data from one table to another

    查询:嵌套查询,用于将数据从一个表更新到另一个表

    SQL> UPDATE Engineers
           SET SALARY= SALARY * 2
           WHERE AGE IN (SELECT AGE FROM Engineers_rally)
           WHERE AGE >= 27);
    
    

    The result is,

    结果是

    IDNameAgeAddressSalary
    1Arun34Kanpur30,000
    2Kamal23Lucknow34,000
    3Ajay32Mumbai25,000
    4Shubham28Delhi26,000
    5Anurag26Bangalore24,000
    6Shivam27Hyderabad23,000
    7karan24Noida32,000
    8Himanshu33Chennai20,000
    ID 名称 年龄 地址 薪水
    1个 阿伦 34 坎普尔 30,000
    2 卡马尔 23 拉克瑙 34,000
    3 阿杰 32 孟买 25,000
    4 Shubham 28 新德里 26,000
    5 阿努拉格 26 班加罗尔 24,000
    6 湿婆 27 海得拉巴 23,000
    7 卡兰 24 野田 32,000
    8 Himanshu 33 钦奈 20,000

    带DELETE语句的嵌套查询 (Nested queries with the DELETE statement)

    The Nested query can be used with the DELETE statement in conjunction as the way it was used above with other statements.

    嵌套查询可以与DELETE语句一起使用,就像上面与其他语句一起使用时一样。

    Example: Suppose the Engineers_rally table is already given with the data of Engineers table. Now through the nested query, we are going to delete the records from the Engineers table of those engineers whose age is greater than 27.

    例如 :假设Engineers_rally表已经与工程师表的数据给出。 现在,通过嵌套查询,我们将从年龄超过27岁的工程师的工程师表中删除记录。

    Nested query to delete the data from the table,

    嵌套查询以从表中删除数据,

    SQL> DELETE FROM Engineers
           WHERE AGE IN (SELECT AGE FROM Engineers_rally
           WHERE AGE >= 27);
    
    

    The result is,

    结果是

    IDNameAgeAddressSalary
    2Kamal23Lucknow34,000
    5Anurag26Bangalore24,000
    7karan24Noida32,000
    ID 名称 年龄 地址 薪水
    2 卡马尔 23 拉克瑙 34,000
    5 阿努拉格 26 班加罗尔 24,000
    7 卡兰 24 野田 32,000

    连接操作和嵌套查询之间的区别 (Differences between join operations and nested queries)

    Now, the differences which we got from the above data between join operations and nested queries are:

    现在,我们从上述数据中得到的联接操作和嵌套查询之间的区别是:

    Join operationsNested queries
    Join operations are better in optimization.Nested queries are not better in optimization.
    Join operations takes more time because they fetch whole table data with attributes.Nested queries take less time because they fetch only relevant data from the tables.
    Join operations return index data, So on larger dataset working on them is faster.Nested queries return set of data with no cache facility, So on larger dataset working on them is slower.
    Joins operations are not easier to read, understand and evaluate.Nested queries are easier to read, understand and evaluate.
    Join operations can be used in return rows.Nested queries can be used to return either a scalar value or row set.
    Join operations are powerful relational operatorsNested queries are not powerful relational operators.
    加盟业务 嵌套查询
    连接操作在优化方面更好。 嵌套查询在优化方面并不更好。
    联接操作会花费更多时间,因为它们会获取具有属性的整个表数据。 嵌套查询花费的时间更少,因为它们仅从表中获取相关数据。
    联接操作返回索引数据,因此在较大的数据集上运行速度更快。 嵌套查询返回的数据集没有缓存功能,因此在较大的数据集上运行速度较慢。
    联接操作不容易阅读,理解和评估。 嵌套查询更易于阅读,理解和评估。
    连接操作可用于返回行。 嵌套查询可用于返回标量值或行集。
    联接操作是强大的关系运算符 嵌套查询不是强大的关系运算符。

    翻译自: https://www.includehelp.com/dbms/join-operation-vs-nested-query.aspx

    数据库 嵌套查询

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 209,684
精华内容 83,873
关键字:

嵌套查询