SQL应用开发之4
数据查询:
使用Select语句,最简单的查询格式:
Select <列名>
FROM <表名>
[Where <查询条件表达式>]
[ORDER BY <排序列名>[ASC或DESC]]
其中Where条件是可选的,ORDER BY是用来排序的,ASC是升序,DESC是降序。
注:Select是查询语句第一个词,必须用空格和列名分开,列名之间用逗号分开,且必须在要查询的表中存在。查询下一句必须是FROM且与表名用空格分开,分号是查询语句最后一项,告诉SQL查询语句结束,分号是可选的,没有分号,也可以执行。
1 查询所有行、列数据 Select * FROM 表名
2 查询部分行、列数据 条件查询 Select 列名,列名 FROM 表名 Where 条件语句
3 查询中使用列名 Select 列名 AS 指定名,列名 AS 指定名 FROM 表名 Where 条件
用指定名代替列名显示数据
计算合并得到新列名 Select 列名1+’.’+列名2 AS ‘指定名’ FROM 表名
用指定名显示 列名1和列名2 合并的数据
重新命名另一种方法: Select ‘指定名’=列名1+’.’+列名2 FROM 表名
4 查询空行 :是用条件 Where 列名 IS NULL 进行查询
5 查询中使用常量列Select 指定名=列名 ,’常量列数据’ AS 常量列名 FROM 表名
输出的时候多出一列 ‘常量列名’ 该列的值都是’常量列数据’
6 查询返回限制的行数 Select TOP 行数 列名 FROM 表名 Where 条件
返回指定行数的数据,使用TOP关键字来约束
另一种情况:提取百分比记录,是用PERCENT 关键字 :
Select TOP 行数 PERCENT 列名 FROM 表名 Where 条件 –返回行数的百分比的数据行。
查询排序:
使用ORDER BY子句,是用ASC升序或者DESC降序进行,不指定,则按照ASC进行排序。
orDER BY后面可以跟多个字段,进行排序。
查询中使用函数:字符串函数,日期函数,数学函数,系统函数
不同类别的函数可以和SQL的Select联合使用,也可以与Update 和Insert一起使用。
字符串函数:
CHARINDEX 用来寻找一个指定字符串在另一个字符串中的起始位置 例Select CHARINDEX(‘ACCP’,’My accp Course’,1) 返回4
LEN 返回传递给它的字符串长度 例Select LEN(‘SQL Server课程’) 返回12
LOWER 把传递给它的字符串转换为小写 例Select LOWER(‘SQL Server课程’) 返回sql server课程
UPPER 把传递给它的字符串转换为大写 例Select UPPER(‘sql server课程’) 返回SQL Server课程
LTRIM 清除字符左边的空格 例Select LTRIM(‘ 测试 ‘) 返回 测试 (后面有空格)
RTRIM 清除字符右边的空格 例Select RTRIM(‘ 测试 ‘) 返回 测试(前面有空格)
RIGHT 从字符串右边返回指定数目的字符 例Select RIGHT(‘测试测试一下’,3) 返回 试一下
REPLACE 替换一个字符串中的字符 例Select REPLACE(‘阿迪达斯’,’达斯’,’耐克’) 返回 阿迪耐克
STUFF 在字符串中,删除指定长度字符串,并在该位置插入新字符串 例Select STUFF(‘ABCDEFG’,2,3,’我的音乐我的世界’) 返回A我的音乐我的世界EFG
日期函数:
GETDATE 取得当前系统日期 例 Select GETDATE() 返回 今天的日期
DATEADD 将指定数值添加到指定的日期部分后的日期 例 Select DATEADD(mm,4,’01/01/99′) 返回以当前的日期格式返回05/01/99
DATEDIFF 两个日期之间的指定日期部分的区别 例 Select DATEDIFF(mm,’01/01/99′,’05/01/99′) 返回 4
DATENAME 日期中指定日期部分的字符串形式 例 Select DATENAME(dw,’01/01/2000′) 返回 Saturday
DATEPART 日期中指定日期部分的整数形式 例 Select DATEPART(day,’01/15/2000′) 返回 15
数学函数:
ABS 去数值表达式的绝对值 Select ABS(-45) 返回45
CEILING 取大于或等于指定数值、表达式的最小整数 Select CEILING(45.5) 返回46
FLOOR 去小于或等于指定表达式的最大值 Select FLOOR(45.5) 返回45
POWER 取数值表达式的幂值 Select POWER(5,2) 返回 25
ROUND 将数值表达式四舍五入为指定精度 Select ROUND(43.543,1) 返回43.5
SIGN 对于正整数返回+1,对于负数返回-1 对于0 则返回0 Select SIGN(-54) 返回-1
SQRT 取浮点表达式的平方根 Select SQRT(9) 返回3
系统函数:
CONVERT 用来转变数据类型 Select CONVERT(VARCHAR(5),12345) 返回 字符串12345
CURRENT_USER 返回当前用户名 Select CURRENT_USER 返回 你登录的用户名
DATALENGTH 返回用于指定表达式的字节数 Select DATALENGTH(”) 返回 5
HOST_NAME 返回当前用户所登陆的计算机名 Select HOST_NAME() 返回 你所登陆的计算机的名字
SYSTEM_USER 返回当前所登陆的用户名称 Select SYSTEM_USER 返回 你当前所登陆的用户名
USER_NAME 从给定的用户ID返回用户名 Select USER_NAME(1) 返回 从任意数据库中返回 “dbo”
数据查询案例分析1
案例1
更新用户卡信息
公司印了一批冲值卡,卡密码是随机生成,问题:卡里面的o和0 , i和1 用户反映说看不清楚。公司决定,把存储在数据库中的密码所有的o改为0,所有的i改为1
数据库表名 Card 密码字段名 PassWord
分析:
需要用到Update 更新语句
涉及字符串替换,需要用到Replace 函数
T-SQL
update card set password = replace(密码,’o’,’0′)
update card set password = replace(密码,’i’,’1′)
以上用两个SQL语句来实现,但是大多数情况下,需要一条语句来实现,因此,我们可以用Replace连续操作来实现
update card set password = replace(replace(密码,’o’,’0′),’i’,’1′)
案例2
特殊排序
在数据表中有以下字符数据 如:
13-1、13-2、13-3、13-10、13-100、13-108、13-18、13-11、13-15、14-1、14-2
现在希望通过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
分析:
需要用到Select查询语句
需要用到ORDER BY 进行排序 并重新计算出排序的数字来
前半部分的数字,可以从先找到 – 符号的位置,然后取左半部分 最后使用Convert函数转换数字
Convert (int,Left(ListNumber,CharIndex(‘-‘,ListNumber)-1))
后半部分的数字,可以先找到 – 符号位置,然后从第一个位置到该位置的全部字符进行替换为空格 再使用convert 函数转换数字
Convert (int,Stuff(ListNumber,1,CharIndex(‘-‘,ListNumber),”))
T-SQL
select listnumber
from sellrecord
order by Convert (int,Left(ListNumber,CharIndex(‘-‘,ListNumber)-1)),
Convert (int,Stuff(ListNumber,1,CharIndex(‘-‘,ListNumber),”))