《MySQL数据库应用案例教程》651-5(马洁)教案 第9课 多表数据记录查询_第1页
《MySQL数据库应用案例教程》651-5(马洁)教案 第9课 多表数据记录查询_第2页
《MySQL数据库应用案例教程》651-5(马洁)教案 第9课 多表数据记录查询_第3页
《MySQL数据库应用案例教程》651-5(马洁)教案 第9课 多表数据记录查询_第4页
《MySQL数据库应用案例教程》651-5(马洁)教案 第9课 多表数据记录查询_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGE16PAGE16PAGE17PAGE17

课题多表数据记录查询课时2课时(90min)教学目标知识技能目标:(1)掌握多表连接查询的方法(2)掌握FROM子句和WHERE子句中子查询的使用方法(3)掌握使用UNION关键字合并查询结果的方法素质目标:(1)了解数据库前沿技术,紧跟时代发展(2)了解数据库在生活中的应用教学重难点教学重点:多表连接查询的方法教学难点:FROM子句和WHERE子句中子查询的使用方法,使用UNION关键字合并查询结果的方法教学方法案例分析法、问答法、讨论法、讲授法、实践法教学用具电脑、投影仪、多媒体课件、教材教学设计第1节课:→→→传授新知(38min)第2节课:→传授新知(20min)→课堂实训(15min)→课堂小结(3min)→作业布置(2min)教学过程主要教学内容及步骤设计意图第一节课课前任务【教师】布置课前任务,和学生负责人取得联系,让其提醒同学通过文旌课堂APP或其他学习软件,预习本节课要学习的知识【学生】完成课前任务通过课前任务,使学生预习本节课要学习的知识,增加学生的学习兴趣考勤(2min)【教师】使用文旌课堂APP进行签到【学生】班干部报请假人员及原因培养学生的组织纪律性,掌握学生的出勤情况问题导入(5min)【教师】提出以下问题:如何在多张数据表中进行查询?通过问题导入,引导学生主动思考,激发学生的学习兴趣传授新知(38min)【教师】通过学生的回答引入要讲的知识,讲解连接查询的相关知识8.1连接查询✈【教师】随机邀请学生回答以下问题:什么是连接查询?✈【学生】聆听、思考、回答✈【教师】总结学生的回答在关系型数据库管理系统中,通常一张表只会存储一个实体的相关信息,如果用户需要查询多张表中不同实体的数据,可以使用关键字JOIN对表执行连接查询操作,但前提条件是,这些表中必须存在具有相同意义的字段。连接查询主要包括内连接查询和外连接查询,另外还可以在连接查询中添加过滤条件,筛选符合条件的数据,这就是复合条件连接查询。8.1.1内连接查询✈【教师】组织学生扫码观看“内连接查询”视频(详见教材),让学生对基本知识有一个大致的了解内连接查询(INNERJOIN)是使用比较运算符对多个表间的某些列数据进行比较,并列出这些表中与连接条件相匹配的数据行,组合成新的记录。表之间的连接条件由表中具有相同意义的字段组成。✈【教师】通过多媒体展示“staff表结构”和“section表结构”表格,介绍相关知识为便于讲解,首先需要创建一个数据库staff,并在其中创建两个数据表staff和section,两个表的结构分别如表8-1和表8-2所示。表8-1staff表结构字段数据类型约束注释staff_idINT(10)无符号、主键、自增、非空员工IDsection_idINT(10)无符号、非空部门IDpositions_idINT(10)非空职位IDnameVARCHAR(10)非空姓名sexENUM('男','女')非空性别phone_numberCHAR(11)非空手机号moneyDECIMAL(10,2)无符号、非空,默认值0薪资entry_dateDATETIME非空入职时间表8-2section表结构字段数据类型约束注释section_idINT(10)无符号、主键、自增、非空部门IDsection_titleVARCHAR(20)非空部门名称【实例

