Sqlserver 学习笔记


-----------------------接Part 2-------------------


13. 使用compute对查询结果集中的所有记录进行汇总统计,并显示所有参加汇总的记录的详细信息。

格式:

COMPUTE 聚合函数[列名]  --聚合函数,例如SUM (),AVG (),COUNT ()等

结合GROUP BY使用

示例:

SELECT * FROM

GROUP BY 专业方向

COMPUTE SUM(高考分数)


SQLServer <wbr>学习笔记之超详细基础SQL语句 <wbr>Part <wbr>3

sql server语句分析 sql server语句大全讲解_操作符_02

 

 

SELECT 专业方向, COUNT(*) 系部总人数

FROM std_table

GROUP BY 专业方向

COMPUTE COUNT(专业方向)


SQLServer <wbr>学习笔记之超详细基础SQL语句 <wbr>Part <wbr>3

sql server语句分析 sql server语句大全讲解_sql server语句分析_04

 

 

SELECT 专业方向, COUNT(*) 系部总人数

FROM std_table

GROUP BY 专业方向

COMPUTE SUM(COUNT(*))


SQLServer <wbr>学习笔记之超详细基础SQL语句 <wbr>Part <wbr>3

sql server语句分析 sql server语句大全讲解_操作符_06

 

 

SELECT 专业方向, AVG(高考分数) 高考平均分

FROM std_table

GROUP BY 专业方向

COMPUTE AVG(AVG(高考分数))


SQLServer <wbr>学习笔记之超详细基础SQL语句 <wbr>Part <wbr>3

sql server语句分析 sql server语句大全讲解_聚合函数_08

 


 

EXEC SP_RENAME '专业.系部名称', '系部代码'

 

 

14. UNION操作

UNION 操作符用于合并两个或多个 SELECT 语句的结果集。

请注意,UNION 内部的 SELECT 拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。【原因:sql union只是将两个结果联结起来一起显示,并不是联结两个表】

注释:默认地,UNION 操作符选取不重复的记录。如果允许重复的值,请使用 UNION ALL。

另外,UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。

--UNION 和NNION ALL

--UNION操作符用于合并两个或多个SELECT语句的结果集

SELECT 学号 FROM学生

UNION

SELECT 专业代码 FROM专业


SQLServer <wbr>学习笔记之超详细基础SQL语句 <wbr>Part <wbr>3

sql server语句分析 sql server语句大全讲解_操作符_10

 

 

SELECT 学号 FROM学生

UNION ALL

SELECT 专业代码 FROM专业


SQLServer <wbr>学习笔记之超详细基础SQL语句 <wbr>Part <wbr>3

sql server语句分析 sql server语句大全讲解_操作符_12

 

 

--对比:NNION ALL保留了重复值

SELECT 专业代码 FROM专业

UNION ALL

SELECT 学号 FROM学生


SQLServer <wbr>学习笔记之超详细基础SQL语句 <wbr>Part <wbr>3

 

sql server语句分析 sql server语句大全讲解_结果集_14

 

 

15 复合连接条件查询(多表查询)

SELECT 学生.学号, 学生.姓名, 班级.班级名称

FROM 学生

JOIN 班级 ON学生.班级代码 =班级.班级代码

 

SELECT 学生.学号, 学生.姓名, 班级.班级名称, 专业.专业名称, 系部.系部名称

FROM 学生

JOIN 班级 ON学生.班级代码 =班级.班级代码

JOIN 专业 ON学生.专业代码 =班级.专业代码

JOIN 系部 ON系部.系部代码 =班级.系部代码

 

--先建立如下表

CREATE TABLE
 (
INT PRIMARY KEY,
VARCHAR(10) NOT NULL,
VARCHAR(10) NOT NULL,
VARCHAR(20) NOT NULL,
VARCHAR(10)
 )
  
 CREATE TABLE
 (
INT PRIMARY KEY,
CHAR(6) NOT NULL,
INT FOREIGN KEY REFERENCES person(id)
 )
  
 INSERT INTO
 VALUES(1, 'Lai', 'fy', 'none', 'none')
 INSERT INTO
 VALUES(2, 'Lai', 'll', 'none', 'none')
 INSERT INTO
 VALUES(3, 'Lai', 'zy', 'none', 'none')
 INSERT INTO
 VALUES(4, 'Lai', 'fj', 'none', 'none')
  
 INSERT INTO
 VALUES(1, '111', 1)
 INSERT INTO
 VALUES(2, 'zzz', 2)
 INSERT INTO
 VALUES(3, 'zzz', NULL)
 INSERT INTO
 VALUES(4, 'zzz', NULL)

--给上述两个表中插入数据后,做如下查询语句

--left join 可以写成left outer join,,,其它的以此类推

 

-- 列出所有人的订购(INNER JOIN --->内连接)

SELECT .lastName, person.firstName, orders.orderNo
 FROM  person
 INNER JOIN
 ON .id = orders.idp
 ORDER BY person.lastName


SQLServer <wbr>学习笔记之超详细基础SQL语句 <wbr>Part <wbr>3

sql server语句分析 sql server语句大全讲解_sql server语句分析_16

 

 

--注:INNER JOIN 和JOIN效果一样,只要表中有一个匹配,则返回记录行

 

--列出所有的人,以及他们的订购,如果有的话(LEFT OUTER JOIN-->左外连接)

SELECT .lastName, person.firstName, orders.orderNo
 FROM  person
 LEFT OUTER JOIN
 ON .id = orders.idp

 

sql server语句分析 sql server语句大全讲解_聚合函数_17

 

--注:LEFT OUTER JOIN会返回左表所有的行,即使在右表中没有匹配值的行


SQLServer <wbr>学习笔记之超详细基础SQL语句 <wbr>Part <wbr>3

 

--列出所有的订单,以及订购他们的人,如果有的话(RIGHT OUTER JOIN-->右外连接)

SELECT .lastName, person.firstName, orders.orderNo
 FROM  person
 RIGHT OUTER JOIN
 ON .id = orders.idp


SQLServer <wbr>学习笔记之超详细基础SQL语句 <wbr>Part <wbr>3

sql server语句分析 sql server语句大全讲解_操作符_20

 

 

--注:RIGHT OUTER JOIN会返回右表所有的行,即使在左表中没有匹配值的行

 

--列出所有的人,以及他们的定单;同时列出所有的定单,以及定购它们的人(FULL JOIN--->完全连接)

SELECT .lastName, person.firstName, orders.orderNo
 FROM  person
 FULL JOIN
 ON .id = orders.idp


SQLServer <wbr>学习笔记之超详细基础SQL语句 <wbr>Part <wbr>3

sql server语句分析 sql server语句大全讲解_sql server语句分析_22

 

 

 

16嵌套查询

SELECT * FROM  学生
 WHERE  班级代码 IN
 (
SELECT  班级代码 FROM班级 WHERE专业代码 IN
(
SELECT  专业代码 FROM专业 WHERE系部代码 IN
(
SELECT  系部代码 FROM系部 WHERE系部代码 IN(1, 2, 5)
)
)
 )