《《SQL应用实例》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《SQL应用实例》PPT课件.ppt(34页珍藏版)》请在三一办公上搜索。
1、SQL Server 2005实例教程,刘志成 主编,第 5 章 查询操作(第一讲),教学目标,SQL Server 2005中对数据库进行查询的相关知识,教学重点,简单查询语句连接查询语句子查询语句联合查询语句SSMS中执行查询的方法,本章导航,单表查询,任务1,在SQL Server 2005中使用T-SQL语句完成对数据库中某一个表的信息的基本查询操作。,SELECT all|distinct,FROM,WHERE GROUP BY HAVING ORDER BY ASC|DESC;说明:根据WHERE子句的条件表达式,从FROM子句指定的基本表或视图中找出满足条件的元组,再按SELEC
2、T子句中的目标表达式,选出元组中的属性值形成结果集合。若有GROUP子句,则将结果按的值进行分组,该属性列值相等的元组为一个组,每个组产生结果表中的一条记录。若带HAVING短语,则只有满足指定条件的组才输出。若有ORDER BY子句,则结果集按 升序或降序排序。ALL|DISTINCT:选择DISTINCT表示去掉结果中相同的记录,选择ALL表示不去掉相同的记录。,一、选择列,【任务1-1】网站销售部管理人员或采购部管理人员需要了解所有商品的详细信息。,SELECT*FROM Goods,说明:*代表所有列,【任务1-2】网站管理人员在了解商品信息时只需要了解所有商品的商品号、商品名称和商品
3、单价。,【提示】SELECT子句中的【】中各个列的先后顺序可以与表中的顺序不一致。用户在查询时可以根据需要改变列的显示顺序,但不改变表中列的原始顺序。,SELECT g_id,g_name,g_price from goods,【任务1-3】在Goods表中存储有商品数量和商品单价,现在需要了解所有商品的商品号、商品名称和商品总额。,【提示】该语句中【】中第3项不是通常的列名,而是一个计算表达式,是商品单价与商品数量的乘积,所得的积是商品的总价值。计算列不仅可以是算术表达式,还可以是字符串常量、函数等。,select g_id,g_name,g_price*g_number from good
4、s,【任务1-4】要求了解所有商品的商品号、商品名称和总价值,但希望以汉字标题商品号、商品名称和总价值表示g_ID、g_Name和g_Price*g_Number。,【提示】有三种方法指定别名:通过“列名 别名”形式;通过“列名 AS 别名”形式;通过“别名=列名”形式。,select g_id 商品号,g_name 商品名,总价值=g_price*g_number from goods,【课堂实践1】,操作要求:(1)查询WebShop数据库中会员信息表Customers中的所有内容。(2)查询WebShop数据库中会员信息表Customers中会员的编号(c_ID)、用户名(c_Name)
5、、真实姓名(c_TrueName)和密码(c_Password)。(3)查询WebShop数据库中会员信息表Customers中会员的编号(c_ID)、用户名(c_Name)、真实姓名(c_TrueName)、年龄(c_Age)和密码(c_Password)。(4)查询WebShop数据库中会员信息表Customers中会员的编号(c_ID)、用户名(c_Name)、真实姓名(c_TrueName)、年龄和密码(c_Password)并以汉字标题显示列名。,查询满足指定条件的元组可以通过WHERE子句实现。条件表达式是操作数与运算符的组合,操作数可以包括常数、变量和字段等。(1)比较运算:(2
6、)确定范围:(3)集合运算:(4)字符匹配:(5)空值判断:(6)逻辑运算:,二、选择行,1、选择满足条件的行,常用运算符,【任务1-5】需要了解所有商品中的“热点”商品的所有信息。,(1)简单条件查询,select*from goods where g_status=热点,【任务1-6】需要了解商品类别为“01”,商品单价在2500元以上的商品信息,要求以汉字标题显示商品号、商品名称、商品类别号和价格。,(2)复合条件查询,select g_id 商品号,g_name 商品名称,t_id 类别号,g_price 价格from goods where t_id=01 and g_price25
7、00,【任务1-7】需要了解“湖南”省的所有男性的会员或者是年龄在30岁以下的会员的会员号、会员名称、性别、籍贯和年龄。,select c_id 会员号,c_name 会员名称,c_gender 性别,c_address 籍贯,year(getdate()-year(c_birth)年龄from customerswhere(left(c_address,2)=湖南 and c_gender=男)or(year(getdate()-year(c_birth)30,【任务1-8】需要了解所有年龄在2025岁之间的会员的名称、籍贯和年龄(用Nl表示,不是基本表中的字段,是计算出来的列)。,(3)指
8、定范围查询,select c_name,c_address,year(getdate()-year(c_birth)NI from customers where(year(getdate()-year(c_birth)between 20 and 25,【任务1-9】需要了解所有年龄不在2025岁之间的会员的名称、籍贯和Nl(同【任务1-8】)。,select c_name,c_address,year(getdate()-year(c_birth)NI from customers where(year(getdate()-year(c_birth)not between 20 and 2
9、5,【任务1-10】需要了解来自“湖南株洲”和“湖南长沙”两地会员的详细信息。,(4)指定集合查询,select*from customers where left(c_address,4)in(湖南株洲,湖南长沙),【任务1-11】需要了解家庭地址不是“湖南株洲”和“湖南长沙”的商品的详细信息。,select*from customers where left(c_address,4)not in(湖南株洲,湖南长沙),格式:NOTLIKE ESCAPE功能:查找指定的属性列与相匹配的元组说明:代表任意长度_:代表任意单个字符。:表示括号内所列字符中的一个:表示不在括号所列之内的单个字符注意
10、:如果用户要查询的字符串中含有或_,可以使用ESCAPE选项进行转义SELECT*FROM BOOK WHERE BOOKNAME LIKE%DELPHI_6%ESCAPE,(5)模糊查询,1,%:表示任意0个或多个字符。可匹配任意类型和长度的字符.如:SELECT*FROM user1 WHERE u_name LIKE%三%将会把u_name为“张三”,“张猫三”,“三脚猫”,“唐三藏”等等有“三”的记录全找出来。如果需要找出u_name中既有“三”又有“猫”的记录,请用and条件SELECT*FROM user1 WHERE u_name LIKE%三%AND u_name LIKE%猫
11、%若使用 SELECT*FROM user1 WHERE u_name LIKE%三%猫%,虽然能搜索出“三脚猫”,但不能搜索出符合条件的“张猫三”。2,_:表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句:比如 SELECT*FROM user1 WHERE u_name LIKE _三_只找出“唐三藏”这样u_name为三个字且中间一个字是“三”的;再比如 SELECT*FROM user1 WHERE u_name LIKE 三_ _;只找出“三脚猫”这样name为三个字且第一个字是“三”的;,3,:表示括号内所列字符中的一个。指定一个字符、字符串或范围,要求所匹配对
12、象为它们中的任一个。如:SELECT*FROM user1 WHERE u_name LIKE 张李王三将找出“张三”、“李三”、“王三”(而不是“张李王三”);如:内有一系列字符(01234、abcde之类的)则可略写为“0-4”、“a-e”SELECT*FROM user1 WHERE u_name LIKE 老1-9将找出“老1”、“老2”、“老9”;4,:表示不在括号所列之内的单个字符。如:SELECT*FROM user1 WHERE u_name LIKE 张李王三将找出不姓“张”、“李”、“王”的“赵三”、“孙三”等;SELECT*FROM user1 WHERE u_name
13、LIKE 老1-4;将排除“老1”到“老4”,寻找“老5”、“老6”、,【任务1-12】需要了解所有商品中“三星”的商品的详细信息。,select*from goods where g_name like%三星%,【任务1-13】需要了解姓“黄”且名字中只有两个汉字的会员的会员名、真实姓名、电话和电子邮箱。,select c_name,c_truename,c_phone,c_email from customers where c_truename like 黄_,【提示】如果在“黄”后用两个“_”,则姓“黄”的名字为两个汉字和三个汉字的商品将都被查询出来。,【任务1-14】知道一个商品的商
14、品名称中包含有“520”字样,要求查询该商品的商品号、商品名称、商品单价和商品折扣。,select g_id,g_name,g_price,g_discount from goods where g_name like%520%,【提示】如果用户要查询的匹配字符串本身就含有“%”或“_”,比如要查询名字为“三星Cdmaix_008”的商品的信息,这时就要使用“ESCAPE”关键字对通配符进行转义。ESCAPE短语表示为换码字符,这样匹配串中紧跟在后面的字符_不再具有通配符的含义,而是取其本身含义,即普通的“_”字符。,【任务1-15】查询暂时没有商品图片的商品信息。,【提示】这里的“IS”不能
15、用等号(“=”)代替。IS NULL表示空,IS NOT NULL表示非空。这里的NULL值是抽象的空值,不是0,也不是空字符串,如果用户将已有的商品的图片信息删除,则为空字符串,而非NULL值。,(6)涉及空值查询,select*from goods where g_image is null,2、消除重复行,【任务1-16】需要了解在webshop网站进行了购物并下了订单的会员编号,如果一个会员下了多个订单,只需要显示一次会员编号。,select distinct c_id from orders,3、前N行,【任务1-17】需要了解前8种商品信息,格式:TOP nPERCENT,select top 8*from goods,小 结,本讲学习了如下内容:单表查询选择列:所有列、指定列、计算列、使用别名选择行:满足条件的行、消除重复行,