首页计算机计算机软件SQLServer2005数据库技术及应用 08 第8章 T-SQL基本查询.pptx

08 第8章 T-SQL基本查询.pptx

页数:38页文件大小:484.2 KB来源: SQLServer2005数据库技术及应用ppt课件

本章系统讲解T-SQL的SELECT查询语句,先给出完整语法结构与各子句含义,再依次演示指定列、查询所有列、使用TOP与DISTINCT、使用计算列和操作列名的做法,随后介绍WHERE子句中的比较与逻辑运算符、BETWEEN与IN关键字,以及LIKE模糊查询的通配符与转义字符,最后说明ORDER BY排序及其与TOP结合的取值技巧。

第8章T-SQL基本查询章封面,标示本章主题为SELECT查询语句的语法与用法
第8章T-SQL基本查询目录页,列出SELECT语法结构、指定列、WHERE筛选与模糊查询等五节
第8章T-SQL基本查询(续)的要点列表,SQL是结构化查询语言(Structured Query Language)的简称。Transact-SQL语言
查看本课件的文字版(共 38 页,供检索与复制)

第1页:第8章T-SQL基本查询

第8章T-SQL基本查询

第2页:第8章目录:SELECT查询

第8章T-SQL基本查询

8.1 SELECT查询语句的语法结构 8.2 SELECT子句指定由查询返回的列
  • 8.3使用WHERE子句指定筛选条件
  • 8.4使用凵KE子句进行模糊查询
  • 8.5使用ORDER BY指定结果集的排序

第3页:第8章T-SQL基本查询(续)

第8章T-SQL基本查询

  • SQL是结构化查询语言(Structured Query Language)的简称。Transact-SQL语言(为方便,以下简称T-SQL语言)是Microsoft SQL Server提供的查询语言。
  • T-SQL语言只含有较少的非标准语法,因此将用T-SQL语言编写的程序在不同数据库平台之间移植时,不会遇到太多困难。
  • 任何应用程序,只要目的是向SQL Server的数据库管理系统发出命令以获得数据库管理系统的响应,最终都必须体现为以T-SQL语句为表现形式的指令。

第4页:SELECT查询语句的语法结构

8.1 SELECT查询语句的语法结构SELECT查询语句是SQL语言的核心。SELECT语句的作用是让数据库服务器根据客户的要求搜索出所需要的信息资料,并按规定的格式进行整理,再返回给客户。

第5页:SELECT查询语句的语法格式

SELECT查询语句的语法格式

SELECT查询语句的语法格式为:SELECT [ALL |DISTINCT|TOP <n>] selectlist[INTO[new_table_sourse]][FROM { <table_source> } [ ,...n] ][WHERE clause][GROUP BY group_list][HAVING clause][ORDER BY sort_list][COMPUTE clause][FOR BROWSE]

第6页:SELECT查询语句的语法格式(续)

SELECT查询语句的语法格式

Select_list:所要查询的字段名称,它可以是从多个表中取出来的字段。 INTO〔new_table_sourse〕将查询结果放到一个新的表中,值得注意的是,若SELECT命令中有UNION子句,则INTO一定要放在第一个SELECT保留字之后。
  • FROM{<table_source>}[,...n]:指定要在T-SQL语句中使用的表或视图(带或不带别名均可)。可在语句中使用多达256个表。可将table_source变量指定为表源。
  • WHEREClause:欲查询数据的条件。

第7页:SELECT查询语句的语法格式(续3)

SELECT查询语句的语法格式

GROUPBY
可对字段进行分类统计并给出数据的统计结果。
HAVING
功能如同WHERE,其不同之处在于是对分组条件进行过滤,只有存在GROUPBY时才使用。
ORDERBY
将查询结果以某列或多列进行排序,再返回结果。
COMPUTE:允许用一条SELECT命令同时查询数据,给出数据的细节和统计结果。

第8页:8.2 SELECT子句指定由查询返回

