sql分组和连接查询

12、分组:Group by:
   一张表,一旦分组 完成后,查询后只能得到组相关的信息。
    组相关的信息:(统计信息) count,sum,max,min,avg  分组的标准)
    在SQLServer中分组时:不能以text,ntext,image类型的字段作为分组依据
   在selecte统计函数中的字段,不能和普通的字段放在一起;


************************************************************************************

如表
-------------------------------------------------
table1      |  table2     
-------------------------------------------------
id  name    |  id  score  
1  lee    |  1  90    
2  zhang    |  2  100   
4  wang     |  3  70    
-------------------------------------------------

1.左连接:left join 或 left outer join
左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。

例:select *

from table1 left join table2 on table1.id=table2.id

-------------结果-------------
id  name    id    score
------------------------------
1  lee     1    90
2  zhang    2    100
4  wang     NULL   NULL
------------------------------

注释:包含table1的所有子句,根据指定条件返回table2相应的字段,不符合的以null显示

2.右连接:right join 或 right outer join
右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。

3.完整外部联接:full join 或 full outer join
全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。


二、内连接
(1)概念:内联接是用比较运算符比较要联接列的值的联接

(2)内连接:join 或 inner join

(3)sql语句:
select *

from table1 join table2 on table1.id=table2.id


-------------结果-------------
id  name    id  score
------------------------------
1  lee       1  90
2  zhang    2  100
------------------------------
注释:只返回符合条件的table1和table2的列


三、交叉连接(完全)

(1)概念:没有 WHERE 子句的交叉联接将产生联接所涉及的表的笛卡尔积。第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小。(table1和table2交叉连接产生3*3=9条记录)

(2)交叉连接:cross join (不带条件where...)

(3)sql语句:
select *

from table1 cross join table2


-------------结果-------------
id    name    id    score
------------------------------
1    lee       1    90
2    zhang      1    90
4    wang     1    90
1    lee       2    100
2    zhang      2    100
4    wang     2    100
1    lee       3    70
2    zhang      3    70
4    wang     3    70
------------------------------
注释:返回3*3=9条记录,即笛卡尔积

(4)等价(与下列执行效果相同):
select *

from table1,table2

你可能感兴趣的:(SQL)