![SQL应用及误区分析](https://wfqqreader-1252317822.image.myqcloud.com/cover/566/937566/b_937566.jpg)
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所示。
![](https://epubservercos.yuewen.com/090464/10797217703874606/epubprivate/OEBPS/Images/figure_0024_0001.jpg?sign=1738888918-YGiKsV7jD3p44DrA8n3fEehpH1akdZcV-0-fa267bd6f4cf49e5b2979480f0125216)
图3-1
Oracle数据库的写法如图3-2所示。
![](https://epubservercos.yuewen.com/090464/10797217703874606/epubprivate/OEBPS/Images/figure_0024_0002.jpg?sign=1738888918-f675bXTvgHSzZdndQ0VRlpQGtTxH1m3b-0-7accc3e2ffe1f02788ddc87e6ea60bde)
图3-2
例3-2:将员工工号为3031的员工插入员工表中,省略列名,只指定列值。
table_name后面如果不带任何列名,表示要向所有列里面插入数据,values后面必须跟齐所有列对应的值。并且,列值的顺序与表结构中列属性的顺序要完全一致。
SQL Server数据库的写法如图3-3所示。
![](https://epubservercos.yuewen.com/090464/10797217703874606/epubprivate/OEBPS/Images/figure_0025_0001.jpg?sign=1738888918-TSW1wzGwGgnvmJg4HMZvq4L9S9L2bQk7-0-c0d1ada20ef58ca57b06cf379855933a)
图3-3
Oracle数据库的写法如图3-4所示。
![](https://epubservercos.yuewen.com/090464/10797217703874606/epubprivate/OEBPS/Images/figure_0025_0002.jpg?sign=1738888918-JGsAwhNqFebCnq1hJFHvQPd9zfWMHywu-0-f3f884da6e68668bdd23cabdad2a10cb)
图3-4
例3-3:将员工工号为3032的员工插入员工表中,只指定非空列的列名及列值。
对于非空列,如果没有创建默认值约束,在插入的时候,values后面必须指定要插入的列值。在EMP表中,EMPNO、HIREDATE两列建有非空约束,HIREDATE建有默认值约束。所以,EMPNO列必须指定要插入的列值,而HIREDATE列可以指定列值也可以不指定列值,指定的时候插入指定的列值,不指定的时候,插入默认值;也可以指定DEFAULT插入默认值。
对于SQL Server数据库,缺省列指定固定值的写法如图3-5所示。
![](https://epubservercos.yuewen.com/090464/10797217703874606/epubprivate/OEBPS/Images/figure_0025_0003.jpg?sign=1738888918-tRkKEXfdx4uHN8JJtVC8ROZljufBAfwS-0-b2e86f4fc27499d3df4e7abd84bfa798)
图3-5
对于Oracle数据库,缺省列指定固定值的写法如图3-6所示。
![](https://epubservercos.yuewen.com/090464/10797217703874606/epubprivate/OEBPS/Images/figure_0026_0001.jpg?sign=1738888918-OQR4PAO1zhgRh48NSUESNnccBdEW1UWU-0-71675c2d6d7813bb3cce4e5a2801d5a7)
图3-6
例3-4:将员工工号为3033的员工插入员工表中,用关键字default指定包含默认值约束的列值。
SQL Server数据库与Oracle数据库中缺省列指定default的共同写法如图3-7所示。
![](https://epubservercos.yuewen.com/090464/10797217703874606/epubprivate/OEBPS/Images/figure_0026_0002.jpg?sign=1738888918-aQaeo1Pcwa2DyACZ4FMd7KHQzv4Lgkv8-0-b46d9c923dd9d676662cdb44f9e8cbc5)
图3-7
例3-5:将员工工号为3034的员工插入员工表中,只指定建有非空约束并且未建默认值约束的列名及列值。
SQL Server数据库与Oracle数据库中建有默认值约束的列、不指定列值的共同写法如图3-8所示。在这种情况下,数据库会将默认值插入HIREDATE列中。
![](https://epubservercos.yuewen.com/090464/10797217703874606/epubprivate/OEBPS/Images/figure_0026_0003.jpg?sign=1738888918-SPlywIJ49rev6BlcRw47bwQ8OLyXxjOe-0-7a6b305775fcf3bfb884d7d1e2d821fb)
图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所示。
![](https://epubservercos.yuewen.com/090464/10797217703874606/epubprivate/OEBPS/Images/figure_0027_0001.jpg?sign=1738888918-VlOBLgleCz6ItNTM5v5lTa4VY3pICOb1-0-09d0f208c3054fae1e0141630b1ae766)
图3-9
![](https://epubservercos.yuewen.com/090464/10797217703874606/epubprivate/OEBPS/Images/figure_0027_0002.jpg?sign=1738888918-HpuocV3vcqN47xFYXr7WdDOJgeCbxchH-0-75b72181e9c98b54424380e42934007a)
图3-10
![](https://epubservercos.yuewen.com/090464/10797217703874606/epubprivate/OEBPS/Images/figure_0027_0003.jpg?sign=1738888918-ZDBO5yGsEcVMCef1xKLCrfzoNkhssZYw-0-9448d7bf75b82c7ac4672994422be1ee)
图3-11
![](https://epubservercos.yuewen.com/090464/10797217703874606/epubprivate/OEBPS/Images/figure_0027_0004.jpg?sign=1738888918-VCCpe9ReBNeQgSv2LKhegaUxjRAroYOi-0-0bb648c0a435c21ca40439814c7d57f1)
图3-12
Oracle数据库中的写法如图3-13~图3-16所示。
![](https://epubservercos.yuewen.com/090464/10797217703874606/epubprivate/OEBPS/Images/figure_0028_0001.jpg?sign=1738888918-GrhKnxYWRm7UWWZLH50MISftoDeGl7V2-0-289ad23cdc096416e676a559f6f88b1e)
图3-13
![](https://epubservercos.yuewen.com/090464/10797217703874606/epubprivate/OEBPS/Images/figure_0028_0002.jpg?sign=1738888918-kPsXWpC0yg3QDEcPlcrQ41AV1ydNy03h-0-5966d28e369a25605d708d4dce20d7d0)
图3-14
![](https://epubservercos.yuewen.com/090464/10797217703874606/epubprivate/OEBPS/Images/figure_0028_0003.jpg?sign=1738888918-1ARb2wiYTN8iEugAzpb4fZA7N0jUZKPD-0-8706b3f680017a905cb4d0c602347a0e)
图3-15
![](https://epubservercos.yuewen.com/090464/10797217703874606/epubprivate/OEBPS/Images/figure_0028_0004.jpg?sign=1738888918-ynkziaoXKXznMX0FFUkkLfDJgfyDbHq0-0-002807ca9f01493359e89755c0374f93)
图3-16