您好,欢迎访问三七文档
第6章数据查询_李翠霞本章学习目标•熟悉SELECT语句的语法格式•掌握WHERE、ORDERBY、GROUTBY、HAVING子句的使用方法•掌握多表查询的概念•掌握内连接、外连接的使用方法•掌握相关和非相关子查询的使用方法•掌握组合查询的使用方法本章主要内容•6.1SELECT语句概述•6.2连接查询•6.3子查询•6.4联合查询6.1SELECT语句概述虽然SELECT语句的完整语法比较复杂,但其主要子句可归纳如下:•SELECT目标列名表•FROM数据源表•[WHERE查询条件]•[GROUPBY分组列]•[HAVING组选择条件]•[ORDERBY排序列[ASC|DESC]]•(1)SELECT目标列名表,称为SELECT子句。用于指定整个查询结果表中包含的列。假定已经执行完FROM、WHERE、GROUPBY、HAVING子句,从概念上来说得到了一个表,若将该表称为T,从T表中选择SELECT子句指定的目标列即为整个查询的结果表。•(2)FROM数据源表,称为FROM子句。用于指定整个查询语句用到的一个或多个基本表或视图,是整个查询语句的数据来源,通常称为数据源表。•(3)WHERE查询条件,称为WHERE子句。用于指定多个数据源表的连接条件和单个源表中行的筛选或选择条件。如果只有一个源表,则没有表间的连接条件,只有行的筛选条件。•(4)GROUPBY分组列,称为GROUPBY子句。假定已经执行完FROM、WHERE子句,则从概念上来说得到了一个表,若将该表称为T1表,则GROUPBY用于指定T1表按哪些列(称为分组列)进行分组,对每一个分组进行运算,产生一行。所有这些行组成一个表,不妨把它称为T2表,T2表实际上是一个组表。•(5)HAVING组选择条件,称为HAVING子句。与GROUPBY子句一起使用。用于指定组表T2表的选择条件,即选择T2表中满足组选择条件的行,组成一个表。•(6)ORDERBY排序列,称为ORDERBY子句。若有ORDERBY子句,则用于指定查询结果表T中按指定列进行升序或降序排序(默认情况下按升序排列),得到整个查询的结果表。6.1SELECT语句概述示例表图6-1客房类型示例表图6-2客房信息示例表示例表图6-3客房业务示例表图6-4客户信息示例表图6-5业务记录示例表6.2基本查询•6.1.1简单查询•6.1.2带条件查询•6.1.3查询结果处理•6.1.4分组查询6.2基本查询—简单查询•选择表中部分列•选择表中所有列•去除结果的重复信息—DISTINCT•使用表达式的查询•使用列别名简单查询—选择表中部分列在SELECT子句的目标列名表中指定整个查询结果表中出现的若干个列名,各列名之间用逗号分隔。【例6-1】查询全体客户的身份证号和姓名。SELECT身份证号,姓名FROM客户信息;图6-6例6-1的查询结果简单查询—选择表中所有列可以在目标列名表中指定表中所有列的列名,也可以用*来代替。【例6-2】查询全体客户的身份证号,姓名和电话。SELECT身份证号,姓名,电话FROM客户信息;或SELECT*FROM客户信息;图6-7例6-2的查询结果简单查询—去除结果中重复信息DISTINCT关键字可以帮助用户去掉重复行,从而让返回的结果更简洁。【例6-3】查询所有客户的姓名,并去掉重复行。SELECTDISTINCT姓名FROM客户信息;图6-8例6-3的查询结果简单查询—使用表达式的查询表达式可以是列名、常量、函数、或用列名、常量、函数等经过+(加)、-(减)、*(乘)、/(除)等组成的公式。•【例6-4】查询所有客房类型的类型编号和名称,并将价格上涨5%。•SELECT•类型编号,名称,价格*1.05•FROM客房类型;图6-9例6-4的查询结果简单查询—使用列别名所谓别名,就是另一个名字。主要是为了方便阅读。设置列别名的方法有:原列名[AS]列别名或者:列别名=原列名【例6-4】查询【例6-5】查询所有客房类型的类型编号和名称,将价格上涨5%并显示为“新价格”。SELECT类型编号,名称,价格*1.05AS'新价格'FROM客房类型;或SELECT类型编号,名称,价格*1.05'新价格'FROM客房类型;或SELECT类型编号,名称,'新价格'=价格*1.05FROM客房类型;图6-10例6-5的查询结果带条件查询查询条件中常用的运算符:比较运算符和逻辑运算符。比较运算符用于比较两个数值之间的大小是否相等。常用的比较运算符有:=(等于)、(大于)、(小于)、=(大于等于)、=(小于等于)、!=或(不等于)、!((不大于)、!((不小于)共9种。逻辑运算符主要有:范围比较运算符:BETWEEN…AND…,NOTBETWEEN…AND集合比较运算符:IN,NOTIN字符匹配运算符:LIKE,NOTLIKE空值比较运算符:ISNULL,ISNOTNULL条件连接运算符:AND,OR,NOT带条件查询使用比较表达式的查询使用BETWEEN…AND的查询使用IN的查询使用LIKE的查询基于NULL空值的查询基于多个条件的查询带条件查询—使用比较表达式的查询【例6-6】查询所有价格大于300的客房类型编号,名称,面积,床位和价格信息。SELECT类型编号,名称,面积,床位,价格FROM客房类型WHERE价格300;图6-11例6-6的查询结果带条件查询—使用BETWEEN…AND的查询•说明:使用的基本形式为:列名BETWEEN下限值AND上限值•等价于:列名=下限值AND列名=上限值•列名可以是表达式列的别名。•BETWEEN…AND…一般用于数值型范围的比较。表示当列值在指定的下限值和上限值范围内时,条件为TRUE,否则,为FALSE。•NOTBETWEEN…AND…与BETWEEN…AND…正好相反,表示列值不在指定的下限值和上限值范围内时,条件为TRUE,否则为FALSE。•注意:列名类型要与下限值或上限值的类型一致。带条件查询—使用BETWEEN…AND的查询【例6-7】查询价格在400~500之间的客房类型编号,名称,面积和床位信息。SELECT类型编号,名称,面积,床位FROM客房类型WHERE价格BETWEEN400AND500;等价于:SELECT类型编号,名称,面积,床位FROM客房类型WHERE价格=400AND价格=500;图6-12例6-7的查询结果带条件查询—使用BETWEEN…AND的查询【例6-8】查询价格不在400~500之间的客房类型编号,名称,面积和床位信息。SELECT类型编号,名称,面积,床位FROM客房类型WHERE价格NOTBETWEEN400AND500;等价于:SELECT类型编号,名称,面积,床位FROM客房类型WHERE价格400OR价格500;图6-13例6-8的查询结果带条件查询—使用IN的查询IN条件表示格式为:列名IN(常量1,常量2,…常量n)当列值与IN中的任一常量值相等时,条件为TRUE,否则为FALSE。NOTIN与IN的含义正好相反,当列值与IN中的任一常量值都不相等时,结果为TRUE,否则为FALSE。【例6-9】查询价格为160,260,560的客房类型编号和名称。SELECT类型编号,名称FROM客房类型WHERE价格IN(160,260,560);图6-14例6-9的查询结果带条件查询—使用IN的查询【例6-10】查询价格不是160,260,560的客房类型编号和名称。SELECT类型编号,名称FROM客房类型WHERE价格NOTIN(160,260,560);图6-15例6-10的查询结果带条件查询—使用LIKE的查询LIKE运算符的一般形式为:列名LIKE模式串通配符功能%(百分号)可匹配任意类型和长度的字符_(下划线)可匹配任意单个字符,它常用来限制表达式的字符长度[](封闭方括号)表示方括号里列出的任意一个字符[^]任意一个没有在方括号里列出的字符表6-1通配符及其功能带条件查询—使用LIKE的查询•【例6-11】查找名字包含3个字符,且中间为‘毅’的客户身份证号和姓名。•SELECT身份证号,姓名•FROM客户信息•WHERE姓名LIKE‘_毅_’;图6-16例6-12的查询结果带条件查询—使用LIKE的查询•【例6-11】查找名字包含3个字符,且中间为‘毅’的客户身份证号和姓名。•SELECT身份证号,姓名•FROM客户信息•WHERE姓名LIKE‘_毅_’;图6-16例6-12的查询结果带条件查询—使用LIKE的查询【例6-12】查找姓’王’的客户身份证号和姓名。SELECT身份证号,姓名FROM客户信息WHERE姓名LIKE‘王%’;图6-17例6-13的查询结果带条件查询—使用LIKE的查询【例6-13】查找姓’王’,’张’或’李’的客户身份证号和姓名。SELECT身份证号,姓名FROM客户信息WHERE姓名LIKE'[王张李]%';图6-18例6-14的查询结果带条件查询—使用LIKE的查询【例6-14】查找不姓’王’或’张的客户身份证号和姓名。SELECT身份证号,姓名FROM客户信息WHERE姓名LIKE'[^王张李]%';图6-19例6-15的查询结果带条件查询—使用NULL的查询空值是尚未确定或不确定的值。判断某列值是否为NULL值,不能使用比较运算符等于和不等于,而只能使用专门的判断空值的子句,如下:判断列值为空的语句格式为:列名ISNULL判断列值不为空的语句格式为:列名ISNOTNULL【例6-15】查询没有登记面积的客房类型编号和名称。SELECT类型编号,名称FROM客房类型WHERE面积ISNULL;带条件查询—使用NULL的查询【例6-16】查询登记了面积的客房类型编号和名称。SELECT类型编号,名称FROM客房类型WHERE面积ISNOTNULL;图6-21例6-17的查询结果带条件查询—基于多个条件的查询在WHERE子句中,可以使用多个搜索条件来选择记录,即通过逻辑运算符(NOT、AND或OR)将多个单独的搜索条件结合在一个WHERE子句中,形成一个复合的搜索条件。当对复合搜索条件求值时,DBMS首先对每个单独的搜索条件求值,然后执行布尔运算来决定整个WHERE子句的值是TRUE还是FALSE。只有那些满足整个WHERE子句的值是TRUE的记录才出现在结果中。•NOT运算符表示逻辑“非”关系。用于对搜索条件的逻辑值求反。•AND运算符表示逻辑“与”关系。当使用AND运算符组合两个逻辑表达式时,只有当两个表达式均为TRUE时返回TRUE。•OR运算符表示逻辑“或”关系。当使用OR运算符组合两个逻表达式时,只要其中一个表达式的条件为TRUE,结果便返回TRUE。带条件查询—基于多个条件的查询【例6-17】查询价格为160,260,560的客房类型编号和名称。SELECT类型编号,名称FROM客房类型WHERE价格=160OR价格=260OR价格=560;图6-22例6-18的查询结果【例6-18】查询价格既不是260也不是560的客房类型编号和名称。SELECT类型编号,名称FROM客房类型WHERE价格260AND价格560;图6-23例6-19的查询结果带条件查询—基于统计函数的查询统计函数功能COUNT(*)求表中或组中记录的个数COUNT(列名)求不是NULL的列值个数SUM(列名)求该列所有值的总和(必须是数值型列)AVG(列名)求该列所有值的平均值(必须是数值型列)MAX(列名)求该列所有值的最大值(必须是数值型列)MIN(列名)求该列所有值的最小值(必须是数值型列)表6-2常用统计函数带条件查询—基于统计函数的查询【例6-19】求客户的总人数。SELECTCOUNT(*)'总人数'FROM客户信息;图6-24例6-20的查询结果【例6-20】求客房的最高价格、最低价格和平均价格。图6-25例6-21的查询结果SE
本文标题:第6章 数据查询 数据库原理及应用SQL Server 2008数据库原理及应用课件
链接地址:https://www.777doc.com/doc-4147317 .html