1.聚合函数

聚合函数对一组值进行计算并返回单一的值,通常聚合函数会与select语句的group by子句一同使用,在于group by子句使用时,聚合函数会为每一个组产生一个单一值,而不会为整个表产生一个单一值。常用的聚合函数及说明如下:

函数名称 说明
sum

返回表达式中所有值得和

avg 计算平均值
min 返回表达式的最小值
max 返回表达式的最大值
count 返回组中项目的数量
/* 创建数据库 */
create database db_orderSystem;
/* 使用数据库 */
use db_orderSystem;
/* 创建订单表 */
create table Orders
(oid int primary key identity(1,1),--订单编号customer varchar(100),--订单客户orderPrice int --订单金额
)
------------count() 计算次数---------------------------
select count(*) '数据量' from Orders;
--查看Bush的订单数目
select count(*) from Orders where customer='布鲁士';
------------sum() 求和---------------------------
select sum(orderPrice) from Orders where customer='布鲁士';
--查看订单的总单数与销售总额,并且取中文别名
select count(*),sum(orderPrice) from Orders;
------------avg() 求平均值---------------------------
--求订单平均金额,并且取中文别名
select avg(orderPrice) from Orders;
--求订单的订单数,总和,平均值,并且取中文别名
select count(*),sum(orderPrice),avg(orderPrice) from Orders;
--求Bush的订单总和与订单数和平均值
select count(*),sum(orderPrice),avg(orderPrice) from Orders  where customer='布鲁士';
------------max()最大值,min()最小值---------------------------
--求最高金额的订单
select max(orderPrice) from Orders;
select top 1 customer,orderPrice from Orders order by orderPrice desc; -- 升序
--求最小金额的订单
select min(orderPrice) from Orders;

2.group by分组查询

group by子句规则对数据进行分组后并进行显示。group by表示按一个或多个列或表达式的值将一组选定行组合成一个摘要行集,针对每一组返回一行;语法格式如下:

select 字段 from tb_表名 group by 某属性;select 字段 from tb_表名 where 某属性 ='某值' group by 某属性;
create database db_stumanager
use db_stumanager;
create table tb_student
(sid int primary key identity(1,1),--编号sname varchar(50) not null,--姓名ssex char(2) not null,--性别sage int not null,--年龄sphone varchar(20),--电话saddress varchar(50),--地址
);insert into tb_student
values
('张三','男',18,'15111294325','湖南省长沙市'),
('王五','女',18,'15578648765','湖南省株洲市'),
('彭三','男',17,'15122294325','湖南省湘潭市'),
('李彪','男',22,'15111334325','湖北'),
('刘小承','男',16,'18623294325','北京'),
('小宝','女',18,'12345678911','北京'),
('贺回','男',33,'16634857683','广东'),
('陈三回','男',28,'17734783347','湖南'),
('西瓜哥','女',18,'17823787423','杭州市'),
('罗小恒','男',19,'16111294325','河南省'),
('徐美丽','男',20,'17111294325','河北省'),
('杨小红','女',20,'18112312673','杭州市'),
('聂风','男',40,'18111223325','湖南省'),
('叶英雄','男',66,'18123294345','西藏'),
('卫青','女',18,'18123294345','青海');
--查看男女生的年龄总和??
select ssex,SUM(sage) from tb_student group by ssex;
--查看男女生的平均年龄
select ssex,AVG(sage) from tb_student group by ssex;
--查看学生信息表中各个姓氏的人数
select LEFT(sname,1),COUNT(*) as '人数' from tb_student
group by LEFT(sname,1);
--查询姓"陈"的男生有多少人女生有多少人?
select ssex,COUNT(*) from tb_student where LEFT(sname,1) = '陈'
group by ssex;
--查询以“三”结尾的男女生多少?
select ssex,COUNT(*) from tb_student where sname like '%龙'
group by ssex
--查看每个地方有多少人?
select saddress,COUNT(*) from tb_student group by saddress;
--查看每个地方的男女生各多少人?
select saddress,ssex,COUNT(*) from tb_student group by ssex,saddress

3.having分组查询后筛选

指定组或聚合的搜索条件。having只能与select语句一起使用。having通常在group by子句中使用,如果不适用group by子句,则having的行为与where子句一样,语法格式如下:

select 字段 from tb_表 group by 某属性 having 某属性 条件; 
--查询2个人以上的地方有哪些?
select saddress,COUNT(*) from tb_student group by saddress
having COUNT(*) >=2
--查询住在"湖南"的女生有多少人?
select ssex,COUNT(*) from tb_student where saddress like '%湖南%'
group by ssex having ssex = '女';

4.连表查询

4.1 内连接

内连接时使用比较运算符比较要联接列中的值的联接。内连接的特点:是从结果中删除其它被联接表中没有匹配行的所有的行,所以内连接可能会丢失信息。语法格式如下:

select * from a , b where a.id = b.id;select * from a inner join b on a.id = b.id;

