SQL106 将两个 SELECT 语句结合起来(一)
描述
表OrderItems包含订单产品信息,字段prod_id代表产品id、quantity代表产品数量
prod_id quantity
a0001 105
a0002 100
a0002 200
a0013 1121
a0003 10
a0003 19
a0003 5
BNBG 10002
【问题】
将两个 SELECT 语句结合起来,以便从 OrderItems表中检索产品 id(prod_id)和 quantity。其中,一个 SELECT 语句过滤数量为 100 的行,另一个 SELECT 语句过滤 id 以 BNBG 开头的产品,最后按产品 id 对结果进行升序排序。
【示例结果】
返回产品id prod_id和产品数量quantity
prod_id quantity
a0002 100
BNBG 10002
【示例解析】
产品id a0002因为数量等于100被选取返回;BNBG因为是以 BNBG 开头的产品所以返回;最后以产品id进行排序返回。
示例1
输入:
DROP TABLE IF EXISTS `OrderItems`;
CREATE TABLE IF NOT EXISTS `OrderItems`(
prod_id VARCHAR(255) NOT NULL COMMENT '产品id',
quantity VARCHAR(255) NOT NULL COMMENT '商品数量'
);
INSERT `OrderItems` VALUES ('a0001',105),('a0002',100),('a0002',200),('a0013',1121),('a0003',10),('a0003',19),('a0003',5),('BNBG',10002);
复制
输出:
a0002|100.000
BNBG|10002.000
答案:
SELECT
a.prod_id,
a.quantity
FROM
(
SELECT
prod_id,
quantity
FROM
OrderItems
WHERE
quantity = 100
UNION ALL
SELECT
prod_id,
quantity
FROM
OrderItems
WHERE
prod_id LIKE 'BNBG%'
) a
ORDER BY
a.prod_id
SQL107 将两个 SELECT 语句结合起来(二)
描述
表OrderItems包含订单产品信息,字段prod_id代表产品id、quantity代表产品数量。
prod_id quantity
a0001 105
a0002 100
a0002 200
a0013 1121
a0003 10
a0003 19
a0003 5
BNBG 10002
【问题】
将两个 SELECT 语句结合起来,以便从 OrderItems表中检索产品 id(prod_id)和 quantity。其中,一个 SELECT 语句过滤数量为 100 的行,另一个 SELECT 语句过滤 id 以 BNBG 开头的产品,最后按产品 id 对结果进行升序排序。
注意:这次仅使用单个 SELECT 语句。
【示例结果】
返回产品id prod_id和产品数量quantity
prod_id quantity
a0002 100
BNBG 10002
【示例解析】
产品id a0002因为数量等于100被选取返回;BNBG因为是以 BNBG 开头的产品所以返回;最后以产品id进行排序返回。
示例1
输入:
DROP TABLE IF EXISTS `OrderItems`;
CREATE TABLE IF NOT EXISTS `OrderItems`(
prod_id VARCHAR(255) NOT NULL COMMENT '产品id',
quantity VARCHAR(255) NOT NULL COMMENT '商品数量'
);
INSERT `OrderItems` VALUES ('a0001',105),('a0002',100),('a0002',200),('a0013',1121),('a0003',10),('a0003',19),('a0003',5),('BNBG',10002);
复制
输出:
a0002|100.000
BNBG|10002.000
答案:
SELECT prod_id, quantity
FROM OrderItems
WHERE quantity = 100 OR prod_id LIKE 'BNBG%'
ORDER BY prod_id
SQL108 组合 Products 表中的产品名称和 Customers 表中的顾客名称
描述
Products表含有字段prod_name代表产品名称
prod_name
flower
rice
ring
umbrella
Customers表代表顾客信息,cust_name代表顾客名称
cust_name
andy
ben
tony
tom
an
lee
hex
【问题】
编写 SQL 语句,组合 Products 表中的产品名称(prod_name)和 Customers 表中的顾客名称(cust_name)并返回,然后按产品名称对结果进行升序排序。
【示例结果】
prod_name
an
andy
ben
flower
hex
lee
rice
ring
tom
tony
umbrella
【示例解析】
拼接cust_name和prod_name并根据结果升序排序
示例1
输入:
DROP TABLE IF EXISTS `Products`;
CREATE TABLE IF NOT EXISTS `Products` (
`prod_name` VARCHAR(255) NOT NULL COMMENT '产品名称'
);
INSERT INTO `Products` VALUES ('flower'),
('rice'),
('ring'),
('umbrella');
DROP TABLE IF EXISTS `Customers`;
CREATE TABLE IF NOT EXISTS `Customers`(
cust_name VARCHAR(255) NOT NULL COMMENT '客户姓名'
);
INSERT `Customers` VALUES ('andy'),('ben'),('tony'),('tom'),('an'),('lee'),('hex');
复制
输出:
an
andy
ben
flower
hex
lee
rice
ring
tom
tony
umbrella
答案:
SELECT a.prod_name
FROM (
SELECT prod_name
FROM Products
UNION ALL
SELECT cust_name AS "prod_name"
FROM Customers) a
ORDER BY a.prod_name
SQL109 纠错4
描述
表Customers含有字段cust_name顾客名、cust_contact顾客联系方式、cust_state顾客州、cust_email顾客email
【问题】修正下面错误的SQL
SELECT cust_name, cust_contact, cust_email
FROM Customers
WHERE cust_state = 'MI'
ORDER BY cust_name;
UNION
SELECT cust_name, cust_contact, cust_email
FROM Customers
WHERE cust_state = 'IL'ORDER BY cust_name;
【示例结果】
返回顾客名称cust_name、顾客联系方式cust_contact、顾客email cust_email
【示例解析】
返回住在IL和MI的顾客信息,最后根据顾客名称排序
示例1
输入:
DROP TABLE IF EXISTS `Customers`;
CREATE TABLE IF NOT EXISTS `Customers`(
cust_name VARCHAR(255) NOT NULL COMMENT '顾客id',
cust_contact VARCHAR(255) NOT NULL COMMENT '顾客联系方式',
cust_state VARCHAR(255) NOT NULL COMMENT '顾客州',
cust_email VARCHAR(255) NOT NULL COMMENT '顾客email'
);
INSERT `Customers` VALUES ('cust10','8695192','MI','cust10@cust.com'),('cust1','8695193','MI','cust1@cust.com'),('cust2','8695194','IL','cust2@cust.com');
复制
输出:
cust1|8695193.000|cust1@cust.com
cust10|8695192.000|cust10@cust.com
cust2|8695194.000|cust2@cust.com
答案:
SELECT a.cust_name,
a.cust_contact,
a.cust_email
FROM (SELECT cust_name,
cust_contact,
cust_email
FROM Customers
WHERE cust_state = 'MI'
UNION ALL
SELECT cust_name,
cust_contact,
cust_email
FROM Customers
WHERE cust_state = 'IL') a
ORDER BY a.cust_name