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-数据查询基础的主要内容,如果未能解决你的问题,请参考以下文章

S1/C#语言和数据库技术基础/11-连接查询和分组查询

S1/C#语言和数据库技术基础/02-C#语法快速热身

S1/C#语言和数据库技术基础/10-模糊查询和聚合函数

S1/C#语言和数据库技术基础/06-程序数据集散地:数据库

S1/C#语言和数据库技术基础/01-第一个C#程序

S1/C#语言和数据库技术基础/07-用表组织数据