牛客SQL刷题第三趴——SQL必知必会

打印 上一主题 下一主题

主题 875|帖子 875|积分 2625

 
01检索数据

SQL60 从 Customers 表中检索所有的 ID

编写 SQL 语句,从 Customers 表中检索所有的cust_id
  1. select * from Customers;
复制代码
SQL61 检索并列出已订购产品的清单

【问题】编写SQL 语句,检索并列出所有已订购商品(prod_id)的去重后的清单。
  1. select DISTINCT(prod_id) from OrderItems;
复制代码
SQL62 检索所有列

【问题】需要编写 SQL语句,检索所有列。
  1. select * from Customers;
复制代码
02 排序检索数据

SQL63 检索顾客名称并且排序

【问题】从 Customers 中检索所有的顾客名称(cust_name),并按从 Z 到 A 的顺序显示结果。
  1. select cust_name from Customers
  2. order by cust_name desc;
复制代码
SQL64 对顾客ID和日期排序

【问题】编写 SQL 语句,从 Orders 表中检索顾客 ID(cust_id)和订单号(order_num),并先按顾客 ID 对结果进行排序,再按订单日期倒序排列。
  1. select cust_id,order_num from Orders
  2. order by cust_id,order_date desc;
复制代码
SQL65 按照数量和价格排序

【问题】编写 SQL 语句,显示 OrderItems 表中的数量(quantity)和价格(item_price),并按数量由多到少、价格由高到低排序。
  1. select * from OrderItems
  2. order by quantity desc,item_price desc;
复制代码
SQL66 检查SQL语句

【问题】下面的 SQL 语句有问题吗?尝试将它改正确,使之能够正确运行,并且返回结果根据vend_name逆序排列
  1. SELECT vend_name, 
  2. FROM Vendors 
  3. ORDER vend_name DESC;
复制代码
  1. select vend_name
  2. from Vendors
  3. order by vend_name DESC;
复制代码
03 过滤数据

SQL67 返回固定价格的产品

【问题】从 Products 表中检索产品 ID(prod_id)和产品名称(prod_name),只返回价格为 9.49 美元的产品。
  1. select prod_id,prod_name
  2. from Products
  3. where prod_price=9.49;
复制代码
SQL68 返回更高价格的产品

【问题】编写 SQL 语句,从 Products 表中检索产品 ID(prod_id)和产品名称(prod_name),只返回价格为 9 美元或更高的产品。
  1. select prod_id,prod_name
  2. from Products
  3. where prod_price>=9;
复制代码
SQL69 返回产品并且按照价格排序

【问题】编写 SQL 语句,返回 Products 表中所有价格在 3 美元到 6 美元之间的产品的名称(prod_name)和价格(prod_price),然后按价格对结果进行排序
  1. select prod_name,prod_price
  2. from Products
  3. where prod_price>=3 and prod_price<=6
  4. order by prod_price;
复制代码
04 高级数据过滤

SQL71 检索供应商名称

【问题】编写 SQL 语句,从 Vendors 表中检索供应商名称(vend_name),仅返回加利福尼亚州的供应商(这需要按国家[USA]和州[CA]进行过滤,没准其他国家也存在一个CA)
  1. select DISTINCT(order_num)
  2. from OrderItems
  3. where quantity >100;
复制代码
 SQL72 检索并列出已订购产品的清单

【问题】编写SQL 语句,查找所有订购了数量至少100 个的 BR01、BR02 或BR03 的订单。你需要返回 OrderItems 表的订单号(order_num)、产品 ID(prod_id)和数量(quantity),并按产品 ID 和数量进行过滤。
  1. select vend_name from Vendors
  2. where vend_country='USA' and vend_state='CA';
复制代码
SQL73 返回所有价格在 3美元到 6美元之间的产品的名称和价格

【问题】编写 SQL 语句,返回所有价格在 3美元到 6美元之间的产品的名称(prod_name)和价格(prod_price),使用 AND操作符,然后按价格对结果进行升序排序
  1. select order_num,prod_id,quantity
  2. from OrderItems
  3. where quantity>=100 and prod_id in('BR01','BR02','BR03')
  4. order by order_num,prod_id;
