混淆了一个非常简单的SQL插入语法

时间:2014-10-14 08:16:55

标签: sql

有一个表格,包括下面显示的数据项。以下哪个SQL 语句可以在“学生”表中插入新行吗?

Name        Null?       Type 
STUD_ID    NOT NULL   NUMBER(3) 
NAME       NOT NULL   VARCHAR2(25) 
ADDRESS               VARCHAR2(50) 
GRADUATION            DATE 

a)  INSERT INTO student (stud_id, address, graduation) 
VALUES (101, ‘Dave’, ‘100 Happy Lane’, ‘2001-06-14’); 
b) INSERT INTO student (stud_id, address, name, graduation) 
VALUES (101, ‘100 Happy Lane’, ‘Dave’, ‘2001-06-14’); 
c)  INSERT INTO student 
VALUES (101, ‘100 Happy Lane’, ‘2001-06-14’, ‘Dave’); 
d) INSERT INTO student 
VALUES (101, ‘Dave’, ‘100 Happy Lane’, ‘2001-06-14’); 

问题没有提到哪个DBMS,所以我认为这涉及常见的SQL语法,而不是任何特定的SQL语法

正如我所看到的,选项bd都是正确的,但我们只能选择一个,我认为bd无效执行!

当然,从长远来看,如果表的结构被修改,b是更好的语法

3 个答案:

答案 0 :(得分:1)

b)中

INSERT INTO student 
       (stud_id,          address,   name,   graduation) 
VALUES (    101, '100 Happy Lane', 'Dave', '2001-06-14'); 

您需要以正确的顺序指定每列 (空格和输入无关紧要。另外,使用单引号(')而不是卷曲引号或后引号(`)

d)也可以在大多数数据库上运行,但b更好:它得到更广泛的支持,在现实生活中更好,因为如果添加了列或更改了列顺序,插入仍然可以正常工作。

答案 1 :(得分:1)

评论太长了。

首先,您在问题中有智能引号,SQL不接受(通常)。我认为这些是印刷错误。换句话说,所有这些都会为大多数数据库生成SQL错误。

其次,(b)和(d)对大多数数据库来说都是正确的。但是,代码与数据库无关varchar2()是Oracle的标准字符串类型,NUMBER(3)也是特定于Oracle的。 Oracle的默认日期格式为 YYYY-MM-DD。因此,所有这些都会在Oracle中失败(使用默认设置)。通过执行以下操作之一可以轻松解决此问题:

INSERT INTO student (stud_id, address, name, graduation) 
    VALUES (101, '100 Happy Lane', 'Dave', DATE '2001-06-14');

或:

INSERT INTO student (stud_id, address, name, graduation) 
    VALUES (101, '100 Happy Lane', 'Dave', '14-Jun-2001');

或使用to_date()

所以,我对正确的答案感到困惑。但是,您的解释一般是正确的。 (b)和(d)(或其略微变化)都会插入数据。 (b)更好,因为它使用列列表。

答案 2 :(得分:0)

理想情况下,所有四个字段都应该插入到DB表中,即STUD_ID,NAME,ADDRESS和GRADUATION,所有四个字段都应该是插入的一部分,如2),但应该是正确的顺序,字符串或日期值在单个内报价

INSERT INTO student (stud_id, name, address, graduation) 
VALUES (101, 'Dave', '100 Happy Lane', '2001-06-14'); 

在任何情况下,STUD_ID,NAME字段都不可为空,因此必须有一些数据。但是,如果您错过了ADDRESS或GRADUATION字段,它们将采用Null值,例如在

INSERT INTO student (stud_id, name) VALUES (101, ‘Dave’); 

a)和c)无效。 语法明智,b)更好,但如上所述必须是正确的顺序