有一个表格,包括下面显示的数据项。以下哪个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语法
正如我所看到的,选项b
和d
都是正确的,但我们只能选择一个,我认为b
或d
无效执行!
当然,从长远来看,如果表的结构被修改,b
是更好的语法
答案 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)更好,但如上所述必须是正确的顺序