SQL必知必會 筆記 第十五章 插入資料,sql必知
15.1資料插入
插入可以用幾種方式使用:
(1)插入完整的行
(2)插入行的一部分
(3)插入某些查詢的結果
15.1.1插入完整的行
INSERT INTO CustomersVALUES('1000000006', 'Toy Land', '123 Any Street', 'New York', 'NY', '11111', 'USA', NULL, NULL);
對每個列必須提供一個值,如果某個列沒有值,應該用NULL值。
保證INSERT語句的更安全
INSERT INTO Customers(cust_id, cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country, cust_contact, cust_email)VALUES('1000000006', 'Toy Land', '123 Any Street', 'New York', 'NY', '11111', 'USA', NULL, NULL);
因為提供了列名,VALUES必須以其指定的次序匹配指定的列名,不一定按各個列出現在實際表中的次序。其優點是,即使表的結構改變,此INSERT語句仍然能正確工作。
總是使用列的列表:一般不要使用沒有明確給出列的列表的INSERT語句。使用列的列表能使SQL代碼繼續發揮作用,即使表結構發生了變化。
15.1.2插入部分行
使用INSERT的推薦方法是明確給出表的列名。使用這種文法,還可以省略列。
INSERT INTO Customers(cust_id, cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country)VALUES('1000000006', 'Toy Land', '123 Any Street', 'New York', 'NY', '11111', 'USA');
省略列:如果表的定義允許,則可以在INSERT操作中省略某些列。省略的列必須滿足以下某個條件:
(1)該列定義為允許NULL值。
(2)在表定義中給出預設值。這表示如果不給出值,將使用預設值。
15.1.3插入檢索出的資料
INSERT可以利用它將一條SELECT語句的結果插入表中。這就是所謂的INSERT SELECT。
INSERT INTO Customers(cust_id, cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country)SELECT cust_id, cust_name, cust_address, cust_city, cust_state, cust_zip, cust_countryFROM CustNew;
不一定要求列名相同。
INSERT SELECT 中SELECT語句可包含WHERE子句過濾插入的資料。
插入多行:INSERT通常只插入一行。為了插入多行,必須執行多個INSERT語句。INSERT SELECT是個例外,它可以用單條INSERT插入多行,不管SELECT語句返回多少行,都將被INSERT插入。
15.2從一個表複製到另一個表
為了將一個表複製到另一個表(在運行中建立的表)。可使用SELECT INTO語句。
INSERT SELECT和SELECTINTO:他們之間的一個重要差別是前者匯出資料,而後者匯入表。
SELECT *INTO CustCopyFROM Customers;
MySQL和Oracle使用的文法稍有不同
CREATE TABLE CustCopy ASSELECT *FROM Customers;
在使用SELECT INTO時,需要注意:
(1)任何SELECT選項和子句都可以使用,包括WHERE和GROUP BY。
(2)可利用連接從多個表插入資料。
(3)不管從多少個表中檢索資料,資料都只能插入到單個表中。