SQLServer 学习笔记之超详细基础SQL语句 Part 3
Sqlserver 学习笔记
13. 使用compute对查询结果集中的所有记录进行汇总统计,并显示所有参加汇总的记录的详细信息。
格式:
COMPUTE 聚合函数[列名] --聚合函数,例如SUM (),AVG (),COUNT ()等
结合GROUP BY使用
示例:
SELECT * FROM std_table
GROUP BY 专业方向
COMPUTE SUM(高考分数)
SELECT 专业方向, COUNT(*) 系部总人数
FROM std_table
GROUP BY 专业方向
COMPUTE COUNT(专业方向)
SELECT 专业方向, COUNT(*) 系部总人数
FROM std_table
GROUP BY 专业方向
COMPUTE SUM(COUNT(*))
SELECT 专业方向, AVG(高考分数) 高考平均分
FROM std_table
GROUP BY 专业方向
COMPUTE AVG(AVG(高考分数))


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 专业
SELECT 学号 FROM 学生
UNION ALL
SELECT 专业代码 FROM 专业
--对比:NNION ALL保留了重复值
SELECT 专业代码 FROM 专业
UNION ALL
SELECT 学号 FROM 学生
15 复合连接条件查询(多表查询)
SELECT 学生.学号, 学生.姓名, 班级.班级名称
FROM 学生
JOIN 班级 ON 学生.班级代码 = 班级.班级代码
SELECT 学生.学号, 学生.姓名, 班级.班级名称, 专业.专业名称, 系部.系部名称
FROM 学生
JOIN 班级 ON 学生.班级代码 = 班级.班级代码
JOIN 专业 ON 学生.专业代码 = 班级.专业代码
JOIN 系部 ON 系部.系部代码 = 班级.系部代码
--先建立如下表
CREATE TABLE person
(
id INT PRIMARY KEY,
lastNAME VARCHAR(10) NOT NULL,
firstName VARCHAR(10) NOT NULL,
addr VARCHAR(20) NOT NULL,
city VARCHAR(10)
)
CREATE TABLE orders
(
id INT PRIMARY KEY,
orderNo CHAR(6) NOT NULL,
idP INT FOREIGN KEY REFERENCES person(id)
)
INSERT INTO person
VALUES(1, 'Lai', 'fy', 'none', 'none')
INSERT INTO person
VALUES(2, 'Lai', 'll', 'none', 'none')
INSERT INTO person
VALUES(3, 'Lai', 'zy', 'none', 'none')
INSERT INTO person
VALUES(4, 'Lai', 'fj', 'none', 'none')
INSERT INTO orders
VALUES(1, '111', 1)
INSERT INTO orders
VALUES(2, 'zzz', 2)
INSERT INTO orders
VALUES(3, 'zzz', NULL)
INSERT INTO orders
VALUES(4, 'zzz', NULL)
--给上述两个表中插入数据后,做如下查询语句
--left join 可以写成left outer join,,,其它的以此类推
-- 列出所有人的订购(INNER JOIN --->内连接)
SELECT person.lastName, person.firstName, orders.orderNo
FROM person
INNER JOIN orders
ON person.id = orders.idp
ORDER BY person.lastName
--注:INNER JOIN 和JOIN效果一样,只要表中有一个匹配,则返回记录行
--列出所有的人,以及他们的订购,如果有的话(LEFT OUTER JOIN-->左外连接)
SELECT person.lastName, person.firstName, orders.orderNo
FROM person
LEFT OUTER JOIN orders
ON person.id = orders.idp
--注:LEFT OUTER JOIN会返回左表所有的行,即使在右表中没有匹配值的行
--列出所有的订单,以及订购他们的人,如果有的话(RIGHT OUTER JOIN-->右外连接)
SELECT person.lastName, person.firstName, orders.orderNo
FROM person
RIGHT OUTER JOIN orders
ON person.id = orders.idp
--注:RIGHT OUTER JOIN会返回右表所有的行,即使在左表中没有匹配值的行
--列出所有的人,以及他们的定单;同时列出所有的定单,以及定购它们的人(FULL JOIN--->完全连接)
SELECT person.lastName, person.firstName, orders.orderNo
FROM person
FULL JOIN orders
ON person.id = orders.idp
16嵌套查询
SELECT * FROM 学生
WHERE 班级代码 IN
(
SELECT 班级代码 FROM 班级 WHERE 专业代码 IN
(
SELECT 专业代码 FROM 专业 WHERE 系部代码 IN
(
SELECT 系部代码 FROM 系部 WHERE 系部代码 IN(1, 2, 5)
)
)
)
作者:授客
微信/QQ:1033553122
全国软件测试QQ交流群:7156436
Git地址:https://gitee.com/ishouke
友情提示:限于时间仓促,文中可能存在错误,欢迎指正、评论!
作者五行缺钱,如果觉得文章对您有帮助,请扫描下边的二维码打赏作者,金额随意,您的支持将是我继续创作的源动力,打赏后如有任何疑问,请联系我!!!
微信打赏
支付宝打赏 全国软件测试交流QQ群
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库