复制代码
解题思路:1⃣️聚合函数+having筛选条件。2⃣️group by order_num,按照order_num分组。
 SQL90 纠错3

【描述】OrderItems表含有order_num订单号【问题】将下面代码修改正确后执行
  1. select prod_name,prod_price
  2. from Products
  3. where prod_price>=3 and prod_price<=6
  4. order by prod_price;
复制代码
  1. SELECT vend_name 
  2. FROM Vendors 
  3. ORDER BY vend_name 
  4. WHERE vend_country = 'USA' AND vend_state = 'CA';
复制代码
10 使用子查询

SQL91 返回购买价格为 10 美元或以上产品的顾客列表

【描述】OrderItems表示订单商品表,含有字段订单号:order_num、订单价格:item_price;Orders表代表订单信息表,含有顾客id:cust_id和订单号:order_num
【问题】使用子查询,返回购买价格为 10 美元或以上产品的顾客列表,结果无需排序。
注意:你需要使用 OrderItems 表查找匹配的订单号(order_num),然后使用Order 表检索这些匹配订单的顾客 ID(cust_id)。 
  1. SELECT vend_name
  2. FROM Vendors
  3. WHERE vend_country = 'USA' AND vend_state = 'CA'
  4. ORDER BY vend_name ;
复制代码
SQL92 确定哪些订单购买了 prod_id 为 BR01 的产品(一)

【描述】表OrderItems代表订单商品信息表,prod_id为产品id;Orders表代表订单表有cust_id代表顾客id和订单日期order_date
【问题】编写 SQL 语句,使用子查询来确定哪些订单(在 OrderItems 中)购买了 prod_id 为 "BR01" 的产品,然后从 Orders 表中返回每个产品对应的顾客 ID(cust_id)和订单日期(order_date),按订购日期对结果进行升序排序。 
  1. select prod_name,prod_desc
  2. from Products
  3. where prod_desc LIKE'%toy%';
复制代码
SQL93 返回购买 prod_id 为 BR01 的产品的所有顾客的电子邮件

【描述】你想知道订购 BR01 产品的日期,有表OrderItems代表订单商品信息表,prod_id为产品id;Orders表代表订单表有cust_id代表顾客id和订单日期order_date;Customers表含有cust_email 顾客邮件和cust_id顾客idOrderItems表【问题】返回购买 prod_id 为BR01 的产品的所有顾客的电子邮件(Customers 表中的 cust_email),结果无需排序。提示:这涉及 SELECT 语句,最内层的从 OrderItems 表返回 order_num,中间的从 Customers 表返回 cust_id。
  1. select prod_name,prod_desc
  2. from Products
  3. where prod_desc LIKE'%toy%' and prod_desc LIKE'%carrots%';
复制代码
 SQL94 返回每个顾客不同订单的总金额

【描述】我们需要一个顾客 ID 列表,其中包含他们已订购的总金额。OrderItems表代表订单信息,OrderItems表有订单号:order_num和商品售出价格:item_price、商品数量:quantity。 编写 SQL语句,返回顾客 ID(Orders 表中的 cust_id),并使用子查询返回total_ordered 以便返回每个顾客的订单总数,将结果按金额从大到小排序。提示:你之前已经使用 SUM()计算订单总数。
  1. select prod_name,prod_desc
  2. from Products
  3. where prod_desc LIKE '%toy%carrots%';
复制代码
SQL95 从 Products 表中检索所有的产品名称以及对应的销售总数

【描述】Products 表中检索所有的产品名称:prod_name、产品id:prod_id
编写 SQL 语句,从 Products 表中检索所有的产品名称(prod_name),以及名为 quant_sold 的计算列,其中包含所售产品的总数(在 OrderItems 表上使用子查询和 SUM(quantity)检索)。 
  1. select vend_id,
  2. vend_name as vname,
  3. vend_address as vaddress,
  4. vend_city as vcity
  5. from Vendors
  6. order by vname;
复制代码
11 联结表

 SQL96 返回顾客名称和相关订单号

【描述】Customers 表有字段顾客名称cust_name、顾客id cust_id,Orders订单信息表,含有字段order_num订单号、cust_id顾客id。
【问题】编写 SQL 语句,返回 Customers 表中的顾客名称(cust_name)和Orders 表中的相关订单号(order_num),并按顾客名称再按订单号对结果进行升序排序。你可以尝试用两个不同的写法,一个使用简单的等联结语法,另外一个使用 INNER JOIN。 
  1. select prod_id,prod_price,prod_price*0.9 as sale_price
  2. from Products;