8-1】本例首先创建数据库staff,然后参照表8-1和表8-2创建数据表staff和section,并在其中插入数据。步骤1登录MySQL后执行以下语句,创建数据库staff。CREATEDATABASEstaff;步骤2选择数据库staff,并执行以下语句创建数据表staff。CREATETABLEstaff(staff_idINT(10)UNSIGNEDNOTNULLAUTO_INCREMENT,section_idINT(10)UNSIGNEDNOTNULL,positions_idINT(10)NOTNULL,nameVARCHAR(10)NOTNULL,sexENUM('男','女')NOTNULL,phone_numberCHAR(11)NOTNULL,moneydecimal(10,2)UNSIGNEDNOTNULLDEFAULT'0.00',entry_dateDATETIMENOTNULL,PRIMARYKEY(staff_id));步骤3执行以下SQL语句,向staff表中插入数据。INSERTINTOstaff(staff_id,section_id,positions_id,name,sex,phone_number,money,entry_date)VALUES(1,'1','1','刘长生','男',,20000,'2018-04-0214:35:52'),(2,'1','2','赵霞','女',,10000,'2018-04-0314:40:52'),(3,'2','3','季庆奇','女',,15000,'2018-04-0314:43:52'),(4,'3','3','李星宇','男',,15000,'2018-04-0314:45:52'),(5,'4','3','张向阳','男',,15000,'2018-04-0314:47:24'),(6,'4','8','张旭','男',,10000,'2018-04-0314:50:52');……(详见教材)1.普通内连接查询内连接查询的语法形式为:SELECT{*|col_list}FROMtable_name1INNERJOINtable_name2ONcondition;上述语句中,condition表示连接条件。接下来通过实例具体说明内连接查询的用法。【实例8-2】在staff表和section表之间使用内连接查询,从staff表中查询staff_id(员工ID)、name(姓名)、sex(性别)和phone_number(手机号),从section表中查询section_title(部门名称)。由表8-1和表8-2的表结构可知,两个表都有相同数据类型的字段section_id,可以通过该字段建立联系。为此,首先选择数据库staff,然后执行内连接查询语句,结果如下:mysql>SELECTstaff_id,name,sex,section_title,phone_number->FROMstaffINNERJOINsection->ONstaff.section_id=section.section_id;++++++|staff_id|name|sex|section_title|phone_number|++++++|1|刘长生|男|总经办|2|赵霞|女|总经办|3|季庆奇|女|财务部|4|李星宇|男|销售部|5|张向阳|男|研发部|6|张旭|男|研发部++++++6rowsinset(0.01sec)【提示】上述SQL语句中,使用符号“.”将表名和字段名拼接起来,作用是明确指定字段所属的数据表,不会因为字段名重名而造成系统无法识别。此处,SELECT语句与前面最大的区别在于:SELECT后面指定的列分别属于两个不同的表;同时,FROM子句列出了两个表,两个表之间的关系通过INNERJOIN指定;连接条件使用ON子句给出。另外,使用WHERE子句也可以给出连接条件,以下语句将返回与前面完全相同的结果。SELECTstaff_id,name,sex,section_title,phone_numberFROMstaff,sectionWHEREstaff.section_id=section.section_id;使用WHERE子句定义连接条件简单明了,但在某些时候会影响查询性能,而使用INNERJOIN语法能够确保不会忘记连接条件。2.自连接查询内连接查询中有一种特殊的查询,称为自连接查询,它是指连接查询中涉及的两张表在物理上是同一张表,但逻辑上可以看成两张表,语法形式如下:SELECTtable_alias1.*,table_alias2.*FROMtable_nameAStable_alias1INNERJOINtable_nameAStable_alias2ONcondition;上述语句的意义是,将一张表分别命名为table_alias1和table_alias2,然后使用这两个表名进行自连接查询。【实例8-3】使用内连接查询语句,从staff表中查询薪资低于15000的员工的staff_id(员工ID)、name(姓名)和money(薪资)。首先选择数据库staff,然后执行内连接查询语句,结果如下:mysql>SELECTs1.staff_id,,s2.moneyFROMstaffASs1->INNERJOINstaffASs2ONs1.staff_id=s2.staff_idANDs2.money<15000;++++|staff_id|name|money|++++|2|赵霞|10000.00||6|张旭|10000.00|++++2rowsinset(0.00sec)此处查询的两个表是同一个表staff,为防止产生二义性,使用AS关键字为表起了别名,staff表第1次以s1为别名出现,第2次以s2为别名出现。INNERJOIN连接两个表,并按照第2个表的money值对数据进行过滤。8.1.2外连接查询✈【教师】组织学生扫码观看“外连接和复合条件连接查询”视频(详见教材),让学生对基本知识有一个大致的了解外连接查询(OUTERJOIN)是以一张表为基表,根据连接条件,与另外一张表的每一行进行匹配,如果没有匹配上,则在相关联的结果行中,另一张表的所有选择列均返回空值。外连接查询通常分为两种:左连接查询(LEFTJOIN)和右连接查询(RIGHTJOIN)。其基本语法形式如下:SELECT{*|col_list}FROMtable_name1{LEFT|RIGHT}[OUTER]JOINtable_name2ONcondition;本节以第5章创建的goods表和orders表为操作对象,讲解外连接查询的应用,在前面的操作中已经为goods表插入数据,接下来为orders表插入数据。【实例8-4】执行SQL语句,向orders表中插入数据。步骤1登录MySQL,并执行以下语句,选择db_shop数据库。USEdb_shop;步骤2执行以下语句,关闭orders表的外键约束。SETFOREIGN_KEY_CHECKS=0;【提示】对于先创建表关系,之后才插入数据的表,在其中插入数据时需要先关闭外键约束,否则会插入不成功。由于前面在创建orders表时为其设置了外键约束,此处先将其关闭,待插入数据后再开启。开启表外键约束的语句为SETFOREIGN_KEY_CHECKS=1;。步骤3执行SQL语句,向orders表中插入数据,结果如下所示。mysql>INSERTINTOorders(o_id,add_time,goods_id)->VALUES(1,'2018-04-0214:35:52',6),->(2,'2018-04-0314:40:52',1),->(3,'2018-04-0314:43:52',5),->(4,'2018-04-0314:45:52',1),->(5,'2018-04-0314:47:24',15),->(6,'2018-04-0314:50:52',4);QueryOK,6rowsaffected(0.06sec)Records:6Duplicates:0Warnings:01.左连接查询在外连接查询语句中,LEFTJOIN关键字之前的表称为左表,左连接查询会以左表为基表,与另外一张表的每一行进行匹配,如果符合连接条件,则返回两张表相对应的行;如果不符合,则只返回左表中的行,并且其对应的行为一个空值。【实例

