后端学习记录(第一天)(2025.1.13)
简单过一遍牛客网SQL语句的必知必会(前25题)
牛客网SQL必知必会链接:
下面的解题代码供参考:
1.SQL60 从 Customers 表中检索所有的 ID
题目一描述
现有表Customers如下:
cust_id |
A |
B |
C |
【问题】
编写 SQL 语句,从 Customers 表中检索所有的cust_id
【示例答案】
返回cust_id列的内容
cust_id |
A |
B |
C |
代码:
select
cust_id
from
Customers;
2.SQL61 检索并列出已订购产品的清单
题目二描述
表OrderItems含有非空的列prod_id代表商品id,包含了所有已订购的商品(有些已被订购多次)。
prod_id |
a1 |
a2 |
a3 |
a4 |
a5 |
a6 |
a6 |
【问题】编写SQL 语句,检索并列出所有已订购商品(prod_id)的去重后的清单。
代码:
select
prod_id
from
OrderItems
group by prod_id;
3.SQL62 检索所有列
题目三描述
现在有Customers 表(表中含有列cust_id代表客户id,cust_name代表客户姓名)
cust_id | cust_name |
a1 | andy |
a2 | ben |
a3 | tony |
a4 | tom |
a5 | an |
a6 | lee |
a7 | hex |
【问题】需要编写 SQL语句,检索所有列。
【示例结果】
返回所有列cust_id和cust_name。
cust_id | cust_name |
a1 | andy |
a2 | ben |
a3 | tony |
a4 | tom |
a5 | an |
a6 | lee |
a7 | hex |
代码:
select
cust_id, cust_name
FROM
Customers;
4.SQL63 检索顾客名称并且排序
题目四描述
有表Customers,cust_id代表客户id,cust_name代表客户姓名。
cust_id | cust_name |
a1 | andy |
a2 | ben |
a3 | tony |
a4 | tom |
a5 | an |
a6 | lee |
a7 | hex |
【问题】从 Customers 中检索所有的顾客名称(cust_name),并按从 Z 到 A 的顺序显示结果。
【示例结果】返回客户姓名cust_name
cust_name |
tony |
tom |
lee |
hex |
ben |
andy |
an |
代码:
select
cust_name
from
Customers
order by
cust_name desc;
5.SQL64 对顾客ID和日期排序
题目五描述
有Orders表
cust_id | order_num | order_date |
andy | aaaa | 2021-01-01 00:00:00 |
andy | bbbb | 2021-01-01 12:00:00 |
bob | cccc | 2021-01-10 12:00:00 |
dick | dddd | 2021-01-11 00:00:00 |
【问题】编写 SQL 语句,从 Orders 表中检索顾客 ID(cust_id)和订单号(order_num),并先按顾客 ID 对结果进行正序排序,ID相同的情况下,再按订单日期倒序排列。
【示例答案】
返回2列,cust_id和order_num
cust_id | order_num |
andy | bbbb |
andy | aaaa |
bob | cccc |
dick | dddd |
【示例解析】
首先根据cust_id进行排列,andy在bob和dick前,再根据order_date进行排列,订单号bbbb的订单时间是 "2021-01-01 12:00:00"大于订单号aaaa的时间"2021-01-01 00:00:00"
代码:
select
cust_id,order_num
from
Orders
order by
cust_id,
order_date desc;
6.SQL65 按照数量和价格排序
题目六描述
假设有一个OrderItems表
quantity | item_price |
1 | 100 |
10 | 1003 |
2 | 500 |
【问题】
编写 SQL 语句,显示 OrderItems 表中的数量(quantity)和价格(item_price),并按数量由多到少、价格由高到低排序。
【示例答案】
返回quantity和item_price
代码:
select
quantity,
item_price
from
OrderItems
order by
quantity desc,
item_price desc;
7.SQL66 检查SQL语句
题目七描述
有Vendors表
vend_name |
海底捞 |
小龙坎 |
大龙燚 |
【问题】下面的 SQL 语句有问题吗?尝试将它改正确,使之能够正确运行,并且返回结果根据vend_name逆序排列
SELECT vend_name, FROM Vendors ORDER vend_name DESC;
【示例展示】
返回vend_name
vend_name |
海底捞 |
小龙坎 |
大龙燚 |
代码:
SELECT
vend_name
FROM
Vendors
order by
vend_name desc;
8.SQL67 返回固定价格的产品
题目八描述
有表Products
prod_id | prod_name | prod_price |
a0018 | sockets | 9.49 |
a0019 | iphone13 | 600 |
b0018 | gucci t-shirts | 1000 |
【问题】从 Products 表中检索产品 ID(prod_id)和产品名称(prod_name),只返回价格为 9.49 美元的产品。
【示例结果】返回prod_id和prod_name
prod_id | prod_name |
a0018 | sockets |
select
prod_id,prod_name
from
Products
where
prod_price='9.49';
9.SQL68 返回更高价格的产品
题目九描述
Products 表
prod_id | prod_name | prod_price |
a0018 | sockets | 9.49 |
a0019 | iphone13 | 600 |
b0019 | gucci t-shirts | 1000 |
【问题】编写 SQL 语句,从 Products 表中检索产品 ID(prod_id)和产品名称(prod_name),只返回价格为 9 美元或更高的产品。
【示例答案】返回prod_id商品id和prod_name商品名称
prod_id | prod_name |
a0018 | sockets |
a0019 | iphone13 |
b0019 | gucci t-shirts |
代码:
select
prod_id,prod_name
from
Products
where
prod_price>='9';
10.SQL69 返回产品并且按照价格排序
题目十描述
有Products 表
prod_id | prod_name | prod_price |
a0011 | egg | 3 |
a0019 | sockets | 4 |
b0019 | coffee | 15 |
【问题】编写 SQL 语句,返回 Products 表中所有价格在 3 美元到 6 美元之间的产品的名称(prod_name)和价格(prod_price),然后按价格对结果进行排序
【示例结果】返回商品名称prod_name和商品价格prod_price
prod_name | prod_price |
egg | 3 |
sockets | 4 |
注:不需要考虑商品价格相同的情况
代码:
select
prod_name,prod_price
from
Products
where '3'<=prod_price and prod_price<='6'
order by
prod_price asc;
11.SQL70 返回更多的产品
题目十一描述
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 |
代码:
select DISTINCT
order_num
from
OrderItems
where
quantity>=100;
12.SQL71 检索供应商名称
题目十二描述
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 |
代码:
select
vend_name
from
Vendors
where
vend_country = 'USA' and vend_state='CA';
13.SQL72 检索并列出已订购产品的清单
题目十三描述
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"中的任意一个。
代码:
select
order_num,prod_id,quantity
from
OrderItems
where
quantity>='100';
14.SQL73 返回所有价格在 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 |
注:不需要考虑价格相同时的排序问题
代码:
select
prod_name,prod_price
from
Products
where
prod_price>=3 and prod_price<=6
order by
prod_price asc;
15.SQL74 纠错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 |
代码:
SELECT vend_name
FROM Vendors
WHERE vend_country = 'USA' AND vend_state = 'CA'
ORDER BY vend_name ;
16.SQL75 检索产品名称和描述(一)
题目十六描述
Products表
prod_name | prod_desc |
a0011 | usb |
a0019 | iphone13 |
b0019 | gucci t-shirts |
c0019 | gucci toy |
d0019 | lego toy |
【问题】编写 SQL 语句,从 Products 表中检索产品名称(prod_name)和描述(prod_desc),仅返回描述中包含 toy 一词的产品名称
【示例结果】返回产品名称和产品描述
prod_name | prod_desc |
c0019 | gucci toy |
d0019 | lego toy |
代码:
select
prod_name,prod_desc
from
Products
where
prod_desc like '%toy%';
17.SQL76 检索产品名称和描述(二)
题目十七描述
Products表
prod_name | prod_desc |
a0011 | usb |
a0019 | iphone13 |
b0019 | gucci t-shirts |
c0019 | gucci toy |
d0019 | lego toy |
【问题】编写 SQL 语句,从 Products 表中检索产品名称(prod_name)和描述(prod_desc),仅返回描述中未出现 toy 一词的产品,最后按”产品名称“对结果进行排序。
【示例结果】返回产品名称和产品描述
prod_name | prod_desc |
a0011 | usb |
a0019 | iphone13 |
b0019 | gucci t-shirts |
代码:
select
prod_name,prod_desc
from
Products
where
prod_desc not like "%toy%"
order by
prod_name asc;
18.SQL77 检索产品名称和描述(三)
题目十八描述
Products表
【问题】编写 SQL 语句,从 Products 表中检索产品名称(prod_name)和描述(prod_desc),仅返回描述中同时出现 toy 和 carrots 的产品。有好几种方法可以执行此操作,但对于这个挑战题,请使用 AND 和两个 LIKE 比较。
prod_name | prod_desc |
a0011 | usb |
a0019 | iphone13 |
b0019 | gucci t-shirts |
c0019 | gucci toy |
d0019 | lego carrots toy |
【示例结果】返回产品名称和产品描述
prod_name | prod_desc |
d0019 | lego carrots toy |
代码:
select
prod_name,prod_desc
from
Products
where
prod_desc like "%toy%" and
prod_desc like "%carrots%";
19.SQL78 检索产品名称和描述(四)
题目十九描述
Products表
prod_name | prod_desc |
a0011 | usb |
a0019 | iphone13 |
b0019 | gucci t-shirts |
c0019 | gucci toy |
d0019 | lego toy carrots |
【问题】编写 SQL 语句,从 Products 表中检索产品名称(prod_name)和描述(prod_desc),仅返回在描述中以先后顺序同时出现 toy 和 carrots 的产品。提示:只需要用带有三个 % 符号的 LIKE 即可。
【示例结果】返回产品名称和产品描述
prod_name | prod_desc |
d0019 | lego toy carrots |
代码:
select
prod_name,prod_desc
from
Products
where
prod_desc like "%toy%carrots%";
20.SQL79 别名
题目二十描述
别名的常见用法是在检索出的结果中重命名表的列字段(为了符合特定的报表要求或客户需求)。有表Vendors代表供应商信息,vend_id供应商id、vend_name供应商名称、vend_address供应商地址、vend_city供应商城市。
vend_id | vend_name | vend_address | vend_city |
a001 | tencent cloud | address1 | shenzhen |
a002 | huawei cloud | address2 | dongguan |
a003 | aliyun cloud | address3 | hangzhou |
a003 | netease cloud | address4 | guangzhou |
【问题】编写 SQL 语句,从 Vendors 表中检索vend_id、vend_name、vend_address 和 vend_city,将 vend_name重命名为 vname,将 vend_city 重命名为 vcity,将 vend_address重命名为 vaddress,按供应商名称对结果进行升序排序。
【示例结果】返回vend_id 供应商id、vname 供应商名称、vaddress供应商地址、vcity供应商城市。
vend_id | vname | vaddress | vcity |
a003 | aliyun cloud | address3 | hangzhou |
a002 | huawei cloud | address2 | dongguan |
a003 | netease cloud | address4 | guangzhou |
a001 | tencent cloud | address1 | shenzhen |
代码:
select
vend_id,vend_name vname,vend_address vaddress,vend_city vcity
from
Vendors
order by
vname asc;
21.SQL80 打折
题目二十一描述
我们的示例商店正在进行打折促销,所有产品均降价 10%。Products表包含prod_id产品id、prod_price产品价格
【问题】编写 SQL语句,从 Products 表中返回 prod_id、prod_price 和 sale_price。sale_price 是一个包含促销价格的计算字段。提示:可以乘以 0.9,得到原价的 90%(即 10%的折扣)
【示例结果】
返回产品id prod_id、产品价格prod_price、销售价格 sale_price
prod_id | prod_price | sale_price |
a0011 | 9.49 | 8.541 |
a0019 | 600 | 540 |
b0019 | 1000 | 900 |
【示例解析】sale_price的价格是prod_price的90%
代码:
select
prod_id,prod_price,prod_price * 0.9 sale_price
from
Products;
22.SQL81 顾客登录名
题目二十二描述
我们的商店已经上线了,正在创建顾客账户。所有用户都需要登录名,默认登录名是其名称和所在城市的组合。
给出 Customers表 如下:
cust_id | cust_name | cust_contact | cust_city |
a1 | Andy Li | Andy Li | Oak Park |
a2 | Ben Liu | Ben Liu | Oak Park |
a3 | Tony Dai | Tony Dai | Oak Park |
a4 | Tom Chen | Tom Chen | Oak Park |
a5 | An Li | An Li | Oak Park |
a6 | Lee Chen | Lee Chen | Oak Park |
a7 | Hex Liu | Hex Liu | Oak Park |
【问题】编写 SQL 语句,返回顾客 ID(cust_id)、顾客名称(cust_name)和登录名(user_login),其中登录名全部为大写字母,并由顾客联系人的前两个字符(cust_contact)和其所在城市的前三个字符(cust_city)组成。提示:需要使用函数、拼接和别名。
【示例结果】
返回顾客id cust_id,顾客名称cust_name,顾客登录名 user_login
cust_id | cust_name | user_login |
a1 | Andy Li | ANOAK |
a2 | Ben Liu | BEOAK |
a3 | Tony Dai | TOOAK |
a4 | Tom Chen | TOOAK |
a5 | An Li | ANOAK |
a6 | Lee Chen | LEOAK |
a7 | Hex Liu | HEOAK |
【示例解析】
例如,登录名是 ANOAK(Andy Li,居住在 Oak Park)
代码:
select
cust_id,cust_name,
upper(concat(substring(cust_name,1,2),substring(cust_city,1,3))) as user_login
from Customers
23.SQL82 返回 2020 年 1 月的所有订单的订单号和订单日期
题目二十三描述
Orders订单表
order_num | order_date |
a0001 | 2020-01-01 00:00:00 |
a0002 | 2020-01-02 00:00:00 |
a0003 | 2020-01-01 12:00:00 |
a0004 | 2020-02-01 00:00:00 |
a0005 | 2020-03-01 00:00:00 |
【问题】编写 SQL 语句,返回 2020 年 1 月的所有订单的订单号(order_num)和订单日期(order_date),并按订单日期升序排序
【示例结果】
返回订单号order_num,和order_date订单时间
order_num | order_date |
a0001 | 2020-01-01 00:00:00 |
a0003 | 2020-01-01 12:00:00 |
a0002 | 2020-01-02 00:00:00 |
【示例解析】
a0001、a0002、a0003 时间属于2020年1月
代码:
select
order_num,order_date
from
Orders
where
order_date like "2020-01%"
order by
order_date asc;
24.SQL83 确定已售出产品的总数
题目二十四描述
OrderItems表代表售出的产品,quantity代表售出商品数量。
quantity |
10 |
100 |
1000 |
10001 |
2 |
15 |
【问题】编写 SQL 语句,确定已售出产品的总数。
【示例结果】返回items_ordered列名,表示已售出商品的总数。
items_ordered |
11128 |
代码:
select
sum(quantity) items_ordered
from OrderItems;
25.SQL84 确定已售出产品项 BR01 的总数
题目二十五描述
OrderItems表代表售出的产品,quantity代表售出商品数量,产品项为prod_item。
quantity | prod_id |
10 | AR01 |
100 | AR10 |
1000 | BR01 |
10001 | BR010 |
【问题】确定已售出产品项(prod_item)为"BR01"的总数。
【示例结果】返回商品项已订购订单数
items_ordered |
1000 |
【示例解析】已订购商品BR01的数量quantity为1000。
代码:
select
sum(quantity) items_ordered
from
OrderItems
where
prod_id = "BR01";
牛客网在线编程_SQL篇_SQL必知必会(后25题)链接:
牛客网在线编程_SQL篇_SQL必知必会(后25题)-CSDN博客
感谢阅读,祝各位朋友都能成为IT大牛!!!