实验5.4 嵌套查询

更新于 2026年10月10日 版权声明
实验5.4 嵌套查询

【实验目的】

①掌握IN/NOT IN谓词的使用。

②掌握θ ALL/θ SOME/θ ANY谓词的使用。

③掌握EXISTS/NOT EXISTS谓词的使用。

【实验内容】

①查询通过居住在Duluth或Dallas的代理商订了货的顾客的cid值。

②查询通过居住在Duluth或Dallas的代理商订了货的顾客的名字和折扣。

③查询佣金百分率最小的代理商的aid值。

④查询与居住在Dallas 或Boston 的顾客拥有相同折扣的顾客的编号和名字。

⑤查询既订购了产品p01又订购了产品p07的顾客的cid值。

⑥查询没有通过代理商a05订货的所有顾客的名字。

⑦查询订购了所有被顾客c006订购的产品的顾客的cid值。

⑧查询订购同一产品至少两次的顾客的名字。

⑨查询折扣值小于最大折扣值的顾客的cid值。

⑩查询至少有两个顾客订购的产品。

【实验步骤】

(1)带有IN谓词的嵌套查询

查询通过居住在Duluth或Dallas的代理商订了货的顾客的cid值。

①在图标菜单中单击第一个图标 图示,新建一个查询窗口。

②在查询窗口输入下面的SQL语句:

SELECT DISTINCT cid FROM orders
WHERE aid IN (SELECT aid FROM agents
WHERE city = 'Duluth' OR city = 'Dallas');

③单击工具栏中的图标 图示 或者按下快捷键“Ctrl+Enter”,执行上面的SQL语句。观察“Output”输出区域面板,如果提示信息前有绿色小钩,则说明语句执行成功,结果如图5.23所示。

图示

图5.23 带有IN谓词的查询结果

(2)带有IN谓词的多层嵌套查询

查询通过居住在Duluth或Dallas的代理商订了货的所有顾客的名字和折扣。

①在图标菜单中单击第一个图标 图示,新建一个查询窗口。

②在查询窗口输入下面的SQL语句:

SELECT cname, discnt FROM customers
WHERE cid IN (SELECT cid FROM orders
WHERE aid IN (SELECT aid FROM agents
WHERE city IN ('Duluth','Dallas')));

③单击工具栏中的图标 图示 或者按下快捷键“Ctrl+Enter”,执行上面的SQL语句。观察“Output”输出区域面板,如果提示信息前有绿色小钩,则说明语句执行成功,结果如图5.24所示。

图示

图5.24 带有IN谓词的多层嵌套的查询结果

(3)带有θ ALL谓词的嵌套查询

查询佣金百分率最小的代理商的aid值。

①在图标菜单中单击第一个图标 图示,新建一个查询窗口。

②在查询窗口输入下面的SQL语句:

SELECT aid FROM agents
WHERE percent <= ALL (SELECT percent FROM agents);

③单击工具栏中的 图示 图标或者按下快捷键“Ctrl+Enter”,执行上面的SQL语句。观察“Output”输出区域面板,如果提示信息前有绿色小钩,则说明语句执行成功,结果如图5.25所示。

图示

图5.25 带有θ ALL谓词的查询结果

(4)带有θ SOME谓词的嵌套查询

查询与居住在Dallas 或Boston 的顾客拥有相同折扣的顾客的编号和名字。

①在图标菜单中单击第一个图标 图示,新建一个查询窗口。

②在查询窗口输入下面的SQL语句:

SELECT cid, cname FROM customers
WHERE discnt = SOME (SELECT discnt FROM customers
WHERE city = 'Dallas' OR city='Boston');

③单击工具栏中的图标 图示 或者按下快捷键“Ctrl+Enter”,执行上面的SQL语句。观察“Output”输出区域面板,如果提示信息前有绿色小钩,说明语句执行成功,结果如图5.26所示。

图示

图5.26 带有θ SOME谓词的查询结果

(5)带有 EXISTS谓词的嵌套查询

查询既订购了产品p01又订购了产品p07的顾客的cid值。

①在图标菜单中单击第一个图标 图示,新建一个查询窗口。

