数据库设计开发案例教程

上传人:宝路 文档编号:2552889 上传时间:2017-08-01 格式:PPTX 页数:51 大小:1.69MB
返回 下载 相关 举报
数据库设计开发案例教程_第1页
第1页 / 共51页
数据库设计开发案例教程_第2页
第2页 / 共51页
数据库设计开发案例教程_第3页
第3页 / 共51页
数据库设计开发案例教程_第4页
第4页 / 共51页
数据库设计开发案例教程_第5页
第5页 / 共51页
点击查看更多>>
资源描述

《数据库设计开发案例教程》由会员分享,可在线阅读,更多相关《数据库设计开发案例教程(51页珍藏版)》请在金锄头文库上搜索。

1、CONFIDENTIAL数据库设计开发技术案例教程(五)SQL中的查询2北京亚思晟北京亚思晟 科技有限公司科技有限公司主要内容1, SQL语句查询的结构2,简单的 select查询语句的使用3,复杂查询语句的应用3北京亚思晟北京亚思晟 科技有限公司科技有限公司5.1 单一的 SELECT查询语句5.1.1 SELECT 语句的结构SELECT 语句的基本语法格式如下:SELECT ALL|DISTINCT TOP nPERCENTselect_listINTO new_tableFROM table_nameWHERE search_conditionGROUP BY group_by_exp

2、ressionHAVING search_conditionORDER BY order_by_expression ASC|DESC其中:SELECT:关键字,用于从数据库中检索数据。Select_list:描述进入结果集的列,它指定了结果集中要包含的列的名称,是一个逗号分割的表达式列表。Table_name:用于指定产生查询结果集的源表的表名。 4北京亚思晟北京亚思晟 科技有限公司科技有限公司当使用 SELECT语句时,可以用两种方式来控制返回的数据:选择列和选择行。选择列就是限制返回结果中的列,这由 SELECT与剧中的 SELECT子句指定要返回的列来控制:选择行则是限制返回结果中的行

3、,这由 SELECT语句中的 WHERE子句指定选择条件来控制。1.选择列1)指定列语法格式如下:SELECT column_name1,column2,FROM table_name以下示例:从 AsscentWebDb数据库的 orderitem表中查询 ordersid和 productid和quantity的数据信息,在新建的查询栏中输入:select ordersid,productid,quantity from orderitem 查询结果如图 5-1所示。5.1.2 简单的查询 SELECT图 5-15北京亚思晟北京亚思晟 科技有限公司科技有限公司2)选择所有列在 SELECT

4、子句中可以使用星号( *)显示表中所有的列以下示例:显示 orderitem表中的所有信息。新建查询,输入:Select * from orderitem该语句无条件地把 orderitem表中的全部信息都查询出来,所以也称为全表查询,这是最简单的一种查询。3)使用计算列在进行数据查询时,经常需要对表中的数据计算后才能得到满意的结果。在 SELECT子句中可以使用算术运算对数值型数据进行加( +)、减( -)、乘( *)、除( /)和取模( %),构造计算列。以下示例:从 product表中检索 ordersid, productid, quantity和 ordersid*productid

5、查询结果如图 5-2所示。新建查询,输入:select ordersid,productid,quantity,ordersid*productid from orderitem5.1.2 简单的查询 SELECT图 5-26北京亚思晟北京亚思晟 科技有限公司科技有限公司5.1.3 伪表名和伪列名在默认情况下,查询结果中显示的列标题就是在创建表时使用的列名,但对上图中的计算列,系统是不指定列标题的,如果我们想改变查询结果中所显示的列标题,可以再SELECT语句中使用 “列标题 =列名 ”或 “列名 AS列标题 ”两种方法来制定。以下示例:为上例中的计算列指定一个列标题 total number

6、,如图 5-3所示。新建查询,输入:select ordersid,productid,quantity,total number=ordersid*productid from orderitem 图 5-37北京亚思晟北京亚思晟 科技有限公司科技有限公司5.1.4 条件查询 WHERE在实际工作中,大部分查询并不是针对表中的所有数据记录进行查询,而是要找到满足某些条件记录。此时,我们可以在 SELECT语句中使用 WHERE子句。使用 WHERE子句的目的是从表中筛选出符合条件的行,其语法格式如下:SELECT column_name1,column_name2,FROM table_na

7、me WHERE search_condition其中, search_condition用来定义查询条件。 SQL Server支持的查询条件包括:关系运算、逻辑运算、模糊匹配、范围、列表以及是否为空。8北京亚思晟北京亚思晟 科技有限公司科技有限公司5.1.5 SQL中的运算符9北京亚思晟北京亚思晟 科技有限公司科技有限公司5.1.5 SQL中的运算符以下示例:查询 orderitem表中 ordersid小于 5的信息查询结果如图 5-4所示。新建查询,输入:select ordersid,productid,quantity from orderitem where ordersid=6

