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
一张表,一旦分组 完成后,查询后只能得到组相关的信息。
组相关的信息:(统计信息) 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