1.什么是查询?
客户端程序 查询请求到 SQL Server 把查询结果集 交到临时表
查询产生一个虚拟表,看到的是表形式显示的结果,但结果并不正真存储,每次执行查询只是从数据表中提取数据,并按照表的形式显示出来。
2.查询语法
select 列名
from 表名
where 查询条件
order by 列名 (升序ASC(默认),DESC降序)
eg:select Name from Student
where sex='女'
order by Score
3.查询全部的列和行
select * from Student (* 尽量少使用,减低查询效率)
4.查询部分
select Name,sex from Student
5.查询部分行和列,带条件
select sex,Email from Student where StudentName='李四'
6.使用AS命令
(1)select StudentName as 学生姓名,sex as 性别 from Student
(2)select StudentName+'--'+sex as 姓名和性别 from Student
7.使用等于命令
select 姓名和性别=StudentName+'--'+sex from Student
注意:
(1)+连接的数据类型必须兼容
(2)如果+连接字符数据,结果为字符串数据的连接
(3) 如果+连接数值型数据,结果为数值的和
8.查询空行
select name from Student where Emai is null
9.查询不为空
select SubjectName from Subject where ClassHour is null or ClassHour !=''
10.使用常量列
select 姓名=name,'张三' as 学生姓名 from Student
11.限制行数
限制固定函数
select Top 5 StudentName,sex from Student
按百分数返回
select Top 5 percent StudentName,sex from Student where sex='女'(百分数只能在0—100之间)
12.查询单列排序
升序排列
select StudentNo as 学生编号,(StudentResult*0.5)as 综合成绩
order by StudentResult (默认不写就是升序)
降序排列
select StudentNo as 学生编号,(StudentResult*0.5)as 综合成绩
order by StudentResult desc
13.查询多列排序(用逗号隔开)
select StudentId as 学生编号,score as 成绩
from Scores
order by Score,StudentId(或者是desc降序)
注意:
多行排序,先按照第一个进行升序/降序排序
14.字符串函数
(1)charindex:寻找字符串在下一个指定字符串的起始位置(sql起始位置从1开始)找不到,返回0
eg:select charindex('JBSN','My jbsn',1)
解释:('要查询的字符串','被查询的字符串',从被查询字符串哪里开始查找)
返回:4
(2)len:字符串长度
eg:select len('SQL Server课程')
返回:12
(3)upper:转为大写
eg:select upper('zhangsan')
返回:ZHANGSAN
(4)ltrim:清除左边空格
eg:select ltrim(' 李四')
返回: 李四
(5)rtrim:清除右边空格
eg:select rtrim('李四 ')
返回: 李四
(6)right:从字符串右边返回指定字符
eg:select right('买卖提.土尔松',3)
解释: 3是返回字符串个数
返回: 土尔松
(7)left:从字符串左边返回指定字符
eg:select left('买卖提.土尔松',3)
解释: 3是返回字符串个数
返回: 买卖提
(8)replace:替换字符(只适用于部分字符,而update用于整行替换)
eg:select replace('莫乐可切','可','兰')
解释:('原字符','找到可','替换成兰')
返回:莫乐兰切
(9)stuff:在zifuchuanz,删除指定长度字符,在该位置插入新字符
eg:select stuff('ABCDEFG',2,3'我的音乐')
解释:('原字符',从哪里开始删除,插入几个字符,'插入新字符')
返回: A我的音乐EFG
15.日期函数
(1)getdate:取得当前日期
eg:select getdate()
返回: 今天的日期
(2)dateadd:将指定数值添加到指定日期部分后的日期 (mm:月,dd:天/日,yyyy:年)
eg:select dateadd(mm,4,'2009-01-01')
解释:(给谁添加,添加多少,日期)
返回: 2009-05-01
(3)datediff:两日期之间的间隔
eg:select datediff(mm,'2019.8.18',getdate())
解释(给谁添加,起始日期,截至日期)
返回8
(4)datename:返回星期几的字符串
eg:select detername (dw,'2000-01-01')
解释(weekday,日期)
返回星期六
(5) datepart:日期中指定日期部分整数
eg:select datepart(day,‘2000-01-15’)
解释(要拿的值)
返回15
16.数学函数
(1)rand:从0~1随机数 fioat值
eg:select rand()
返回0.792164521345845
(2)abs:数值绝对值
eg:select abs(-43)
返回43
(3)ceiling:取大于或等于指定数值 最小整数
eg:select ceiling(43,5)
返回44
(4)floor:取小于或等于指定表达 最大整数
eg:select floor(43,5)
返回43
(5)power:数值的幂
eg:select power(5,2)
解释(从几开始,几的几次方)
返回25
(6)round:对数值四舍五入
eg:select round(43,543,1)
解释(对谁进行,小数点后几位)
返回43,500
(7)sign:对正数返回+1,负数-1,对0返回0
eg:select sign(-43)
返回-1
(8)sqrt:平方根
eg:select sqrt(9)
返回3
17.系统函数
(1)convert:转换数据类型
eg:select convert(varchar(5),12345)
解释(要转换,被转换)
返回字符串12345
(2)select cast(12345 as varchar(5))
(3)current-user:返回当前用户名称
(4)datalength:返回字节数
eg:select datalength(‘中国a联盟’)
解释(一个汉字=2字节)
返回9
(5)host-name:当前用户所登录计算机名字
(6)system-user:当前所登录的用户名称
(7)user-name:从给定用户id返回用户名
eg:select user-name(1)
解释(返回数据库,如没有是null值)
返回‘‘dbo’’
18. 案例一:
把卡里面的'o'改为'0','i'改为'1'
数据库表名为:Card
密码列名:PassWord
分析:用replace方法替换就ok了
做法1:
update Student set PassWord=replace(PassWord,'o','0')
update Student set PassWord=replace(PassWord,'i','1')
做法2:
update Student set PassWord=replace(repalce(Password,'o','0' ),'i','1')
19.案例二:
在数据库表中有以下字符数据,
如 13-1、13-2、13-3、13-10、13-100、13-108、13-18、13-11、13-15、14-1、14-2
现在希望通过T-SQL语句进行排序,并且首先要按照前半部分的数字进行排序,然后再按
照后半部分的数字进行排序,输出要排成这样 13-1、13-2、13-3、13-10、13-11、13-15、
13-18、13-100、13-108、14-1、14-2
数据库表名:SellRecord
列名:ListNumber
分析1:
select ListNumber
from SellRecord
order by 前半部分,后半部分
前半部分:
charindex('-',ListNumber)-1 先找到'-'前面的数字
left(ListNumber,charindex('-',ListNumber)-1) 取到左边的数字
convert (int,left(ListNumber,charindex('-',ListNumber)-1)) 转换为int类型
后半部分:
charindex('-',ListNumber) 先找到'-'前面的数字
stuff(ListNumber,1,charindex('-',ListNumber), '') convert(int, stuff(ListNumber,1,charindex('-',ListNumber), '') )
总体:
select ListNumber
from SellRecord
order by
convert (int,left(ListNumber,charindex('-',ListNumber)-1)),
convert(int, stuff(ListNumber,1,charindex('-',ListNumber), '') )