8.2 SELECT子句指定由查询返回的列

  • 选择指定列并指定它们的显示次序
  • 选择所有列
  • 使用TOP关键字指定只返回前面一定数量的数据
  • 使用DISTINCT关键字删除重复的行
  • 使用计算列
  • 操作查询的列名

第9页:【例8.1】从Student表中查询学生

选择指定列并指定它们的显示次序【例8.1】从Student表中查询学生的姓名、性别、出生日期和家庭住址等列的信息在新建查询窗口输入如下语句:SELECT name,sex,birthday,home_addrFROM student在本次查询里,返回的是所有行中相同目标列上的数据。

第10页:【例8.2】从Student表中查询学生

选择所有列【例8.2】从Student表中查询学生所有列的信息。在新建查询窗口输入如下语句:SELECT * FROM studentSELECT *是进行数据检索的最基本的语句。在SELECT语句中,“*”表示表中所有的列

第11页:【例8.3】查询本地SQL Server

选择所有列【例8.3】查询本地SQL Server服务器的本信息。在新建查询窗口输入如下语句:SELECT @VERSION上例使用SELECT语句进行无数据源查询。所谓无数据源查询就是使用SELECT语句来查询不在表中的数据。上例是使用SELECT语句查询全局变量@VERSION,显示服务器的版本号。

第12页:使用TOP关键字指定只返回前面一定数量

使用TOP关键字指定只返回前面一定数量的数据

使用TOP关键字的语法如下:SELECT [TOP integer|TOP integer PERCENT] select_listFROM table_source
TOP integer
表示返回最前面的几行,用整数表示返回的行数;
TOP integer PERCENT
用百分比表示返回的行数。

第13页:使用TOP关键字指定只返回前面一(续)

使用TOP关键字指定只返回前面一定数量的数据

使用TOP关键字的语法如下:SELECT [TOP integer|TOP integer PERCENT] select_listFROM table_source
TOP integer
表示返回最前面的几行,用整数表示返回的行数;
TOP integer PERCENT
用百分比表示返回的行数。

第14页:【例8.4】从JWGL数据库

使用TOP关键字指定只返回前面一定数量的数据

【例8.4】从JWGL数据库的Teacher表中返回前面3行数据。在新建查询窗口输入如下语句:SELECT TOP 3 * FROM teacher 【例8.5】从JWGL数据库的Department表中返回前面占总行数的10%行的数据。在新建查询窗口输入如下语句:SELECT TOP 10 PERCENT *FROM deparment

第15页:【例8.6】没有使用DISTINCT语句

使用DISTINCT关键字删除重复的行

DISTINCT关键字可从SELECT语句的结果中除去重复的行,使返回的结果更简洁。如果没有指定DISTINCT,那么将返回所有满足查询条件的行,包括重复的行。 使用DISTINCT关键字后,如果表中存在多个为NULL的数据,服务器将会把这些数据视为相等。【例8.6】没有使用DISTINCT语句,从Class表中返回专业信息,会得到很多重复的“计算机应用”专业的数据。在新建查询窗口输入如下语句:SELECT professionalFROM class

第16页:【例8.7】当使用了DISTINCT关键

使用DISTINCT关键字删除重复的行

【例8.7】当使用了DISTINCT关键字以后,可以过滤掉其中重复的专业名,使“计算机应用”专业在结果集中只出现1次。在新建查询窗口输入如下语句:SELECT DISTINCT professional*FROM class 与DISTINCT功能相对的是ALL关键字,ALL关键字允许重复数据的出现。不必刻意书写ALL关键字,因为在默认情况下,SELECT语句总是用ALL关键字进行查询。
  • DISTINCT关键字的作用范围是整个查询的列表,而不是单独的一列。比如,同时对两列数据进行查询时,如果使用了DISTINCT关键字,将返回这两列数据的惟一组合。

第17页:【例8.8】在JWGL数据库

使用计算列

