欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SQL Server学习记录(二)

程序员文章站 2024-02-22 23:32:04
...
----------------SQL聚合函数---------------------------
--MAX(最大值)、MIN(最小值)、AVG(平均值)、SUM(和)、COUNT(数量:记录的条数)
--聚合函数默认是把整个表中的数据当作一组,然后才进行统计。
--如果使用聚合函数的时候,没有手动进行分组,
--那么聚合函数会把整个表中的数据作为一组来进行统计。
-聚合函数对null值不计算
select * from Tblstudent
--统计出所有人的年龄总和
select sum(tsage) as 年龄总和 from Tblstudent
select count(*) from Tblstudent
--计算平均年龄
select 
	平均年龄=(select sum(tsage) as 年龄总和 from Tblstudent)
	/(select count(*) from Tblstudent)	
--年龄最大值
select max(tsage) from Tblstudent
--年龄最小值
select min(tsage) from Tblstudent
--用聚合函数计算平均值
select AVG(tsage) from Tblstudent
--带条件查询
--select
--from
--where
select * from Tblclass
--查询没有及格的(只要有一门没有几个就算没有几个)
select tsname from Tblclass where tsenglish<60 or tsmatch<60
--查询年龄在20-30之间的男生
select * from Tblstudent where tsage>=20 and tsage<=30  and tsgender='男'
select * from Tblstudent where tsage between 20 and 30  and tsgender='男'
--查询数学成绩在80-90之间的学生
select * from Tblclass where tsmatch between 80 and 90
--模糊查询---
--通配符    __ 、%、【】、^
--__下划线表示匹配单个字符
select * from Tblstudent where tsname like'梁_'
--%匹配任意字符
select * from Tblstudent where tsname like '梁%'
--【】表示筛选范围
select * from Tblstudent where tsname like '【a-z】'
--^ 表示非
select * from Tblstudent WHERE tsname LIKE '^梁 '
--%通配符放到【】里面就被转义认为不是通配符了
----------------null值处理----------------
--数据库中,一个列如果没有指定值,那么值就为null,
--数据库中null表示不知道而不是表示没有。
--null无法用=或<>来进行比较
--SQL中使用is null 或者is not null来进行空值判断
--判断null值必须使用is null 或者is not null
select * from Tblstudent 
--查询所有年龄为空的同学
select * from Tblstudent where tsage is null
--所有不为空的
select * from Tblstudent where tsage is not null
-------------order by语句-----------------
--降序  order by 列名  desc
--升序  order by 列名  asc或者不加asc
--order by语句一定要放在整个sql语句的最后面
--根据多列进行排序
--还可以根据表达式进行排序
--order by子句位于select语句的末尾,它允许指定按照一个列或者多个列进行排序
--还可以指定排序方式是升序(从小到大排列,ASC)还行降序(从大到小排序DESC)
--order by 语句要放在语句的最后面,就是先让其他语句进行筛选,全部筛选完成以后,最后排序一下。
--表中的语句是集合,集合是没有顺序的,order by返回的数据是有顺序的,所以把order by
--返回的数据集合叫游标。
select *
from  Tblclass
order by tsenglish desc, tsmatch desc 
--------group by分组------------
--按照要求进行分组
select * from Tblstudent
select 
	tsclassid as 班级id,
	班级人数=count(*)
from Tblstudent
group by tsclassid
--按照性别人数分组
select * from Tblstudent
select 
	tsgender as 性别,
	班级人数=count(*)
from Tblstudent
group by tsgender
---按照班级男同学进行分组
select 
	班级id=tsclassid,
	男同学人数=COUNT(*)
from Tblstudent
where tsgender='男'
group by tsclassid
--当使用了分组语句(group by)或者是聚合函数的时候,在select的查询列表中不能在包含其他的列名,
--除非该列同时也出现了gruop by句子中,或者该列也包含在了某个聚合函数中。
--------having--------------
--对分组以后的数据进行筛选,使用having
--having和where都是对数据进行筛选,where是对分组前的每一行数据进行筛选,
--而having是对分组后的每一组进行筛选。
select * from Tblstudent
select 
	tsclassid as 班级id,
	班级人数=count(*)
from Tblstudent
group by tsclassid
having COUNT(*) >2
order by 班级人数 asc
--SQL语句执行基本顺序

5、select 1.列   2.distinct、 3.top   
1、from 表
2、where条件
3、group by列
4、having 筛选条件
6、order by 列 
*/
-----------类型转换函数----------
select 100
select 100+'1000'
---cast(表达式as 数据类型)
--语法
--Syntax for CAST:
--CAST ( expression AS data_type [ ( length ) ] )
--Syntax for CONVERT:
--CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
--convert(数据类型,表达式)
--语法 
--Syntax for CAST:
--CAST ( expression AS data_type [ ( length ) ] )
 
--Syntax for CONVERT:
--CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
select 100.0+cast('10000' as int)    --使用cast函数进行类型转换
select 100.0+convert(int,'10000')    --使用convert函数进行类型转换
Select '您的班级编号:' + convert (char(1),1)
select * from Tblclass order by CONVERT (int,tsmatch) desc
select * from Tblclass order by cast (tsenglish as  int) desc
print getdate()  --获取当前日期
print convert (varchar(200), getdate(), 109)
print convert (varchar(200), getdate(), 120)
---------联合结果集union(集合运算符)-----
--集合运算符是对两个集合操作的,两个集合必须有相同的列数,列是有相同的数据类型(至少能隐形转换的),
--最终输出的集合的列名由第一个集合的列名来确定,(可以用来链接多个运行结果)
--联合(union) 和连接不一样(join)
--联合:将多个结果集合并成爲
--使用union和union all都能进行联合,区别在于:使用union联合会去除重复,而union all
--不会去除也不会重新排列
 
select EmpName, EmpAge, EmpEmail from Employess
union all
select tsname, tsenglish, tsmatch from Tblclass
-----将Tblstudent表中的结构和数据备份到Tblstudent0729中
--select into语句不能重复执行,因爲每次执行都会创建一个相同的表
select * into Tblstudent0729 from Tblstudent