SQLServer 学习笔记之超详细基础SQL语句 Part 3
Sqlserver 学习笔记
-----------------------接Part 2-------------------
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)
)
)
)
SQLServer 学习笔记之超详细基础SQL语句 Part 3的更多相关文章
- SQLServer 学习笔记之超详细基础SQL语句 Part 12(The End)
Sqlserver 学习笔记 by:授客 QQ:1033553122 -----------------------接Part 11------------------- 现在,我们希望从 " ...
- SQLServer 学习笔记之超详细基础SQL语句 Part 11
Sqlserver 学习笔记 by:授客 QQ:1033553122 -----------------------接Part 10------------------- DECLARE @myavg ...
- SQLServer 学习笔记之超详细基础SQL语句 Part 10
Sqlserver 学习笔记 by:授客 QQ:1033553122 -----------------------接Part 9------------------- 删除约束的语法 ALTER T ...
- SQLServer 学习笔记之超详细基础SQL语句 Part 9
Sqlserver 学习笔记 by:授客 QQ:1033553122 -----------------------接Part 8------------------- 3 范式的概念 第一范式的目标 ...
- SQLServer 学习笔记之超详细基础SQL语句 Part 8
Sqlserver 学习笔记 by:授客 QQ:1033553122 -----------------------接Part 7------------------- --触发器str_trigge ...
- SQLServer 学习笔记之超详细基础SQL语句 Part 7
Sqlserver 学习笔记 by:授客 QQ:1033553122 -----------------------接Part 6------------------- 29 存储过程和触发器 存储过 ...
- SQLServer 学习笔记之超详细基础SQL语句 Part 6
Sqlserver 学习笔记 by:授客 QQ:1033553122 -----------------------接Part 5------------------- 28 聚合函数 --求平均分 ...
- SQLServer 学习笔记之超详细基础SQL语句 Part 5
Sqlserver 学习笔记 by:授客 QQ:1033553122 -----------------------接Part 4------------------- 21使用默认 默认(也称默认值 ...
- SQLServer 学习笔记之超详细基础SQL语句 Part 4
Sqlserver 学习笔记 by:授客 QQ:1033553122 -----------------------接Part 3------------------- 17 带比较运算符的嵌套查询 ...
随机推荐
- 11-01 Java 开发工具 eclipse从下载、安装到实际使用的详细教程
Eclipse和MyEclipse简介 Eclipse是一种可扩展的开放源代码的IDE.起始于1999年4月,由OTI和IBM两家公司的IDE产品开发组组建. 2001年11月,IBM公司捐出价值4 ...
- oracle数据库迁移相关
常见的实现方式: rman exp/imp expdp/impdp DG OGG 主要是看停机时间了,方法很多,数据量小,就导出,如果时间要求很高,那可以采取dg或ogg或类似的技术.减低downt ...
- JAVA面试精选【Java算法与编程一】
在面试中,算法题目是必须的,通过算法能够看出一个程序员的编程思维,考察对复杂问题的设计与分析能力,对问题的严谨性都能够体现出来.算法是一系列解决问题的清晰指令,也就是说,能够对一定规范的输入,在有限时 ...
- Java 死锁优化
死锁示例1 public class SyncThread implements Runnable{ private Object obj1; private Object obj2; public ...
- IdentityServer-Protecting an API using Client Credentials
使用客户凭证保护API 这篇快速开始将展示使用IdentityServer保护APIs的最基本使用场景. 在此场景中我们将定义一个API和一个要访问此API的客户端. 客户端将向IdentitySer ...
- 虚幻4引擎角色蓝图Character的Movement组件学习
Jumping/Falling Air Control :角色在空中时的控制参数.数值为1 代表完全控制. Air Control Boost Multiplier :当角色的速度超过 Velocit ...
- java多线程下的所的概念
锁和synchronized关键字 为了同步多线程,Java语言使用监视器(monitors),一种高级的机制来限定某一 时刻只有一个线程执行一段受监视器保护的代码.监视器的行为是通过锁来实现 ...
- Java NIO系列教程(六) Selector
Selector(选择器)是Java NIO中能够检测一到多个NIO通道,并能够知晓通道是否为诸如读写事件做好准备的组件.这样,一个单独的线程可以管理多个channel,从而管理多个网络连接. 下面是 ...
- Java NIO系列教程(五) 通道之间的数据传输
在Java NIO中,如果两个通道中有一个是FileChannel,那你可以直接将数据从一个channel(译者注:channel中文常译作通道)传输到另外一个channel. transferFro ...
- Java 容器之 Connection栈队列及一些常用
集合家族图 ---|Collection: 单列集合 ---|List: 有存储顺序 , 可重复 ---|ArrayList: 数组实现 , 查找快 , 增删慢 ---|LinkedList: 链表实 ...