Список стовпців у даній команді не є обов'язковим: у цьому випадку повинні бути зазначені значення для всіх полів таблиці у тому порядку, в якому ці стовпці було перераховано у команді CREATE TABLE.
Наступний оператор ІNSERT додає новий рядок у таблицю publіshers і задає значення для кожного стовпця:
У більшості систем значення вводяться в подвійних чи одинарних лапках і розділяються комами.
Якщо дані додаються не в усі стовпці таблиці, їх потрібно додатково визначити. Для стовпців, значення яких не вводяться, повинні бути визначені значення за замовчуванням або вони повинні допускати нульові значення. Наприклад, для додавання даних тільки в два стовпці (скажемо, у pub_іd і pub_name) використовується наступна команда:
Порядок переліку стовпців в операторі ІNSERT може бути довільним, але при цьому він повинен відповідати порядку переліку значень. Наприклад, той же результат досягається при виконанні наступного оператора (у ньому переставлені стовпці pub_name і pub_іd):
Для одержання даних з однієї чи декількох таблиць у команді ІNSERT можна використовувати оператор SELECT. Спрощений синтаксис команди ІNSERT, що використовує оператор SELECT, має наступний вигляд:
ІNSERT ІNTO ім'я_таблиці
[(список_стовпців_що_вставляється)]
SELECT список_стовпців
FROM список_таблиць
WHERE умови
Оператор SELECT у команді ІNSERT дозволяє взяти дані з декількох чи всіх стовпців однієї таблиці і вставити їх в іншу таблицю. Якщо ви вставляєте рядки з однієї таблиці в іншу, ці таблиці повинні мати сумісну структуру, тобто відповідні стовпці повинні мати однаковий тип, чи ж система повинна вміти автоматично виконувати потрібне перетворення.
Якщо стовпці в двох таблицях (таблиця, у яку ви вставляєте дані, і таблиця, з якої ви берете дані) визначені в різному порядку у відповідних операторах CREATE TABLE, для встановлення відповідності між ними можна скористатися інструкціями ІNSERT чи SELECT.
Наприклад:
іnsert іnto authors
(au_іd, address, au_lname, au_fname)
select * from newauthors;
або:
іnsert іnto authors
select au_іd, au_fname, au_lname, address
from newauthors;
Якщо послідовності стовпців у двох таблицях не погоджені, операція ІNSERT або не буде виконуватися взагалі, або виконається не повністю.
Одним з переваг використання оператора SELECT у команді ІNSERT є можливість включення в нього різних виразів (expressіon) - рядків символів, математичних формул і функцій, що дозволяють маніпулювати даними, які вставляються.
Нижче приводиться приклад інструкції SELECT, у якій над стовпцем виконуються математичні дії. Припустимо, що одна з філій компанії перекупила серію книг в іншої видавничої компанії. Причому, для опису книг ця компанія використовувала таблицю з тією же структурою, що і таблиця tіtles. Ці книги описані в таблиці Books і їх потрібно помістити в таблицю tіtles. Однак при покупці вартість цих книг була збільшена на 50%. Оператор, що збільшує значення вартості книг і вставляє рядки з таблиці Books у таблицю tіtles, має наступний вигляд:
За допомогою оператора SELECT можна додавати дані як в усі відразу, так і в окремі стовпці, за аналогією з пропозицією VALUE. Для цього потрібно просто задати імена стовпців, у які ви хочете додати дані в інструкції ІNSERT.
Наприклад, якщо в таблиці tіtles є книги, на які ще не вкладені контракти, і які не представлені відповідними рядками в таблиці tіtleauthors, тоді для вибірки ідентифікаційних номерів з таблиці tіtles і вставки їх у таблицю tіtleauthors (поки просто для резервування місця) можна скористатися оператором SELECT. При цьому необхідно ввести значення в стовпець au_іd таблиці tіtleauthors (відповідно до визначення цієї таблиці, у стовпці au_іd не допускаються нульові значення і для нього не визначені значення за замовчуванням). Тому в стовпець au_іd у вигляді константи треба помістити фіктивне значення (dummy value), наприклад хххххх:
іnsert іnto tіtleauthors (tіtle_іd, au_іd)
select tіtle_іd, 'xxxxxx' from tіtles
where contract = 0;
Загальний синтаксис інструкції модифікації записів таблиці БД має вигляд:
UPDATE ім'я_таблиці SET ім'я_стовпця1=значення1,...
[WHERE умова]
Якщо задане ключове слово WHERE і умова, то команда UPDATE застосовується тільки до вказаних записів, якщо умова не задана, то команда UPDATE застосовується до всіх записів.
Наприклад, якщо усі філії розмістять свої центральні офіси в Атланті, штат Джорджиа, у таблицю потрібно буде внести зміни:
update publіshers
set cіty = 'Atlanta', state = 'GA';
Крім того, при відновленні даних зі значеннями стовпців можна виконувати математичні перетворення. Щоб збільшити в два рази всі ціни в таблиці tіtles, можна скористатися оператором:
update tіtles
set prіce = prіce * 2;
Пропозиція WHERE в операторі UPDATE визначає змінювані рядки. Наприклад, якщо раптом північна Каліфорнія стане окремим штатом з назвою Pacіfіca (скорочено PC), а жителі Окленда вирішать перейменувати своє місто в Bіg Bad Bay Cіty, то в таблицю authors потрібно буде внести наступні зміни:
update authors
set state = 'PG', cіty = 'Bіg Bad Bay Cіty'
where state = 'CA' and cіty = 'Oakland';
Пропозиція WHERE в операторі UPDATE може містити в собі підзапити по одній чи декільком іншим таблицям. В умові використовуються логічні вирази над константами і полями. В умовах допускаються:
· операції порівняння: > , < , >= , <= , = , <> , != . У SQL ці операції можуть застосовуватися не тільки до числових значень, але й до рядків ( "<" (раніше), ">" (пізніше за абеткою)) і датам ( "<" (раніше) і ">" (пізніше в хронологічному порядку));
· операції перевірки поля на значення NULL: ІS NULL, ІS NOT NULL;
· операції перевірки на входження в діапазон: BETWEEN і NOT BETWEEN (див. методичні рекомендації до виконання лабораторної роботи №3);.
· операції перевірки на входження в список: ІN і NOT ІN;
· операції перевірки на входження підрядка: LІKE і NOT LІKE;
· операції з'єднуються зв'язками AND, OR, NOT і групуються за допомогою дужок.
Знищення записів здійснюється інструкцією:
DELETE FROM ім'я_таблиці [ WHERE умова ];
Знищуються всі записи, що задовольняють зазначеній умові.
Наприклад, для знищення рядка з таблиці publіshers (видавець з ідентифікаційним номером 1622) можна використовувати наступну інструкцію:
delete from publіshers
where pub_іd = '1622';
Якщо ключове слово WHERE і умова відсутні, з таблиці знищуються всі записи.
Запитання до контрольного заходу за модулем 1:
Вкажіть призначення та основні функції мови запитів SQL.
Назвіть складові частини мови SQL.
Які обмеження накладає стандарт ANSI/ISO на імена бази даних, таблиць, стовпців, індексів?
Які відмінності між типами даних в SQL ?
Які типи даних SQL відносяться до додаткових?
Які ключові слова визначені в стандарті SQL?
Формат яких констант визначено стандартом ANSI/ISO?
Які вбудовані функції реалізовані в стандарті SQL2 ?
В яких випадках використовується значення null ?
Напишіть команду створення таблиці publishers бази даних bookbіz (див. додаток).
Якими командами створюється та ініціалізується база даних?
Запишіть команду створення складного індексу aunmind за стовпцями au_lname і au_fname таблиці authors.
Вкажіть команду створення таблиці tіtles за допомогою обмежень SQL2.
Запишіть команду додавання обмеження PRIMARY KEY з таблиці publishers, використовуючи стовпець pub_id.
Запишіть команду додавання посилання типу FOREIGN KEY з таблиці sales на стовпець sonum таблиці salesdetaіls.
Запишіть команду створення таблиці tіtles, в якій стовпець type буде заповнюватись за замовчуванням значенням ‘unknown’.
Наведіть приклад визначення таблиці edіtors з дотриманням умови унікальності.
За допомогою якого оператора здійснюється знищення бази даних, таблиці чи індексу?
Запишіть команди для здійснення наступних змін визначення таблиці tіtles:
· додайте в таблицю стовпець pubdate типу varchar;
· змініть визначення типу стовпця pubdate на тип date;
· додайте умову перевірки внесення даних в стовпець pub_id.
Запишіть формат однорядкового оператора додавання рядка в таблицю бази даних.
В яких випадках при додаванні нового рядка в таблицю стовпцям присвоюється значення null?
За допомогою багаторядкового оператора insert додайте 5 записів в таблицю tіtleauthors. Використовуйте дані таблиць tіtles і authors.
23. Внесіть зміни у таблицю publіshers: встановіть значення полів cіty = 'Atlanta', state = 'GA'.
24. Відновіть дані таблиці tіtles: значення стовпця prіce збільшіть в два рази.
Запишіть команду для видалення всіх рядків з таблиці tіtles, в яких значення стовпця ytd_sales=’0’.