实验5.3 连接查询
【实验目的】
①掌握涉及多表的等值连接。
②掌握自身连接。
③掌握涉及多表的内连接。
④掌握涉及多表的外连接。
【实验内容】
①查询所有满足条件“顾客通过代理商订了货”的顾客-代理商姓名组合(cname,aname)。
②查询居住在同一城市的所有顾客对。
③查询订购了某个被代理商a06订购过的产品的所有顾客的cid值。
④查询至少订购了一件价格低于0.50元的商品的所有顾客的名字。
⑤查询通过居住在Duluth或Dallas的代理商订了货的所有顾客的cid值。
⑥查询既订购了产品p01又订购了产品p07的顾客的cid值。
⑦查询所有顾客的顾客号、顾客姓名、订购的产品号,订购数量(没有订购过产品的顾客的订购信息显示为空)。
【实验步骤】
(1)等值连接
查询所有满足条件“顾客通过代理商订了货”的顾客-代理商姓名组合(cname,aname)。
①在图标菜单中单击第一个图标
,新建一个查询窗口。
②在查询窗口输入下面的SQL语句:
SELECT DISTINCT customers.cname, agents.aname
FROM customers, orders, agents
WHERE customers.cid = orders.cid AND orders.aid = agents.aid;
③单击工具栏中的
图标或者按下快捷键“Ctrl+Enter”,执行上面的SQL语句。观察“Output”输出区域面板,如果提示信息前有绿色小钩,则说明语句执行成功,结果如图5.15所示。

图5.15 等值连接的查询结果
(2)自连接查询
查询居住在同一城市的所有顾客对。
①在图标菜单中单击第一个图标
,新建一个查询窗口。
②在查询窗口输入下面的SQL语句:
SELECT c1.cid cid1, c2.cid cid2
FROM customers c1, customers c2
WHERE c1.city = c2.city AND c1.cid < c2.cid;
③单击工具栏中的
图标或者按下快捷键“Ctrl+Enter”,执行上面的SQL语句。观察“Output”输出区域面板,如果提示信息前有绿色小钩,则说明语句执行成功,结果如图5.16所示。

图5.16 自连接查询结果
(3)自连接查询(不重复)
查询订购了被代理商a06订购过的产品的所有顾客的cid值。
①在图标菜单中单击第一个图标
,新建一个查询窗口。
②在查询窗口输入下面的SQL语句:
SELECT DISTINCT y.cid FROM orders x, orders y
WHERE x.pid = y.pid AND x.aid = 'a06';
③单击工具栏中的
图标或者按下快捷键“Ctrl+Enter”,执行上面的SQL语句。观察“Output”输出区域面板,如果提示信息前有绿色小钩,则说明语句执行成功,结果如图5.17所示。

图5.17 自连接(不重复)查询结果
(4)JOIN连接查询
查询至少订购了一件价格低于0.60元的商品的所有顾客的名字。(https://www.daowen.com)
①在图标菜单中单击第一个图标
,新建一个查询窗口。
②在查询窗口输入下面的SQL语句:
SELECT DISTINCT cname
FROM ((orders o
JOIN (SELECT pid FROM products WHERE price < 0.60) p ON o.pid = p.pid)
JOIN customers c ON o.cid = c.cid);
③单击工具栏中的
图标或者按下快捷键“Ctrl+Enter”,执行上面的SQL语句。观察“Output”输出区域面板,如果提示信息前有绿色小钩,则说明语句执行成功,结果如图5.18所示。

图5.18 JOIN连接查询的结果
(5)连接查询一
查询通过居住在Duluth或Dallas的代理商订了货的所有顾客的cid值。
①在图标菜单中单击第一个图标
,新建一个查询窗口。
②在查询窗口输入下面的SQL语句:
SELECT DISTINCT cid FROM orders, agentsWHERE orders.aid = agents.aidAND (city = 'Duluth' OR city = 'Dallas');
③单击工具栏中的图标
或者按下快捷键“Ctrl+Enter”,执行上面的SQL语句。观察“Output”输出区域面板,如果提示信息前有绿色小钩,则说明语句执行成功,结果如图5.19所示。

图5.19 连接查询一的结果
(6)连接查询二
查询既订购了产品p01又订购了产品p07的顾客的cid值。
①在图标菜单中单击第一个图标
,新建一个查询窗口。
②在查询窗口输入下面的SQL语句:
SELECT DISTINCT x.cid FROM orders x, orders y
WHERE x.pid='p01' AND x.cid=y.cid AND y.pid='p07';
③单击工具栏中的
图标或者按下快捷键“Ctrl+Enter”,执行上面的SQL语句。观察“Output”输出区域面板,如果提示信息前有绿色小钩,则说明语句执行成功,结果如图5.20所示。

图5.20 连接查询二的结果
(7)左外连接查询
查询所有顾客的顾客号、顾客姓名、订购的产品号,订购数量(没有订购过产品的顾客的订购信息显示为空)。
①在图标菜单中单击第一个图标
,新建一个查询窗口。
②在查询窗口分别输入下面的SQL语句:
SELECT c.cid, c.cname, o.pid, o.qty
FROM customers c LEFT OUTER JOIN orders o
ON c.cid=o.cid;
或
SELECT c.cid, c.cname, o.pid, o.qty
FROM customers c LEFT OUTER JOIN orders o
USING (cid);
③单击工具栏中的
图标或者按下快捷键“Ctrl+Enter”,执行上面的SQL语句。观察“Output”输出区域面板,如果提示信息前有绿色小钩,则说明语句执行成功,结果如图5.21和图5.22所示,比较查询结果,说明这两种用法是等效的。

图5.21 左外连接查询结果一

图5.22 左外连接查询结果二