yandex rtb 1
ГоловнаЗворотній зв'язок
yande share

Організація баз даних і знань

2.3 Оператори SQL

Основу мови SQL становлять оператори, умовно розбиті на кілька груп за виконуваними функціями.

Можна виділити такі групи операторів (перераховані не всі оператори SQL):

Оператори DDL (Data Definition Language) - оператори визначення об'єктів БД:

·       CREATE SCHEMA - створити схему БД;

·       DROP SHEMA - видалити схему БД;

·       CREATE TABLE - створити таблицю;

·       ALTER TABLE - змінити таблицю;

·       DROP TABLE - видалити таблицю;

·       CREATE DOMAIN - створити домен;

·       ALTER DOMAIN - змінити домен;

·       DROP DOMAIN - видалити домен;

·       CREATE COLLATION - створити послідовність;

·       DROP COLLATION - видалити послідовність;

·       CREATE VIEW - створити подання;

·       DROP VIEW - видалити подання.

Оператори DML (Data Manipulation Language) - оператори маніпулювання даними:

·       SELECT - відібрати рядок із таблиць;

·       INSERT - додати рядок у таблицю;

·       UPDATE - змінити рядок у таблиці;

·       DELETE - видалити рядок у таблиці;

·       COMMIT - зафіксувати внесені зміни;

·       ROLLBACK - відкотити внесені зміни.

Оператори захисту й керування даними:

·       CREATE ASSERTION - створити обмеження;

·       DROP ASSERTION - видалити обмеження;

·       GRANT - надати привілею користувачеві або додатку на маніпулювання об'єктами;

·       REVOKE - скасувати привілею користувача або додатка.

Крім того, є групи операторів установки параметрів сеансу, одержання інформації про БД, оператори статичного SQL, оператори динамічного SQL.

Найбільш важливими для користувача є оператори маніпулювання даними (DML).

Приклади використання операторів маніпулювання даними

INSERT - вставка рядків у таблицю

Приклад. Вставка одного рядка в таблицю:

INSERT INTO

  P (PNUM, PNAME)

  VALUES (4, "Іванов");

Приклад. Вставка в таблицю декількох рядків, обраних з іншої таблиці (у таблицю TMP_TABLE уставляються дані про постачальників з таблиці P, що мають номери, більші 2):

INSERT INTO

  TMP_TABLE (PNUM, PNAME)

  SELECT PNUM, PNAME

    FROM P

    WHERE P.PNUM>2;

UPDATE - відновлення рядків у таблиці

Приклад. Відновлення декількох рядків у таблиці:

UPDATE P

  SET PNAME = "Пушников"

  WHERE P.PNUM = 1;

DELETE - видалення рядків у таблиці

Приклад. Видалення декількох рядків у таблиці:

DELETE FROM P

  WHERE P.PNUM = 1;

Приклад. Видалення всіх рядків у таблиці:

DELETE FROM P;

Приклади використання оператора SELECT

Оператор SELECT є фактично найважливішим для користувача й самим складним оператором SQL. Він призначений для вибірки даних із таблиць, тобто він, властиво, і реалізує одне з їхніх основних призначень БД - надавати інформацію користувачеві.

Оператор SELECT завжди виконується над деякими таблицями, що входять у БД.

Насправді в БД можуть бути не тільки постійно збережені таблиці, а також тимчасові таблиці й так звані подання. Подання - це SELECT-вираз, що зберігається в БД. З погляду користувачів подання - це таблиця, яка не зберігається постійно в БД, а "виникає" у момент звертання до неї. З погляду оператора SELECT і постійно збережені таблиці, і тимчасові таблиці, й подання виглядають зовсім однаково. Звичайно при реальному виконанні оператора SELECT системою враховуються розходження між збереженими таблицями й поданнями, але ці розходження сховані від користувача.

Результатом виконання оператора SELECT завжди є таблиця. Таким чином, за результатами дій оператор SELECT схожий на оператори реляційної алгебри. Будь-який оператор реляційної алгебри може бути виражений певним чином сформульованим оператором SELECT. Складність оператора SELECT визначається тим, що він містить у собі всі можливості реляційної алгебри, а також додаткові можливості, яких у реляційній алгебрі немає.

Відбір даних з однієї таблиці

Приклад. Вибрати всі дані з таблиці постачальників (ключові слова SELECTFROM…):

SELECT*

FROM P;

У результаті одержимо нову таблицю, що містить повну копію даних із вихідної таблиці P.

Приклад. Вибрати всі рядки з таблиці постачальників, що задовольняють деякій умові (ключове слово WHERE…):

SELECT*

FROM P

WHERE P...PNUM>2;

Як умову в розділі WHERE можна використовувати складні логічні вирази, що використовують поля таблиць, константи, порівняння (>, <, = і т.д.), дужки, союзи AND й OR, заперечення NOT.

Приклад. Вибрати деякі колонки з вихідної таблиці (вказівка списку колонок, що відбирають):

SELECT P.NAME

  FROM P;

У результаті одержимо таблицю з однією колонкою, що містить всі найменування постачальників. Якщо у вихідній таблиці були присутні кілька постачальників з різними номерами, але однаковими найменуваннями, то в результуючій таблиці будуть рядки з повтореннями - дублікати рядків автоматично не відкидаються.

Приклад. Вибрати деякі колонки з вихідної таблиці, видаливши з результату повторювані рядки (ключове слово DISTINCT):

SELECT DISTINCT P.NAME

  FROM P;

Використання ключового слова DISTINCT призводить  до того, що у результуючій таблиці будуть вилучені всі повторювані рядки.

Приклад. Використання скалярних виразів і перейменувань колонок у запитах (ключове слово AS…):

