【SQLブラッシュクエスチョン】DAY14----SQLでサブクエリを使う特別演習

ブロガーのニックネーム: Jumping Stairs Penguin
Blogger メイン ページ リンク: Blogger ホーム ポータル

ブロガーのコラム ページへのリンク:コラム ポータル -- ネットワーク セキュリティ テクノロジ
の作成 当初の意図: このブログの本来の意図は、技術的な友人と通信することです. 誰のテクノロジにも欠点があり、ブロガーも同じです. 謙虚にアドバイスを求めてください. 友人指導します。
ブロガーのモットー: 光を発見し、光をたどり、光になり、光を放ちます;
ブロガーの研究方向: 侵入テスト、機械学習;
ブロガーのメッセージ: ご支援いただきありがとうございます, あなたのサポートは私の原動力です.前進する。

学習サイトジャンプリンク:Niuke Brush Questions Network

 

序文

誰にとっても非常に優れた質問ブラシ ソフトウェアをお勧めします. Niuke Brush Questions Network---SQL を一緒に学ぶ

 ブロガーがこの Web サイトを学習に利用するのはなぜですか?

主な理由は次の 3 つです。

1. 面接問題集を多数収録

2.業界のカバレッジは比較的包括的です

3. ブラッシング問題は、簡単なものから難しいものまで、プロセスに沿って出題されます

1. SQL はサブクエリを使用します

(1) サブクエリ

サブクエリは、select 、 insert 、 update 、 deleteなどの別のステートメントにネストされたクエリです。

(2) サブクエリの入れ子

サブクエリは別のサブクエリ内にネストできます。SQL Server は最大 32 のネスト レベルをサポートします。

(3) 関連サブルーチン

①相関サブクエリとは、外部クエリの値を利用するサブクエリです。つまり、外側のクエリの値に依存します

② 相関サブクエリは単純なサブクエリとして独立して実行できない

③ 外側のクエリで評価された行ごとに、相関サブクエリを 1 回繰り返し実行します。相関サブクエリは、繰り返しサブクエリとも呼ばれます。

2.ブラシの質問

1.筆問1

(1) トピックス

質問: $10 以上の商品を購入した顧客のリストを返す

説明: OrderItems は、注文番号: order_num、注文価格: item_price のフィールドを含む注文アイテム テーブルを表し、Orders テーブルは、顧客 ID: cust_id および注文番号: order_num を含む注文情報テーブルを表します。

(2) 例

输入:

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) コード

select cust_idfrom Orderswhere order_num in (

    select order_num

    from OrderItems

    where item_price >=10

)

(4) 運用結果

2.筆問題2

(1) トピックス

トピック: prod_id BR01 の製品を購入した注文を特定する (1)

説明: テーブル OrderItems は注文アイテム情報テーブルを表し、prod_id は製品 ID です。Orders テーブルは注文テーブルを表し、cust_id は顧客 ID と注文日 order_date を表します。

(2) 例

输入:

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) コード

select cust_id,order_datefrom Orderswhere order_num in

(select order_numfrom OrderItemswhere prod_id = 'BR01')

(4) 運用結果

3. ブラシの質問 3

(1) トピックス

タイトル: prod_id BR01 の製品を購入したすべての顧客のメールを返す (1)

説明: BR01 製品の注文日を知りたい場合、注文アイテム情報テーブルを表す OrderItems テーブルがあり、prod_id は製品 ID です; Orders テーブルは注文テーブルを表し、cust_id は顧客 ID と注文日 order_date を表します; Customers テーブルには cust_email 顧客の電子メールが含まれますcust_id 顧客 ID

 

(2) 例

输入:

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) コード

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) 運用結果

4.筆問4

(1) トピックス

質問: 各顧客の異なる注文の合計金額を返します

説明: 注文した合計金額を含む顧客 ID のリストが必要です。OrderItems テーブルは注文情報を表し、OrderItems テーブルには注文番号: order_num、アイテムの販売価格: item_price、およびアイテムの数量: quantity があります。

 

(2) 例

输入:

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) コード

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) 運用結果

 

5.筆問5

(1) トピックス

質問: Products テーブルからすべての製品名と対応する売上合計を取得します。

説明: Products テーブル内のすべての製品名を取得します: prod_name、製品 ID: prod_id

OrderItems は、注文商品テーブル、注文商品: prod_id、販売数量: 数量を表します。

 

(2) 例

入力:

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) コード

select

  prod_name,

  sum(quantity) as quant_soldfrom

  Products,

  OrderItemswhere

  OrderItems.prod_id = Products.prod_idgroup by

  prod_name

(4) 運用結果

この記事は、SQL ブラッシングの質問の 14 日目です。

お友達を歓迎します。右側のリンクをクリックしてブロガーと一緒に学び、クリックして学びましょう

おすすめ

転載: blog.csdn.net/weixin_50481708/article/details/126737776