S1/C#语言和数据库技术基础/09-数据查询基础
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了S1/C#语言和数据库技术基础/09-数据查询基础相关的知识,希望对你有一定的参考价值。
查询的机制:
查询是针对表中已经存在的数据行而言的,可以简单地理解为“筛选”,将符合条件的数据抽取出来。
数据表在接受查询请求的时候,可以简单的理解为“他将逐行判断”,判断是否符合查询条件,如果符合查询条件就提取出来,然后把所有选中的行组织在一起,形成另外一个类似于表的结构,构成查询的结果,通常叫做结果集(RecordSet)。
由于结果集的结果实际上和表的结构类似,都是由行组成的,因此在记录集上依然可以进行再次查询。
使用SELECT语句进行查询
查询使用SELECT语句,最简单的查询语句的格式可以表示如下。
语法:
SELECT <列名>
FROM <表名>
[WHERE <查询条件的表达式>]
[ORDER BY <排序的列名>[ASC 或 DESC]]
其中,WHERE条件是可选的,若不限制,则查询返回所有行的数据项。ORDER BY是用来排序的,后续内容将会详细介绍。
经验:查询语句可以分为多个子句部分,例如,上面的查询语法可以划分为SELECT……FROM…WHERE…ORDER BY四个子句,对于复杂的SQL语句,可以将每个子句单独写成一行,以方便调试和查找错误。
查询语句一般都在SQL Server Management Studio的查询窗口中进行调试运行,以下分别举例说明基本查询的不同情况。
1、查询所有数据行和列
把表中的所有行和列都列举出来比较简单,这时候可以使用“*”表示所有的列:
SELECT * FROM Students
2、查询部分行或列
查询部分列需要列举不同的列名,而查询部分行需要使用WHERE子句进行条件限制,例如:
SELECT Scode,SName,Saddress
FROM Students
WHERE Saddress = ‘河南新乡‘
以上的查询语句,将只查询地址为“河南新乡”的学生,并且只显示编号、姓名和地址列。同理,以下语句用来查询地址不是“河南新乡”的学生信息。
SELECT Scode,Sname,Saddress
FROM Students
WHERE Saddress <> ‘河南新乡‘
3、在查询中使用列的别名
AS子句可以用来改变结果集中列的名称,也可以为组合或者计算出的列指定名称,还有一种情况是让标题列的信息更易懂,例如,把Scode列名查询后显示为“学生编号”。
在T-SQL中重新命名列明可以使用AS子句,例如:
SELECT SCode AS 学生编号,SName AS 学生姓名,SAddress AS 学生地址
FROM Students
WHERE SAddress <> ‘河南新乡‘
还有一种情况是使用计算、合并得到新列的命名。例如,架设在某数据库的雇员表Employees中存在FirstName列和LastName列,现在学要将这两列合并成一个叫作“姓名”的列,可以使用以下查询语句。
SELECT FirstName+‘.‘+LastName AS 姓名
FROM Employees
重新命名列名还有一种方法,就是采用“=”来命名,例如:
SELECT 姓名 = FirstName+‘.‘+LastName
FROM Employees
4、查询空值
在SQL语句中采用“IS NULL”或者“IS NOT NULL”来判断是否为空,因此,如果要查询学生信息表中没有填写E-mail信息的学生,可以使用一下查询语句。
SELECT SName FROM Students WHERE SEmail IS NULL
5、在查询中使用常量列
有时候,需要将一些常量的默认信息添加到查询输出中,以方便统计或计算。例如,查询学生信息的时候,学校的名称统一都是“北京新兴桥”,查询语句如下。
SELECT 姓名=SName,地址=SAddress,‘北京新兴桥‘ AS 学校名称
FROM Students
查询输入多了一列“学校名称”,该列的所有数据都是“北京新兴桥”。
6、查询返回限制的行数
一些查询需要返回限制的行数。例如,在测试的时候,如果数据库中有上万条记录,而只要检查前面10行数据数否有效就可以了,没有必要查询输出全部的数据,以提高查询速度,这时候就要用到限制返回行数的查询。
在T-SQL中,限制行数使用TOP关键字来约束。例如,要查询返回众多学生记录中前五位女生的姓名和地址信息,查询语句如下。
SELECT TOP 5 SName,SAddress
FROM Students WHERE SSex=0
还有一种情况是需要从表中按一定的百分比提取记录,这时候还需要用到PRECENT关键字来限制。例如,要提取20%的女生数据如下。
SELECT TOP 20 PRECENT SName,SAddress
FROM Students WHERE SSex = 0
如何使用ORDER BY
如果需要按照一定顺序排列查询语句选中的行,则需要使用ORDER BY子句,并且排序可以是升序(ASC)或者降序(DESC)。如果不指定 ASC或者DESC,结果集按默认ASC升序排列。
上面讲述过的SQL语句,都可以在其后面再加上ORDER BY来进行排序。
例如,查询学生成绩的时候,如果把所有成绩都降低10%后加5分,在查询及格成绩并按照成绩高低来进行排列,SQL语句如下。
SELECT StudentID AS 学生编号,(Score*0.9+5) AS 综合成绩
FROM Score
WHERE (Score*0.9+5)>60
ORDER BY Score
还可以按照多个列进行排序。例如,要在学生成绩排序的基础上,再按照课程ID进行排序的语句如下。
SELECT StudentID AS 学生编号,CourseID AS 课程 ID,Score AS 成绩
FROM Score
WHERE Score>60
ORDER BY Score,CourseID
在查询中使用函数
SQL Server提供了一些内部函数,每个函数都实现不同的功能,不同类别的函数都可以和SELECT、UPDATE、INSERT语句联合使用。
常用的有四类函数,分别是字符串函数、日期函数、数学函数、系统函数。
/字符串函数/
部分常用的字符串函数
函数名 |
描述 |
举例 |
CHARINDEX |
用来寻找一个指定的字符串在另一个字符串中的起始位置 |
SELECT CHARINDEX(‘NAME‘,‘My name is Tom‘,1) 返回:4 |
LEN |
返回传递给它的字符串长度 |
SELECT LEN(‘SQL Server 课程‘) 返回:12 |
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() 返回:今天的日期 例如:2009-12-25 12:00:00.000 |
DATEADD |
将指定的数值添加到指定的日期部分后的日期 |
SELECT DATEADD(mm,4,‘01/01/2009‘) 返回:当前的日期格式返回05/01/2009 |
DATEDIFF |
两个日期之间指定日期部分的间隔 |
SELECT DATEDIFF(mm,‘01/01/2009‘,‘05/01/2009‘) 返回:4 |
DATENAME |
日期中指定日期部分的字符串形式 |
SELECT DATENAME(dw,‘01/01/2000‘) 返回:Saturday或星期六 |
DATEPART |
日期中指定日期部分的整数形式 |
SELECT DATEPART(day,‘01/15/2000‘) 返回:15 |
日期部分参数及其缩写
日期部分参数 |
缩写 |
日期部分参数 |
缩写 |
year |
yy,yyyy |
weekday |
dw,w |
quarter |
qq,q |
hour |
hh |
month |
mm,m |
minute |
mi,n |
dayofyear |
dy,,y |
second |
ss,s |
day |
dd,d |
millisecond |
ms |
week |
wk,ww |
|
|
数学函数
部分常用的数学函数
函数名 |
描述 |
举例 |
RAND |
返回从0到1之间的随机float值 |
SELECT RAND( ) 返回:0.79288062146374 |
ABS |
取数字表达式的绝对值 |
SELECT ABS(-43) 返回:43 |
CEILING |
向上取整,取大于或等于指定数值、表达式的最小整数 |
SELECT CEILING(43.5) 返回:44 |
FLOOR |
向下取整,取小于或等于指定表达式的最大整数 |
SELECT FLOOR(43.5) 返回:43 |
POWER |
取数值表达式的幂指 |
SELECT POWER(5,2) 返回:25 |
ROUND |
将数值表达式四舍五入为指定精度 |
SELECT ROUND(43.543,1) 返回:43.500 |
SIGN |
对于正数返回+1,对于负数返回-1,对于0返回0 |
SELECT SIGN(-43) 返回:-1 |
SQRT |
取浮点表达式的平方根 |
SELECT SQRT(9) 返回:3 |
系统函数
部分常用的系统函数
函数名 |
描述 |
举例 |
CONVERT |
用来转变数据类型 |
SELECT CONVERT(VARCHAR(5),12345) 返回:字符串12345 |
CURRENT_USER |
返回当前用户的名字 |
SELECT CURRENT_USER 返回:你登录的用户名 |
DATALENGTH |
返回用于指定表达式的字节数 |
SELECT DATALENGTH(‘中国A联盟‘) 返回:5 |
HOST_NAME |
返回当前用户所登录的计算机名字 |
SELECT HOST_NAME() 返回:你所登录的计算机的名字 |
SYSTEM_USER |
返回当前所登陆的用户名称 |
SELECT SYSTEM_USER 返回:你当前所登录的用户名 |
USER_NAME |
从给定的用户ID返回用户名 |
SELECT USER_NAME(1) 返回:从任意数据库中返回“dbo” |
对比:LEN()用于获取字符串的长度。DATALENGTH()用于用户获取表达式所占内存字节数。当参数都为字符型数据时,二者可以通用,例如,“SELECT LEN(‘6‘)”、“SELECT DATALENGTH(‘6‘)”返回都为1;而“SELECT DATALENGTH(6)”返回4,表示整型数据“6”占是个字节。
以上是关于S1/C#语言和数据库技术基础/09-数据查询基础的主要内容,如果未能解决你的问题,请参考以下文章