8-5】执行左连接查询语句,查询goods表中哪些商品有订单,哪些商品没有订单。由于goods表中的id字段对应orders表中的goods_id字段,此处将这两个字段进行比较,如果goods表中的id字段在orders表中有对应的goods_id值,则返回其对应的o_id值;否则就表示该商品没有对应订单,返回空值。执行结果如下:mysql>SELECTgoods.id,,orders.o_idFROMgoods->LEFTJOINordersONgoods.id=orders.goods_id;++++|id|name|o_id|++++|4|休闲西服|6||5|果汁|3||3|水果糖|NULL||9|牛仔裤|NULL||2|牛奶糖|NULL||10|红楼梦|NULL||8|苹果|NULL||1|西游记|2||1|西游记|4||7|西瓜|NULL||6|论语|1|++++11rowsinset(0.04sec)由结果可以看出,goods表中id值为2,3,7,8,9和10的商品所对应的订单信息为空值,说明这几种商品没有客户下订单。2.右连接查询在外连接查询语句中,RIGHTJOIN关键字之后的表称为右表,右连接查询会以右表为基表,与另外一张表的每一行进行匹配,如果符合连接条件,则返回两张表相对应的行;如果不符合,则只返回右表中的行,并且其对应的行为一个空值。【实例

8-6】执行右连接查询语句,查询订单中所对应的商品哪些仍然存在,哪些已经删除。与实例8-5类似,依然将商品编号进行比较,所不同的是,此处是将orders表中的goods_id与goods表中的id字段逐行进行比较,如果在goods表中有对应的记录,则返回相应的name值,如果没有则返回空值。执行结果如下:mysql>SELECTorders.o_id,orders.add_time,FROMgoods->RIGHTJOINordersONorders.goods_id=goods.id;++++|o_id|add_time|name|++++|1|2018-04-0214:35:52|论语||2|2018-04-0314:40:52|西游记||3|2018-04-0314:43:52|果汁||4|2018-04-0314:45:52|西游记||5|2018-04-0314:47:24|NULL||6|2018-04-0314:50:52|休闲西服|++++6rowsinset(0.00sec)由结果可以看出,orders表中o_id值为5的订单所对应的商品信息为空值,说明该商品已被删除。8.1.3复合条件连接查询复合条件连接查询是通过在连接查询中添加过滤条件,以达到限制查询结果和筛选数据的目的,下面通过实例进行介绍。【实例8-7】在staff表和section表中,执行内连接查询语句,查询section表中部门名称为“总经办”的员工ID、姓名、性别和电话号码等信息。步骤1登录MySQL,并执行以下语句,选择staff数据库。USEstaff;步骤

