MySQL學習筆記(九)多表更新

1. 將查詢結果寫入數據表

INSET[INTO] tbl_name [(col_name,...)] SELECT ...

示例:

//創建保存商品種類的數據表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);

//將數據表tdb_goods中的商品按種類分組,並將分組結果保存在表tdb_goods_cates

INSERT INTO  tdb_goods_cates(cate_name) SELECT  goods_cate FROM  tdb_goods GROUP BY goods_cate;

//查看數據表tdb_goods_cates記錄

SELECT * FROM  tdb_goods_cates

2. 參照分類表tdb_goods_cates更新商品表tdb_goods,主要更新其中的goods_cate字段

參考點

多表更新

UPDATE table_references SET col_name1 = {expr | DEFAULT} [,col_name = {expr2 | DEFAULT}] ... [WHERE where_condition]


//將參照分類表tdb_goods_cates更新商品表tdb_goods的語句如下

UPDATE tdb_goods INNER JOIN tdb_goods_cates ON goods_cate = cate_name SET goods_cate = cate_id;

//顯示商品表的記錄

SELECT * FROM tdb_goods;

3.創建數據表同時將查詢結果寫入到數據表中

CREATE TABLE[IF NOT EXISTS] tbl_name [(create_definition,...)] select_statement。

因此,一步實現將商品表tdb_goods中的品牌brand_name進行分組,並且保存到新創建的品牌表中tdb_goods_brands

CREATE TABLE tdb_goods_brands(

                           brand_idSMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,

                           brand_name VARCHAR(40) NOT NULL

                           ) SELECT brand_name FROM tdb_goods GROUP BY brand_name;

//顯示品牌表的記錄

SELECT * FROM tdb_goods_brands;

//再將商品表中的品牌字段更新爲品牌表中的索引

UPDATE tdb_goods INNER JOIN tdb_goods_brands ON tdb_goods.brand_name =tdb_goods_brands.brand_name SET tdb_goods.brand_name = brand_id;

注意:上述也可以通過起別名來實現,如下所示

UPDATE tdb_goods AS g INNER JOIN tdb_goods_brands AS b ON g.brand_name =b.brand_name SET g.brand_name = b.brand_id;

//再次將商品表中的goods_cate和brand_name的列名和定義修改爲cate_id和brand_id

ALTER TABLE tdb_goods CHANGE goods_cate cate_id SMALLINT UNSIGNED NOT NULL,CHANGE brand_name brand_id SMALLINT UNSIGNED NOT NULL;

//在種類表和品牌表中添加記錄

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

 
INSERT tdb_goods_brands(brand_name) VALUES('海爾'),('清華同方'),('神舟');


//在商品表中添加記錄,因爲種類表中沒有12,因此有小錯誤,但是語法不會出錯。

 INSERT tdb_goods(goods_name,cate_id,brand_id,goods_price) VALUES(' LaserJet Pro P1606dn 黑白激光打印機','12','4','1849');


4. FROM子句中的查詢

語法結構:SELECT... FROM (subquery) [AS] name;

說明:名稱爲選項,且子查詢的列名稱必須唯一

5.連接

MySQL在SELECT語句、多表更新、多表刪除語句中支持JOIN操作。

語法結構:

table_references {[INNER | CROSS] JOIN | {LEFT | RIGHT} [OUTER] JOIN} table_references ON conditional_expr

6. 數據表參照:

table_references tbl_name [[AS]alias] | table_subquery [AS] alias;

數據表可使用tbl_name AS alias_nametbl_name alias_name賦予別名。table_subquery可做爲子查詢使用在FROM子句中,這樣的子查詢必須爲其賦予別名

7. 連接類型

INNER JOIN爲內連接,在MySQL中,JOIN、CROSS JOIN 和 INNER JOIN是等價的。

LEFT[OUTER] JOIN爲左外連接,RIGHT[OUTER] JOIN爲右外連接。

左連接是以左表爲準,即左表的記錄將會全部表示出來,而右表只會顯示符合搜索條件的記錄。右表中不足的地方均爲NULL。右連接與左連接恰好相反

8. 連接條件

使用ON關鍵字來設定連接條件,也可以使用WHERE來代替。通常使用ON關鍵字來設定連接條件,使用WHERE關鍵字進行結果集記錄的過濾。

SELECT goods_id,goods_name,cate_name FROM tdb_goods LEFT JOIN tdb_goods_cates ON tdb_goods.cate_id = tdb_goods_cates.cate_id;

SELECT goods_id,goods_name,cate_name FROM tdb_goods RIGHT JOIN tdb_goods_cates ON tdb_goods.cate_id = tdb_goods_cates.cate_id;

發佈了54 篇原創文章 · 獲贊 4 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章