SQL第5章高级查询
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
10
5.1.2 JOIN关键字 JOIN关键字
语法注释: 语法注释: table_name1,table_name2为连接的基表 table_name1,table_name2为连接的基表 join_type指连接类型。JOIN分为 join_type指连接类型。JOIN分为[INNER] JOIN、 分为[INNER] JOIN、 指连接类型 LEFT [OUTER] JOIN、RIGHT [OUTER] JOIN、FULL JOIN、 JOIN、 [OUTER] JOIN、CROSS JOIN几种类型,使用不同的 JOIN、 JOIN几种类型 几种类型, 类型可以得到不同的查询结果 join_condition: join_condition:两个表之间的连接条件 searh_conditions: searh_conditions:查询条件
7ቤተ መጻሕፍቲ ባይዱ
5.1 连接查询
5.1.1 基本连接 5.1.2 JOIN关键字 关键字 5.1.3 内连接 5.1.4 外连接 5.1.5 交叉连接 5.1.6 自连接
8
5.1.2 JOIN关键字 JOIN关键字
使用JOIN关键字可以引导出多种连接方式,如内连接、 使用JOIN关键字可以引导出多种连接方式,如内连接、 关键字可以引导出多种连接方式 交叉连接、外连接、自然连接等。 交叉连接、外连接、自然连接等。 其连接条件主要通过以下方法定义两个表在查询中的关 系方式: 系方式: – 指定每个表中要用于连接的目标列,即在一个基表 指定每个表中要用于连接的目标列, 中指定外键,在另一个基表中指定与其关联的键。 中指定外键,在另一个基表中指定与其关联的键。 – 指定比较各目标列的值时要使用比较运算符。 指定比较各目标列的值时要使用比较运算符。
9
5.1.2 JOIN关键字 JOIN关键字
使用JOIN关键字连接查询的语法格式为: 使用JOIN关键字连接查询的语法格式为: 关键字连接查询的语法格式为 SELECT select_list FROM table_name1 join_type JOIN table_name2 [ON join_condition] [WHERE searh_conditions] [….]
4
5.1.1 基本连接
3、使用别名 、 显示所有产品的产品编号ProductID,产品名称 例3:显示所有产品的产品编号 显示所有产品的产品编号 产品名称 ProductName,类别编号 类别编号CateGoryID,类别名称 类别编号 , CateGoryName,使用的表为产品表 使用的表为产品表Products和类别表 使用的表为产品表 和类别表 CateGories,并分别为其命名别名 ,并分别为其命名别名. 其代码为: 其代码为 SELECT ProductID, ProductName, C.CateGoryID, CateGoryName FROM Products as P, CateGories as C WHERE P. CateGoryID= C. CateGoryID
17
5.1.3 内连接INNER JOIN…ON
2、不等值连接 即在连接条件中使用除等号外的运算符. 即在连接条件中使用除等号外的运算符. 3、自然连接 与等值连接相同,即在连接条件中使用等于运算符比较被 与等值连接相同, 连接的列,其使用选择列表指出查询结果所包含的列, 连接的列,其使用选择列表指出查询结果所包含的列,并删除连 接表中的重复列。 接表中的重复列。
SELECT 列名[,列名] 列名[,列名 列名] FROM 表1 [别名1] [INNER] JOIN 表2 [别名2] [别名 [INNER] 别名1] [别名 别名2] ON 连接条件 WHERE 查询条件 ORDER BY 排序条件
13
5.1.3 内连接INNER JOIN…ON
1、等值连接 等值连接就是在连接条件中使用等号= 等值连接就是在连接条件中使用等号=比较运算符来比 较连接列的列值, 较连接列的列值,其查询结果中列出被连接表中的所有 并且包括重复列。 列,并且包括重复列。
示例
结果 buyer_name Erin O’Melia Adam Barr Erin O’Melia Adam Barr Eva Corets
produce prod_id prod_name Apples 1 Pears 2 Oranges 3 Bananas 4 Peaches 5
16
5.1.3 内连接INNER JOIN…ON
注:如果为表指定了别名,则在语句中的所有子句 如果为表指定了别名, 都必须使用别名, 都必须使用别名,而不允许使用实际的表名
5
5.1.1 基本连接
4、多表连接 、 显示所有订单的订单编号OrderID、客户编号 例4:显示所有订单的订单编号 显示所有订单的订单编号 、客户编号CustomerID, 订购日期OrderDate,单价 产品名称 ProductName, 订购日期 ,单价UnitPrice, , 数量Quantity,使用的表为产品表Products和订单详情表 数量 ,使用的表为产品表 和订单详情表 OrderDetails,订购表 其代码为: ,订购表Orders.其代码为 其代码为 SELECT OD.OrderID, CustomerID ,ProductName, OrderDate, OD.UnitPrice, Quantity FROM OrderDetails OD ,Products P, Orders O WHERE Od. OrderID = O. OrderID and OD.productid=P.productid
注:当在SELECT后显示的列名在 当在 后显示的列名在 两个表中都存在时, 两个表中都存在时,需要对列名进 行限定, 行限定,否则将返回错误信息
3
5.1.1 基本连接
2、同等连接 、 同等连接指在基本连接的基础上使用 同等连接指在基本连接的基础上使用WHERE子句中提供连接条 使用 子句中提供连接条 件. 显示所有产品的产品编号ProductID,产品名称 例2:显示所有产品的产品编号 显示所有产品的产品编号 产品名称 ProductName, 类别名称 类别名称CateGoryName,使用的表为产品表 使用的表为产品表 Products和类别表 和类别表CateGories. 和类别表 其代码为: 其代码为 SELECT ProductID, ProductName, CateGoryName FROM Products, CateGories WHERE Products. CateGoryID= CateGories. CateGoryID
注:由于内连接严格执行连接条件,因此在执行连接查 由于内连接严格执行连接条件, 询后, 询后,要从结果集中删除在其他表中没有匹配行的所有 数据行,所以使用内连接可能会丢失信息 数据行,所以使用内连接可能会丢失信息
18
5.1.3 内连接INNER JOIN…ON
例6:显示单价小于等于 的产品的产品名称 显示单价小于等于20的产品的产品名称 显示单价小于等于 ProductName、单价 、单价UnitPrice、供应商公司名称 、 CompanyName、联系人 信息, 、联系人ContactName信息,使用的表为 信息 产品表Products和供应商表 和供应商表Suppliers. 产品表 和供应商表 select productname, unitprice, companyname, contactname from products p join suppliers s on p.supplierid=s.supplierid where unitprice<=20
SELECT OD.OrderID, CustomerID ,ProductName, OrderDate, Od.UnitPrice, Quantity FROM [Order Details] OD JOIN Products P ON OD.productid=P.productid JOIN Orders O ON Od. OrderID = O. OrderID
buyers buyer_idbuyer_name 1 Adam Barr 2 Sean Chai 3 Eva Corets 4 Erin O’Melia sales buyer_id prod_id qty 1 15 2 1 5 3 4 37 1 3 11 5 4 1003 2 prod_name qty Apples 37 Pears 15 Pears 1003 Oranges Peaches 5 11
6
练习
查询产品编号(ProductID)在20-40之间的所有产品的产品 编号(ProductID)、产品名称(ProductName)、类别名称 (CategoryName),类别描述(Description)、供应商的公司 (CompanyName)、联系人名称(ContactName)。使用的基本表 为Products、Categories、Suppliers表。
11
5.1 连接查询
5.1.1 基本连接 5.1.2 JOIN关键字 关键字 5.1.3 内连接 5.1.4 外连接 5.1.5 交叉连接 5.1.6 自连接
12
5.1.3 内连接INNER JOIN…ON
内连接使用比较运算符进行多个基表间数据的比较操作, 内连接使用比较运算符进行多个基表间数据的比较操作, 并列出这些基表中与连接条件相匹配的所有的数据行。 并列出这些基表中与连接条件相匹配的所有的数据行。 格式
4
15
5.1.3 内连接INNER JOIN…ON
SELECT buyer_name, prod_name, qty FROM buyers JOIN sales ON buyers.buyer_id = sales.buyer_id JOIN produce ON sales.prod_id = produce.prod_id
示例
sales
buyer_id prod_id qty 2 3 1 5 2 15 5 37 11 1003
结果
buyer_name buyer_id qty Adam Barr Adam Barr Erin O’Melia Eva Corets Erin O’Melia 1 1 4 3 4 15 5 37 11 1003
例5:显示所有订单的订单编号 显示所有订单的订单编号OrderID、客户编号 显示所有订单的订单编号 、 CustomerID,产品名称 ProductName, 订购日期 订购日期OrderDate,单 产品名称 , 价UnitPrice,数量 ,数量Quantity,使用的表为产品表 ,使用的表为产品表Products和订 和订 单详情表Order Details,订购表 单详情表 ,订购表Orders. 其代码为: 其代码为
14
5.1.3 内连接INNER JOIN…ON
SELECT buyer_name, sales.buyer_id, qty FROM buyers INNER JOIN sales ON buyers.buyer_id = sales.buyer_id;
buyers
buyer_name Adam Barr Sean Chai Eva Corets Erin O’Melia buyer_id 1 2 3 4 1 1 4 3
第5章 高级查询
5.1 连接查询 5.2 集合查询 5.3 子查询
1
5.1 连接查询
5.1.1 基本连接 5.1.2 JOIN关键字 关键字 5.1.3 内连接 5.1.4 外连接 5.1.5 交叉连接 5.1.6 自连接
2
5.1.1 基本连接
1、基本连接 、 基本连接指在FROM子句中使用逗号进行两个表或多个表之间的 子句中使用逗号进行两个表或多个表之间的 基本连接指在 子句中使用逗号进行两个表或 该结果集是两个连接表的行数的乘积. 连接,该结果集是两个连接表的行数的乘积 连接 该结果集是两个连接表的行数的乘积 显示所有产品的产品编号ProductID,产品名称 例1:显示所有产品的产品编号 显示所有产品的产品编号 产品名称 ProductName, 类别名称 类别名称CateGoryName,使用的表为产品表 使用的表为产品表 Products和类别表 和类别表CateGories. 和类别表 其代码为: 其代码为 SELECT ProductID, ProductName, CateGoryName FROM Products, CateGories