在进行数据查询时,经常需要对查询到的数据进行再次计算。T-SQL允许直接在SELECT语句中使用计算列。计算列并不存在于表所存储的数据中,它是通过对某些列的数据进行计算得来的结果。 【例8.8】在JWGL数据库中,将teacher表内的每位员工的工资提高30%。在新建查询窗口输入如下语句:SELECT name姓名,profession职称,salary原工资,salary*1.3现工资FROM teacher

第18页:【例8.8】在JWGL数据库(续)

使用计算列

在进行数据查询时,经常需要对查询到的数据进行再次计算。T-SQL允许直接在SELECT语句中使用计算列。计算列并不存在于表所存储的数据中,它是通过对某些列的数据进行计算得来的结果。 在T-SQL的计算列上,允许使用+、-、*、/、%和按照位来进行计算的逻辑运算符,如AND(&)、OR(|).XOR(^)和NOT(ˉ)以及字符串连接符(+)。【例8.8】在JWGL数据库中,将teacher表内的每位员工的工资提高30%。在新建查询窗口输入如下语句:SELECT name姓名,profession职称,salary原工资,salary*1.3现工资FROM teacher

第19页:【例8.9】使用字符串连接符(+)来连接

使用计算列【例8.9】使用字符串连接符(+)来连接JWGL数据库中Class表内的班级编号(class_id)和专业名称(professional)。SELECT class_id+'班——'+professional班级与专业FROM class

第20页:【例8.10】从Course表中查询课程

操作查询的列名可以根据实际的需要对查询数据的列标题进行修改,或者为没有标题的列增加临时的标题。

  • 符合ANSI规则的标准方法,即在列表达式后面给出列名
  • 使用“=”连接列表达式
使用AS关键字连接列表达式和指定的列名【例8.10】从Course表中查询课程信息,并在列表达式后面给出相应的中文列名。在新建查询窗口输入如下语句:SELECT course_id课程代码,name课程名称,class_time课时,credit学分FROM course

第21页:【例8.11】从Course表中查询课程

操作查询的列名【例8.11】从Course表中查询课程信息,并使用“=”连接列表达式和中文列名。在新建查询窗口输入如下语句:SELECT课程代码=course_id,课程名称=name,课时=class_time,学分=creditFROM course【例8.12】从Course表中查询课程信息,并使用AS关键字连接列表达式和指定的列名。在新建查询窗口输入如下语句:SELECT course_id AS课程代码,name AS课程名称,class_time AS课时,credit AS学分FROM course在对列名进行操作时,有以下2个问题值得注意:
  • 当使用中文列名时,可以不写引号,但决不能使用全角引号,否则查询会出错。
  • 当使用的英文列名超过两个单词时,必须使用引号将列名括起来。

第22页:8.3使用WHERE子句指定筛选条件

8.3使用WHERE子句指定筛选条件WHERE子句是一个筛选,它定义了源表中的行要满足SELECT语句的要求所必须达到的条件。只有符合条件的行才向结果集提供数据。不符合条件的行中的数据不会被使用。WHERE子句还用在INSERT、DELETE和UPDATE语句中以定义目标表中要插入、删除或修改的行。
  • 使用比较运算符
  • 使用逻辑运算符

第23页:【例8.13】从JWGL数据库

使用WHERE子句指定筛选条件

【例8.13】从JWGL数据库的Teacher表中查询出生日期在1960年1月1日以前出生的教师信息。(使用比较运算符)SELECT name,birthdayFROM teacherWHERE birthday<’1960-1-1’

第24页:【例8.14】从JWGL数据库

使用WHERE子句指定筛选条件

【例8.14】从JWGL数据库的Teacher表中查询出生日期在1960年1月1日以前或1976年1月1日以后出生的教师信息。(使用逻辑运算符)在新建查询窗口输入如下语句:SELECT name,sex,birthdayFROM teacherWHERE birthday<’1960-1-1’OR birthday>’1976-1-1’

第25页:BETWEEN关键字语法格式

使用BETWEEN关键字语法是:test_express[NOT] BETWEEN begin_expression AND end_expression使用BETWEEN表达式进行查询的效果可以用使用比较运算符>=和<=连接的逻辑表达式来代替。使用NOT BETWEEN进行查询的效果也可以使用以比较运算符>和<连接的逻辑表达式来代替。