复制代码
SQL97 返回顾客名称和相关订单号以及每个订单的总价

【描述】Customers 表有字段顾客名称cust_name、顾客id cust_id,Orders订单信息表,含有字段order_num订单号、cust_id顾客id,OrderItems表有字段,商品订单号:order_num、商品数量:quantity、商品价格:item_price
【问题】除了返回顾客名称和订单号,返回 Customers 表中的顾客名称(cust_name)和Orders 表中的相关订单号(order_num),添加第三列 OrderTotal,其中包含每个订单的总价,并按顾客名称再按订单号对结果进行升序排序。
  1. select cust_id,cust_name,
  2. upper(concat(left(cust_contact,2),left(cust_city,3))) as user_login
  3. from Customers;
复制代码
SQL98 确定哪些订单购买了 prod_id 为 BR01 的产品(二)

【描述】表OrderItems代表订单商品信息表,prod_id为产品id;Orders表代表订单表有cust_id代表顾客id和订单日期order_date
编写 SQL 语句,使用子查询来确定哪些订单(在 OrderItems 中)购买了 prod_id 为 "BR01" 的产品,然后从 Orders 表中返回每个产品对应的顾客 ID(cust_id)和订单日期(order_date),按订购日期对结果进行升序排序。提示:这一次使用联结和简单的等联结语法。 
  1. select * from Orders
  2. where order_date>='2020-01-01 00:00:00' and order_date<='2020-01-31 23:59:59'
  3. order by order_date;
复制代码
SQL99 返回购买 prod_id 为 BR01 的产品的所有顾客的电子邮件(二)

【描述】OrderItems代表订单商品信息表,prod_id为产品id;Orders表代表订单表有cust_id代表顾客id和订单日期order_date;Customers表含有cust_email 顾客邮件和cust_id顾客id
【问题】返回购买 prod_id 为BR01 的产品的所有顾客的电子邮件(Customers 表中的 cust_email),结果无需排序。提示:涉及到 SELECT 语句,最内层的从 OrderItems 表返回 order_num,中间的从 Customers 表返回 cust_id,但是必须使用 INNER JOIN 语法。
  1. select sum(quantity) as items_ordered
  2. from OrderItems;
复制代码
SQL100 确定最佳顾客的另一种方式(二)

【描述】OrderItems表代表订单信息,确定最佳顾客的另一种方式是看他们花了多少钱,OrderItems表有订单号order_num和item_price商品售出价格、quantity商品数量
【问题】编写 SQL 语句,返回订单总价不小于1000 的客户名称和总额(OrderItems 表中的order_num)。提示:需要计算总和(item_price 乘以 quantity)。按总额对结果进行排序,请使用INNER JOIN 语法。
  1. select sum(quantity) as items_ordered
  2. from OrderItems
  3. where prod_id='BR01';
复制代码
SQL101 检索每个顾客的名称和所有的订单号(一)

【描述】Customers表代表顾客信息含有顾客id cust_id和 顾客名称 cust_name
【问题】使用 INNER JOIN 编写 SQL语句,检索每个顾客的名称(Customers表中的 cust_name)和所有的订单号(Orders 表中的 order_num),最后根据顾客姓名cust_name升序返回。
  1. select max(prod_price) as max_price
  2. from Products
  3. where prod_price<=10;
复制代码
SQL102 检索每个顾客的名称和所有的订单号(二)

【描述】Orders表代表订单信息含有订单号order_num和顾客id cust_id
【问题】检索每个顾客的名称(Customers表中的 cust_name)和所有的订单号(Orders 表中的 order_num),列出所有的顾客,即使他们没有下过订单。最后根据顾客姓名cust_name升序返回。
  1. select order_num,count(order_num) as order_lines
  2. from OrderItems
  3. group by order_num
  4. order by order_lines;
复制代码
SQL103 返回产品名称和与之相关的订单号