4.2 外连接

外部联接则扩充了内连接的功能,会把内连接中删除表源中的一些保留下来,由于保留下来的行不同,可将外联接分为左外联接、右外联接和全外连接。

左外联接

左外联接使用left outer join 进行联接,左外联接的结果集包括left outer join 子句中指定的左表的所有行。如果左表的某一行在右表中没有匹配行,则在关联的结果集行,来自右表的所有选择列表列均为空值。

selecct * from a left outer join b on a.id = b.id;

右外联接

右外联接使用right outer join进行联接,是左外联接的反向联接。将返回右表的所有行。如果右表的某一行在左表中没有匹配行,则将为左表返回空值。

selecct * from a right outer join b on a.id = b.id;

全外联接

全外联接使用full outer join 进行联接,将返回左表和右表中的所有行。

selecct * from a full outer join b on a.id = b.id;

4.3 经典案例

create table tb_stu
(SCode int not null primary key,SName char(10) not null,SAddress nvarchar(50),SBirth datetime,SGrade varchar(2) default('S1'),SEmail nvarchar(50) check(SEmail like '%@%'),ssex char(10)
)goinsert into tb_stu(SCode, SName, SAddress, SBirth, SSex)
select 1, '曾敏华', '株洲', '1990-01-01', '女' union
select 2, '杨勇', '株洲', '1990-01-01', '男' union
select 3, '陈世军', '长沙', '1990-01-01', '男' union
select 4, '张葎', '长沙', '1990-01-01', '男' union
select 5, '张玉桂', '长沙', '1990-01-01', '男' union
select 6, '刘年富', '长沙', '1990-01-01', '男' union
select 7, '刘欢', '湘潭', '1990-01-01', '男' union
select 8, '叶振溪', '湘潭', '1990-01-01', '男' union
select 9, '罗青', '湘潭', '1990-01-01', '男' union
select 10, '全乐', '衡阳', '1990-01-01', '男' union
select 11, '郑联涛', '衡阳', '1990-01-01', '男' union
select 12, '周玲芳', '衡阳', '1990-01-01', '女'gocreate table tb_score
(ScoreID int not null primary key identity(1, 1),StudentID int not null references tb_stu(SCode),Course varchar(10) not null,Score float
)goinsert into tb_score
select 1,'JAVA',89 union
select 1,'HTML',80 union
select 2,'JAVA',92 union
select 2,'HTML',74 union
select 3,'JAVA',76 union
select 3,'HTML',95 union
select 4,'JAVA',NULL union
select 4,'HTML',NULL union
select 5,'JAVA',48 union
select 5,'HTML',79 union
select 6,'JAVA',NULL union
select 6,'HTML',NULL union
select 7,'JAVA',66 union
select 7,'HTML',88goselect * from Scorecreate table School
(SID int not null primary key identity(1, 1),SClassName varchar(5) not null,SStudentID int not null,SCourse varchar(10) not null,SScore float null
)goinsert into School(SClassName, SStudentID, SCourse, SScore)
select 'T0901', 1, 'JAVA', 90 union
select 'T0901', 1, 'HTML', 89 union
select 'T0901', 2, 'JAVA', 88 union
select 'T0901', 2, 'HTML', 87 union
select 'T0901', 3, 'JAVA', 86 union
select 'T0901', 3, 'HTML', 85 unionselect 'T0902', 1, 'JAVA', 84 union
select 'T0902', 1, 'HTML', 83 union
select 'T0902', 2, 'JAVA', 82 union
select 'T0902', 2, 'HTML', 81 union
select 'T0902', 3, 'JAVA', 80 union
select 'T0902', 3, 'HTML', 79 unionselect 'T0903', 1, 'JAVA', 78 union
select 'T0903', 1, 'HTML', 77 union
select 'T0903', 2, 'JAVA', 76 union
select 'T0903', 2, 'HTML', 75 union
select 'T0903', 3, 'JAVA', 74 union
select 'T0903', 3, 'HTML', 73select * from tb_stu;
select * from tb_score;--内连接:
--where:select * from a,b where a.id = b.id
select * from tb_stu,tb_score where tb_stu.SCode = tb_score.StudentID--join: select * from a inner join b on a.id = b.id;
select * from tb_stu a inner join tb_score b on a.SCode = b.StudentID;--外连接:left outer join
--select * from a left outer join b on a.id = b.id
select * from tb_stu a left outer join tb_score b on a.SCode = b.StudentID;
--右外连接:与左外连接一样
select * from tb_score a right outer join  tb_stu b
on a.StudentID = b.SCodeselect * from tb_stu a right outer join tb_score b on a.SCode = b.StudentID;--全外连接:保留所有
--full outer join
select * from tb_stu a full outer join tb_score b on a.SCode = b.StudentID;
--外连接的outer可以省略--查询还可以住人的三人间
select * from tb_type;
select * from tb_kefang;select * from tb_kefang a left outer join tb_type b
on a.tid = b.tid where a.fkzrs - a.fyzrs >0 and b.tname = '三人间';