2执行以下SQL语句,在staff表和section表中查询部门名称为“总经办”的员工ID、姓名、性别和电话号码,执行结果如下:mysql>SELECTstaff_id,name,sex,section_title,phone_number->FROMstaffINNERJOINsection->ONstaff.section_id=section.section_id->WHEREsection.section_title='总经办';++++++|staff_id|name|sex|section_title|phone_number|++++++|1|刘长生|男|总经办|2|赵霞|女|总经办++++++2rowsinset(0.00sec)可以看出,在限制了部门名称为总经办后,此处只返回了在总经办任职的员工信息。可以将该结果与实例8-2的查询结果进行比较。【实例8-8】执行左连接查询语句,查询goods表中哪些商品有订单,哪些商品没有订单,并使用商品ID号对查询结果进行排序。步骤1登录MySQL,并执行以下语句,选择db_shop数据库。USEdb_shop;步骤2执行以下SQL语句,在goods表和orders表中查询哪些商品有订单,哪些商品没有订单,并使用商品ID号对查询结果进行排序,执行结果如下:mysql>SELECTgoods.id,,orders.o_idFROMgoodsLEFTJOINorders->ONgoods.id=orders.goods_idORDERBYgoods.id;++++|id|name|o_id|++++|1|西游记|2||1|西游记|4||2|牛奶糖|NULL||3|水果糖|NULL||4|休闲西服|6||5|果汁|3||6|论语|1||7|西瓜|NULL||8|苹果|NULL||9|牛仔裤|NULL||10|红楼梦|NULL|++++11rowsinset(0.01sec)与实例8-5的查询结果进行比较,可以看出,在对商品信息进行排序后,可以更加方便地查看信息。【学生】聆听、思考、记录通过教师的讲解和演示,使学生了解连接查询的相关知识第二节课问题导入(5min)【教师】提出以下问题:什么是主查询和子查询?【学生】思考、举手回答通过问题导入,引导学生主动思考,激发学生的学习兴趣传授新知(20min)【教师】通过学生的回答引入新知,介绍子查询和合并查询结果的相关知识8.2子查询✈【教师】组织学生扫码观看“子查询”视频(详见教材),让学生对基本知识有一个大致的了解如果一个查询语句中嵌套了一个或若干个其他的查询语句,那么在整个语句中,外层查询称为主查询,内层查询称为子查询或者嵌套查询。该类查询可以基于一个表或多个表。在此类查询中,系统会先执行子查询,将子查询的结果作为主查询的过滤条件。子查询可以应用在SELECT,UPDATE和DELETE语句中,并且大多数子查询会包含在FROM子句或WHERE子句中,在WHERE子句中通常与IN,ANY,ALL和EXISTS关键字搭配使用,也可以使用条件判断符。本节主要讲解SELECT语句中的子查询。8.2.1FROM子句中的子查询FROM子句中的子查询会生成一个临时表,由于FROM子句中的每个表都必须有一个名称,因此应该为临时表取一个别名,语法形式如下:SELECT{*|col_list}FROM(SELECT*FROMtable_name)AStable_alias[WHEREcondition];上述语句中,table_alias表示表别名,下面通过实例介绍上述语句的应用。【实例8-9】执行查询语句,查询goods表中id值大于3,且num值大于10的商品的id和name值。步骤1登录MySQL,并执行以下语句,选择db_shop数据库。USEdb_shop;步骤2执行以下语句,查询goods表中id值大于3的数据记录,结果如下:mysql>SELECT*FROMgoodsWHEREid>3;+++++++|id|type|name|price|num|add_time|+++++++|4|服饰|休闲西服|800.00|10|2018-04-0413:40:40||5|饮品|果汁|2.50|70|2018-05-0513:40:40||6|书籍|论语|109.00|50|2018-01-0313:40:40||7|水果|西瓜|1.50|NULL|2018-02-0513:40:40||8|水果|苹果|3.00|100|2018-03-0513:40:40||9|服饰|牛仔裤|120.00|10|2018-05-0413:40:40||10|书籍|红楼梦|50.50|15|2018-05-0613:40:40|+++++++7rowsinset(0.04sec)步骤