8、 and ordersid (SELECT avg (price2) FROM Product)显示结果,如图 5-27所示。42北京亚思晟北京亚思晟 科技有限公司科技有限公司5.2.6 嵌套查询在上述两个例子中,子查询的结果是用于比较的单列单值数据,如果子查询中返回的是单列多值数据,则必须在子查询前使用关键字 ALL或 ANY(如表 5-5所示)否则系统会提示错误信息。关键字 含义 示例ALL 比较子查询的所有值ALL=ALLALL大于子查询结果中的所有值(大于最大的)小于子查询结果中的所有值(小于最小的)大于等于子查询结果中的所有值小于等于子查询结果中的所有值等于子查询结果中的所有值(通常

9、没有实际意义)不等于子查询结果中的任何一个值ANY 比较子查询的任一值ANY=ANYANY=ANY大于子查询结果中的某个值(大于最小)小于子查询结果中的某个值(小于最大)大于等于子查询结果中的某个值小于等于子查询结果中的某个值不等于子查询结果中的某个值等于子查询结果中的某个值表 5-543北京亚思晟北京亚思晟 科技有限公司科技有限公司5.2.6 嵌套查询图 5-28以下示例:查询 ClassName(班级名称)为 s1108的所有学生信息。select * from Student where ClassId = any(select ClassId from Class where Clas

10、sName=s1108)显示结果,如图 5-28所示。44北京亚思晟北京亚思晟 科技有限公司科技有限公司5.2.6 嵌套查询图 5-292.子查询返回值的类型为单列多值当子查询的结果是单列多值时,除了使用关键字 ALL或 ANY之外,还经常使用关键字 IN或 NOT IN IN表示属于关系,即是否在子查询的结果集中; NOT IN则表示不属于集合或不是集合的成员。以下示例:使用关键字 IN。查询 ClassName(班级名称)为 s1108的所有学生信息。select * from Student where ClassId in(select ClassId from Class where

11、 ClassName=s1108)显示结果,如图 5-29所示。45北京亚思晟北京亚思晟 科技有限公司科技有限公司5.2.6 嵌套查询图 5-30查询过程还是分两步进行:首先,内部子查询返回 ClassName(班级名称)为 s1108的班级 ID的 ClassId 。然后,这些值被带人外部查询中,在 Student中查找与上述标识号相匹配的学生信息。以下示例:显示没有在 s1108班级学生的信息。select * from Student where ClassId not in (select ClassId from Class where ClassName=s1108)显示结果,如图

12、 5-30所示。46北京亚思晟北京亚思晟 科技有限公司科技有限公司5.2.6 嵌套查询图 5-313带关键字 NOT EXISTS的子查询在 WHERE子句中使用 EXISTS关键字,表示判断子查询的结果集是否为空,如果子查询至少返回一行, WHERE子句的条件为真,返回 TRUE;否则条件为假,返回 FALSE。加上关键字 NOT,则刚好相反。以下示例:查找下过订单的客户的详细信息,使用关键字 EXISTS 。查询结果:select * from Student where exists (select ClassId from Class where ClassName=s1108) 显示

13、结果,如图 5-31所示。47北京亚思晟北京亚思晟 科技有限公司科技有限公司5.2.6 嵌套查询使用 EXISTS的子查询时需注意: EXISTS关键字前面没有列名、常量或其他表达式。由 EXISTS引出的子查询,其选择列表达式通常都用( *)这是因为,带EXISTS的子查询只是测试是否存在符合子查询中指定条件的行,所以不必列出列名。带 EXISTS的子查询与前面的不相关子查询有一个明显区别,即子查询的查询条件依赖于外部查询的某个属性值,我们称这类查询为相关子查询。求解相关子查询的过程不能像求解不相关子查询那样,一次将子查询求解出来,然后求解外部查询,相关子查询的内部查询由于与外部查询有关,因

14、此必须反复求值,一般处理过程如下:1)首先取外部查询中 Class表的第一行记录,根据它与内部查询相关的属性值(即 ClassID值)处理内部查询,若 WHERE子句返回值为真(即内部查询结果非空),则取此记录放入结果集中。2)再检查 Student表的下一行记录。3)重复执行步骤 2,直至 student表全部检查完毕。48北京亚思晟北京亚思晟 科技有限公司科技有限公司5.2.7其他查询1、 UNION在 SELECT语句中,使用 UNION子句可以把两个或多个 SELECT语句查询的结果组合成一个结果集。其语法格式如下:SELECT_statement1 UNIONALL SELECT_s

15、tatement2以下示例:用 UNION子句将 Student表中的 StudentId、 StudentName及 Class表中的 ClassId、 ClassName组合在一个结果中。SELECT StudentId,StudentName FROM Student UNION SELECT ClassId,ClassName FROM Class显示结果,如图 5-32所示。图 5-32注意:所有查询中的列的数量必须相同,数据类型必须兼容,且顺序必须一致。列名来自第一个 SELECT语句 使用关键字 ALL将保留结果中的所有的行,包括重 复行。如果没有指定关键字 ALL,系统自动删除

16、重复行。49北京亚思晟北京亚思晟 科技有限公司科技有限公司5.2.7其他查询2、 INTO在对表进行查询时,我们可以使用 INTO子句将查询结果生成一个新表,此方法常用于创建表的副本或创建临时表。其语法格式为:SELECT ALL|DISTINCTTOP nPERCENT select_listINTO new_table FROM table_nameWHERE search_condition其中,新表的列为 SELECT子句指定的列,原表中列的数据类型和允许为空属性不变,但其他所有信息(如默认值、约束等)被忽略。以下示例:将查询的结果保存到新表 temp_ orders 。SELECT* INTO tem

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 教育学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号