05.SQL Server(高级查询)相关推荐

  1. sql server高级查询及更新操作一

    sql server高级查询及更新操作一 题目要求 实现代码 题目要求 一.将素材中的"学生管理"数据库附加到SQL SERVER中,完成以下操作: 班级信息(班级编号 班级名称 ...

  2. sql server高级查询,看这篇文章就够了

    先选择一个数据库 use jobtest go 引入:该数据库jobtest里面有两张表,Student学生表和Grade年级表,表中的数据如下所示: 学生表Student: 年级Grade表: 接下 ...

  3. SQL Server高级查询之子查询(多行子查询)

    1.in关键字 多条子查询返回的结果可以是一条数据,因而单行子查询也是多行子查询的一种特殊情况,所以单行子查询的"="比较符可以替换为多行子查询的"in"比较符 ...

  4. sql server高级查询及更新操作二

    文章目录 题目要求 实现代码 题目要求 二.将素材"图书管理"文件下载到本地,并将其还原到SQL SERVER库中,完成以下操作. dz(借书证号 单位 姓名 性别 年龄 出生日期 ...

  5. SQL server 高级查询语句

    1.系统函数 函数名 描述 举例 convert() 数据类型转换 selece convert(varchar(5),12345) 返回:字符串12345 cast() 数据类型转换,与conver ...

  6. SQL Server高级查询之T-SQL编程(局部变量和全局变量)

    1.T-SQL局部变量的声明以及调用 1.局部变量是用户自定义的变量,其名称必须以@开始,局部变量使用declare语句声明,所有局部变量在声明后如果没有直接赋值均默认为null. 2.null的意思 ...

  7. SQL Server高级查询与T-SQL编程笔记

    一.数据库设计 1.数据流程图 1.1箭头表示数据流 1.2圆或椭圆表示加工 1.3双杠表示数据存储 1.4方框表示数据的源点或终点 2.数据字典 描述数据的信息集合,是对系统中使用的所有数据元素的定 ...

  8. SQL Server高级查询之数据库安全管理 第六章节

    1.SQL Server身份验证模式为 windows身份验证和SQL Server身份验证 2.数据库用户管理 (1.)当别人访问自己数据库时候,就必须先创建数据库用户 创建数据库用户步骤如下: 在 ...

  9. SQL Server高级查询之常见数据库对象(触发器)第五章节

    1.触发器概述 触发器不是由程序调用的,也不是手工启动的,而是由事件来触发 每一个表只能创建一个instead of 触发器,但可以创建多个after触发器 2.SQL Server创建触发器语法如下 ...

  10. SQL Server高级查询之T-SQL编程(存储过程)

    1.系统存储过程 1.为管理员管理SQL Server提供帮助,用户查看数据库对象更便利,所有系统存储过程名称均以"sp_"开始, 在任何数据库中均可以运行系统存储过程,执行结果反 ...

最新文章

  1. Ollydbg 常用快捷键
  2. 深度学习笔记8 数据预处理
  3. 从老赖们“维权”,看拍拍贷的底色
  4. Nginx 笔记与总结(14)expires 缓存设置
  5. Python字符串的编码与解码(encode与decode)
  6. pytorch_basics Save and load model
  7. 结构体07:结构体案例1
  8. 宝鸡市二检理科数学跟踪训练题
  9. 3D建模设计软件Rhino 7 for Mac
  10. linux pro*c环境配置,Pro*C 环境配置(RedHat +Oracle 10g)
  11. 20150109--面向对象+对象传值-01
  12. 自动阅卷系统/自动阅卷机/网上阅卷
  13. linux火狐浏览器50版本,firefox 52 下载-Firefox(火狐浏览器)52版下载 v52.0.2官方版--pc6下载站...
  14. Sybase的安装、配置及使用(五)
  15. 设计高效的交叉功率因数校正方案
  16. web快速入门之基础篇-js:3_3、简易购物车
  17. 微信跳一跳游戏外挂(mac电脑+android手机)
  18. 三星优化器 适用于绝大部分安卓手机 超级好用!!
  19. Dijkstra算法和A*算法总结
  20. 打破双亲委派的几种方式

热门文章

  1. 流程驱动管理vs 数据驱动管理
  2. MMORPG摄像机操作
  3. LDU训练赛:小srf的游戏 单调队列 + DP
  4. 侠客群控引擎二次开发SDK可用方法大全(持续更新)
  5. python 去除水印_cv2 去除图片水印
  6. android 动画-补间动画
  7. CCNA Security 网院期末考试
  8. 安卓各版本大变化(Android 6.0到10.0),兼容适配
  9. pyqt5 从本地选择图片 并显示在label上
  10. edge microsoff 连不上网_win10电脑连不上网的三种解决方法