数据库子查询

子查询

  • 出现在其他语句中的select语句,称为子查询或内查询
  • 外部的查询语句,称为主查询或外查询

 1.联合查询

union 合并去重复 两个的集合并集;并且会排重 如果是一个字段,重复直接去掉,如果是多个字段,都相同才会去重。

-- 查询所有教师和学生的 name birthday sex
SELECT tname,tbirthday,tsex FROM teachers UNION
SELECT sname,sbirthday,ssex from students;

union all:但是不会去重

-- 查询所有教师和学生的 name birthday sex
SELECT tname,tbirthday,tsex FROM teachers UNION ALL
SELECT sname,sbirthday,ssex from students;

union all 效率比union 高。

2.子查询

2.1 什么是子查询

子查询是一个嵌套在 SELECT、INSERT、UPDATE 或 DELETE 语句中的查询。数据库引擎将子查询作为虚表执行查 询操作。

子查询可作为联接语句中的一个表,也可作为选择语句中的一个值。

子查询的执行依赖于嵌套查询。顺序从最内层开始,一层一层向外执行,外层的嵌套查询可以访问内层嵌套查询的 结果,相比变量方式执行效率更高,子查询还可以将多表的数据组合在一起。

2.2 子查询的类型

查询语句中的任何条件,值,范围,都可以使用子查询表示。 将子查询的结果集 再作为一个临时表来用。

  • 子查询结果为多行多列(当作虚拟表来使用) 查询每门课考试最高分的学生信息
  • 子查询结果为多行一列(可以当作多个值来用(1,2,3,4)) 查询参加了某门课程考试的学生信息
  • 子查询结果为一个值。(可以作为字段使用) 查询与张三在同一个班级的学生信息

2.3 比较运算符中使用子查询

如果子查询的返回值不止一个,而是一个集合时,则不能直接使用比较运算符,可以在比较运算符和子查询之间插 入ANY、SOME或ALL。其中等值关系可以用IN操作符。

2.4 all子查询

all可以与=、>、>=、结合是来使⽤,分别表示等于、⼤于、⼤于等于、 ⼩于、⼩于等于、不等于其中 的所有数据。当所有数据都满足才是true,会返回满足所有条件的数据。

in关键字用于where子句中用来判断查询的表达式是否在多个值的列表中。返回满足in列表中的满足条件的记录。

只要大于其中的所有值才会被显示。

高于最大值

  • 查询比所有男生身高高的女生信息

2.5 any/some子查询

 any 可以与=、>、>=、结合起来使⽤,分别表示等于、⼤于、⼤于等于、⼩于、⼩于等于、不等于其 中的任何⼀个数据。也就是说只要有任意一个满足就是true。并且显示满足条件的数据。

高于最小值

  • 查询比某些男生高的女生信息

2.6 使⽤exists 和 not exists ⼦查询

where exist (⼦查询)如果该⼦查询有结果数据(⽆论什么数据,只要⼤于等于1⾏),则就为true,否则就为 false

如果内层select返回true则外层select可以返回值,否则就返回空。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值