3执行嵌套查询,将上述语句作为子查询,在其生成的临时表g1中查询num值大于10的商品的id和name值,查询结果如下:mysql>SELECTid,namefrom(SELECT*FROMgoodsWHEREid>3)ASg1->WHEREnum>10;+++|id|name|+++|5|果汁||6|论语||8|苹果||10|红楼梦|+++4rowsinset(0.00sec)8.2.2WHERE子句中的子查询包含在WHERE子句中的子查询,其查询结果通常是单列数据,系统执行子查询后,子查询的结果会作为主查询的筛选条件。1.使用IN关键字的子查询当子查询返回的是一个数据集合,主查询需要返回符合集合中条件的记录时,可以使用IN关键字,语法形式如下:SELECT{*|col_list}FROMtable_name1WHEREcol_name1IN(SELECTcol_name2FROMtable_name2[WHEREcondition]);上述语句中col_name1为表1中的字段,col_name2为表2中的字段。【实例8-10】执行查询语句,查询orders表中字段goods_id的所有值,然后使用子查询结果拼接WHERE条件,查询goods_id值对应的所有商品的详细信息。步骤1登录MySQL,并执行以下语句,选择db_shop数据库。USEdb_shop;步骤2执行SQL语句,查询orders表中字段goods_id的所有值,执行结果如下:mysql>SELECTgoods_idFROMorders;++|goods_id|++|1||1||4||5||6||15|++6rowsinset(0.00sec)步骤3执行SQL语句,使用上述查询结果作为子查询,在goods表中查询goods_id值对应的商品的详细信息,执行结果如下:mysql>SELECT*FROMgoodsWHEREidIN(SELECTgoods_idFROMorders);+++++++|id|type|name|price|num|add_time|+++++++|1|书籍|西游记|50.40|20|2018-01-0113:40:40||4|服饰|休闲西服|800.00|10|2018-04-0413:40:40||5|饮品|果汁|2.50|70|2018-05-0513:40:40||6|书籍|论语|109.00|50|2018-01-0313:40:40|+++++++4rowsinset(0.04sec)执行结果成功显示出订单中商品的详细信息,但由于goods_id为15的商品不在goods表中,所以没有显示出该商品的信息。另外,子查询还可以和NOTIN配合使用,下面通过实例进行介绍。【实例8-11】执行SQL语句,依然以前面的查询结果作为子查询,在goods表中查询没有订单的商品的详细信息,执行结果如下:mysql>SELECT*FROMgoodsWHEREidNOTIN(SELECTgoods_idFROMorders);+++++++|id|type|name|price|num|add_time|+++++++|2|糖类|牛奶糖|7.50|200|2018-02-0213:40:40||3|糖类|水果糖|2.50|100|2018-06-0911:20:55||7|水果|西瓜|1.50|NULL|2018-02-0513:40:40||8|水果|苹果|3.00|100|2018-03-0513:40:40||9|服饰|牛仔裤|120.00|10|2018-05-0413:40:40||10|书籍|红楼梦|50.50|15|2018-05-0613:40:40|+++++++6rowsinset(0.04sec)2.使用ANY、SOME关键字的子查询ANY和SOME是同义词,表示满足其中任一条件。该类查询会创建一个表达式对子查询的返回值列表进行比较,只要满足子查询中的任一个比较条件,就返回一个结果。其语法形式如下:SELECT{*|col_list}FROMtable_name1WHEREcol_name1<any(SELECTcol_name2FROMtable_name2[WHEREcondition]);【实例8-12】执行SQL语句,在goods表中查询2018年4月2号以后订单中的商品信息。步骤1登录MySQL,并执行以下语句,选择db_shop数据库。USEdb_shop;步骤2执行SQL语句,查询orders表中2018年4月2号以后的订单中的goods_id的所有值,结果如下:mysql>SELECTgoods_idFROMordersWHEREadd_time>'2018-04-02';++|goods_id|++|6||1||5||1||15||4|++6rowsinset(0.00sec)步骤3执行SQL语句,使用上述查询结果作为子查询,在goods表中查询goods_id值对应的商品的详细信息,结果如下:mysql>SELECT*FROMgoods->WHEREid=ANY(SELECTgoods_idFROMordersWHEREadd_time>'2018-04-02');+++++++|id|type|name|price|num|add_time|+++++++|6|书籍|论语|109.00|50|2018-01-0313:40:40||1|书籍|西游记|50.40|20|2018-01-0113:40:40||5|饮品|果汁|2.50|70|2018-05-0513:40:40||4|服饰|休闲西服|800.00|10|2018-04-0413:40:40|+++++++4rowsinset(0.00sec)【提示】由上述查询结果可以看出,使用“=ANY”与使用关键字IN的效果实际上是相同的,除“=”外,ANY关键字前面可以使用的条件判断符还有“<”“>”“<=”和“>=”,读者可根据需要进行选择。3.使用ALL关键字的子查询与ANY和SOME不同,使用关键字ALL的子查询,表示当一条记录符合子查询结果中所有的条件时,才会返回该记录。其语法形式如下:SELECT{*|col_list}FROMtable_name1WHEREcol_name1>All(SELECTcol_name2FROMtable_name2[WHERE条件]);【实例8-13】执行以下语句,查询goods表中id值比子查询结果中的最大数据还要大的记录。步骤1登录MySQL,并执行以下语句,选择db_shop数据库。USEdb_shop;步骤2执行SQL语句,查询orders表中2018年4月3号之前的订单中的goods_id的所有值,结果如下:mysql>SELECTgoods_idFROMordersWHEREadd_time<'2018-04-03';++|goods_id|++|6||4|++2rowsinset(0.00sec)【提示】为验证查询结果,此处事先将orders表中第6条记录的添加时间改为了2018-04-0114:47:24。步骤

