执行备注中的代码创建测试数据表。
简单的数据检索 :SELECT * FROM Student
只检索需要的列 :SELECT sName FROM Student 、ame FROM Student WHERE sSex=‘女’。
还可以检索不与任何表关联的数据:select 1+1;select getdate();

可以为列起别名

Top、Distinct

Top 获取前几条数据,top一般都与order by连用
获得年纪最小的5个学生           Select top 5 sName,sAge from student
获得年纪最大的10%的学生(percent)
Distinct 去除重复数据
select distinct sName from student
select distinct sName,sAge from student
DISTINCT是对查询出的整个结果集进行数据重复处理的,而不是针对某一个列。

带条件的查询

Select …from…where …

查询没有及格的学生的学号                    select studentId from score where english < 60      
查询年龄在20-30岁之间的男学生                    select sName,sAge,sSex from student where sAge >=20 and sAge <=30 and sSex ='男'

Between…and …在之间

查询年龄在20-30岁之间的男学生
查询math成绩在80-90分之间的所有学生
建议:使用between … and …。(闭区间)        select sName,sAge,sSex from student where sAge between 20 and 30 and sSex ='男'

带条件的查询-模糊查询

都是针对字符串操作的
问题:查询所有姓张的同学
_    、   %   、  []   、  ^
^只有MSSQL Server支持,其他DBMS用not like
通配符 %多字符匹配的通配符,它匹配任意次数(零或多个)出现的任意字符
通配符_ 单字符匹配,它匹配单个出现的字符
[] 只匹配一个字符  并且这个字符必须是[]范围内的    [0-9]  [a-z]
not与like一起使用:not like ….
要通配_、%、[、^这些字符怎么办?[_]、[%]、[ [ ]、^(不需要放到中括号里,因为^只有放到中括号中才认为是通配符)

空值处理

数据库中,一个列如果没有指定值,那么值就为null,数据库中的null表示“不知道”,而不是表示没有。因此select null+1结果是null,因为“不知道”加1的结果还是“不知道”。
select * from score where english = null ; 
select * from score where english != null ;都没有任何返回结果,因为数据库也“不知道”。
SQL中使用is null、is not null来进行空值判断: select * from score where english is null ; select * from score where english is not null ;
函数ISNULL ( check_expression , replacement_value )

数据排序

ORDER BY子句位于SELECT语句的末尾,它允许指定按照一个列或者多个列进行排序,还可以指定排序方式是升序(从小到大排列,ASC)还是降序(从大到小排列,DESC)。 
按照年龄升序排序所有学生信息的列表:SELECT * FROM  Student ORDER BY sAge ASC 
按照英语成绩从大到小排序,如果英语成绩相同则按照数学成绩从大到小排序 :SELECT * FROM  Score ORDER BY english DESC,math DESC
ORDER BY子句要放到WHERE子句之后 : SELECT * FROM  Score where english>=60 and math>=60 ORDER BY english DESC,math DESC
Order by 语句一般要放到所有语句的后面,就是先让其他语句进行筛选,全部筛选完成后,最后排序一下。
(表中数据是集合,集合是没有顺序的。Order by 返回的数据是有顺序的,故此我们把order by 以后返回的数据集合叫“游标”。)

聚合函数

SQL聚合函数:
MAX(最大值)、MIN(最小值)、AVG (平均值)、SUM (和)、COUNT(数量:记录的条数。)
聚合函数对null值不计算。
如果一行的数据都是null,count(*)包含对空值行、重复行的统计。
平均成绩select avg(english) from score
男学生出生日期的最大值和最小值:select max(sBirthday),min(sBirthday) from student where sSex='男'

类型转换:
CAST ( expression AS data_type [ (length ) ]) 
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

数据分组

在使用select查询的时候,有时需要对数据进行分组汇总(即:将现有的数据按照某列来汇总统计),这时就需要用到group by语句。

1.请从学生表中查询出每个班的班级Id和班级人数:(见备注1)
2 .请从学生表中查询出每个班的班级Id和班级中男同学的人数: (见备注2)

备注1:
select
tSClassId as 班级Id,
count(*) as 班级人数
from TblStudent
group by TSClassId
备注2:
select
tSClassId as 班级Id,
count(*) as 班级人数
from TblStudent
where tSGender='男'
group by TSClassId

GROUP BY子句必须放到WHERE语句的之后 ,Group By与Order By都是对筛选后的数据进行处理,而Where是用来筛选数据的。
没有出现在GROUP BY子句中的列是不能放到SELECT语句后的列名列表中的 (聚合函数中除外)
错误: select sClassId,count(sName),sAge from student group by sClassId
正确: select sClassId,count(sName),avg(sAge) from student group by sClassId

Having语句(对组的筛选,哪些组显示哪些组不显示)

对表中的数据分组后,会得到一个分组后的结果集,如何对该结果集在进行筛选?→having
查询班级人数超过三个人的班级。

select
tSClassId as 班级Id,
count(*) as 班级人数
from TblStudent
group by TSClassId
having count(*)>3

在Where中不能使用聚合函数,必须使用Having,Having要位于Group By之后。
Having的使用几乎是与where一样的,也可以用in。
Having count(*) in (5,8,10)

select sClassId,count(sName) from student where count(sName)>3 group by sClassId  (错误的)
聚合函数不应出现在WHERE 子句中
select sClassId,count(sName) from student group by sClassId having count(sName)>3

Group by 前可以有where,是对筛选过后的数据进行分组
select sClassId,count(sName) from student where sSex='男' group by sClassId

SQL语句的执行顺序

5>…Select 5-1>选择列,5-2>distinct,7>top(应用top选项最后计算)
1>…From 表 Join 表 on
2>…Where 条件
3>…Group by 列
4>…Having 筛选条件 
6>…Order by 列

Group by 练习

从MyOrders表中查询:
1.热销售商品排名表,【即按照每种商品的总销售数量排序】。
2.请统计销售总价超过3000元的商品名称和销售总价,并按销售总价降序排序。
3.统计各个客户对"可口可乐"的喜爱度(既统计每个购买人对“可口可乐”的购买量)

1.
select 
商品名称,
销售总数量=sum(销售数量)
from orders
group by 商品名称
order by 销售总数量desc

2.

select
商品名称,
销售总价=sum(销售单价*销售数量)
from orders
group by 商品名称
having sum(销售单价*销售数量)>3000
order by 销售总价desc

3.
select

sum(销售数量) as 销售总数量,
购买人
from orders
where  商品名称='可口可乐'
group by 购买人
order by 销售总数量 desc

group by
1.简单分组
2.分组后筛选
3.分组后排序
4.根据多列分组

MSSQLServer基础03(数据检索(查询))的更多相关文章

  1. 【T-SQL基础】03.子查询

    以前总是追求新东西,发现基础才是最重要的,今年主要的目标是精通SQL查询和SQL性能优化. 本系列[T-SQL基础]主要是针对T-SQL基础的总结. [T-SQL基础]01.单表查询-几道sql查询题 ...

  2. javaSE基础03

    javaSE基础03 生活中常见的进制:十进制(0-9).星期(七进制(0-6)).时间(十二进制(0-11)).二十四进制(0-23) 进制之间的转换: 十进制转为二进制: 将十进制除以2,直到商为 ...

  3. javascript基础03

    javascript基础03 1. 算术运算符 后增量/后减量运算符 ++ ,-- 比较运算符 ( >, <, >=, <=, ==, !=,===,!== ) 逻辑运算符( ...

  4. CSS基础教程 -- 媒体查询屏幕适配

    响应式布局 Media Query 的使用方法 在上例中, 我们使用Media Queries来根据3种不同尺寸的窗口使用3种不同的样式.通过不同的媒体类型和条件定义样式表规则,媒体查询让CSS可以更 ...

  5. 086 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 03 面向对象基础总结 01 面向对象基础(类和对象)总结

    086 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 03 面向对象基础总结 01 面向对象基础(类和对象)总结 本文知识点:面向对象基础(类和对象)总结 说明 ...

  6. day33-线程基础03

    线程基础03 6.用户线程和守护线程 用户线程:也叫工作线程,当线程的任务执行完或者通知方法结束.平时用到的普通线程均是用户线程,当在Java程序中创建一个线程,它就被称为用户线程 守护线程(Daem ...

  7. MSSQLServer基础05(联合查询,连接查询)

    联合结果集union(集合运算符) 集合运算符是对两个集合操作的,两个集合必须具有相同的列数,列具有相同的数据类型(至少能隐式转换的),最终输出的集合的列名由第一个集合的列名来确定.(可以用来连接多个 ...

  8. SQL Server 基础 03 查询数据基础

    查询数据 简单的查询 create table stu_info ( sno int not null ,sname ) not null ,sex ) not null ,birth ) not n ...

  9. 2008技术内幕:T-SQL语言基础 单表查询摘记

    这里的摘抄来自<Microsoft SQL Server 2008技术内幕:T-SQL语言基础>,书中用到的案例数据库是这个 TSQLFundamentals2008 ,官网给出的连接是这 ...

随机推荐

  1. jqGrid API 全

    JQGrid是一个在jquery基础上做的一个表格控件,以ajax的方式和服务器端通信. JQGrid Demo 是一个在线的演示项目.在这里,可以知道jqgrid可以做什么事情. 下面是转自其他人b ...

  2. PHP利用微信跳转的Code参数获取用户的openid

    //获取微信登录用户信息function getOpenID($appid,$appsecret,$code){   $url="https://api.weixin.qq.com/sns/ ...

  3. Repeater中将int类型和bool类型的字段以字符显示出来

    图一 图二 比如将图一中是否显示中的列显示以图二中的方式显示: 方法1: 1.在后台编写方法:a.aspx.cs代码如下 //IsShow字段显示的方法public string GetStrIsSh ...

  4. C#基础(八)——C#数据类型的转换

    C#数据类型的转换主要有以下几种方式: 1.强制转换 注意:char类型不能强制转换成int,如果使用强制转化,得到的是原整数的ASCII码值. 2.class.parse(string类型的变量), ...

  5. Android源代码编译——编译

    环境准备好了,代码下载完了,据说make一下就可以. 当然也可以配置一下环境变量: 编译初始化,在终端中执行: source build/envsetup.sh 选择编译目标,在终端中执行下面的命令: ...

  6. linux 正则表达式深度解析

    正则表达式的文法分为3种标准:BRE.ERE 和 ARE.其中 BER 和 ERE 属于 POSIX 标准,ARE 则是由各家定义的扩展   简介 大体来讲,正则表达式的文法分为3种标准:BRE.ER ...

  7. 浏览器页面区域大小的js获取方法

    浏览器页面区域大小的获取:  /在IE.FireFox.Opera下都可以使用  document.body.clientWidth  document.body.clientHeight  //即可 ...

  8. C++ STL中迭代器失效的问题

    my_container.erase(iter); 其中my_container是STL的某种容器,iter是指向这个容器中某个元素的迭代器.如果不是在for,while循环中,这种方式删除元素没有问 ...

  9. Android:使用命令行工具adb、mksdcard等

    有一些Android的工具需要在命令行的环境中运行,只是可以选择Windows的开始->运行,键入cmd并确定,进入命令行的界面中运行.主要的命令行工具包括adb和mksdcard等.命令行的工 ...

  10. shell curl

    最近突然发现了一个有趣的问题:怎样判断日期是工作日还是节假日.(http://www.cnblogs.com/ZXdeveloper/p/4018886.html) 顺便发现了一个有用的网址:http ...