sql 学习随笔1 子查询

数据如下:
name val memo
a    2   a2(a的第二个值)
a    1   a1--a的第一个值
a    3   a3:a的第三个值
b    1   b1--b的第一个值
b    3   b3:b的第三个值
b    2   b2b2b2b2
b    4   b4b4
b    5   b5b5b5b5b5
*/

--创建表并插入数据:

create table tb(name varchar(10),val int,memo varchar(20))
insert into tb values('a',    2,   'a2(a的第二个值)')
insert into tb values('a',    1,   'a1--a的第一个值')
insert into tb values('a',    3,   'a3:a的第三个值')
insert into tb values('b',    1,   'b1--b的第一个值')
insert into tb values('b',    3,   'b3:b的第三个值')
insert into tb values('b',    2,   'b2b2b2b2')
insert into tb values('b',    4,   'b4b4')
insert into tb values('b',    5,   'b5b5b5b5b5')
go

 按name分组取第一次出现的行所在的数据。

select a.* from tb a where val = (select top 1 val from tb where name = a.name) order by a.name

什么是子查询
1.子查询是嵌套在其他查询中的常规的T-SQL查询(用括号括起来),当需要一个SELECT语句作为数据部分的基础或另一个查询中的条件的要素时,就是创建子查询。
 
2.子查询满足的需求:
  (1).把一个查询分解成一系列的逻辑步骤。
  (2).提供一个列表作为WHERE子句和 [ IN | EXISTS | ANY | ALL] 的目标对象。
  (3).提供由父查询中每一条记录驱动的查找。

一.嵌套的子查询
1.嵌套子查询只朝一个方向进行——要么返回一个而用于外部查询的值,要么返回一个与IN运算符一起使用的的值的列表。
2.嵌套子查询中,内部查询只处理一次
3.与NULL比较总会得到NULL。如果允许NULL在子查询中出现,则在与NOT IN相比较时,外部查询中的所有行都会被确定为错误的——这将返回空的列表。
2.ANY, SOME和ALL

二.相关子查询
1.执行步骤:
  (1)外部查询得到一条记录并将其传入到内部查询
  (2)内部查询基于传入的值执行。
  (3)内部查询从其结果中把值传回到外部查询,外部查询使用这些值来完成其处理。 
 

你可能感兴趣的:(sql,Go)