【描述】Products表为产品信息表含有字段prod_id产品id、prod_name产品名称;OrderItems表为订单信息表含有字段order_num订单号和产品id prod_id
【问题】使用 OUTER JOIN 联结 Products 表和 OrderItems 表,返回产品名称(prod_name)和与之相关的订单号(order_num)的列表,并按照产品名称升序排序。
  1. select vend_id,min(prod_price) as cheapest_item
  2. from Products
  3. group by vend_id
  4. order by cheapest_item;
复制代码
 SQL104 返回产品名称和每一项产品的总订单数

【描述】Products表为产品信息表含有字段prod_id产品id、prod_name产品名称;OrderItems表为订单信息表含有字段order_num订单号和产品id prod_id
【问题】使用 OUTER JOIN 联结 Products 表和 OrderItems 表,返回产品名称(prod_name)和每一项产品的总订单数(不是订单号),并按产品名称升序排序。
  1. select order_num
  2. from OrderItems
  3. where quantity>=100
  4. order by order_num;
复制代码
 
SQL105 列出供应商及其可供产品的数量

【描述】有Vendors表含有vend_id供应商id.有Products表含有供应商id和供应产品id
【问题】列出供应商(Vendors 表中的 vend_id)及其可供产品的数量,包括没有产品的供应商。你需要使用 OUTER JOIN 和 COUNT()聚合函数来计算 Products 表中每种产品的数量,最后根据vend_id 升序排序。注意:vend_id 列会显示在多个表中,因此在每次引用它时都需要完全限定它。
  1. select order_num,sum(item_price*quantity) as total_price
  2. from OrderItems
  3. group by order_num
  4. having total_price>=1000
  5. order by order_num;
复制代码
 13 组合查询

SQL106 将两个 SELECT 语句结合起来(一)

【描述】表OrderItems包含订单产品信息,字段prod_id代表产品id、quantity代表产品数量
【问题】将两个 SELECT 语句结合起来,以便从 OrderItems表中检索产品 id(prod_id)和 quantity。其中,一个 SELECT 语句过滤数量为 100 的行,另一个 SELECT 语句过滤 id 以 BNBG 开头的产品,最后按产品 id 对结果进行升序排序。 
  1. SELECT order_num, COUNT(*) AS items 
  2. FROM OrderItems 
  3. GROUP BY items 
  4. HAVING COUNT(*) >= 3 
  5. ORDER BY items, order_num;
复制代码
 SQL107 将两个 SELECT 语句结合起来(二)

【描述】表OrderItems包含订单产品信息,字段prod_id代表产品id、quantity代表产品数量。【问题】将两个 SELECT 语句结合起来,以便从 OrderItems表中检索产品 id(prod_id)和 quantity。其中,一个 SELECT 语句过滤数量为 100 的行,另一个 SELECT 语句过滤 id 以 BNBG 开头的产品,最后按产品 id 对结果进行升序排序。 注意:这次仅使用单个 SELECT 语句。
  1. SELECT order_num, COUNT(*) AS items
  2. FROM OrderItems
  3. GROUP BY order_num
  4. HAVING COUNT(*) >= 3
  5. ORDER BY order_num;
复制代码
SQL108 组合 Products 表中的产品名称和 Customers 表中的顾客名称

【描述】Products表含有字段prod_name代表产品名称。Customers表代表顾客信息,cust_name代表顾客名称
编写 SQL 语句,组合 Products 表中的产品名称(prod_name)和 Customers 表中的顾客名称(cust_name)并返回,然后按产品名称对结果进行升序排序。
  1. select cust_id from Orders
  2. where order_num in
  3. (select order_num from OrderItems where item_price>=10);
复制代码
SQL109 纠错4

【描述】表Customers含有字段cust_name顾客名、cust_contact顾客联系方式、cust_state顾客州、cust_email顾客email
【问题】修正下面错误的SQL
  1. select cust_id,order_date from Orders
  2. where order_num in(select order_num from OrderItems where prod_id='BR01');
复制代码
【示例解析】返回住在"IL"和"MI"的顾客信息,最后根据顾客名称升序排序。
  1. select cust_email
  2. from Customers
  3. where cust_id in (select cust_id from Orders where order_num in
  4.                   (select order_num from OrderItems where prod_id='BR01'));
复制代码
 
 
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

水军大提督

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表