SELECT TOVAR...TNAME, TOVAR.KOL,

                TOVAR.PRICE, "="AS EQU,

                TOVAR.KOL*TOVAR.PRICE AS SUMMA

FROM TOVAR;

У результаті одержимо таблицю з колонками, яких не було у вихідній таблиці TOVAR:

 

TNAME

KOL

PRICE

EQU

SUMMA

Болт

10

100

=

1000

Гайка

20

200

=

4000

Гвинт

30

300

=

9000

 

 

Приклад. Упорядкування результатів запиту (ключове слово ORDER BY…):

SELECT PD...PNUM, PD.DNUM, PD.VOLUME

FROM PD

ORDER BY DNUM;

В результаті одержимо наступну таблицю, впорядковану по полю DNUM:

 

PNUM

DNUM

VOLUME

1

1

100

2

1

150

3

1

1000

1

2

200

2

2

250

1

3

300

 

Приклад. Упорядкування результатів запиту по декількох полях зі зростанням або убуванням (ключові слова ASC, DESC):

SELECT   PD.PNUM, PD.DNUM, PD.VOLUME

FROM PD

ORDER BY  DNUM ASC, VOLUME DESC;

У результаті одержимо таблицю, у якій рядки йдуть у порядку зростання значення поля DNUM, а рядки з однаковим значенням DNUM ідуть у порядку убування значення поля VOLUME:

 

PNUM

DNUM

VOLUME

3

1

1000

2

1

150

1

1

100

2

2

250

1

2

200

1

3

300

 

Якщо явно не зазначені ключові слова ASC або DESC, то за замовчуванням береться впорядкування по зростанню (ASC).

Відбір даних із декількох таблиць

Приклад. Природне з'єднання таблиць (спосіб 1 - явна вказівка умов з'єднання):

SELECT   P.PNUM, P.PNAME, PD.DNUM,

                   PD.VOLUME

FROM P, PD

WHERE P.PNUM = PD.PNUM;

У результаті одержимо нову таблицю, у якій рядки з даними про постачальників з'єднані з рядками з даними про поставки деталей:

 

PNUM

PNAME

DNUM

VOLUME

1

Іванов

1

100

1

Іванов

2

200

1

Іванов

3

300

2

Петров

1

150

2

Петров

2

250

3

Сидоров

1

1000

 

Таблиці, що з'єднуються, перелічені у розділі FROM оператора, умова з'єднання наведена у розділі WHERE. Розділ WHERE, крім умови з'єднання таблиць, може також містити й умови відбору рядків.

Приклад. Природне з'єднання таблиць (спосіб 2 - ключові слова JOIN…USING…):

SELECT PNUM, P.PNAME, PD.DNUM,

                PD.VOLUME

FROM P JOIN PD USING PNUM;

Ключове слово USING дозволяє явно вказати, за якими із загальних колонок таблиць буде вироблятися з'єднання.

Приклад. Природне з'єднання таблиць (спосіб 3 - ключове слово NATURAL JOIN):

SELECT   P.PNUM, P.PNAME, PD.DNUM,

                 PD.VOLUME

FROM P NATURAL JOIN PD;

У розділі FROM не зазначено, по яких полях виробляється з'єднання. NATURAL JOIN автоматично з'єднує по всіх однакових полях у таблицях.

Приклад. Природне з'єднання трьох таблиць:

SELECT   P.PNAME, D.DNAME, PD.VOLUME

FROM   P NATURAL JOIN PD NATURAL JOIN D;

У результаті одержимо таку таблицю:

 

PNAME

DNAME

VOLUME

Іванов

Болт

100

Іванов

Гайка

200

Іванов

Гвинт

300

Петров

Болт

150

Петров

Гайка

250

Сидоров

Болт

1000

 

Приклад. Прямий добуток таблиць:

SELECT   P.PNUM, P.PNAME, D.DNUM,

                 D.DNAME

FROM P, D;

У результаті одержимо таку таблицю:

 

PNUM

PNAME

DNUM

DNAME

1

Іванов

1

Болт

1

Іванов

2

Гайка

1

Іванов

3

Гвинт

2

Петров

1

Болт

2

Петров

2

Гайка

2

Петров

3

Гвинт

3

Сидоров

1

Болт

3

Сидоров

2

Гайка

3

Сидоров

3

Гвинт

 

Оскільки не зазначена умова з'єднання таблиць, то кожен рядок першої таблиці з'єднується з кожним рядком другої таблиці.

Приклад. З'єднання таблиць за довільною умовою. Розглянемо таблиці постачальників і деталей, яким присвоєний деякий статус.

 

Таблиця 2.1 – Відношення P (Постачальники)

 

PNUM

PNAME

PSTATUS

1

Іванов

4

2

Петров

1

3

Сидоров

2

 

Таблиця 2.2 – Відношення D (Деталі)

 

DNUM

DNAME

DSTATUS

1

Болт

3

2

Гайка

2

3

Гвинт

1

 

Відповідь на запитання "які постачальники мають право поставляти певні деталі?" дає такий запит:

SELECT  P.PNUM, P.PNAME,

                 P.PSTATUS,

                 D.DNUM, D.DNAME, D.DSTATUS

FROM P, D

WHERE P.PSTATUS >= D.DSTATUS;

У результаті одержимо таку таблицю:

 

PNUM

PNAME

PSTATUS

DNUM

DNAME

DSTATUS

1

Іванов

4

1

Болт

3

1

Іванов

4

2

Гайка

2

1

Іванов

4

3

Гвинт

1

2

Петров

1

3

Гвинт

1

3

Сидоров

2

2

Гайка

2

3

Сидоров

2

3

Гвинт

1

 

 

20