前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >实验3.3 连接查询

实验3.3 连接查询

作者头像
week
发布2018-08-27 10:21:21
6340
发布2018-08-27 10:21:21
举报
文章被收录于专栏:用户画像用户画像

一、实验目的

掌握使用连接的方法从多个表中查询数据。理解内连接、外连接(包括左外连接、右外连接和全外连接)、自身连接的概念和使用。要求学生熟练掌握在FROM子句和在WHERE子句中指定连接条件的这两种方法。

二、实验原理

在查询语句的FROM子句中用以下形式实现各种连接操作:

l   FROM  表1   [INNER]  JOIN  表2   ON  表1.列名=表2.列名  (实现内连接)

l   FROM  表1  LEFT   [OUTER] JOIN  表2   ON  表1.列名=表2.列名  (实现左外连接)

l   FROM  表1  RIGHT   [OUTER] JOIN  表2   ON  表1.列名=表2.列名  (实现右外连接)

l   FROM  表1 FULL  [OUTER]  JOIN  表2   ON  表1.列名=表2.列名  (实现全外连接)

l   FROM  表1  AS 别名1  JOIN  表1  AS 别名2   ON  别名1.列名=别名2.列名  (实现自身连接)

在查询语句的WHERE子句中用以下形式实现各种连接操作:

l  FROM 表1,表2  WHERE 表1.列名=表2.列名  (实现内连接)

l  FROM 表1,表2  WHERE 表1.列名*=表2.列名  (实现左外连接)

l  FROM 表1,表2  WHERE 表1.列名=*表2.列名  (实现右外连接)

l  FROM 表1  AS 别名1 ,表1  AS 别名2  WHERE 别名1.列名=别名2.列名  (实现自身连接)

三、实验设备

安装有SQL SERVER 2000的计算机。

四、实验示例

1、检索product 表和sale_item表中数量大于2的相同产品的产品编号、产品名称、数量、单价。

select a.prod_id,a.qty,a.unit_price,b.prod_name

from sale_item as a inner join product asb   /*如果改成left join/right join 试分析结果*/

on (a.prod_id=b.pro_id) and a.qty>2

order by a.prod_id

2、查找出employee表中住址相同的员工的姓名、性别、职称、薪水、住址。

select a.emp_name,a.sex,a.title,a.salary,a.addr,b.emp_name,b.sex,b.title,b.salary,b.addr

from employee as a inner join employee asb

on (a.emp_no!=b.emp_no) and(a.emp_name>b.emp_name) and (a.addr=b.addr)

3、查找商品名称为14寸显示器商品的销售情况,显示该商品的编号、销售数量、单价和金额

selecta.prod_id,qty,unit_price,unit_price*qty totprice

from sale_item a,product b

where a.prod_id=b.prod_id andprod_name='14寸显示器'

五、实验内容

1、查找出employee表中部门相同且住址相同的女员工的姓名、性别、职称、薪水、住址。

代码语言:javascript
复制
  select distinct a.emp_name,a.sex,a.dept,a.title,a.salary,a.addr
  from employeea,employeeb 
  where a.dept=b.deptand a.sex='女'and a.addr=b.addrand a.emp_no!=b.emp_no

2、检索product 表和sale_item表中相同产品的产品编号、产品名称、数量、单价。

代码语言:javascript
复制
select distinctb.prod_id,a.prod_name,b.qty,b.unit_price
from producta,sale_itemb
where a.prod_id=b.prod_id
代码语言:javascript
复制
SELECT     dbo.product.prod_id,dbo.product.prod_name, dbo.sale_item.qty, dbo.sale_item.unit_price
FROM         dbo.product INNER JOIN
                      dbo.sale_item ONdbo.product.prod_id = dbo.sale_item.prod_id

3、检索product 表和sale_item表中单价高于2400元的相同产品的产品编号、产品名称、数量、单价。

