use StudentManagement
go
--1 T-SQL查询基础
--1.1 使用Select语句进行查询
/*
*语法
*select <列名>
*from <表名>
*[where <查询条件表达式>]
*[order by <排序的列名>[asc 或 desc]]
*/

--1.1.1 查询所有的数据行和列
select * from Students
go

--1.1.2 查询部分行列————条件查询
--查询女学员名单
select SCode,SName,SAddress
from Students
where SSex=0
go

--查询陈姓学员名单
select SCode,SName,SAddress
from Students
where SName like '陈%'
go

--1.1.3 在查询中使用列名
--as子句可以用来改变结果集列的名称
--让标题列的信息更加易懂
select SCode as 学员编号,SName as 学员姓名,SAddress as 学员地址
from Students
where SClass='T114'
go

--为计算、合并得到的新列指定名称
select FirstName+'.'+LastName as '姓名'
from NorthWind..Employees  --使用".."可以实现跨数据库查询
go

--1.1.4 查询空行
insert into Students(SName,SAddress,SClass,SSGrade,SSex)
values('徐鹏飞',default,'T120',6,1)
go

select SCode,SName,SAddress,SClass,SEmail,SSex
from Students
where SEmail is NULL
go

--1.1.5 在查询中使用常量列
--将一些常量的默认信息添加到查询输出中
select 姓名=SName,地址=SAddress, 学校名称='金华高新培训中心'
from Students
go

--1.1.6 使用"Top"关键字,查询返回限制的行数
select
top 5 SName,SAddress,Score
from Students
where SSex=1
go

--使用Top......percent按一定的百分比提取记录
--可以估计出总的记录行数的大概数字
select
top 20 percent SName,SAddress
from Students
where SSex=1
go

--1.2 查询排序
--按升序排列
select SCode as 学员编号,SName as 学员姓名,SAddress as 学员地址
from Students
where SSex=0
order by SCode asc --省略'asc',默认按升序排序
go

--按降序排列
select SCode as 学员编号,SName as 学员姓名,SAddress as 学员地址
from Students
where SSex=0
order by SCode desc --省略'asc',默认按升序排序
go

select StudentID as 学员编号,(Score*0.9+5) as 综合成绩
from Score
where (SCore*0.9+5)>60
order by Score
go


select
top 5 *
from Pubs..Employee
go
select
top 5 *
from Pubs..Authors
go

--查询Pubs数据库中的作者表和雇员表,然乎合并查到的所有姓名和信息
select Au_FName+'.'+Au_LName as EMP from Pubs..Authors
union
select FName+'.'+LName as EMP from Pubs..Employee
order by EMP desc
go

--按照多个字段进行排序
select FName,LName
from Pubs..Employee
where FName like 'M%'
order by FName,LName asc
go

--1.3 在查询中使用函数
--1.3.1 字符串函数
--部分常用的字符串函数
--CharIndex:用来寻找一个字符串在另一个字符串中的起始位置
select charIndex('SQL','使用SQL Server管理和查询数据SQL')
go

--Len:返回传递给它的字符串长度
select len('使用SQL Server管理和查询数据')
go

--Upper:把传递给它的字符串转换为大写
select Upper('使用SQL Server管理和查询数据')
go

--LTrim:清除字符串左边的空格,右边的空格保留
select LTrim('      使用SQL Server管理和查询数据      ')
go

--RTrim:清除字符串右边的空格,左边的空格保留
select RTrim('      使用SQL Server管理和查询数据      ')
go

--Right:从字符串右边返回指定数目的字符
select Right('使用SQL Server管理和查询数据',4)
go

--Replace:替换一个字符串中的字符
select replace('使用SQL Server管理和查询数据','SQL Server','SQL Server 2005')
go

--Stuff:在一个字符串中,删除指定长度的字符,并在该位置插入一个新的字符串
select stuff('使用SQL Base管理和查询数据',7,4,'Server')
go

--1.3.2 日期函数
--日期函数用于操作日期值,帮助提取日期值中的年、月、日,以便分别操作它们
--getDate:取得当前的系统时间
select getDate() as 系统时间
go

--DateAdd:将指定的数值添加到指定的日期部分后的日期
select dateAdd(mm,3,'03/17/2008')
go

--DateDiff:两个日期之间的指定日期部分的区别
--可以利用这个函数查询年龄
select dateDiff(yyyy,'03/17/1960',getDate())
go

--DateName:日期中指定日期部分的字符串形式
select dateName(dw,getDate())as 星期几--星期几
go

select dateName(yyyy,getDate())as 年份--年份
go

select  dateName ( mm ,getDate())as 月份--月份
go

select dateName(dd,getDate())as 天--天
go

--DatePart:日期中指定日期部分的整数形式
select datePart(day,getDate())
go

--1.3.3 数学函数
--数学函数用于对数值进行代数运算
--Abs:取数值表达式的绝对值
select abs(-2008)
go

--Ceiling:取大于或等于指定数值、表达式的最小整数
select ceiling(2007.5)
go

--Floor:取小于或等于指定数值、表达式的最小整数
select floor(2007.5)
go

--Power:取数值表达式的幂值
select power(5,3)
go

--Round:将数值表达式四舍五入为指定精度
select round(2008.987654321,1)
go

--Sign:对于正数返回+1,对于负数返回-1,对于0则返回0
select sign(-2008)
go

--Sqrt:取负点表达式的平方根
select sqrt(2008)
go

--1.3.4 系统函数
--系统函数用来获取有关SQL Server中对象和设置的系统信息
--部分常用的系统函数
--Convert:用来转变数据类型
select getDate()
go
select convert(varchar(50),getDate())
go

--Current_User:返回当前用户的名字
select current_User
go

--System_User:返回当前所登录的用户名称
select system_User
go

--User_Name:从给定的用户ID返回用户名
select user_Name(1)
go

--Host_Name:返回当前用户所登录的计算机名字
select host_Name()
go

--DataLength:返回用于指定表达式的字节数
select dataLength(N'使用SQL Server管理和查询数据')
select dataLength(getDate())

select SName,SCode,SClass,SAddress
from Students
where SClass='T115'
go