3.15k likes | 3.25k Views
第四章 数据库查询. 4.1 一般查询 4.2 高级查询 4.3 视 图. 4.1 一般查询. 一、 SELECT 语句基本格式. (一)语法元素 1、变量 变量对于一种语言来说是必不可少的组成部分。 SQL Server 中变量有两种形式,一种是用户自己定义的局部变量,用于保存单个数据值及运算的中间结果 ;. 另一种是系统提供的全局变量,用于记录 SQL Server 服务器的活动状态。 2、运算符 与其他高级语言一样, T-SQL 语法中也提供了不同类型的运算.
E N D
第四章 数据库查询 4.1一般查询 4.2高级查询 4.3视 图
4.1一般查询 一、SELECT语句基本格式 (一)语法元素 1、变量 变量对于一种语言来说是必不可少的组成部分。SQL Server中变量有两种形式,一种是用户自己定义的局部变量,用于保存单个数据值及运算的中间结果;
另一种是系统提供的全局变量,用于记录SQL Server服务器的活动状态。 2、运算符 与其他高级语言一样,T-SQL语法中也提供了不同类型的运算
符,分别是算术运算符、比较运算符、字符连接运算符和逻辑运算符,这些运算符的使用与一般高级语言是一致的。但SQL 作为结构化查询语言,其逻辑运算符更为丰富,可以满足复杂的查询要求,提高查询的效率。表4-1列
出的T-SQL语法中运算符和优先级,当对多个运算符组成的表达式进行运算时,要注意运算符的优先级。 表4-1 T-SQL运算符及优先级
3、函数 T-SQL语法中也提供了许多 种类的函数(如统计函数、时间 日期函数、字符串函数等),用 以返回相应的信息,实现特定功 能。常用的统计函数有AVG、 SUM、COUNT、MAX、MIN等,
常用的时间日期函数有 GETDATE、YEAR、MONTH、 DAY等,常用的字符串函数有 SUBSTRING、LEN等。在查询语句的表达式中,函数经常用于设定输出数据或查询条件的表达式中。关于函数的说明和使用详见第6章。
(二)指定当前数据库 当前数据库即活动数据库。通常服务器上有多个数据库,但只有一个数据库是活动的,可以进行数据操作。当用户登陆SQL Server ,系统即指定了一个默认数据库为当前数据库,通常
是master数据库,master数据库 是系统数据库,存储系统表数 据。用户要改变当前数据库使用 USE语句。USE语句的格式为: USE database_name 如要使用traffic数据库,命令为 USE traffic。
指定了当前数据库后,若不对数 据库对象加以限定,其后的数据 操作命令均是针对当前数据库中 的表或视图等进行的,直到重新 指定当前数据库。所以在进行查 询之前,用户需要指定当前数据 库。
(三)SELECT语句的基本格式SELECT语句很复杂,一般查询(三)SELECT语句的基本格式SELECT语句很复杂,一般查询 时使用SELECT语句主要的子句, 基本格式为: SELECT select_list /*指定要选择的列或行及其限定*/ FROM table_source/*指定数据
来源的表或视图*/ [WHERE search_condition] /*指定查询条件*/ [ORDER BY order_expression[ASC | DESC]] /*指定查询结果排序方式*/ 参数说明如下:
select_list为输出行或列的限定, 可表述为: select_list ::= [ALL | DISTINCT][TOP n [PERCENT][WITH TIES]]<col_list> FROM子句指定数据的来源之处
可以是表或视图。 WHERE子句指定查询条件。 ORDER BY子句指定输出数据的 排序顺序。 SELECT语句的基本功能就是从 指定的表中筛选出满足条件的行,将其指定的列按规定格式输
出。若没有特别指定某个数据库,SELECT语句是对系统当前正使用着的数据库进行操作。输出列可以通过基本格式中的col_list项来设定,此时SELECT子句格式为:出。若没有特别指定某个数据库,SELECT语句是对系统当前正使用着的数据库进行操作。输出列可以通过基本格式中的col_list项来设定,此时SELECT子句格式为: SELECT col_list 其中
col_list ::= { * /*选择当前表或视图的所有列*/ | {table_name |view_name |table_alias}.* /*选择指定表或视图的所有列*/ | {column_name | expression | IDENTITYCOL | ROWGUIDCOL}
[[AS] column_alias] /*选择指定的列*/ | column_alias=expression /*选择指定列并更改列标题*/ }[,…n]
二、输出列的设定 (一)显示部分列或全部列 若只要原样输出表中部分列 或全部列的值,SELECT语句可取 为最简单的形式: SELECT column_name[,…n]
FROM table_name 显示部分列时,各列名之间用逗 号隔开,显示全部列时,可以省 去全部列名而用*表示。 〖例4-1〗查询traffic数据库的jsy 表中各驾驶员的驾照号、姓名和 所学专业。
USE traffic SELECT驾照号,姓名,所学专 业 FROM jsy 执行结果如图4.1。
〖例4-2〗查询车辆表cl中所有数 据。 SELECT * FROM cl 执行结果如图4.2。
(二)更换列名 前两例查询出的数据结果在 标题行直接显示列的名称,实际 上在执行查询时,你可以自定义 显示每一列标题行的名称,以便 查询结果更易于理解,尤其当表 定义的列名原为英文简写或缩写
时,以它作为查询结果的列标题,对用户而言,不易理解其数据含义。若查询时将其改为中文列标题名,会使查询结果的数据更清晰明了。时,以它作为查询结果的列标题,对用户而言,不易理解其数据含义。若查询时将其改为中文列标题名,会使查询结果的数据更清晰明了。 〖例4-3〗查询车辆表cl中每辆车 的里程表数字。
SELECT 车牌号,类别,累计里 程AS ‘里程表数’ FROM cl 执行结果如图4.3。
〖例4-4〗查询jsy表中的部分列, 用英文表示列标题。 SELECT 驾照号 number, 姓名 name, 积分 mark FROM jsy 执行结果如图4.4。
(三)输出列的计算值 查询数据时,经常需要得到 数据计算结果,如果数据量大, 人工计算是一件很费力的事, SELECT语句提供了查询时进行 数据计算的功能,即可以使用运算表达式作为查询结果。
〖例4-5〗查询cl 表中维修费用八折后的现价数据。〖例4-5〗查询cl 表中维修费用八折后的现价数据。 SELECT 车牌号,类别,’实际维修费’=维修费用*0.8 FROM cl 执行结果如图4.5。
三、输出行数的限制 输出行数的限制可以通过SELECT子句中的选项来设定,限制行数的SELECT子句格式如下: SELECT[ALL | DISTINCT][TOP n [PERCENT]]<col_list>
其中,ALL关键字指定保留结果集 中的所有行。 DISTINCT关键字指定消除重复的 行,只返回非重复的行。 TOP n返回结果集前n行,n是一个 正整数。当SELECT语句返回的结 果集的行数非常多时,可以使
用TOP n 选项限制其返回的行数 TOP n PERCENT为返回结果集 的前n%行。 〖例4-6〗查询车辆表cl中车的类 别。 SELECT 类别 FROM cl 执行结果如图4.6。
〖例4-7〗查询cl表中所有的车辆 类别名称,消除重复行。 SELECT DISTINCT 类别 AS ‘现有类别’ FROM cl 执行结果如图4.7。
〖例4-8〗查询行车表xc中每位调 度员曾调度过的车辆。 SELECT DISTINCT 调度号, 车牌号 FROM xc 执行结果如图4.8。
〖例4-9〗查询jsy 表中前5行数 据。 SELECT TOP 5驾照号,姓名, 所学专业 FROM jsy 执行结果如图4.9。
〖例4-10〗查询jsy 表中前5%行数据。 SELECT TOP 5 PERCENT驾照 号,姓名,所学专业 FROM jsy 执行结果如图4.10。
两条查询语句或多条查询语 句可以用GO命令联合起来同时执 行,以便观察和比较各个查询结 果。GO为批处理命令,指示系统 执行自上一次GO后所有的语句, 如果前面没有GO,则从开始处执 行所有语句。
四、筛选行的条件 使用WHERE子句可以从表格 的行集中过滤出符合条件的行, 使用格式为: SELECT select_list FROM table_name
WHERE <search_condition> 其中search_condition为查询条 件。 WHERE子句中的搜索条件表达式 包括比较运算表达式、逻辑运算 表达式以及其他判断条件表达式
多个判定条件或搜索条件可以用 逻辑运算符AND和OR连接,逻辑 运算符AND、OR和NOT分别用 于: AND-连接多个搜索条件,表示 所有的搜索条件都成立。 OR-连接多个搜索条件,表示至
少一个搜索条件成立。 NOT-表示对逻辑表达式的否 定。 使用时WHERE子句必须紧跟在 FROM子句后面。 (一)比较运算符 比较运算用于比较两个表达式的