代码语言:javascript
复制
select distinct a.prod_id,a.prod_name,b.qty,b.unit_price
from producta,sale_itemb
where a.prod_id=b.prod_idand unit_price>2400 
代码语言:javascript
复制
SELECT    dbo.product.prod_id, dbo.product.prod_name, dbo.sale_item.qty,dbo.sale_item.unit_price
FROM         dbo.productINNER JOIN
                     dbo.sale_item ON dbo.product.prod_id = dbo.sale_item.prod_id
WHERE    (dbo.sale_item.unit_price > 2400)

4、查询在每张订单中订购金额超过24000元的客户名及其地址。

代码语言:javascript
复制
select a.cust_name,a.addr,b.tot_amt
from customera,salesb
where a.cust_id=b.cust_idand b.tot_amt>24000
代码语言:javascript
复制
SELECT    dbo.customer.cust_name, dbo.sales.tot_amt
FROM         dbo.customerINNER JOIN
                     dbo.sales ON dbo.customer.cust_id = dbo.sales.cust_id
WHERE     (dbo.sales.tot_amt> 24000)

5、查找有销售记录的客户编号、名称和订单总额

代码语言:javascript
复制
select a.cust_id,a.cust_name,sum(tot_amt)订单总额
from customera,salesb
where a.cust_id= b.cust_id
group bya.cust_id,a.cust_name
代码语言:javascript
复制
SELECT    dbo.customer.cust_id, dbo.sales.tot_amt, dbo.customer.cust_name
FROM         dbo.customerINNER JOIN
                     dbo.sales ON dbo.customer.cust_id = dbo.sales.cust_id

6、每位客户订购的每种产品的总数量及平均单价,并按客户号,产品号从小到大排列。      

代码语言:javascript
复制
select prod_id,sum(qty)as 总数量,avg(unit_price)as 平均单价
from sale_item,sales
where sale_item.order_no=sales.order_no
group byprod_id
order by prod_id asc
代码语言:javascript
复制
SELECT     TOP (100) PERCENTdbo.sale_item.qty, dbo.sale_item.prod_id, dbo.sales.cust_id,AVG(dbo.sale_item.unit_price) AS Expr1
FROM         dbo.sale_itemINNER JOIN
                     dbo.sales ON dbo.sale_item.order_no = dbo.sales.order_no
GROUP BY dbo.sale_item.qty, dbo.sale_item.prod_id,dbo.sales.cust_id
ORDER BY dbo.sales.cust_id, dbo.sale_item.prod_id

7、查找在1997年中有销售记录的客户编号、名称和订单总额

代码语言:javascript
复制
select sales.cust_id,cust_name,tot_amt
from sales,customer
where sales.cust_id=customer.cust_idand YEAR(order_date)=1997;

SELECT     dbo.sales.cust_id, dbo.customer.cust_name,dbo.sales.tot_amt, YEAR(dbo.sales.order_date) AS year

FROM         dbo.sales INNER JOIN

                      dbo.customer ONdbo.sales.cust_id = dbo.customer.cust_id

WHERE     (YEAR(dbo.sales.order_date) = 1997)

8、分别使用左向外连接、右向外连接、完整外部连接检索product 表和sale_item表中单价高于2400元的相同产品的产品编号、产品名称、数量、单价。并分析比较检索的结果。 

左向外连接:

代码语言:javascript
复制
select b.prod_id,a.prod_name,b.qty,b.unit_price
from product a left outer join sale_item b
on(a.prod_id=b.prod_id)and b.unit_price>2400

右向外连接:

代码语言:javascript
复制
select a.prod_id,a.prod_name,b.qty,b.unit_price
from product a right outer join sale_item b
on a.prod_id=b.prod_id and b.unit_price>2400

完整向外连接

代码语言:javascript
复制
select a.prod_id,a.prod_name,b.qty,b.unit_price
from product a full join sale_item b
on(a.prod_id=b.prod_id)and b.unit_price>2400
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014年04月11日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档