2022年2022年管理信息系统数据库查询 .pdf
1 数据查询在关系数据库中查询数据时,只需执行一个SQL 查询语句,通过各种查询条件,就可以得到一个从数据库中返回的查询结果,这个查询结果的内容来自该数据库中的一张或几张表。数据查询是SQL 语言的主要功能之一。基本查询语句完整的 SQL 查询语句为:SELECT ALL|DISTINCT , FROM , WHERE GROUP BY HA VING ORDER BY AORDERS | DEORDERS SELECT 语句根据WHERE 子句的查找条件表达式,通过匹配从FROM 子句指定的基本表或视图中找出满足条件的记录,再按照选择字段表,返回相应的字段值形成结果集。结果集中的一条条记录有时也被形象地称为“ 行” 。GROUP BY 子句将结果按BY 后的 进行分组。如果 HAVING 子句 中包含聚合函数,则计算每组的汇总值。如果 GROUP 子句带 HAVING 短语,则只有满足指定条件的组才会输出。ORDER BY 子句将结果集中的数据按升序或降序排列。(1) 简单查询简单查询语句为:SELECT FROM WHERE 简单的 SQL 查询只包括 、FROM 子句和WHERE 子句,分别说明需查询的字段、查询的表或视图以及查找条件等。SELECT 子句中的 可以是由一组字段、星号、表达式或变量(包括局部变量和全局变量)构成。【例 1】从客户情况表中查询所有客户的客户编号、客户姓名。SELECT CNO, CNAME, CSEX , CAGE , CRANK , CTEL FROM CUSTOMERS 该查询为无条件查询,查询语句中只使用SELECT 、FROM子句,查询结果是CUSTOMERS 表中指定字段表的所有值。例 1的 查询结果CNO CNAME CSEX CAGE CRANK CTEL50000 梁亮男26 注册会员8008801001 50001 吴丹女28 VIP 会员NULL50002 张艳女21 普通会员8008801013 50003 刘杰男31 注册会员NULL50004 袁玲女29 注册会员8008801056 50005 王芳女25 VIP 会员NULL 50006 张涛男33 普通会员8008801092 50007 王伟男35 金卡会员NULL名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 28 页 - - - - - - - - - 2 如果 写为 *,则会返回表中所有的字段。例 2 的查询结果【例 2】查询全体客户的详细订单表。SELECT * FROM ORDERS CNO PNO OTEL OADD OQUANT 50001 200002 8008808001 北京市朝阳区光华路599 号2 50001 200004 8008808021 北京市海淀区增光路282 号1 50002 200001 8008808032 北京市朝阳区十里堡路128 号1 50003 200002 8008808035 北京市宣武区虎坊桥路295 号2 50004 200005 8008808096 北京市西城区德外大街682 号2 50005 200005 8008808122 北京市宣武区燕家胡同37 号1 50006 200007 8008808078 北京市朝阳区光华路126 号1 50007 200002 8008808062 北京市朝阳区八里庄北里986 号2 【例 3】更改商品表PRODUCTS 商品编号 PDESC 为 “ 描述 ” 。SELECT PNO , PNAME, PCNO , PRICE , 描述 =PDESC FROM PRODUCTS 如果指定的字段名不是标准的标识符格式时,应使用引号定界符。另外,选择字段表的表达式还可以是一个计算表达式,通过计算得到用户所需要的数据。例3的查询结果PNO PNAME PCNO PRICE 描述200001 迷你小闹钟1003 15.5 可爱牌 |产地上海200002 计算机安全学1001 60.2 机械工业出版社2005 年版200003 IP 电话卡1002 25.5 价值 100 元200004 数据库原理1001 30 机械工业出版社2006 年版200005 泛函分析1001 20.5 共328 页200006 甜甜奶粉1004 155 100% 新西兰原料200007 手机充值卡1002 40 价值 50 元200008 胡萝卜米粉1004 32 100% 进口原料名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 28 页 - - - - - - - - - 3 【例 4】查询客户的出生年份。SELECT CNAME, CSEX, 出生年份= 2006-CAGE FROM CUSTOMERS WHERE CSEX= 女 其中: 出生年份 不是原表的字段名,需加上引号,用来指明其字段名称。而2006-CAGE 则为计算表达式,用来计算客户的出生年份。例4的查询结果CNAME CSEX 出生年份吴丹女1978 张艳女1985 袁玲女1977 王芳女1981 SELECT 子句中有两个可选参数ALL 和DISTINCT 。DISTINCT 返回的查询结果会删除其中的重复项,而使用ALL 不会删除重复项,仅仅将重复项分开显示。ALL 是默认的参数选项。【例 5】执行语句SELECT PCNO FROM PRODUCTS WHERE PNO200005 默认为ALL,查询结果见表。如果想删除返回表中的重复项,则需将执行语句改为SELECT DISTINCT PCNO FROM PRODUCTS WHERE PNO200005 加了 “ DISTINCT ” 关键字的查询结果见表。带ALL 属性的查询结果PCNO1003 1001 1002 1001 带DISTINCT 属性的查询结果PCNO 1001 1002 1003 【例 6】在客户情况表 CUSTOMERS 和订单表 ORDERS 中都存在客户编号CNO 字段,在查询两个表中的CNO 时应使用下面语句格式加以限定:SELECT CNAME, CUSTOMERS.CNO, PNO FROM CUSTOMERS, ORDERS WHERE CUSTOMERS.CNO=ORDERS.CNO 用 .这种格式可以区分不同表中的同名字段。CUSTOMERS .CNO 表示CUSTOMERS 表中的 CNO 字段,ORDERS .CNO 则表示 ORDERS 表中的 CNO 字段,通过这种办法就可以将两个属于不同表的相同字段分开。FROM 子句还可以为基本表或视图指定别名。用法为:FROM as, 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 28 页 - - - - - - - - - 4 【例 7】将例 6中的语句用表的别名格式表示。SELECT CNAME, First.CNO FROM CUSTOMERS as First, ORDERS as Second WHERE First.CNO=Second.CNO 例6的查询结果CNAME CNO PNO吴丹50001 200002 吴丹50001 200004 张艳50002 200001 刘杰50003 200002 袁玲50004 200005 王芳50005 200005 张涛50006 200007 王伟50007 200002 CNAME CNO 吴丹50001 吴丹50001 张艳50002 刘杰50003 袁玲50004 王芳50005 张涛50006 王伟50007 例7的查询结果WHERE 子句可包括各种条件运算符。WHERE 子句中的条件运算符名称功能说明运算符比较运算符大小比较、= 、=、=、!、! 范围运算符表达式值是否在指定的范围BETWEEN AND NOT BETWEENAND 字段表运算符判断表达式是否为字段表中的指定项IN 、NOT IN模式匹配符判断值是否与指定的字符通配格式相符LIKE 、NOT LIKE空值判断符判断表达式是否为空IS NULL 、 IS NOT NULL逻辑运算符用于多条件的逻辑连接NOT 、AND 、OR名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 28 页 - - - - - - - - - 5 【例 8】查询所有 28 岁的客户姓名。SELECT CNAME FROM CUSTOMERS WHERE CAGE=28 查询结果仅包含一条记录:“ 吴丹 ” 。【例 9】查询所有不是“ VIP 会员 ” 的客户信息。SELECT * FROM CUSTOMERS WHERE CRANKVIP 会员 例9的查询结果CNOCNAMECSEXCAGECRANKCTEL50000梁亮男26注册会员800880100150002张艳女21普通会员800880101350003刘杰男31注册会员NULL50004袁玲女29注册会员800880105650006张涛男33普通会员800880109250007王伟男35金牌会员NULL注意: WHERE 子句的查询条件里的不等于符号为,而不是 != 。【例 10】查询所有价格低于30 元的商品的编号、名称和价格。SELECT PNO, PNAME, PRICE FROM PRODUCTS WHERE PRICE30 【例 11】查询所有年龄小于27 岁的客户编号、姓名和年龄。SELECT CNO, CNAME, CAGE FROM CUSTOMERS WHERE CAGE27 例10的查询结果PNOPNAMEPRICE200001迷你小闹钟15.50200003IP电话卡25.50200005泛函分析20.50例11的查询结果CNOCNAMECAGE50000梁亮2650002张艳2150005王芳25名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 28 页 - - - - - - - - - 6 【例 12】查询所有年龄在26 岁与 31 岁 (包括 26 岁和31 岁)之间的客户的姓名、年龄、性别SELECT CNAME, CAGE, CSEX FROM CUSTOMERS WHERE CAGE BETWEEN 26 AND 31 例12的查询结果例13的查询结果CNAMECAGECSEX梁亮26男吴丹28女刘杰31男袁玲29女CNOCNAMECRANK50001吴丹VIP会员50002张艳普通会员50005王芳普通会员50006张涛VIP会员【例 13】查询 “ VIP 会员 ” 、“ 普通会员 ” 的客户编号、姓名和会员类别。SELECT CNO, CNAME, CRANK FROM CUSTOMERS WHERE CRANK IN (VIP 会员,普通会员) IN 后面跟的是一个字段表,用户只需定义字段表的内容就可以得到自己所需的查找内容。【例 14】查询所有商品分类编号为“1001”、“1002”的商品的编号、名称和分类号。SELECT PNO, PNAME, PCNO FROM PRODUCTS WHERE PCNO IN(1001, 1002) NOT IN 的功能与 IN 相反,用于用户查找不属于指定字段表的内容。例14的查询结果例15的查询结果PNOPNAMEPCNO200002计算机安全学1001200003IP电话卡1002200004数据库原理1001200005泛函分析1001200007手机充值卡1002CNOCNAMECRANK50000梁亮注册会员50003刘杰注册会员50004袁玲注册会员50007王伟金牌会员名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 28 页 - - - - - - - - - 7 正则表达式:用于匹配的匹配串可以是一个含有合法符号的字符串如:“ abcd” ,也可以是含有通配符的字符串。百分号“% ” 可匹配任意类型和长度的字符,其长度也可以为0。如: c%e 表示以c 开头,以e 结尾的任意长度的字符串,“ come” ,“ cope” ,“ combe” 等都满足该匹配。下划线 “ _”匹配单个任意字符,常用来限制表达式的字符长度。如:1_2 表示以 1 开头,以 2 结尾的长度为3 的任意字符串。如“1 a2” ,“132”等。方括号 “ ”要求匹配的对象为方括号内中的字符或字符串。如:a-f或集合 abcdef)都可以表示从a 到 f 之间的任何一个字符。“ ”的使用与 “ ”相同,不过它要求所匹配对象为指定字符以外的任一个字符。如“ A%” 表示除 “ A” 以外的字符【例 15】查询所有非 “ VIP 会员 ” 、“ 普通会员 ” 的客户编号、姓名和会员类别。SELECT CNO, CNAME, CRANK FROM CUSTOMERS WHERE CRANK NOT IN (VIP 会员, 普通会员) 模式运算符判断字段值是否与指定的字符串格式相匹配,可用于CHAR 、VARCHAR 、TEXT 、 NTEXT 、DATETIME 和 SMALLDATETIME 等类型查询。【例 16】查询客户编号为“50001”的客户的详细情况。SELECT * FROM CUSTOMERS WHERE CNO LIKE 50001 例16的查询结果CNOCNAMECSEXCAGECRANKCTEL50001吴丹女28VIP会员 NULL【例 17】查询所有编号以“500”开头的客户的姓名和编号。SELECT CNO, CNAME FROM CUSTOMERS 例17的查询结果CNAMECNO梁亮50000吴丹50001张艳50002刘杰50003袁玲50004王芳50005张涛50006王伟50007名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 28 页 - - - - - - - - - 8 例18的查询结果CNOCNAME50005王芳50007王伟【例 18】查询所有姓 “ 王” 的客户且全名为两个字符的客户姓名。SELECT CNO, CNAME FROM CUSTOMERS WHERE CNAME LIKE 王_ 例19的查询结果PNOPNAME200002计算机安全学200007手机充值卡【例 19】查询商品名称含有“ 机 ” 的商品名称。SELECT PNO, PNAME FROM PRODUCTS WHERE PNAME LIKE %机% 【例 20】查询所有姓 “ 梁张刘 ” 的客户的姓名和编号。SELECT CNO, CNAME FROM CUSTOMERS WHERE CNAME LIKE 梁张刘% 【例 21】查询所有不姓王的客户的姓名和编号。SELECT CNO, CNAME FROM CUSTOMERS WHERE CNAME LIKE 王% 该查询还可以写为:SELECT CNO, CNAME FROM CUSTOMERS WHERE CNAME NOT LIKE 王% 例20的查询结果例21的查询结果CNOCNAME50000梁亮50002张艳50003刘杰50006张涛CNOCNAME50000梁亮50001吴丹50002张艳50003刘杰50006张涛如果用户要查询的数据项中本身就含有“% ”,由于 “% ”是通配符,所以需要使用ECSAPE 短语。【例 22】查询商品描述中有“% ” 及“ 出版社 ” 的商品名称和商品描述。SELECT PNAME,PDESC FROM PRODUCTS WHERE PDESC LIKE %!%出版社% ESCAPE ! 表达式中的 ! 为换码字符,其作用是使! 后面的字符 % 不再具有通配符的含义,而是转义为普通字符。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 28 页 - - - - - - - - - 9 例22的查询结果PNAMEPDESC计算机安全学机械工业出版社2005年版数据库原理机械工业出版社2006年版甜甜奶粉100%新西兰原料胡萝卜米粉100%进口原料空值判断符用来判断表达式是否为空,在数据库中如果某一数据项下没有输入数据,那么它的值将记为空 (IS NULL )。【例 23】查询所有登记了联系电话的客户的编号、姓名和电话。SELECT CNO, CNAME, CTEL FROM CUSTOMERS WHERE CTEL IS NOT NULL 例23的查询结果CNOCNAMECTEL50000梁亮8008801001 50002张艳8008801013 50004袁玲8008801056 50006张涛8008801092 逻辑运算符用于多条件的逻辑连接。其优先级由高到低为:NOT,AND,OR,但用户可以使用括号来改变优先级。【例 24】查询年龄在 30 岁以下的女性客户姓名、性别和年龄。SELECT CNAME, CSEX, CAGE FROM CUSTOMERS WHERE CSEX=女 AND CAGE30 例 24 的查 询 结果CNAMECSEXCAGE吴丹女28张艳女21袁玲女29王芳女25【例 25】 查询 “ 普通会员 ” 或“ 注册会员 ” 的客户姓名和客户编号。SELECT CNO, CNAME, CRANK FROM CUSTOMERS WHERE CRANK=普通会员 OR CRANK =VIP 会员 例25的查询结果CNOCNAMECRANK50001吴丹VIP会员50002张艳普通会员50005王芳VIP会员50006张涛普通会员名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 28 页 - - - - - - - - - 10 ORDER BY 子句对查询返回的结果按某字段或多个字段排序。参数ASC 表示升序,为默认值,参数DESC 为降序。 注意: ORDER BY 不能对 NTEXT ,TEXT 和IMAGE 数据类型进行排序。【例 26】查询 “ 非注册会员 ” 的客户姓名和年龄,查询结果按年龄降序排列。SELECT CNAME, CAGE, CRANK FROM CUSTOMERS WHERE CRANK 注册会员 ORDER BY CAGE DESC 如果要进行多个字段排序,那么要在字段与字段之间加上逗号。例26的查询结果CNAMECAGECRANK王伟35金牌会员张涛33普通会员吴丹28VIP会员王芳25VIP会员张艳21普通会员【例 27】查询所有的客户信息,查询结果按不同的会员级别排列,同类会员按年龄降序排列。SELECT CNAME, CAGE, CRANK FROM CUSTOMERS WHERE CRANK 注册会员 ORDER BY CRANK, CAGE DESC 例27的查询结果CNAMECAGECRANK吴丹28VIP会员王芳25VIP会员王伟35金牌会员张涛33普通会员张艳21普通会员(2) 使用集合函数的查询如果用户想要对一个表中的记录进行数据统计,需要用到集合函数。例如,用户想知道有多少客户是普通会员,或者普通会员的平均年龄是多少等等。Microsoft SQL 支持五种类型的集合函数。用户可以通过这些复合函数统计数量(COUNT ),计算平均值(AVG)、最小值 (MIN)、最大值 (MAX)以及求和 (SUM)。COUNT()函数用来统计一个表中有多少条记录。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 28 页 - - - - - - - - - 11 在使用 COUNT () 时,结果中的空值将被忽略,即空值不会被进行统计。但如果使用COUNT (*) ,那么它会统计所有的记录,不管它包含空值与否。【例 30】计算所有 “ 普通会员 ” 的平均年龄。SELECT AVG(CAGE) FROM CUSTOMERS WHERE CRANK=普通会员 查询结果是: 27,这是因为两位普通会员的年龄分别是33 和 21,平均年龄是 27. 【例 29】查询所有客户一共定购了几种商品。SELECT COUNT(DISTINCT PNO) FROM ORDERS 查询结果是:5. 当用户使用一个集合函数时,它只返回一个数,该数值代表这几个统计值之一。在统计数据时可能会遇到重复的数据项,如指定DISTINCT 短语,则在统计数据时会自动取消指定字段中的重复值。如指定ALL 短语,则表示不取消重复值统计。AVG()函数用来返回一个字段中所有值的平均值。MIN() 函数用来返回某个字段的最小值;MAX()函数则用来返回某个字段的最大值。【例 31】查询 “ 普通会员 ” 中年龄最小的客户的年龄。SELECT MIN(CAGE) FROM CUSTOMERS WHERE CRANK=普通会员 查询结果是: 21. 如果要查询 “ 普通会员 ” 中年龄最大SELECT MAX(CAGE) FROM CUSTOMERS WHERE CRANK=普通会员 查询结果是:33. SUM()函数用来统计某个字段值的和。【例 32】计算客户编号为“50001”的客户的所有定购商品的总数量。SELECT SUM(OQUANT) FROM ORDERS WHERE CNO=50001 查询结果是: 3,说明客户编号为“50001”的客户定购了 3 件商品。【例 28】查询普通会员的总人数。SELECT COUNT(*) FROM CUSTOMERS WHERE CRANK=注册会员 查询结果是:3. 表明共有 3 个注册会员。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 28 页 - - - - - - - - - 12 GROUP BY 子句可以将结果集划分成更小的组,用来细化集合函数的作用对象。使用GROUP BY 子句分组后,集合函数将作用于每一个分组,即对每一个分组都会返回一个函数值。其返回的行数与分组数相同。如果出现 GROUP BY 子句,那么 SELECT 选择字段表中再引用那些没有分组的字段就是非法的,除非放在集合函数里,因为对于未分组的字段,可能会返回多个数值。【例 33】求各类会员相应的人数。SELECT CRANK, COUNT(CNO) as 数量 FROM CUSTOMERS GROUP BY CRANK 生成的结果被分成了几行,每行代表一类会员,然后对每一个分组取集合函数COUNT ()。如果在 GROUP BY 子句中指定的字段为空值,则会返回一行数据项为空的查询结果。使用 GROUP BY 子句时,也可以对多个字段进行分组。例33的查询结果例34的查询结果CRANK数量VIP会员2金牌会员1普通会员2注册会员3CRANKCSEX数量金牌会员男1普通会员男1注册会员男2VIP会员女2普通会员女1注册会员女1【例 34】统计每个学院的男生与女生的人数。SELECT CRANK,CSEX,COUNT(CNO) FROM CUSTOMERS GROUP BY CRANK,CSEX 当SQL 处理该查询语句时,首先按CSEX 对记录进行分组,然后在每个CSEX 分组中再按会员类别进行分组,最后计算每个分组中的人数。如果需要对分组后的结果进行筛选,则可以使用HAVING 短语。需要注意的是,HAVING短语的作用对象是分组,而不是基本表。【例 35】查询至少被两个及以上客户定购过的商品编号。SELECT PNO FROM ORDERS GROUP BY PNO HAVING COUNT(*)1 使用了HAVING 短语后,该查询只会将满足条件的分组筛选出来。查询结果是: “200002”和“200005”。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 28 页 - - - - - - - - - 13 (3) 联合查询联合查询是指将两个或两个以上的SELECT 语句的查询结果集合合并成一个结果集合。联合查询的一般语句格式为:SELECL_查询语句_1 UNION ALL SELECT_查询语句_2 UNION ALL SELECT_查询语句_3 如果使用参数ALL 则会将所有的记录并入一个结果集合显示。若不使用ALL ,那么合并后的结果集中重复的记录只保留一项。(4) 连接查询连接是关系数据库模型的主要特点之一。连接查询是指用户的查询同时涉及到多个表,查询的结果与多个表有关的查询。常见的连接查询包括内连接查询、外连接查询、自身连接查询和交叉连接查询 内连接查询内连接查询使用比较运算符进行不同表间字段的比较操作,并列出所涉及表中与连接条件相匹配的记录。根据连接条件的不同,内连接又可分为等值连接和非等值连接。等值连接在连接条件中使用连接运算符“ =”连接查询两个表。查询结果中包括被连接表中的所有字段,其中也包括重复的字段。【例 37】查询每个客户及其定购商品的信息。要查询每个客户及其定购商品的情况,需要涉及到两个基本表分别是:客户情况表CUSTOMERS 和客户订单表 ORDERS . 客户编号CNO 是两个表的公共字段,所以可以用CNO 将两张表连接起来。【例 36】查询 “ VIP 会员 ” 及所有姓王的客户的信息。SELECT CNO, CNAME, CRANK FROM CUSTOMERS WHERE CRANK=VIP 会员 UNION SELECT CNO, CNAME, CRANK FROM CUSTOMERS WHERE CNAME LIKE 王% 例36的查询结果CNOCNAMECRANK50001吴丹VIP会员50005王芳VIP会员50007王伟金牌会员该查询实际就是将所有“ VIP 会员 ” 的信息与所有姓王的客户的信息合并起来显示。联合查询时,查询结果的字段名为第一个查询语句的字段名。因此,要定义字段名必须在第一个查询语句中定义。要对联合查询结果排序时,也必须使用第一查询语句中的字段名。在使用UNION 运算符时,应保证每个联合查询语句的选择字段表中有相同数量的表达式,并且每个查询选择表达式应具有相同的数据类型,或是可以自动将它们转换为相同的数据类型。具体的 SQL 语句实现如下:SELECT CUSTOMERS.*,ORDERS.* FROM CUSTOMERS,ORDERS WHERE CUSTOMERS.CNO=ORDERS.CNO 查询结果如表所示。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 28 页 - - - - - - - - - 14 例37的查询结果CNOCNMECSEX CA GE CRA NKCTELCNOPNOOTELOADDOQU ANT50001吴丹女28VIP 会员NULL50001200002北京市 250001吴丹女28VIP 会员NULL50001200004北京市 150003刘杰男31注册会员NULL50003200002北京市 250004袁玲女29注册会员50004200005北京市 250005王芳女25VIP 会员NULL50005200005北京市 150006张涛男33普通会员50006200007北京市 150007王伟男35金牌会员NULL50007200002北京市 2如果将例 37的查询语句改为:SELECT CUSTOMERS.CNO, CUSTOMERS.CNAME, PNO, OADD FROM CUSTOMERS, ORDERS WHERE CUSTOMERS.CNO=ORDERS.CNO 则其执行结果中将只含有一个CNO 字段。去掉重复字段的查询结果CNOCNAMEPNOOADD50001吴丹200002北京市朝阳区光华路599号50001吴丹200004北京市海淀区增光路282号50003刘杰200002北京市宣武区虎坊桥路295号50004袁玲200005北京市西城区德外大街682号50005王芳200005北京市宣武区燕家胡同37号50006张涛200007北京市朝阳区光华路126号50007王伟200002北京市朝阳区八里庄北里986号 外连接查询在内连接查询中,只有满足连接条件的记录才会作为结果输出。如果该行不满足连接条件,则不会被显示到结果集合中。如果用户希望不满足连接条件的记录也显示到结果集合中,这时应该使用外连接查询。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 28 页 - - - - - - - - - 15 执行结果如表所示。多了2 条记录,表明 “ 梁亮 ” 和“ 张艳 ” 没有定购任何商品。左外连接查询结果CNOCNAMEPNOOADD50000梁亮NULLNULL50001吴丹200002北京市朝阳区光华路599号50001吴丹200004北京市海淀区增光路282号50002张艳NULLNULL50003刘杰200002北京市宣武区虎坊桥路295号50004袁玲200005北京市西城区德外大街682号50005王芳200005北京市宣武区燕家胡同37号50006张涛200007北京市朝阳区光华路126号50007王伟200002北京市朝阳区八里庄北里986号同样,在例 37中也可采用右外连接,相应的SQL 语句如下:SELECT CNO, ORDERS.PNO, PRODUCTS.PNAME, OADD FROM ORDERS RIGHT OUTER JOIN PRODUCTS ON ORDERS.PNO = PRODUCTS.PNO CNOPNOPNAMEOADDNULLNULL迷你小闹钟NULL50001200002计算机安全学北京市朝阳区光华路599号50003200002计算机安全学北京市宣武区虎坊桥路295号50007200002计算机安全学北京市朝阳区八里庄北里986号NULLNULLIP电话卡NULL50001200004数据库原理北京市海淀区增光路282号50004200005泛函分析北京市西城区德外大街682号50005200005泛函分析北京市宣武区燕家胡同37号NULLNULL甜甜奶粉NULL50006200007手机充值卡北京市朝阳区光华路126号NULLNULL胡萝卜米粉NULL注意: 使用外连接时,不满足连接条件的记录将字段用空值来填充。【例 38】 在例 37中若采用左外连接,则SQL 语句为:SELECT CUSTOMERS.CNO, CUSTOMERS.CNAME, PNO, OADD FROM CUSTOMERS LEFT OUTER JOIN ORDERS ON CUSTOMERS.CNO = ORDERS.CNO 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 28 页 - - - - - - - - - 16 为了便于分析查询结果,把“ second.CNO, second.CNAME, second.CAGE ” 也同时查询出来。如果仅查询比其他客户大2 岁的客户编号、姓名和年龄,可以将这些项从SELECT 子句中去掉。 交叉连接查询:交叉连接查询返回连接表中关系的笛卡尔积。查询结果中的行数等于第一个表中行数乘以第二个表中符合查询条件的行数。【例 40】对 CUSTOMERS 和PRODUCTS 表做交叉连接查询。相应的查询 SQL 语句如下:SELECT CNO,CNAME,PNO,PNAME FROM CUSTOMERS CROSS JOIN PRODUCTS WHERE CNO50003 AND PNO (SELECT AVG(CAGE ) FROM CUSTOMERS ) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 28 页 - - - - - - - - - 18 例 42 的 查询结果CNOCNAMECSEXCAGECRANKCTEL50003刘杰男31注册会员NULL50004袁玲女29注册会员800880105650006张涛男33普通会员800880109250007王伟男35金牌会员NULL查询结果如表所示。先通过子查询获得平均年龄,然后通过嵌套查询得到大于平均年龄的客户信息。子查询自身可以包括一个或多个子查询,嵌套查询可以有多层结构。【例 43】查询年龄大于平均值的注册会员。可以采用带比较运算符的SQL 嵌套查询语句:SELECT * FROM CUSTOMERS WHERE CRANK =注册会员 AND CNO IN (SELECT CNO FROM CUSTOMERS WHERE CAGE (SELECT AVG(CAGE ) FROM CUSTOMERS ) 例43的查询结果CNOCNAMECSEXCAGECRANKCTEL50003刘杰男31注册会员NULL50004袁玲女29注册会员8008801056【例 44】查询年龄大于平均值的客户信息。可以采用带比较运算符的SQL 嵌套查询语句:SELECT CNO,CNAME,CSEX ,CAGE ,CRANK , (SELECT AVG(CAGE ) FROM CUSTOMERS ) as AVG _AGE FROM CUSTOMERS WHERE CAGE (SELECT AVG(CAGE ) FROM CUSTOMERS ) 例44的查询结果CNOCNAMECSEXCAGECRANKAVG_AGE50003刘杰男31注册会员2850004袁玲女29注册会员2850006张涛男33普通会员2850007王伟男35金牌会员28名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 18 页,共 28 页 - - - - - - - - - 19 索引数据插入SQL 语言中使用 INSERT 语句向数据库的表中插入或添加新的数据行。INSERT 有两种用法,一种是插入一条记录,另一种是插入多条记录。向表中插入一条记录的SQL 语句是:INSERT INTO(,.) VALUES(,.) 新增的记录将依