[Perguntas do pincel SQL] DIA14----Exercício especial sobre o uso de subconsultas em SQL

Apelido do Blogger
Blogger Página principal Link: Portal inicial do Blogger

Link da página da coluna do Blogger: Portal da coluna -- Criação de tecnologia de segurança de rede
Intenção original: A intenção original deste blog é se comunicar com amigos técnicos. A tecnologia de todos tem deficiências, e o mesmo vale para os blogueiros. Peça conselhos com humildade. Amigos dar orientação.
O lema do blogueiro: descubra a luz, siga a luz, torne-se a luz e emita a luz;
a direção de pesquisa do blogueiro: testes de penetração, aprendizado de máquina;
a mensagem do blogueiro: obrigado por seu apoio, seu apoio é a força motriz para mim seguir em frente;

Link de salto do site de aprendizagem: Niuke Brush Questions Network

 

prefácio

Recomende um software de escovação de perguntas muito bom para todos. Niuke Brush Questions Network --- Aprenda SQL juntos

 Por que os blogueiros gostam de usar este site para aprender?

Existem três razões principais:

1. Contém um grande número de bancos de perguntas de entrevista

2. A cobertura da indústria é relativamente abrangente

3. As perguntas das perguntas de escovação estão de acordo com o processo do simples ao difícil

1. SQL usa subconsultas

(1) Subconsulta

Uma subconsulta é uma consulta aninhada em outra instrução, como: select , insert, update, delete

(2) Subconsultas aninhadas

As subconsultas podem ser aninhadas em outra subconsulta, o SQL Server suporta até 32 níveis de aninhamento

(3) Sub-rotinas relacionadas

① Uma subconsulta correlacionada é uma subconsulta que usa os valores da consulta externa . ou seja , depende do valor da consulta externa

② Subconsultas correlacionadas não podem ser executadas independentemente como subconsultas simples

③ Execute repetidamente a subconsulta correlacionada uma vez para cada linha avaliada pela consulta externa. As subconsultas correlacionadas também são conhecidas como subconsultas de repetição .

2. Perguntas sobre escova

1. Escova Pergunta 1

(1) Tópicos

Pergunta: Retornar uma lista de clientes que compraram produtos por US$ 10 ou mais

Descrição: OrderItems representa a tabela de itens do pedido, contendo os campos número do pedido: order_num, order price: item_price; a tabela Orders representa a tabela de informações do pedido, incluindo o ID do cliente: cust_id e o número do pedido: order_num

(2) Exemplo

输入:

DROP TABLE IF EXISTS `OrderItems`;

  CREATE TABLE IF NOT EXISTS `OrderItems`(

    order_num VARCHAR(255) NOT NULL COMMENT '商品订单号',

    item_price INT(16) NOT NULL COMMENT '售出价格'

  );

  INSERT `OrderItems` VALUES ('a1',10),('a2',1),('a2',1),('a4',2),('a5',5),('a2',1),('a7',7);


  DROP TABLE IF EXISTS `Orders`;

  CREATE TABLE IF NOT EXISTS `Orders`(

    order_num VARCHAR(255) NOT NULL COMMENT '商品订单号',

    cust_id VARCHAR(255) NOT NULL COMMENT '顾客id'

  );

  INSERT `Orders` VALUES ('a1','cust10'),('a2','cust1'),('a2','cust1'),('a4','cust2'),('a5','cust5'),('a2','cust1'),('a7','cust7');


输出:


cust10

(3) Código

select cust_idfrom Orderswhere order_num in (

    select order_num

    from OrderItems

    where item_price >=10

)

(4) Resultado da operação

2. Pergunta 2 da escova

(1) Tópicos

Tópico: Determinar quais pedidos compraram o produto com prod_id BR01 (1)

Descrição: A tabela OrderItems representa a tabela de informações do item do pedido, prod_id é o ID do produto; a tabela Orders representa a tabela do pedido e o cust_id representa o ID do cliente e a data do pedido order_date

(2) Exemplo

输入:

DROP TABLE IF EXISTS `OrderItems`;

  CREATE TABLE IF NOT EXISTS `OrderItems`(

    prod_id VARCHAR(255) NOT NULL COMMENT '产品id',

    order_num VARCHAR(255) NOT NULL COMMENT '商品订单号'

  );

  INSERT `OrderItems` VALUES ('BR01','a0001'),('BR01','a0002'),('BR02','a0003'),('BR02','a0013');


  DROP TABLE IF EXISTS `Orders`;

  CREATE TABLE IF NOT EXISTS `Orders`(

    order_num VARCHAR(255) NOT NULL COMMENT '商品订单号',

    cust_id VARCHAR(255) NOT NULL COMMENT '顾客id',

    order_date TIMESTAMP NOT NULL COMMENT '下单时间'

  );

  INSERT `Orders` VALUES ('a0001','cust10','2022-01-01 00:00:00'),('a0002','cust1','2022-01-01 00:01:00'),('a0003','cust1','2022-01-02 00:00:00'),('a0013','cust2','2022-01-01 00:20:00');


输出:


cust10|2022-01-01 00:00:00

cust1|2022-01-01 00:01:00

(3) Código

select cust_id,order_datefrom Orderswhere order_num in

(select order_numfrom OrderItemswhere prod_id = 'BR01')

(4) Resultado da operação

3. Escove a pergunta três

(1) Tópicos

Título: Retornar os e-mails de todos os clientes que compraram produtos com prod_id BR01 (1)