②在查询窗口输入下面的SQL语句:(https://www.daowen.com)

SELECT DISTINCT cid FROM orders x
WHERE pid = 'p01' AND EXISTS (SELECT * FROM orders
WHERE cid = x.cid AND pid = 'p07');
或
SELECT DISTINCT cid FROM orders x
WHERE pid = 'p01' AND cid IN (SELECT cid FROM orders
WHERE pid = 'p07');

③单击工具栏中的 图示 图标或者按下快捷键“Ctrl+Enter”,执行上面的SQL语句。观察“Output”输出区域面板,如果提示信息前有绿色小钩,说明语句执行成功。两种写法的执行结果分别如图5.27和图5.28所示。

图示

图5.27 带有EXISTS谓词的查询结果

图示

图5.28 采用IN谓词的查询结果

说明:该题与实验5.3的第6题相同,但是采用了另外两种不同的查询方式。

(6)带有NOT EXISTS谓词的嵌套查询

查询没有通过代理商a05订货的顾客的名字。

①在图标菜单中单击第一个图标 图示,新建一个查询窗口。

②在查询窗口输入下面的SQL语句:

SELECT DISTINCT c.cname FROM customers c
WHERE NOT EXISTS (SELECT * FROM orders x
WHERE c.cid = x.cid AND x.aid = 'a05');

③单击工具栏中的图标 图示 或者按下快捷键“Ctrl+Enter”,执行上面的SQL语句。观察“Output”输出区域面板,如果提示信息前有绿色小钩,说明语句执行成功,结果如图5.29所示。

图示

图5.29 带有NOT EXISTS谓词的查询结果

(7)带有NOT EXISTS谓词的多层嵌套查询

查询订购了所有被顾客c006订购的产品的顾客的cid值。

①在图标菜单中单击第一个图标 图示,新建一个查询窗口。

②在查询窗口输入下面的SQL语句:

SELECT c.cid FROM customers c
WHERE NOT EXISTS
        (SELECT pid FROM orders x WHERE x.cid = 'c006' AND
            NOT EXISTS (SELECT * FROM orders y
                WHERE x.pid = y.pid AND y.cid = c.cid));

③单击工具栏中的 图示 图标或者按下快捷键“Ctrl+Enter”,执行上面的SQL语句。观察“Output”输出区域面板,如果提示信息前有绿色小钩,说明语句执行成功,结果如图5.30所示。

图示

图5.30 带有NOT EXISTS谓词的多层嵌套查询结果

(8)FROM 后使用子查询

查询订购同一产品至少两次的顾客的名字。

①在图标菜单中单击第一个图标 图示,新建一个查询窗口。

②在查询窗口输入下面的SQL语句:

SELECT DISTINCT cname
FROM (SELECT o.cid AS spcid FROM orders o, orders x
        WHERE o.cid = x.cid AND o.pid = x.pid
            AND o.ordno <> x.ordno) AS y, customers c
            WHERE y.spcid = c.cid;

③单击工具栏中的 图示 图标或者按下快捷键“Ctrl+Enter”,执行上面的SQL语句。观察“Output”输出区域面板,如果提示信息前有绿色小钩,说明语句执行成功。结果如图5.31所示。

图示

图5.31 FROM 后使用子查询的查询结果

(9)带有聚合函数的嵌套查询

查询折扣值小于最大折扣值的顾客的cid值。

①在图标菜单中单击第一个图标 图示,新建一个查询窗口。

②在查询窗口输入下面的SQL语句:

SELECT cid FROM customers
WHERE discnt < (SELECT MAX(discnt) FROM customers);

③单击工具栏中的图标 图示 或者按下快捷键“Ctrl+Enter”,执行上面的SQL语句。观察“Output”输出区域面板,如果提示信息前有绿色小钩,说明语句执行成功。结果如图5.32所示。

图示

图5.32 带有聚合函数的查询结果

(10)采用比较运算符的嵌套查询

查询至少有两个顾客订购的产品。

①在图标菜单中单击第一个图标 图示,新建一个查询窗口。

②在查询窗口输入下面的SQL语句:

SELECT pid FROM products p
WHERE 2 <= (SELECT COUNT(DISTINCT cid)
        FROM orders WHERE pid = p.pid);

③单击工具栏中的 图示 图标或者按下快捷键“Ctrl+Enter”,执行上面的SQL语句。观察“Output”输出区域面板,如果提示信息前有绿色小钩,说明语句执行成功,结果如图5.33所示。

图示

图5.33 采用比较运算符的嵌套查询的查询结果

↑上一章 ↓下一章
关注公众号获取验证码
复制内容需要验证码(7.99元/天)