sql语句嵌套查询.

sql语句连接查询.

接触sql语句这么长时间了,牵涉到连接的时候,总是google别人的.

 

今天好好学学sql 的嵌套查询

 

嵌套查询 ,也不局限查询,也可以其他, 但本质是 一个sql语句中用到其他sql语句的结果了

 

sql执行顺序是, 由内向外执行,

一、子查询的组成

  1、包含标准选择列表组件的标准select查询。

  2、包含一个或多个表或者视图名称的标准from子句。

  3、可选的where子句。

  4、可选的group by子句。

  5、可选的having子句。

二、子查询的语法规则

  1、子查询的select查询总是使用圆括号括起来。

  2、不能包括computefor.browse子句。

  3、如果同时指定top子句,则可能只包括order by子句。

  4、子查询最多可以嵌套到32层。个别查询可能会不支持32层嵌套。

  5、任何可以使用表达式的地方都可以使用子查询,只要它返回的是单个值。

  6、如果某个表只出现在子查询中而不出现在外部查询中,那么该表的列就无法包含在输出中。

建张表测试一下

测试环境 mysql5.6

例如

select name,age from person where age > (select age from person where name ='孙权');

内外查询都使用同一张表(相互依赖的查询 称为相关子查询)

运行update user set username ='lisi' where id =(select id from user where age=10);

报错 You can't specify target table 'user' for update in FROM clause (因为内外用了同一张表)

解决办法

update user set username ='lisi' where id = (select t.id from (select id from user where age=10)t);

再用一次嵌套即可

三、简单子查询

  示例:

select name,age from user 

where age > =

(


					select age from user 


					where name = 'lisi' 

)

   输出结果为:

   

 

 

四、in嵌套查询

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

   示例:

select username,age from user

where id in(

select id from user

where age=10);

结果集

 

五、someany嵌套查询

  1、语法

  somesql中的逻辑运算符号,如果在一系列比较中,有些值为True,那么结果就为Truesome的语法是:

  <表达式>{ =|<>|!=|>|>=|!>|<|<=|!<}some(子查询)   

  示例:

select name from user

where id =
								some  //用等号和以下查询到的值比较,如果与其中一个相等,就返回 

(


					select id from user 


					where age = '10' 

)

  输出结果为:

五、all嵌套查询

some any select ...from ... where a > result1 or a > result2 or a > result3

ALL关键字:

ALL关键字与any关键字类似,只不过上面的or改成and

七、exists嵌套查询

   1、语法

   existssql中的逻辑运算符号。如果子查询有结果集返回,那么就为Trueexists代表"存在"的意义,它只查找满足条件的那些记录。一旦找到第一个匹配的记录后,就马上停止查找。

select * from user where exists(select * from user where age=11);

 

 

 

 

后记:当然最主要的应用是不只是嵌套查询,还有根据而结果集筛选数据,更新数据等等

sql 语句是面向过程的,很恶心.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值