第26页:【例8.15】使用BETWEEN表达式进

使用BETWEEN关键字【例8.15】使用BETWEEN表达式进行查询。使用比较运算符>=和<=连接的逻辑表达式从JWGL数据库的Teacher表中查询出生日期在1960年1月1日与1976年1月1日之间出生的教师信息。在新建查询窗口输入如下语句:SELECT name,sex,birthdayFROM teacherWHERE birthday BETWEEN’1960-1-1’AND’1976-1-1’SELECT name,sex,birthdayFROM teacherWHERE birthday>=’1960-1-1’AND birthday<=’1976-1-1’

第27页:NOT BETWEEN查询示例

使用BETWEEN关键字【例

8.16】例

8.13用比较运算符>和<连接的逻辑表达式进行查询的效果,可以用NOT BETWEEN表达式进行查询来实现。LECT name,sex,birthdayFROM teacherWHERE birthday NOT BETWEEN’1960-1-1’AND’1976-1-1’通过上面的例子可以看到,在使用BETWEEN限制查询数据范围时,同时包括了边界值,而使用NOT BETWEEN进行查询时没有包括边界值。

第28页:【例8.17】用OR表达式从JWGL数据

使用IN关键字同BETWEEN关键字一样,IN关键字的引入也是为了更方便地限制检索数据的范围,灵活使用IN关键字,可以用简洁的语句实现较为复杂的查询。【例

8.17】用OR表达式从JWGL数据库的Teacher表中查询职称为教授或助教的教师名单。SELECT name,professionFROM teacherWHERE profession=’教授’OR profession=’助教’【例 8.18】使用IN表达式从JWGL数据库的Teacher表中查询职称为教授或助教的教师名单。SELECT name,professionFROM teacherWHERE profession IN (’教授’,’助教’)

第29页:【例8.19】查询Student表

8.4使用LIKE子句进行模糊查询通配符的使用

%(百分号)
表示从0到n个任意字符。
_(下划线)
表示单个的任意字符。
[](封闭方括号)
表示方括号里列出的任意一个字符。
[^]:任意一个没有在方括号里列出的字符。【例8.19】查询Student表中,家庭住址带有“南”字的学生名单。SELECT name, home_addrFROM studentWHERE home_addr LIKE’%南%’

第30页:【例8.20】查询Class表

8.4使用LIKE子句进行模糊查询

【例8.20】查询Class表中,班级编号的头三位是“200”第4位是“4”或“6”的班级名称和学生数。SELECT class_id,name,student_numberFROM classWHERE class_id LIKE‘200[46]%’上例中,使用方括号可以将字符查询的范围精确地限定在第4个字符为“4”、“6”中的一个。

第31页:8.4使用LIKE子句进行模糊查询

8.4使用LIKE子句进行模糊查询可以使用方括号和连字符来指定一个值的范围,例如,下面的例子可以利用26个小写字母来检索可能匹配的人名。Use pubsGOSELECT au_lname , au_fname , phone ,au_idFROM authorsWHERE au_lname like‘Dul[a-z]’GO必须注意的是所有通配符都只有在LIKE子句中才有意义。否则,通配符会被当作普通字符处理。

第32页:【例8.21】设有一个名为ABCD的表

8.4使用LIKE子句进行模糊查询

转义字符的使用使用通配符可能会产生这样一个问题:万一要查询的字符串中间包含了通配符作为字符串一部分,该如何处理? T-SQL提供的转义字符功能可以解决这个问题。【例8.21】设有一个名为ABCD的表,表中列名为sy的列有以下4个值:‘[abc]’、’ab_d%’、’eabcd’、’%abcd’列宽度为5,现在要查找以“a”开头,以“%”结尾,第3个字符为“_”,第4个字符为“abcd”中的任意一个字符串。下面的查询语句是正确的实现方法:SELECT syFROM ABCDWHERE sy LIKE‘a_x_[abcd]x%’ESCAPE’x’ESCAPE用来规定转义字符。凡是ESCAPE子句中出现的字符都成为转义字符,它在字符串中不再表示真实的字符,只起标记的作用。凡是在转义字符后面出现的第一个表示通配符的字符都不再被视为通配符,而被当做普通字符处理。所有的字符都可以被当作转义字符处理。在这个查询中,“x”被处理成为转义字符。

