MySQL學習15:子查詢(二)

來源:互聯網
上載者:User

標籤:

       二子查詢       3由[NOT] IN/EXISTS引發的子查詢

       使用[NOT] IN引發的子查詢的文法結構:operand comparsion_operator [NOT] IN (subquery)。其中,=ANY運算

符與IN等價;!=ALL或<>ALL運算子與NOT IN等價。

        例子:

        1)查詢所有商品中價格等於超級本價格(任意一個)的商品

        SELECT goods_id,goods_name,goods_price FROM tdb_goods WHERE goods_price IN (SELECT 

goods_price FROM tdb_goods WHERE goods_cate = ‘超級本‘);


        2)查詢所有商品中價格不等於超級本價格(任意一個)的商品

        SELECT goods_id,goods_name,goods_price FROM tdb_goods WHERE goods_price NOT IN (SELECT 

goods_price FROM tdb_goods WHERE goods_cate = ‘超級本‘);


        使用[NOT] EXISTS引發的子查詢的文法結構:operand comparsion_operator [NOT] EXISTS (subquery);如果子

查詢返回任何行,EXISTS將返回TRUE;否則返回FALSE。這種情況我們使用的比較少。

        三子查詢應用        (1)INSERT SELECT命令

        使用INSERT...SELECT插入記錄的文法結構:INSERT [INTO] table_name [(col_name,...)] SELECT ...;

        1)先來建立一個資料表tdb_goods_cates

        CREATE TABLE IF NOT EXISTS tdb_goods_cates(

              cate_id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,

              cate_name VARCHAR(40) NOT NULL

        );

        2)再對資料表tdb_goods中的記錄進行商品類型分類

        SELECT goods_cate FROM tdb_goods GROUP BY goods_cate;


        3)將查詢的結果寫入到資料表tdb_goods_cates

        INSERT tdb_goods_cates(cate_name) SELECT goods_cate FROm tdb_goods GROUP BY goods_cate;

        SELECT * FROM tdb_goods_cates;


        4)參照商品分類表tdb_goods_cates的商品類型cate_id去更新商品表tdb_goods的商品類型(這裡用到多表更新和

串連)

        UPDATE tdb_goodsINNER JOIN tdb_goods_catesON goods_cate = cate_name SET goods_cate = cate_id;

        SELECT goods_id,goods_cate FROM tdb_goods;


        (2)多表更新

        多表更新的文法結構:

        UPDATE table_references SET col_name1={expr1|DEFAULT} [,col_name2={expr2|DEFAULT}] ... [WHERE

 where_condition];

        上述的例子就是多表更新。

        1多表更新一步到位

        我們在上面進行多表更新需要幾個步驟,我們可以將其幾個步驟結合在一起使用,也就是CREATE SELECT命

令哎建立資料表的同時將查詢結果直接寫入到指定的資料表中。

        建立資料表同時將查詢結果寫入到資料表的文法結構:

        CREATE TABLE [IF NOT EXISTS] table_name [(create_definition,...)] select_statement; 

        例子:

        1)尋找資料表tdb_goods中的商品品牌(不屬於步驟,只是一個簡單的查詢)

        SELECT brand_name FROM tdb_goods GROUP BY brand_name;


        2)建立資料表的同時寫入記錄:

        CREATE TABLE tdb_goods_brands(

            brand_id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,

            brand_name VARCHAR(40) NOT NULL 

        )

        SELECT brand_name FROM tdb_goods GROUP BY brand_name;

        SHOW TABLES;


        SELECT * FROM tdb_goods_brands;


        3)參照資料表tdb_goods_brands中的brand_id去更新資料表tdb_goods中的brand_name的品牌類型

        UPDATE tdb_goods AS gINNER JOIN tdb_goods_brands AS bON g.brand_name = b.brand_name SET

 g.brand_name = b.brand_id;

        SELECT goods_id,brand_name FROM tdb_goods;


        (3)多表更新帶來的問題

       到這裡我們還有一個問題,就是更新了tdb_goods資料表中的goods_cate欄位和brand_name欄位,更新後的都

是數字類型的,而原來的是字串型的,因此需要修改tdb_goods資料表中的那兩個欄位名稱以及資料類型。

       1)查看tdb_goods資料表的表結構

       DESC tdb_goods;


       2)修改指定列的資料類型和欄位名稱

       ALTER TABLE tdb_goods 

       CHANGE goods_cate cate_id SMALLINT UNSIGNED NOT NULL,

       CHANGE brand_name brand_id SMALLINT UNSIGNED NOT NULL;

       DESC tdb_goods;


       修改之後的檢查操作

       3)分別在tdb_goods_cates和tdb_goods_brands表插入記錄

       INSERT tdb_goods_cates(cate_name) VALUES(‘路由器‘),(‘交換器‘),(‘網卡‘);

       INSERT tdb_goods_brands(brand_name) VALUES(‘海爾‘),(‘清華同方‘),(‘神州‘);



       4)在tdb_goods資料表中寫入任意記錄

       INSERT tdb_goods(goods_name,cate_id,brand_id,goods_price) VALUES(‘LaserJet Pro P1606dn 黑白雷射列印

機‘,12,4,1849);


       我們看到寫入記錄的時候中的cate_id是12,而在資料表tdb_goods_cates中的cate_id不存在12,但是依然可以插

入記錄,這是沒有使用外鍵約束的結果。

        

MySQL學習15:子查詢(二)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.