数据库学习笔记(四)-数据库查询基础

1.T-SQL查询基础

1.1查询机制简介

数据表在接受查询请求的时候,可以简单的认为它将逐行的判断,判断是否符合查询条件.如果符合查询条件就提取出来,然后把所有选中的的行组织在一起,形成另外一个类似于表的结构,构成查询结果,通常叫做记录集(RecordSet)

由于记录集的结构实际上和表的结构类似,都是由行组成的,因此在记录集上依然可以再次进行查询.

1.2 使用SELECT语句进行查询

[语法]

SELECT <列名>

FROM <表名>

[WHERE <查询条件表达式>]

[ORDER BY <排序的列名>[ASC或DESC]]

查询语句一般都在SSMS的查询窗口中进行调试运行

(1)查询所有的数据行和列

用"*"表示所有列

SELECT * FROM Students

(2)查询部分行和列

查询部分列要列举不同的列名,查询部分行要使用WHERE子句进行条件限制

SELECT SCode,SName,SAddress

FROM Students

WHERE SAddress = '河南新乡'

以上的查询语句,将只查询地址为'河南新乡'的学生,并且只显示编号,姓名,和地址列,同理以下语句用来查询地址不是'河南新乡'的学生信息.

SELSCT 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 SEail IS NULL

(5)在查询中使用常量列

SELECT 姓名 = SName,地址= SAddress,'北京新兴桥' AS 学校名称

FROM Students

查询中多出了一列"学校名称",该列的所有数据都是"北京新兴桥"

(6)查询返回限制的行数,一些查询需要返回限制的行数,例如在测试的时候,如果数据库中有上万条记录,而只要检查前面10行数据就可以了,没有必要查询输出全部的数据,以提高查询速度,这时候就要用到显示返回行数的查询.

在T-SQL中,限制行数使用TOP关键字约束,例如,要查询返回众多学生记录中的前五为女生的姓名和地址信息,查询语句为:

SELECT TOP 5 SName,SAddress

FROM Students WHERE SSex = 0

还有一种情况是需要从表中按一定的百分比提取记录,这时候还需要用到PERCENT关键字来限制,例如,要提取20%女生数据如下

SELECT TOP 20 PERCENT  SName,SAddress

FROME Students WHERE SSex = 0;

2.查询排序

2.1如何使用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 StudentIS AS 学生编号,CourseID AS 课程ID , Score AS 成绩

FROM Score

WHERE Score > 60

ORDER BY Course,Score

3.在查询中使用函数

3.1字符串函数

字符串函数用于对字符串数据进行处理,并返回一个字符串或者数字

部分常用的字符串函数
函数名描述举例
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 LTRIM('   张三  ')
返回   张三
RIGHT从字符串右边返回指定数目的字符SELECT RIGHT('买买提.图尔松',3)
返回 图尔松
REPLACE替换一个字符串中的字符SELECT REPLACE('莫勒克切.杨可','可','兰')
放回莫勒克切.杨兰
STUFF在一个字符串中,删除指定长度的字符,并且在改位置插入一个新的字符串SELECT STUFF('ABCDEFG',2,3,'我的音乐我的世界')
返回 A我的音乐我的世界EFG
















3.2 日期函数

部分常用日期函数
函数名描述举例
GETDATE取得当前的系统日期SELECT GETDATE()
返回:今天的日期
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









SQL Server可识别的日期部分参数及其缩写

year     --   yy,yyyy

quarter --  qq,q

mouth -- mm,m

dayofyear  -- dy,y

day -- dd,d

week -- wk,ww

weekday -- dw,w

hour -- hh

minute -- mi,n

second -- ss,s

millisecond -- ms

3.3 数学函数

部分常用的数学函数
函数名描述举例
RAND返回从0到1之间的随机float值SELECT RAND()
返回:0.78964646874667
ABS取数值表达式的绝对值SELECT ABS(-43)
返回:43
CEILING向上取整,取大于或者等于指定数值,表达式的最小整数SELECT CEILING(43.5)
返回:44
FLOOR向下取整,取小于于或者等于指定数值,表达式的最小整数SELECT CEILING(43.5)
返回:43
POWER取数值表达式的幂值SELECT POWER(5,2)
返回:25
ROUND将数值表达式四舍五入为指定精度SELECT ROUND(43.543,1)
返回:43.500
SIGN对于正数返回+1,对于负数返回-1,对于0则返回0SELECT SIGN(-43)
返回:-1
SQRT取浮点表达式的平方根SELECT SQRT(9)
返回:3













3.4系统函数

部分常用的系统函数
函数名描述举例
CONVERT用来转变数据类型SELECT CONVERT(VARCHAR(5),12345)
返回:字符串:12345
CURRENT_USER返回当前用户的名字SELECT CURRENT_USER
返回:你登录的用户名
DATALENGTH返回用于指定表达式的字节数SELECT DATALENGTH ('中国A联盟')
返回:5
HOST_NAME返回当前用户登录的计算机名字SELECT HPST_NAME
返回:你所登录的计算机的名字
SYSTEM_USER返回当前所登录的用户名称SELECT SYSTEM_USER
返回:你当前锁登录的用户名称
USER_NAME从给定的用户IS返回用户名SELECT USER_NAME
返回:从任意数据库中返回"dbo"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值