《第5章高级查询.ppt》由会员分享,可在线阅读,更多相关《第5章高级查询.ppt(80页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第5章高级查询 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望5.1 5.1 连接查询连接查询连接查询连接查询5.1.1 基本基本连接接5.1.2 JOIN关关键字字 5.1.3 内内连接接5.1.4 外外连接接5.1.5 交叉交叉连接接5.1.6 自自连接接25.1.1 5.1.1 基本连接基本连接基本连接基本连接1、基本、基本连接接基本基本连接指在接指在FROM子句中子句中使用逗号使用逗号进行两个表或行两个表或多个多个表之表之间的的连接接,该结果集是两个果集是
2、两个连接表的行数的乘接表的行数的乘积.35.1.15.1.1基本连接基本连接基本连接基本连接4结果结果buyer_namebuyer_nameAdam BarrAdam BarrAdam BarrAdam Barrqtyqty1553711 Adam Barr1003 Sean Chai15 Sean Chai5 Sean Chai37 Sean Chai11 Sean Chai1003 Eva Corets15.salesbuyer_idbuyer_id prod_idprod_idqtyqty114323151553711421003buyersbuyer_idbuyer_id1234bu
3、yer_namebuyer_nameAdam BarrSean ChaiEva CoretsErin OMeliaSELECT buyer_name,qtyFROM buyers,sales示例示例5.1.1 5.1.1 基本连接基本连接基本连接基本连接例例1:显示所有示所有产品的品的产品品编号号ProductID,产品名称品名称 ProductName,类别名称名称CateGoryName,使用的表使用的表为产品表品表Products和和类别表表CateGories.其代其代码为:SELECT ProductID,ProductName,CateGoryNameFROM Products,C
4、ateGories5注:当在注:当在注:当在注:当在SELECTSELECT后显示的列名在后显示的列名在后显示的列名在后显示的列名在两个表中都存在时,需要对列名进两个表中都存在时,需要对列名进两个表中都存在时,需要对列名进两个表中都存在时,需要对列名进行限定,否则将返回错误信息行限定,否则将返回错误信息行限定,否则将返回错误信息行限定,否则将返回错误信息5.1.1 5.1.1 基本连接基本连接基本连接基本连接2、同等、同等连接接同等同等连接指在基本接指在基本连接的基接的基础上上使用使用WHERE子句中子句中提供提供连接条件接条件.65.1.1 5.1.1 基本连接基本连接基本连接基本连接7sa
5、lesbuyer_idbuyer_id prod_idprod_id qtyqty114323151553711421003buyersbuyer_namebuyer_nameAdam BarrSean ChaiEva CoretsErin OMeliabuyer_idbuyer_id1234结果结果buyer_namebuyer_nameAdam BarrAdam BarrErin OMeliaEva Coretsbuyer_idbuyer_id qtyqty11431553711Erin OMelia41003SELECT buyer_name,sales.buyer_id,qtyFROM
6、 buyers,salesWHERE buyers.buyer_id=sales.buyer_id示例示例5.1.1 5.1.1 基本连接基本连接基本连接基本连接例例2:显示所有示所有产品的品的产品品编号号ProductID,产品名称品名称 ProductName,类别名称名称CateGoryName,使用的表使用的表为产品表品表Products和和类别表表CateGories.其代其代码为:SELECT ProductID,ProductName,CateGoryNameFROM Products,CateGoriesWHERE Products.CateGoryID=CateGories.
7、CateGoryID85.1.1 5.1.1 基本连接基本连接基本连接基本连接3、使用、使用别名名例例3:显示所有示所有产品的品的产品品编号号ProductID,产品名称品名称 ProductName,类别编号号CateGoryID,类别名称名称CateGoryName,使用的表使用的表为产品表品表Products和和类别表表CateGories,并分,并分别为其命名其命名别名名.其代其代码为:SELECT ProductID,ProductName,C.CateGoryID,CateGoryNameFROM Products as P,CateGories as CWHERE P.CateG
8、oryID=C.CateGoryID9注:如果为表指定了别名,则在语句中的所有子句注:如果为表指定了别名,则在语句中的所有子句注:如果为表指定了别名,则在语句中的所有子句注:如果为表指定了别名,则在语句中的所有子句都必须使用别名,而不允许使用实际的表名都必须使用别名,而不允许使用实际的表名都必须使用别名,而不允许使用实际的表名都必须使用别名,而不允许使用实际的表名5.1.1 5.1.1 基本连接基本连接基本连接基本连接4、多表、多表连接接例例4:显示所有示所有订单的的订单编号号OrderID、客、客户编号号CustomerID,产品名称品名称 ProductName,订购日期日期OrderDa
9、te,单价价UnitPrice,数量数量Quantity,使用的表,使用的表为产品表品表Products和和订单详情表情表OrderDetails,订购表表Orders.其代其代码为:SELECT OD.OrderID,CustomerID,ProductName,OrderDate,OD.UnitPrice,QuantityFROM OrderDetails OD,Products P,Orders OWHERE Od.OrderID=O.OrderID and OD.productid=P.productid10练习练习练习练习查询产品编号(ProductID)在20-40之间的所有产品的
10、产品编号(ProductID)、产品名称(ProductName)、类别名称(CategoryName),类别描述(Description)、供应商的公司(CompanyName)、联系人名称(ContactName)。使用的基本表为Products、Categories、Suppliers表。115.1 5.1 连接查询连接查询连接查询连接查询5.1.1 基本基本连接接5.1.2 JOIN关关键字字 5.1.3 内内连接接5.1.4 外外连接接5.1.5 交叉交叉连接接5.1.6 自自连接接125.1.2 JOIN5.1.2 JOIN关键字关键字关键字关键字使用使用使用使用JOINJOIN关
11、关关关键键字可以引字可以引字可以引字可以引导导出多种出多种出多种出多种连连接方式,如内接方式,如内接方式,如内接方式,如内连连接、接、接、接、交叉交叉交叉交叉连连接、外接、外接、外接、外连连接、自然接、自然接、自然接、自然连连接等。接等。接等。接等。其其其其连连接条件主要通接条件主要通接条件主要通接条件主要通过过以下方法定以下方法定以下方法定以下方法定义义两个表在两个表在两个表在两个表在查询查询中的关中的关中的关中的关系方式:系方式:系方式:系方式:指定每个表中要指定每个表中要指定每个表中要指定每个表中要用于用于用于用于连连接的目接的目接的目接的目标标列列列列,即在一个基表,即在一个基表,即在
12、一个基表,即在一个基表中指定外中指定外中指定外中指定外键键,在另一个基表中指定与其关,在另一个基表中指定与其关,在另一个基表中指定与其关,在另一个基表中指定与其关联联的的的的键键。指定比指定比指定比指定比较较各目各目各目各目标标列的列的列的列的值时值时要使用比要使用比要使用比要使用比较较运算符。运算符。运算符。运算符。135.1.2 JOIN5.1.2 JOIN关键字关键字关键字关键字使用使用使用使用JOINJOIN关关关关键键字字字字连连接接接接查询查询的的的的语语法格式法格式法格式法格式为为:SELECTSELECT select_list select_listFROMFROM tabl
13、e_name1 table_name1 join_typejoin_type JOINJOIN table_name2 table_name2 ONON join_condition join_condition WHEREWHERE searh_conditions searh_conditions.145.1.2 JOIN5.1.2 JOIN关键字关键字关键字关键字语语法注法注法注法注释释:n ntable_name1table_name1,table_name2table_name2为连为连接的基表接的基表接的基表接的基表n njoin_typejoin_type指指指指连连接接接接类类
14、型。型。型。型。JOINJOIN分分分分为为INNER JOININNER JOIN、LEFT OUTER JOINLEFT OUTER JOIN、RIGHT OUTER JOINRIGHT OUTER JOIN、FULL FULL OUTER JOINOUTER JOIN、CROSS JOINCROSS JOIN几种几种几种几种类类型,使用不同的型,使用不同的型,使用不同的型,使用不同的类类型可以得到不同的型可以得到不同的型可以得到不同的型可以得到不同的查询结查询结果果果果n njoin_conditionjoin_condition:两个表之:两个表之:两个表之:两个表之间间的的的的连连接
15、条件接条件接条件接条件n nsearh_conditionssearh_conditions:查询查询条件条件条件条件155.1 5.1 连接查询连接查询连接查询连接查询5.1.1 基本基本连接接5.1.2 JOIN关关键字字 5.1.3 内内连接接5.1.4 外外连接接5.1.5 交叉交叉连接接5.1.6 自自连接接165.1.3 5.1.3 内连接内连接INNER JOINONINNER JOINON内内内内连连接使用比接使用比接使用比接使用比较较运算符运算符运算符运算符进进行多个基表行多个基表行多个基表行多个基表间间数据的比数据的比数据的比数据的比较较操作,操作,操作,操作,并列出并列出
16、并列出并列出这这些基表中与些基表中与些基表中与些基表中与连连接条件相匹配的所有的数据行。接条件相匹配的所有的数据行。接条件相匹配的所有的数据行。接条件相匹配的所有的数据行。格式格式格式格式 SELECT SELECT 列名列名列名列名,列名列名列名列名 FROMFROM 表表表表1 1 别别名名名名1 1 INNERINNER JOINJOIN 表表表表2 2 别别名名名名2 2 ONON 连连接条件接条件接条件接条件 WHERE WHERE 查询查询条件条件条件条件 ORDER BYORDER BY 排序条件排序条件排序条件排序条件175.1.3 5.1.3 内连接内连接INNER JOIN
17、ONINNER JOINON1 1、等、等、等、等值连值连接接接接等等等等值连值连接就是在接就是在接就是在接就是在连连接条件中使用等号接条件中使用等号接条件中使用等号接条件中使用等号=比比比比较较运算符来比运算符来比运算符来比运算符来比较连较连接列的列接列的列接列的列接列的列值值,其,其,其,其查询结查询结果中列出被果中列出被果中列出被果中列出被连连接表中的所有接表中的所有接表中的所有接表中的所有列,并且包括重复列。列,并且包括重复列。列,并且包括重复列。列,并且包括重复列。185.1.3 5.1.3 内连接内连接INNER JOINONINNER JOINON19salesbuyer_idb
18、uyer_id prod_idprod_id qtyqty114323151553711421003buyersbuyer_namebuyer_nameAdam BarrSean ChaiEva CoretsErin OMeliabuyer_idbuyer_id1234结果结果buyer_namebuyer_nameAdam BarrAdam BarrErin OMeliaEva Coretsbuyer_idbuyer_id qtyqty11431553711Erin OMelia41003SELECT buyer_name,sales.buyer_id,qtyFROM buyers INNE
19、R JOIN salesON buyers.buyer_id=sales.buyer_id示例示例5.1.3 5.1.3 内连接内连接INNER JOINONINNER JOINON20produceprod_idprod_id prod_nameprod_name1234ApplesPearsOrangesBananas5Peachesbuyer_idbuyer_id1234buyer_namebuyer_nameAdam BarrSean ChaiEva CoretsErin OMeliabuyersbuyer_idbuyer_id1143prod_idprod_id231542qtyqt
20、y15537111003sales结果结果buyer_namebuyer_nameErin OMeliaAdam BarrErin OMeliaAdam BarrEva Coretsprod_nameprod_nameApplesPearsPearsOrangesPeachesqtyqty37151003511SELECT buyer_name,prod_name,qtyFROM buyers JOIN salesON buyers.buyer_id=sales.buyer_idJOIN produceON sales.prod_id=produce.prod_id示例示例5.1.3 5.1.
21、3 内连接内连接INNER JOINONINNER JOINON例5:显示所有示所有订单的的订单编号号OrderID、客、客户编号号CustomerID,产品名称品名称 ProductName,订购日期日期OrderDate,单价价UnitPrice,数量,数量Quantity,使用的表,使用的表为产品表品表Products和和订单详情表情表Order Details,订购表表Orders.其代其代码为:SELECT OD.OrderID,CustomerID,ProductName,OrderDate,UnitPrice,QuantityFROM Order Details OD JOIN
22、Products PON OD.productid=P.productidJOIN Orders O ON Od.OrderID=O.OrderID 215.1.3 5.1.3 内连接内连接INNER JOINONINNER JOINON2 2、不等、不等、不等、不等值连值连接接接接 即在即在即在即在连连接条件中使用除等号外的运算符接条件中使用除等号外的运算符接条件中使用除等号外的运算符接条件中使用除等号外的运算符.3 3、自然、自然、自然、自然连连接接接接与等与等与等与等值连值连接相同,即在接相同,即在接相同,即在接相同,即在连连接条件中使用等于运算符比接条件中使用等于运算符比接条件中使用等
23、于运算符比接条件中使用等于运算符比较较被被被被连连接的列接的列接的列接的列,其使用其使用其使用其使用选择选择列表指出列表指出列表指出列表指出查询结查询结果所包含的列果所包含的列果所包含的列果所包含的列,并并并并删删除除除除连连接表中的重复列。接表中的重复列。接表中的重复列。接表中的重复列。22注:由于内连接严格执行连接条件,因此在执行连接查询注:由于内连接严格执行连接条件,因此在执行连接查询注:由于内连接严格执行连接条件,因此在执行连接查询注:由于内连接严格执行连接条件,因此在执行连接查询后,要从结果集中删除在其他表中没有匹配行的所有数据后,要从结果集中删除在其他表中没有匹配行的所有数据后,要
24、从结果集中删除在其他表中没有匹配行的所有数据后,要从结果集中删除在其他表中没有匹配行的所有数据行,行,行,行,所以使用内连接可能会丢失信息所以使用内连接可能会丢失信息所以使用内连接可能会丢失信息所以使用内连接可能会丢失信息5.1.3 5.1.3 内连接内连接INNER JOINONINNER JOINON例6:显示示单价小于等于价小于等于20的的产品的品的产品名称品名称ProductName、单价价UnitPrice、供、供应商公司名称商公司名称CompanyName、联系人系人ContactName信息,使用的表信息,使用的表为产品表品表Products和供和供应商表商表Suppliers.
25、SELECT productname,unitprice,companyname,contactnameFROM products p JOIN suppliers sON p.supplierid=s.supplierid WHERE unitprice b.buyer_idGOsales bbuyer_idbuyer_id prod_idprod_id qtyqty114323151553711421003sales abuyer_idbuyer_id prod_idprod_id qtyqty114323151553711421003结果结果示例示例5.1.6 5.1.6 自连接自连接自
26、连接自连接例例11:查询产品表中同一供品表中同一供应商供商供应的的产品信息品信息SELECT p1.ProductID,p1.supplierID,p2.ProductID FROM Products p1 INNER JOIN Products p2 ON p1.supplierID=p2.supplierIDWHERE p1.productidp2.productid 41课堂练习课堂练习课堂练习课堂练习以下操作以下操作请使用使用PUBS数据数据库中的数据表中的数据表进行操作:行操作:1、查询出版社出版社编号(号(pub_id)是)是0877的的书籍的名籍的名称(称(title)、价格()
27、、价格(price)、出版日期()、出版日期(pubdate)、作)、作者姓名(者姓名(au_fname+au_lname)、作者次序()、作者次序(au_ord)。)。使用的基本表使用的基本表为titleauthor、titles、authors表表.2、使用左、使用左连接接查询出所有出所有书籍的籍的书名(名(title),类型型(type),书籍的作者籍的作者编号(号(au_id),作者次序(作者次序(au_ord)。)。42小小小小结结结结 掌握掌握掌握掌握 1、掌握内、掌握内连接接查询;2、掌握外、掌握外连接接查询 了解了解了解了解 1、了解交叉了解交叉查询和自和自连接。接。43445
28、.2 5.2 集合操作集合操作集合操作集合操作5.2.1 5.2.1 UNIONUNION运算符运算符运算符运算符5.2.2 INTERSECT5.2.2 INTERSECT运算符运算符运算符运算符5.2.3 EXCEPT5.2.3 EXCEPT运算符运算符运算符运算符455.2.1 UNION5.2.1 UNION运算符运算符运算符运算符功能功能功能功能:UNION:UNION运算符可以将多个运算符可以将多个运算符可以将多个运算符可以将多个结结果集求并集并形成一个果集求并集并形成一个果集求并集并形成一个果集求并集并形成一个结结果集果集果集果集.要要要要求源表的列求源表的列求源表的列求源表的列
29、类类型及个数必型及个数必型及个数必型及个数必须须一致一致一致一致语语法格式法格式法格式法格式:select_statement1select_statement1UNIONUNION ALL select_statement2 ALL select_statement2说说明明明明:1 1、ALLALL选项选项表示将所有行合并到表示将所有行合并到表示将所有行合并到表示将所有行合并到结结果集中果集中果集中果集中,即即即即保留重复行保留重复行保留重复行保留重复行,当不当不当不当不选择选择此此此此项时项时,则结则结果集中的重复行只保留一行果集中的重复行只保留一行果集中的重复行只保留一行果集中的重复行
30、只保留一行2 2、查询结查询结果集中的列果集中的列果集中的列果集中的列标题为标题为第一个第一个第一个第一个查询语查询语句的列句的列句的列句的列标题标题。3 3、SELECTSELECT列表中要有相同的列列表中要有相同的列列表中要有相同的列列表中要有相同的列12465.2.1 UNION5.2.1 UNION运算符运算符运算符运算符例例例例1 1:查询查询来源于美国的供来源于美国的供来源于美国的供来源于美国的供应应商表商表商表商表SuppliersSuppliers和和和和经销经销商表商表商表商表CustomersCustomers的公的公的公的公司名称司名称司名称司名称CompanyNameC
31、ompanyName、联联系人系人系人系人ContactNameContactName 、联联系人系人系人系人职务职务ContactTitleContactTitle,地地地地址址址址AddressAddress、城市、城市、城市、城市CityCity 。SELECT SELECT CompanyNameCompanyName,ContactNameContactName,ContactTitleContactTitle,AddressAddress,CityCityFROM Suppliers WHERE Country=USAFROM Suppliers WHERE Country=USA
32、UNIONUNIONSELECT SELECT CompanyNameCompanyName,ContactNameContactName,ContactTitleContactTitle,AddressAddress,CityCityFROM Customers WHERE Country=USAFROM Customers WHERE Country=USA475.2.1 UNION5.2.1 UNION运算符运算符运算符运算符例例例例2 2:查询员查询员工表工表工表工表employeesemployees来源于美国的来源于美国的来源于美国的来源于美国的员员工的的姓工的的姓工的的姓工的的姓
33、名,名,名,名,职务职务TitleOfCourtesyTitleOfCourtesy ,城市,城市,城市,城市CityCity和和和和经销经销商表商表商表商表CustomersCustomers中来源于美国的中来源于美国的中来源于美国的中来源于美国的联联系人系人系人系人ContactName ContactName、联联系人系人系人系人职务职务ContactTitleContactTitle、城市、城市、城市、城市City City。SELECT firstname+lastname as SELECT firstname+lastname as name,name,TitleOfCourte
34、syTitleOfCourtesy,City,CityFROM employees WHERE Country=USAFROM employees WHERE Country=USAUNIONUNIONSELECT ContactName,ContactTitle,CitySELECT ContactName,ContactTitle,CityFROM Customers WHERE Country=USAFROM Customers WHERE Country=USA485.2.1 UNION5.2.1 UNION运算符运算符运算符运算符例例例例3 3:查询员查询员工表工表工表工表emplo
35、yeesemployees来源于美国或者雇佣日期来源于美国或者雇佣日期来源于美国或者雇佣日期来源于美国或者雇佣日期在在在在19941994年以前的年以前的年以前的年以前的员员工的工的工的工的员员工工工工编编号及姓名号及姓名号及姓名号及姓名SELECT EmployeeID,LastName,FirstName SELECT EmployeeID,LastName,FirstName FROM FROM employeeemployees WHERE Country=USAs WHERE Country=USAUNIONUNIONSELECT EmployeeID,LastName,FirstN
36、ameSELECT EmployeeID,LastName,FirstName FROM FROM employeeemployees WHERE hiredate1994-1-1s WHERE hiredate1994-1-1495.2 5.2 集合操作集合操作集合操作集合操作5.2.1 UNION5.2.1 UNION运算符运算符运算符运算符5.2.2 5.2.2 INTERSECTINTERSECT运算符运算符运算符运算符5.2.3 EXCEPT5.2.3 EXCEPT运算符运算符运算符运算符5012功能:INTERSECT运算符可以将形成的两个结果集求交集.要求源表的列类型及个数必须一
37、致语法格式:select_statement1INTERSECT select_statement2说明:1、查询结果集中的列标题为第一个查询语句的列标题。2、INTERSECT运算返回两个结果集中相同的行5.2.2 INTERSECT5.2.2 INTERSECT运算符运算符运算符运算符515.2.2 INTERSECT5.2.2 INTERSECT运算符运算符运算符运算符例4:查询员工表employees来源于美国并且雇佣日期在1994年以前的员工的员工编号及姓名SELECT EmployeeID,LastName,FirstName FROM employees WHERE Countr
38、y=USAINTERSECTSELECT EmployeeID,LastName,FirstName FROM employees WHERE hiredate1994-1-1525.2.2 INTERSECT5.2.2 INTERSECT运算符运算符运算符运算符例5:查询ORDERDETAILS表中被订购的产品的产品编号都有哪些?SELECT productidSELECT productidFROM ProductsFROM ProductsINTERSECTINTERSECTSELECT productidSELECT productidFROM order detailsFROM or
39、der details535.2 5.2 集合操作集合操作集合操作集合操作5.2.1 UNION5.2.1 UNION运算符运算符运算符运算符5.2.2 INTERSECT5.2.2 INTERSECT运算符运算符运算符运算符5.2.3 EXCEPT5.2.3 EXCEPT运算符运算符运算符运算符545.2.3 EXCEPT5.2.3 EXCEPT运算符运算符运算符运算符功能:EXCEPT运算符可以找到两个给定的集合之间的差异,即从其左边查询结果中去除右边查询结果中存在的行。语法格式:select_statement1EXCEPT select_statement212555.2.3 EXCE
40、PT5.2.3 EXCEPT运算符运算符运算符运算符例6:查询PRODUCTS表中未被订购过的产品的产品编号。SELECT productidFROM ProductsEXCEPTSELECT productidFROM order details565.2.3 EXCEPT5.2.3 EXCEPT运算符运算符运算符运算符例7:查询PRODUCTS表单价小于等于20并且不是未打折商品的产品编号。SELECT productidFROM ProductsWHERE unitprice,=,=,)等.例1:查询出EMPLOYEES表中与员工编号为5号员工是同一个城市的员工的编号、姓名、城市.分析分
41、析查询条件:CITY=(5=(5号员工所在城市号员工所在城市)显示的结果:employeeid,ename,city数据来源:EMPLOYEES表语句语句SELECT employeeid,firstname+lastname ename,cityFROM EMPLOYEESWHERE CITY=(SELECT CITY FROM EMPLOYEESWHERE employeeid=5)子查询显示结果:city子查询数据来源:EMPLOYEES表子查询条件:员工编号为5615.3.1 5.3.1 单行子查询单行子查询例例例例2:2:查询查询出出出出EMPLOYEESEMPLOYEES表中与表中
42、与表中与表中与员员工工工工编编号号号号为为9 9号的号的号的号的员员工工工工雇佣雇佣雇佣雇佣时间时间是同一年的所有是同一年的所有是同一年的所有是同一年的所有员员工的工的工的工的编编号、姓名、雇佣日期号、姓名、雇佣日期号、姓名、雇佣日期号、姓名、雇佣日期.分析分析查询条件:year(雇佣时间)=(子查询)显示的结果:employeeid,ename,hiredate数据来源:EMPLOYEES表语句语句SELECT employeeid,firstname+lastname ename,hiredateFROM EMPLOYEESWHERE year(HireDate)=(SELECT year
43、(HireDate)FROM EMPLOYEESWHERE employeeid=9)子查询显示结果:year(雇佣时间)子查询数据来源:EMPLOYEES表子查询条件:EMPLOYEEID=9625.3.1 5.3.1 单行子查询单行子查询例3:查询出供应商表SUPPLIERS中与经销商表CUSTOMERS中客户编号为AROUT 同在一个城市的所有供应商的信息.分析分析查询条件:CITY=(子查询)显示的结果:供应商的所有信息*数据来源:SUPPLIERS表语句语句SELECT*FROM SUPPLIERSWHERE CITY=(SELECT CITY FROM CUSTOMERSWHERE
44、 customerid=AROUT)子查询显示的列:CITY子查询的数据来源:CUSTOMERS子查询条件:customerid=AROUT63练习练习练习练习请查询出PRODUCTS表中高于所有产品平均价格的产品信息.645.3 5.3 子查询子查询5.3.1 单行子行子查询 5.3.2 多行子多行子查询 5.3.3 其他子其他子查询655.3.2 5.3.2 多行子查询多行子查询多行子查询指返回单列多行列多行数据的子查询.当在WHERE中使用多行子查询时,必须使用多行比较符(IN、ALL、ANY)1、使用IN操作符例4:查询出产品表PRODUCTS中其供应商所在城市为London 的所有产
45、品的信息.分析分析查询条件:SupplierId ININ(子查询)显示的结果:产品的所有信息*数据来源:PRODUCTS表语句语句SELECT*FROM PRODUCTSWHERE SupplierID IN(SELECT supplierid FROM suppliersWHERE city=London)子查询显示的列:SupplierId子查询的数据来源:SUPPLIERS子查询条件:CITY=London665.3.2 5.3.2 多行子查询多行子查询例例例例5:5:查询经销查询经销商表商表商表商表CUSTOMERSCUSTOMERS中其中其中其中其订购订购数量在数量在数量在数量在5
46、050个以上个以上个以上个以上的所有的所有的所有的所有经销经销商的信息商的信息商的信息商的信息.分析分析查询条件:CustomerId ININ(子查询)显示的结果:经销商的所有信息*数据来源:CUSTOMERS表语句语句SELECT*FROM CUSTOMERSWHERE CustomerID IN(SELECT Customerid FROM Orders O join Order Details OD on O.orderID=OD.orderIDWHERE OD.quantity=50)子查询显示的列:CustomerId子查询的数据来源:ORDERS,ORDER DETAILS子查询
47、条件:quantity=5067练习练习练习练习1、查询PUBS数据库中的employee表中其出版社所在国家为USA的所有出版社员工的信息。2、查询PUBS数据库中的SALES表中书籍出版时间pubdate在1991-10-1以后的书籍的销售信息。685.3.2 5.3.2 多行子查询多行子查询2、ANY|SOME运算符ANY|SOME操作符必操作符必须与与单行操作符行操作符结合合使用,并且返回行只要匹配于子查询的任一结果即可。例6:查询产品表products中其单价大于价大于任何一个任何一个类别编号为3的产品的产品编号、名称、单价.分析分析查询条件:UNITPRICEANY(子查询)显示的
48、结果:产品编号,名称,单价数据来源:PRODUCTS表select productid,productname,unitprice from productswhere unitprice any(select unitprice from products where CateGoryID=3)语句语句子查询显示的列:UNITPRICE子查询的数据来源:PRODUCTS子查询条件:类别编号为3等价于查询单价大于等价于查询单价大于类别类别编号为编号为3的产品中最低价的产品中最低价格格的产品信息的产品信息695.3.2 5.3.2 多行子查询多行子查询例7:查询产品表products中其单价小于
49、任何一个价小于任何一个在在订单详情表中情表中订购数量小于数量小于5的的产品的品的单价价的产品编号,名称,单价.分析分析查询条件:UNITPRICEANY(子查询)显示的结果:产品编号,名称,单价数据来源:PRODUCTS表select productid,productname,unitprice from productswhere unitprice any(select unitprice from order details where quantity5)语句语句子查询显示的列:UNITPRICE子查询的数据来源:order details子查询条件:订购数量ALL(子查询)显示的结
50、果:产品编号,名称,单价数据来源:PRODUCTS表select productid,productname,unitprice from productswhere unitprice ALL(select unitprice from products where CateGoryID=3)语句语句子查询显示的列:UNITPRICE子查询的数据来源:PRODUCTS子查询条件:类别编号为3等价于查询单价大于等价于查询单价大于类别类别编号为编号为3的产品中的产品中最高最高价价格格的产品信息的产品信息715.3.2 5.3.2 多行子查询多行子查询例9:查询产品表products中其单价小于价