- SQL應用及誤區分析
- 張振磊
- 1057字
- 2019-01-04 16:42:07
3.1 單行新增
單行新增一次只向表中插入一條記錄。單行新增主要包括兩種方式,一種通過關鍵字values完成,另一種通過關鍵字select完成。接下來,分別對values單行新增和select單行新增進行詳細介紹。
3.1.1 values單行新增
values單行新增語法如以下代碼所示。
insert into table_name [(column[, column...])] values(value[, value...]);
代碼中各關鍵字的解釋如下。
? insert into:關鍵字,標識當前命令屬于SQL插入命令。
? table_name:代表要插入數據的表名。
? column:代表列名。
? values:關鍵字,后面跟列值。
? value:代表列值。
注:列值與列名要一一對應。
接下來,通過幾個例子來幫助讀者掌握values單行新增的用法。
例3-1:將員工工號為3030的員工插入員工表中,同時指定列名和列值。
SQL Server數據庫的寫法如圖3-1所示。

圖3-1
Oracle數據庫的寫法如圖3-2所示。

圖3-2
例3-2:將員工工號為3031的員工插入員工表中,省略列名,只指定列值。
table_name后面如果不帶任何列名,表示要向所有列里面插入數據,values后面必須跟齊所有列對應的值。并且,列值的順序與表結構中列屬性的順序要完全一致。
SQL Server數據庫的寫法如圖3-3所示。

圖3-3
Oracle數據庫的寫法如圖3-4所示。

圖3-4
例3-3:將員工工號為3032的員工插入員工表中,只指定非空列的列名及列值。
對于非空列,如果沒有創建默認值約束,在插入的時候,values后面必須指定要插入的列值。在EMP表中,EMPNO、HIREDATE兩列建有非空約束,HIREDATE建有默認值約束。所以,EMPNO列必須指定要插入的列值,而HIREDATE列可以指定列值也可以不指定列值,指定的時候插入指定的列值,不指定的時候,插入默認值;也可以指定DEFAULT插入默認值。
對于SQL Server數據庫,缺省列指定固定值的寫法如圖3-5所示。

圖3-5
對于Oracle數據庫,缺省列指定固定值的寫法如圖3-6所示。

圖3-6
例3-4:將員工工號為3033的員工插入員工表中,用關鍵字default指定包含默認值約束的列值。
SQL Server數據庫與Oracle數據庫中缺省列指定default的共同寫法如圖3-7所示。

圖3-7
例3-5:將員工工號為3034的員工插入員工表中,只指定建有非空約束并且未建默認值約束的列名及列值。
SQL Server數據庫與Oracle數據庫中建有默認值約束的列、不指定列值的共同寫法如圖3-8所示。在這種情況下,數據庫會將默認值插入HIREDATE列中。

圖3-8
3.1.2 select單行新增
用select實現單行新增,除了default關鍵字不能使用外,其他情況跟values基本相同。在SQL Server數據庫中,select后面一系列的常量值可以直接用逗號隔開,而不需要from關鍵字。但是,Oracle數據庫必須跟上from關鍵字及表名。此處我們可以使用系統表DUAL,該表只有一行一列,這樣可以只返回一行記錄。select單行新增是一種特殊的查詢結果新增方式,查詢結果新增將在3.3節詳細介紹。用select替換values后,values語法中的例子轉換成如下情況。
SQL Server數據庫中的寫法如圖3-9~圖3-12所示。

圖3-9

圖3-10

圖3-11

圖3-12
Oracle數據庫中的寫法如圖3-13~圖3-16所示。

圖3-13

圖3-14

圖3-15

圖3-16