SELECT 语句中的子查询 / WHERE 子句中的子查询 |
图: 查询
SELECT UNIQUE manu_name, lead_time FROM manufact WHERE EXISTS (SELECT * FROM stock WHERE description MATCHES '*shoe*' AND manufact.manu_code = stock.manu_code);
图: 查询
SELECT UNIQUE manu_name, lead_time FROM stock, manufact WHERE manufact.manu_code IN (SELECT manu_code FROM stock WHERE description MATCHES '*shoe*') AND stock.manu_code = manufact.manu_code;
图: 查询结果
manu_name lead_time Anza 5 Hero 4 Karsten 21 Nikolus 8 ProCycle 9 Shimara 30
将关键字 NOT 添加至 IN 或 EXISTS 以创建与前面查询相反的搜索条件。也可以用 !=ALL 代替 NOT IN。
图: 查询
SELECT customer_num, company FROM customer WHERE customer_num NOT IN (SELECT customer_num FROM orders WHERE customer.customer_num = orders.customer_num); SELECT customer_num, company FROM customer WHERE NOT EXISTS (SELECT * FROM orders WHERE customer.customer_num = orders.customer_num);
图: 查询结果
customer_num company 102 Sports Spot 103 Phil's Sports 105 Los Altos Sports 107 Athletic Supplies 108 Quinn's Sports 109 Sport Stuff 113 Sportstown 114 Sporting Place 118 Blue Ribbon Sports 125 Total Fitness Sports 128 Phoenix University
关键字 EXISTS 和 IN 用于称为相交的集合运算,关键 NOT EXISTS 和 NOT IN 用于称为差异的集合运算。这些概念在集合运算中讨论。
图: 查询
SELECT * FROM stock WHERE NOT EXISTS (SELECT * FROM items WHERE stock.stock_num = items.stock_num AND stock.manu_code = items.manu_code);
图: 查询结果
stock_num manu_code description unit_price unit unit_descr 101 PRC bicycle tires $88.00 box 4/box 102 SHM bicycle brakes $220.00 case 4 sets/case 102 PRC bicycle brakes $480.00 case 4 sets/case 105 PRC bicycle wheels $53.00 pair pair ⋮ 312 HRO racer goggles $72.00 box 12/box 313 SHM swim cap $72.00 box 12/box 313 ANZ swim cap $60.00 box 12/box
对 SELECT 语句可具有的子查询数没有逻辑限制。
图: 查询
SELECT * FROM items WHERE total_price != quantity * (SELECT unit_price FROM stock WHERE stock.stock_num = items.stock_num AND stock.manu_code = items.manu_code);
图: 查询结果
item_num order_num stock_num manu_code quantity total_price 1 1004 1 HRO 1 $960.00 2 1006 5 NRG 5 $190.00