关于sql:SQL-必知必会-50-题11-15

36次阅读

共计 4094 个字符,预计需要花费 11 分钟才能阅读完成。

本文已同步至:村雨遥

SQL11 返回更多的产品

形容

OrderItems 表含有:订单号 order_num,quantity 产品数量

order_num quantity
a1 105
a2 1100
a2 200
a4 1121
a5 10
a2 19
a7 5

问题

从 OrderItems 表中检索出所有不同且不反复的订单号(order_num),其中每个订单都要蕴含 100 个或更多的产品。

示例后果

返回订单号列 order_num

order_num
a1
a2
a4

示例

DROP TABLE IF EXISTS `OrderItems`;
CREATE TABLE IF NOT EXISTS `OrderItems`(order_num VARCHAR(255) NOT NULL COMMENT '商品订单号',
    quantity VARCHAR(255) NOT NULL COMMENT '商品数量'
);
INSERT `OrderItems` VALUES ('a1','105'),('a2','1100'),('a2','200'),('a4','1121'),('a5','10'),('a2','19'),('a7','5')

解答

要筛选指定列中不反复的数据,则须要应用关键字 DISTINCT。此外,要筛选出满足指定条件的数据,则须要关键字 WHERE,而后依据题意,能够将条件写到一起,也能够将条件进行拆分后用关键字 OR 并联。

SELECT DISTINCT order_num FROM OrderItems WHERE quantity >= 100;
SELECT DISTINCT order_num FROM OrderItems WHERE quantity > 100 OR quantity = 100;

SQL12 检索供应商名称

形容

Vendors 表有字段供应商名称(vend_name)、供应商国家(vend_country)、供应商州(vend_state)

vend_name vend_country vend_state
apple USA CA
vivo CNA shenzhen
huawei CNA xian

问题

编写 SQL 语句,从 Vendors 表中检索供应商名称(vend_name),仅返回加利福尼亚州的供应商(这须要按国家 [USA] 和州 [CA] 进行过滤,没准其余国家也存在一个 CA)

示例答案

返回供应商名称 vend_name

vend_name
apple

示例

DROP TABLE IF EXISTS `Vendors`;
CREATE TABLE IF NOT EXISTS `Vendors` (`vend_name` VARCHAR(255) NOT NULL COMMENT 'vend 名称',
  `vend_country` VARCHAR(255) NOT NULL COMMENT 'vend 国家',
  `vend_state` VARCHAR(255) NOT NULL COMMENT 'vend 州'
);
INSERT INTO `Vendors` VALUES ('apple','USA','CA'),
('vivo','CNA','shenzhen'),
('huawei','CNA','xian');

解答

既然要筛选出加利福利亚州的提供商,则首要条件是满足 vend_state = 'CA'。另外,除开美国有加利福利亚州之外,有可能其余国家也有加利福利亚州,所以须要对国家也进行限定,设置条件为 vend_country = 'USA'。而后用关键字 AND 将条件串联,满足这两个条件的数据则进行输入。

SELECT vend_name FROM Vendors WHERE vend_country = 'USA' AND vend_state = 'CA';

SQL13 检索并列出已订购产品的清单

形容

OrderItems 表蕴含了所有已订购的产品(有些已被订购屡次)。

prod_id order_num quantity
BR01 a1 105
BR02 a2 1100
BR02 a2 200
BR03 a4 1121
BR017 a5 10
BR02 a2 19
BR017 a7 5

问题

编写 SQL 语句,查找所有订购了数量至多 100 个的 BR01、BR02 或 BR03 的订单。你须要返回 OrderItems 表的订单号(order_num)、产品 ID(prod_id)和数量(quantity),并按产品 ID 和数量进行过滤。

示例答案

返回商品 id prod_id、订单 order_num、数量 quantity。

order_num prod_id quantity
a1 BR01 105
a2 BR02 1100
a2 BR02 200
a4 BR03 1121

示例解析

返回的后果中,数量满足大于等于 100,且满足 prod_id 是 “BR01″,“BR02”,“BR03” 中的任意一个。

示例

