Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Иллюстрации к лекциям 6-7 по БД.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
285 Кб
Скачать
☆

Update - обновление строк в таблице

Пример 3. Обновление нескольких строк в таблице:

Исх. Таблица P

PNUM

PNAME

1

Петров

2

Сидоров

3

Ванин

4

Иванов

UPDATE P

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

WHERE P.PNUM = 1;

Рез. Таблица P

PNUM

PNAME

1

Пушников

2

Сидоров

3

Ванин

4

Иванов

Delete - удаление строк в таблице

Пример 4. Удаление нескольких строк в таблице:

Исх. Таблица P

PNUM

PNAME

1

Петров

2

Сидоров

3

Ванин

4

Иванов

DELETE FROM P

WHERE P.PNUM = 1;

Рез. Таблица P

PNUM

PNAME

2

Сидоров

3

Ванин

4

Иванов

Пример 5. Удаление всех строк в таблице:

Исх. Таблица P

PNUM

PNAME

1

Петров

2

Сидоров

3

Ванин

4

Иванов

DELETE FROM P;

Рез. Таблица P

PNUM

PNAME

6-7.3.3. ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ ОПЕРАТОРА SELECT

6-7.3.3.1 ОТБОР ДАННЫХ ИЗ ОДНОЙ ТАБЛИЦЫ

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

Исх. Таблица P

PNUM

PNAME

1

Петров

2

Сидоров

3

Ванин

4

Иванов

SELECT *

FROM P

WHERE P.PNUM > 2;

Рез. Таблица

PNUM

PNAME

3

Ванин

4

Иванов

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

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

Исх. Таблица P

PNUM

PNAME

1

Петров

2

Сидоров

3

Ванин

4

Иванов

5

Сидоров

SELECT DISTINCT P.NAME

FROM P;

Рез. Таблица

PNAME

Петров

Сидоров

Ванин

Иванов

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

Пример 8. Использование скалярных выражений и переименований колонок в запросах (ключевое слово AS…):

Исх. Таблица TOVAR

TNAME

KOL

PRICE

Болт

10

100

Гайка

20

200

Винт

30

300

SELECT

TOVAR.TNAME,

TOVAR.KOL,

TOVAR.PRICE,

"=" AS EQU,

TOVAR.KOL*TOVAR.PRICE AS SUMMA

FROM TOVAR;

В результате получим таблицу с колонками, которых не было в исходной таблице TOVAR:

Рез. Таблица TOVAR

TNAME

KOL

PRICE

EQU

SUMMA

Болт

10

100

=

1000

Гайка

20

200

=

4000

Винт

30

300

=

9000

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

Исх. Таблица PD

PNUM

DNUM

VOLUME

1

1

100

1

2

200

1

3

300

2

1

150

2

2

250

3

1

1000

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

6-7.3.3.2 ОТБОР ДАННЫХ ИЗ НЕСКОЛЬКИХ ТАБЛИЦ

Пример 10. Естественное соединение таблиц:

а) - явное указание условий соединения,

б) - ключевые слова JOIN… USING… позволяют явно указать, по каким из общих колонок таблиц будет производиться соединение

в) - ключевое слово NATURAL JOIN - автоматически соединяет по всем одинаковым полям в таблицах

Таблица PD Таблица P

PNUM

DNUM

VOLUME

1

1

100

1

2

200

1

3

300

2

1

150

2

2

250

3

1

1000

PNUM

PNAME

1

Иванов

2

Петров

3

Сидоров


SELECT

P.PNUM,

P.PNAME,

PD.DNUM,

PD.VOLUME

а)FROM P, PD

WHERE P.PNUM = PD.PNUM;

б)FROM P JOIN PD USING PNUM;

в)FROM P NATURAL JOIN PD;

В результате получим новую таблицу, в которой строки с данными о поставщиках соединены со строками с данными о поставках деталей:

Рез. Таблица

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, помимо условия соединения таблиц, может также содержать и условия отбора строк.

б) Ключевое слово USING позволяет явно указать, по каким из общих колонок таблиц будет производиться соединение.

в) В разделе FROM не указано, по каким полям производится соединение. NATURAL JOIN автоматически соединяет по всем одинаковым полям в таблицах.

Пример 11. Прямое произведение таблиц:

Исх. Таблица P Таблица D

PNUM

PNAME

DNUM

DNAME

1

Иванов

1

Болт

2

Петров

2

Гайка

3

Сидоров

3

Винт

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

Винт

Замечание. Т.к. не указано условие соединения таблиц, то каждая строка первой таблицы соединится с каждой строкой второй таблицы.

Пример 12. Соединение таблиц по произвольному условию. Рассмотрим таблицы поставщиков и деталей, которыми присвоен некоторый статус:

Исх. Таблица P Таблица D

PNUM

PNAME

PSTATUS

DNUM

DNAME

DSTATUS

1

Иванов

4

1

Болт

3

2

Петров

1

2

Гайка

2

3

Сидоров

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

6-7.3.3.3 ИСПОЛЬЗОВАНИЕ ИМЕН КОРРЕЛЯЦИИ (АЛИАСОВ, ПСЕВДОНИМОВ)

Пример 13. Отобрать все пары поставщиков таким образом, чтобы первый поставщик в паре имел статус, больший статуса второго поставщика:

Исх. Таблица P

PNUM

PNAME

PSTATUS

1

Иванов

4

2

Петров

1

3

Сидоров

2

SELECT

P1.PNAME AS PNAME1,

P1.PSTATUS AS PSTATUS1,

P2.PNAME AS PNAME2,

P2.PSTATUS AS PSTATUS2

FROM

P P1, P P2

WHERE P1.PSTATUS1 > P2.PSTATUS2;

В результате получим следующую таблицу:

Рез. Таблица

PNAME1

PSTATUS1

PNAME2

PSTATUS2

Иванов

4

Петров

1

Иванов

4

Сидоров

2

Сидоров

2

Петров

1

6-7.3.3.4 ИСПОЛЬЗОВАНИЕ АГРЕГАТНЫХ ФУНКЦИЙ В ЗАПРОСАХ

Пример 14. Получить общее количество поставщиков (ключевое слово COUNT):

Исх. Таблица P

PNUM

PNAME

PSTATUS

1

Иванов

4

2

Петров

1

3

Сидоров

2

SELECT COUNT(*) AS N

FROM P;

В результате получим таблицу с одним столбцом и одной строкой, содержащей количество строк из таблицы P:

Рез. Таблица

N

3

Пример 15. Получить общее, максимальное, минимальное и среднее количества поставляемых деталей (ключевые слова SUM, MAX, MIN, AVG):

Исх. Таблица PD

PNUM

DNUM

VOLUME

1

1

100

1

2

200

1

3

300

2

1

150

2

2

250

3

1

1000

SELECT

SUM(PD.VOLUME) AS SM,

MAX(PD.VOLUME) AS MX,

MIN(PD.VOLUME) AS MN,

AVG(PD.VOLUME) AS AV

FROM PD;

В результате получим следующую таблицу с одной строкой:

Рез. Таблица

SM

MX

MN

AV

2000

1000

100

333.33333333

6-7.3.3.5 ИСПОЛЬЗОВАНИЕ АГРЕГАТНЫХ ФУНКЦИЙ С ГРУППИРОВКАМИ