sql语句连接查询.

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

 

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

 

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

 

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

一、子查询的组成

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

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

  3、可选的where子句。

  4、可选的group by子句。

  5、可选的having子句。

二、子查询的语法规则

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

  2、不能包括compute或for.browse子句。

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

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

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

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

建张表测试一下

测试环境 mysql5.6

sql server 嵌套两张表数据 sql语句的嵌套_嵌套查询

sql server 嵌套两张表数据 sql语句的嵌套_嵌套查询_02

sql server 嵌套两张表数据 sql语句的嵌套_sql_03

例如

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'
)

   输出结果为:

   

sql server 嵌套两张表数据 sql语句的嵌套_sql_04

 

 

四、in嵌套查询

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

   示例:

select username,age from user

where id in(

select id from user

where age=10);

结果集

sql server 嵌套两张表数据 sql语句的嵌套_嵌套查询_05

 

五、some或any嵌套查询

  1、语法

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

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

  示例:

select name from user
where id =
								some  //用等号和以下查询到的值比较,如果与其中一个相等,就返回
(
select id from user
where age = '10'
)

  输出结果为:

sql server 嵌套两张表数据 sql语句的嵌套_子查询_06

五、all嵌套查询

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

ALL关键字:

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

七、exists嵌套查询

   1、语法

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

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

 

 

sql server 嵌套两张表数据 sql语句的嵌套_sql server 嵌套两张表数据_07

 

 

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

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