SQLServer学习笔记五:查询基础

学习目标

  • 理解查询机制
  • 使用SELECT语句进行条件查询
  • 掌握查询排序
  • 使用表达式、运算符和函数实现查询

查询机制

查询是针对表中已经存在的数据行而言的,可以简单地理解为“筛选”,将符合条件的数据抽取出来。
例如,从学生表中查询出所在班级=S202的记录集。
学生表

学生编号学生姓名地址所在班级
001张三山东济南S201
002张三山东青岛S202
003张三山东潍坊S203
004张三山东烟台S202
005张三山东威海S203
006张三山东济宁S202
007张三山东淄博S204

T-SQL语句

SELECT 学生编号,学生姓名, 地址, 所在班级
FROM 学生表
WHERE 所在班级='S202'

记录集

学生编号学生姓名地址所在班级
002张三山东青岛S202
004张三山东烟台S202
006张三山东济宁S202

数据表在接受查询请求时,可以理解为进行“逐行判断”,判断是否符合查询条件。如果符合就提取出来,然后把所有被选中的行组织在一起,形成另外一个类似于表的结构,即查询结果,通常叫作记录集(Record Set)。

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

使用SELECT语句进行查询

语法

SELECT <列名>
FROM <表名>
[WHERE <查询条件表达式>]
[ORDER BY <排序的列名> [ASCDESC]]

其中,WHERE条件是可以选的,若不限制,则查询返回所有行的数据项。ORDER BY是用来排序的。

查询所有的数据行和列

把表中的所有行和列都列举出来比较简单,这时候可以使用*来表示所有的列:

SELECT * FROM students

查询部分行或列

查词部分列需要列举不同的列名,而查询部分行需要使用WHERE子句进行条件限制。例如:

SELECT sno, sname, saddress
FROM students
WHERE saddress='山东威海'

以上的查询语句,将只查询地址为“山东威海”的学生,并且只显示编号、姓名和地址列。同理以下语句用来查询地址不是“山东威海”的学生信息。

SELECT sno, sname,saddress
FROM students
WHERE saddress <> '山东威海'

在查询中使用列的别名

AS子句可以用来改变结果集中列的名称,也可以为组合或者计算出的列指定名称,还有一种情况是让标题列的信息更易懂,例如,把SCode列名查询后显示为“学生编号”。例如:

SELECT sno AS 学生编号, sname AS 学生姓名, saddress AS 地址
FROM students
WHERE saddress <> '山东威海'

还有一种情况是为计算、合并得到的新列进行命名。例如,假设在某数据库的雇员表Employee中存在FirstName列和 LastName列,现在需要将这两列合并成一个叫作“姓名”的列,可以使用下面的查询语句。

SELECT FirstName+'.'+LastName AS 姓名
FROM Employees

重新命名列名还可以使用=,例如:

SELECT 姓名=FirstName +' .' + LastName
FROM Employees

查询空值

在SQL语句中采用IS NULL或者IS NOT NULL来判断是否为空,因此,如果要查询学生信息表中没有填写Email信息的学生,可以使用以下查询语句。

SELECT sname 
FROM students 
WHERE semail IS NULL

在查询中使用常量列

有时接,需要将一些常量的默认信息添加到查询的输出中,以方便统计或计算。例如,查询学生信息的时候,学校名称统一都是“威海职业学院”,查询语句如下:

SELECT 姓名=snmae, 地址=saddress, '威海职业学院' AS 学校名称
FROM students

查询就多了一列“学校名称”,该列的所有数据都是“威海职业学院”。

查询返回限制的行数

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

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

SELECT TOP 5 sname, saddress
FROM students WHERE gender='女'

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

SELECT TOP 20 PERCENT sname, saddress
FROM Students WHERE gender='女'

查询排序

如果需要按照一定顺序排列查询语句选中的行,则需要使用ORDER BY子句,并且排来可升序(ASC)或者降序(DESC)、如果不指定ASC或者DESC,结果集按默认ASC升序排序。
上面讲述过的SQL语句,都可以在其后面再加上ORDER BY来进行排序。

例如,查询学生成绩的时候,如果把所有成绩都降低10%后加5分,再查询及格成绩并技绩高低来进行排列,SQL语句如下。

SELECT sno AS 学生编号,(grade*0.9+5) AS 综合成绩
FROM score
WHERE (grade*0.9+5)>60
ORDER BY score

还可以按照多个列进行排序。例如,要在学生成绩排序的基础上,再按照课程ID进行排序的语句如下。

SELECT sno AS 学生编号,cno AS 课程ID, grade AS 成绩
FROM score
WHERE grade >60
ORDER BY grage,cno

在查询中使用函数

SQL Sever 提供了一些内部函数,每个函数都实现不同的功能,不同类别的函数都可以和SELECTUPDATEINSERT语句联合使用。
常用的有四类函数,分别是字符串函数、日期函数、数学函数、系统函数。

字符串函数

函数功能示例
CHARINDEX()返回指定字符串在原串中的位置Select CHARINDEX('G', 'KING') 结果为4
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

少儿编程乔老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值