第33页:8.5使用ORDER BY指定结果集

8.5使用ORDER BY指定结果集的排序

  • 基本的ORDER BY子句ORDER BY子句的语法是:ORDER BY order by_expression [ ASC |DESC]order by_expression:定义用于排序的列,可以直接指出列名,也可使用列的序号。可以使用多列进行排序,各列在ORDER BY子句中的顺序决定了排序过程中的优先级。ASC |DESC:按升序或降序的顺序排序在默认情况下,ORDER BY子句按升序进行排序,即默认使用的是ASC关键字。如果特别要求按降序进行排列,必须使用DESC关键字。

第34页:【例8.22】查询Department表

8.5使用ORDER BY指定结果集的排序【例8.22】查询Department表中各部门的名称及部门编号。请按部门编号的升序排序。并与不排序查询作比较。Select * from departmentorder by department_id可以使用列所处的位置来指定进行排序的列,如上例可以改为:SELECT *FROM DEPARTMENTORDER BY l

第35页:使用ORDER BY指定结果集(续)

8.5使用ORDER BY指定结果集的排序

对计算列进行排序假设有一个“学生成绩表”,表中有“姓名”、“语文”、“数学”、“英语”等列名,现要根据学生三门课的总成绩按从高到低排序。则应该执行的查询如下:SELECT姓名,’总成绩’=语文+数学+英语FROM学生成绩表ORDER BY总成绩DESC也可以根据未曾出现在SELECT列表中的列的值进行排列。例如,上面的例子可以改为按“计算机应用基础”课程的成绩从高到低排序:SELECT姓名,’总成绩’=语文+数学+英语FROM学生成绩表ORDER BY计算机应用基础DESC

第36页:使用ORDER BY指定结果集(续3)

8.5使用ORDER BY指定结果集的排序

对计算列进行排序假设有一个“学生成绩表”,表中有“姓名”、“语文”、“数学”、“英语”等列名,现要根据学生三门课的总成绩按从高到低排序。则应该执行的查询如下:SELECT姓名,’总成绩’=语文+数学+英语FROM学生成绩表ORDER BY总成绩DESC也可以根据未曾出现在SELECT列表中的列的值进行排列。例如,上面的例子可以改为按“计算机应用基础”课程的成绩从高到低排序:SELECT姓名,’总成绩’=语文+数学+英语FROM学生成绩表ORDER BY计算机应用基础DESC要使用语文和数学进行排序,可以使用的查询如下:SELECT姓名,语文,数学,英语FROM学生成绩表ORDER BY语文DESC,数学DESC

第37页:【例8.23】查询“Teacher”表

8.5使用ORDER BY指定结果集的排序

与TOP结合求某些列值为最大或最小的记录如果一个SELECT语句既包含ORDER BY子句又包含TOP子句,那么返回的行将会从排序后的结果集中选择,整个结果集按照指定的顺序建立并且返回排好序的结果集的前若干行。这样,用户可以进行查询出名列前茅的记录或者落后者的记录。【例8.23】查询“Teacher”表中,工资最高的教师的姓名(name),编号(teacher_id),工资(salary)。在新建查询窗口输入如下语句:SELECT TOP 1 teacher_id, name,salaryFROM teacherORDER BY salary DESC

第38页:【例8.24】查询“Teacher”表

8.5使用ORDER BY指定结果集的排序【例8.24】查询“Teacher”表中,工资最低的两个教师的姓名(name),编号(teacher_id),工资(salary)。在新建查询窗口输入如下语句:SELECT TOP 2 teacher_id, name,salaryFROM teacherORDER BY salary
顶部目录