Descrição: Você deseja saber a data do pedido dos produtos BR01, existe uma tabela OrderItems representando a tabela de informações do item do pedido, prod_id é o id do produto; a tabela Orders representa a tabela do pedido, cust_id representa o id do cliente e a data do pedido order_date; a tabela Customers contém o email do cliente cust_email e ID do cliente cust_id

 

(2) Exemplo

输入:

DROP TABLE IF EXISTS `OrderItems`;

  CREATE TABLE IF NOT EXISTS `OrderItems`(

    prod_id VARCHAR(255) NOT NULL COMMENT '产品id',

    order_num VARCHAR(255) NOT NULL COMMENT '商品订单号'

  );

  INSERT `OrderItems` VALUES ('BR01','a0001'),('BR01','a0002'),('BR02','a0003'),('BR02','a0013');


  DROP TABLE IF EXISTS `Orders`;

  CREATE TABLE IF NOT EXISTS `Orders`(

    order_num VARCHAR(255) NOT NULL COMMENT '商品订单号',

    cust_id VARCHAR(255) NOT NULL COMMENT '顾客id',

    order_date TIMESTAMP NOT NULL COMMENT '下单时间'

  );

  INSERT `Orders` VALUES ('a0001','cust10','2022-01-01 00:00:00'),('a0002','cust1','2022-01-01 00:01:00'),('a0003','cust1','2022-01-02 00:00:00'),('a0013','cust2','2022-01-01 00:20:00');

DROP TABLE IF EXISTS `Customers`;CREATE TABLE IF NOT EXISTS `Customers`(

    cust_id VARCHAR(255) NOT NULL COMMENT '顾客id',

    cust_email VARCHAR(255) NOT NULL COMMENT '顾客email'

  );INSERT `Customers` VALUES ('cust10','[email protected]'),('cust1','[email protected]'),('cust2','[email protected]');


输出:


[email protected]

[email protected]

(3) Código

select

    Customers.cust_emailfrom

    Ordersleft join OrderItems on OrderItems.order_num = Orders.order_numleft join Customers on Customers.cust_id = Orders.cust_idwhere

    OrderItems.prod_id = "BR01"

(4) Resultado da operação

4. Escova Pergunta 4

(1) Tópicos

Pergunta: Devolva o valor total dos diferentes pedidos de cada cliente

Descrição: precisamos de uma lista de IDs de clientes contendo o valor total que eles pediram. A tabela OrderItems representa as informações do pedido e a tabela OrderItems tem o número do pedido: order_num, o preço de venda do item: item_price e a quantidade do item: quantidade.

 

(2) Exemplo

输入:

DROP TABLE IF EXISTS `OrderItems`;CREATE TABLE IF NOT EXISTS `OrderItems`(

order_num VARCHAR(255) NOT NULL COMMENT '商品订单号',

item_price INT(16) NOT NULL COMMENT '售出价格',

quantity INT(16) NOT NULL COMMENT '商品数量'

);INSERT `OrderItems` VALUES ('a0001',10,105),('a0002',1,1100),('a0002',1,200),('a0013',2,1121),('a0003',5,10),('a0003',1,19),('a0003',7,5);

DROP TABLE IF EXISTS `Orders`;CREATE TABLE IF NOT EXISTS `Orders`(

  order_num VARCHAR(255) NOT NULL COMMENT '商品订单号',

  cust_id VARCHAR(255) NOT NULL COMMENT '顾客id'

);INSERT `Orders` VALUES ('a0001','cust10'),('a0003','cust1'),('a0013','cust2');


输出:


cust2|2242.000

cust10|1050.000

cust1|104.000

(3) Código

SELECT 

    o.cust_id,

    sum(oi.item_price * oi.quantity) AS total_orderedFROM Orders o JOIN OrderItems oi

    USING (order_num)GROUP BY o.cust_idORDER BY total_ordered DESC

(4) Resultado da operação

 

5. Escova Pergunta 5

(1) Tópicos

Pergunta: Recupere todos os nomes de produtos e os totais de vendas correspondentes da tabela Produtos

Descrição: Recupere todos os nomes de produtos na tabela Produtos: prod_name, ID do produto: prod_id

OrderItems representa a tabela de itens do pedido, produto do pedido: prod_id, quantidade vendida: quantidade

 

(2) Exemplo

digitar:

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 '产品名称'

);INSERT INTO `Products` VALUES ('a0001','egg'),

('a0002','sockets'),

('a0013','coffee'),

('a0003','cola');

DROP TABLE IF EXISTS `OrderItems`;CREATE TABLE IF NOT EXISTS `OrderItems`(

prod_id VARCHAR(255) NOT NULL COMMENT '产品id',

quantity INT(16) NOT NULL COMMENT '商品数量'

);INSERT `OrderItems` VALUES ('a0001',105),('a0002',1100),('a0002',200),('a0013',1121),('a0003',10),('a0003',19),('a0003',5);


输出:


egg|105.000

sockets|1300.000

coffee|1121.000

cola|34.000

(3) Código

select

  prod_name,

  sum(quantity) as quant_soldfrom

  Products,

  OrderItemswhere

  OrderItems.prod_id = Products.prod_idgroup by

  prod_name

(4) Resultado da operação

Este artigo é o décimo quarto dia de perguntas de escovação de SQL

Bem-vindos amigos, clique no link a direita para aprender com o blogueiro, clique para aprender

Acho que você gosta

Origin blog.csdn.net/weixin_50481708/article/details/126737776
Recomendado
Clasificación