3执行SQL语句,使用上述查询结果作为子查询,在goods表中查询goods_id值对应的商品的详细信息,结果如下:mysql>SELECT*FROMgoods->WHEREid>ALL(SELECTgoods_idFROMordersWHEREadd_time<'2018-04-03');+++++++|id|type|name|price|num|add_time|+++++++|7|水果|西瓜|1.50|NULL|2018-02-0513:40:40||8|水果|苹果|3.00|100|2018-03-0513:40:40||9|服饰|牛仔裤|120.00|10|2018-05-0413:40:40||10|书籍|红楼梦|50.50|15|2018-05-0613:40:40|+++++++4rowsinset(0.00sec)可以看出,查询结果中所有记录的id值都同时大于子查询结果中的4和6。【提示】ALL关键字之前可以使用的条件判断符有“<”“>”“<=”和“>=”,但一般不会使用“=”。4.使用EXISTS关键字的子查询使用EXISTS关键字,系统会对子查询的返回结果进行判断,如果子查询至少返回一行记录,那么EXISTS的结果为TRUE,此时主查询语句将会执行;如果子查询没有返回任何记录,那么EXISTS的结果为FALSE,此时主查询语句将不会执行。其语法形式如下:SELECT{*|col_list}FROMtable_name1WHEREEXISTS(SELECT*FROMtable_name2);【实例8-14】查询orders表中是否存在goods_id值为5的记录,如果存在,则查询goods表中id值小于5的记录。在选中数据库db_shop后,执行SQL语句,使用EXISTS关键字查询goods表中id值小于5的记录,查询结果如下:mysql>SELECT*FROMgoodsWHEREid<'5'AND->EXISTS(SELECTo_idFROMordersWHEREgoods_id='5');+++++++|id|type|name|price|num|add_time|+++++++|1|书籍|西游记|50.40|20|2018-01-0113:40:40||2|糖类|牛奶糖|7.50|200|2018-02-0213:40:40||3|糖类|水果糖|2.50|100|2018-06-0911:20:55||4|服饰|休闲西服|800.00|10|2018-04-0413:40:40|+++++++4rowsinset(0.02sec)由查询结果可知,子查询结果表明orders表中存在goods_id='5'的记录,因此EXISTS表达式返回true;主查询语句接收true之后根据查询条件id<'5'对goods表进行查询,返回4条符合条件的记录。NOTEXISTS与EXISTS使用方法相同,返回的结果相反,读者可自行尝试。5.使用条件判断符的子查询在子查询中,还可以单独使用条件判断符。其语法形式如下:SELECT{*|col_list}FROMtable_name1WHEREcol_name1operators(SELECTcol_name2FROMtable_name2);上述语句中,operators表示条件判断符。【实例8-15】查询goods表中o_id值等于3的商品的详细信息。在选中数据库db_shop后,执行SQL语句,使用条件判断符查询goods表中o_id值等于3的商品的详细信息。查询结果如下:mysql>SELECT*FROMgoods->WHEREid=(SELECTgoods_idFROMordersWHEREo_id=3);+++++++|id|type|name|price|num|add_time|+++++++|5|饮品|果汁|2.50|70|2018-05-0513:40:40|+++++++1rowinset(0.06sec)8.3合并查询结果合并查询结果就是使用UNION关键字,将多条查询语句的结果合并在一起显示。UNION有两种使用方法,一种是查询结果不重复(过滤掉重复的记录),另一种是保留所有查询结果。为便于讲解,首先创建两张表,分别为爱好音乐的学生表(music)和爱好舞蹈的学生表(dance),具体操作见实例8-16。【实例8-16】参照表8-3创建两张结构相同的表,分别命名为music和dance,之后为各个表插入数据。✈【教师】通过多媒体展示“表结构”表格,介绍相关知识表8-3表结构字段数据类型约束注释idINT(10)无符号、非空、主键、自增学生IDnameVARCHAR(20)非空学生姓名步骤1登录MySQL,执行以下SQL语句,创建数据库school。CREATEDATABASEschool;步骤2执行以下SQL语句,选择数据库school。USEschool;步骤

3执行以下SQL语句,在数据库school中创建数据表music;并按照同样方法创建与music表结构相同的dance表。CREATETABLEmusic(idINT(10)UNSIGNEDNOTNULLAUTO_INCREMENT,nameVARCHAR(20)NOTNULL,PRIMARYKEY(id));……(详见教材)8.3.1使用UNION关键字的合并操作单独使用UNION关键字的合并操作,查询结果集会合并在一起,并将重复的记录删除。其语法形式如下:SELECT{*|col_list}FROMtable_name1UNIONSELECT{*|col_list}FROMtable_name2;下面通过实例具体说明UNION关键字的使用。【实例8-17】执行SELECT语句,在数据库school中,使用UNION关键字合并

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论