DROP TABLE IF EXISTS `OrderItems`;
CREATE TABLE IF NOT EXISTS `OrderItems`(prod_id VARCHAR(255) NOT NULL COMMENT '商品号',
    order_num VARCHAR(255) NOT NULL COMMENT '商品订单号',
    quantity INT(255) NOT NULL COMMENT '商品数量'
);
INSERT `OrderItems` VALUES ('BR01','a1','105'),('BR02','a2','1100'),('BR02','a2','200'),('BR03','a4','1121'),('BR017','a5','10'),('BR02','a2','19'),('BR017','a7','5')

解答

多条件查问,将两个条件进行拆分,而后将两个查问条件进行串联即可。

数量满足大于等于 100,则设置为 quantyty >= 100

产品 id 满足 “BR01″,“BR02”,“BR03”中的任意一个,则应用关键字 in

SELECT order_num, prod_id, quantity FROM OrderItems WHERE quantity >= 100 AND prod_id IN ('BR01', 'BR02', 'BR03');

SQL14 返回所有价格在 3 美元到 6 美元之间的产品的名称和价格

形容

有表 Products

prod_id prod_name prod_price
a0011 egg 3
a0019 sockets 4
b0019 coffee 15

问题

编写 SQL 语句,返回所有价格在 3 美元到 6 美元之间的产品的名称(prod_name)和价格(prod_price),应用 AND 操作符,而后按价格对后果进行升序排序

示例后果

返回商品名称 prod_name 和商品价格 prod_price

prod_name prod_price
egg 3
sockets 4

注:不须要思考价格雷同时的排序问题

示例

DROP TABLE IF EXISTS `Products`;
CREATE TABLE IF NOT EXISTS `Products` (`prod_id` VARCHAR(255) NOT NULL COMMENT '产品 ID',
`prod_name` VARCHAR(255) NOT NULL COMMENT '产品名称',
`prod_price` INT(255) NOT NULL COMMENT '产品价格'
);
INSERT INTO `Products` VALUES ('a0011','egg',3),
('a0019','sockets',4),
('b0019','coffee',15);

解答

两个条件,首先是价格介于 3 到 6 美元,则能够应用关键字 BETWEEN … AND …。另外,按价格升序排序,则应用关键字 ORDER BY

SELECT prod_name, prod_price FROM Products WHERE prod_price BETWEEN 3 AND 6 ORDER BY prod_price;

题目中指定须要应用关键字 AND,则须要将价格条件替换成 prod_price >= 3prod_price <= 6 两个条件,而后将其串联。

SELECT prod_name, prod_price FROM Products WHERE prod_price >= 3 AND prod_price <= 6 ORDER BY prod_price;

SQL15 纠错 2

形容

供应商表 Vendors 有字段供应商名称 vend_name、供应商国家 vend_country、供应商省份 vend_state

vend_name vend_country vend_state
apple USA CA
vivo CNA shenzhen
huawei CNA xian

问题

批改正确上面 sql,使之正确返回

SELECT vend_name 
FROM Vendors 
ORDER BY vend_name 
WHERE vend_country = 'USA' AND vend_state = 'CA';

示例后果

后果返回 vend_name

vend_name
apple

示例

DROP TABLE IF EXISTS `Vendors`;
CREATE TABLE IF NOT EXISTS `Vendors` (`vend_name` VARCHAR(255) NOT NULL COMMENT 'vend 名称',
  `vend_country` VARCHAR(255) NOT NULL COMMENT 'vend 国家',
  `vend_state` VARCHAR(255) NOT NULL COMMENT 'vend 州'
);
INSERT INTO `Vendors` VALUES ('apple','USA','CA'),
('beef noodle king','USA','CA'),
('vivo','CNA','shenzhen'),
('huawei','CNA','xian');

解答

次要是一处谬误,搞错了关键字 WHEREORDER BY 的先后顺序,正确的 SQL 语句格局为:

SELECT [列名] FOMR [表名] WHERE [条件] ORDER BY [列名];
SELECT vend_name FROM Vendors WHERE vend_country = 'USA' AND vend_state = 'CA' ORDER BY vend_name;

致谢

感激牛客网提供的题目列表。

正文完
 0