2014-10-14 2 views
-1

Существует таблица, включающая элементы данных, показанные ниже. Какой из следующих операторов 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’); 

Вопрос не говоря уже о котором СУБД, так что я думаю, что это касается общего синтаксиса SQL, а не какой-либо конкретной один

Как я могу видеть, вариант b и d все правильно, но мы только можем выберите один, и я не вижу разницы, выполнено ли b или d!

Конечно, в конечном счете, b тем лучше синтаксис в случае структура таблицы модифицируется

+0

Это викторина SQL? –

+2

Вам нужно использовать обычные одинарные кавычки для строковых литералов: '' Dave'' ** not ** ''Dave'' –

+0

@a_horse_with_no_name yes Я знаю, но это всего лишь псевдо-sql-синтаксис, так что это нормально – f855a864

ответ

1

Это слишком длинный комментарий.

Во-первых, у вас есть умные цитаты в вопросе, которые не принимаются SQL (в общем). Я предполагаю, что это типографская ошибка. Другими словами, все они будут генерировать SQL-ошибку для большинства баз данных.

Во-вторых, (b) и (d) выглядят правильными для большинства баз данных. Однако код не является агностиком базы данных varchar2() является стандартным строковым типом для Oracle и NUMBER(3) также специфичен для Oracle. Oracle по умолчанию формат даты: не ГГГГ-ММ-ДД. Таким образом, все они потерпят неудачу в 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) лучше, потому что он использует список столбцов.

1

б)

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

Вы должны указать каждый столбец в правильном порядке (пробелы и вводится неважно. Кроме того, используйте одиночные кавычки (') вместо фигурных котировок или обратных котировок (`)

d) также может работать в большинстве баз данных, но b лучше: он более широко поддерживается и в реальности жизнь лучше использование вашей вставки будет по-прежнему работать правильно, если столбцы будут добавлены или порядок столбцов будет изменен.

+0

Спасибо, у меня такая же мысль, просто выберите, какой из них лучше, я думаю, – f855a864

+0

maaaybe вопрос направлен на различие между UPPERCASE в определении таблицы для столбцов и строчных букв в инструкции insert. Несмотря на то, что у нескольких DB-модулей, которых я знаю, не было бы проблем с этим – cypherabe

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 поля не Nullable, поэтому некоторые данные должны быть там. Однако, если вы пропустите поле ADDRESS или GRADUATION, они будут принимать значения Null, например. в

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

a) и c) являются недействительными. Синтаксис мудрый, б) лучше, но, как упоминалось выше, должен быть в правильном порядке

+0

Спасибо, но я не спрашиваю об этом – f855a864

+0

@ f855a864 Синтаксис мудрый, б) лучше, но, как упоминалось выше, должен быть правильный порядок –

+0

да, он находится в Правильный порядок, может быть, вы неправильно его прочитали – f855a864

Смежные вопросы