Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 2013.doc
Скачиваний:
73
Добавлен:
07.03.2015
Размер:
3.81 Mб
Скачать
    1. Sql-запросы на вставку, модификацию и удаление данных

      1. Добавление новых записей в таблицу (insert)

Общий синтаксис:

а) вставка одной новой строки в таблицу:

INSERT [INTO] <таблица> [(столбцы)]

VALUES (значения)

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

INSERT [INTO] <таблица> [(столбцы)]

<SELECT запрос>.

Правила:

  1. Количество элементов в разделе «Столбцы» должно совпадать с количеством элементов в разделе «Значения»; типы данных должны совпадать либо допускать неявное преобразование;

  2. В случае, когда раздел «Столбцы» отсутствует, раздел «Значения» должен содержать столько же значений, сколько всего столбцов в редактируемой таблице, кроме того, значения должны перечисляться в том же порядке, в каком объявлены столбцы таблицы; поэтому рекомендуется всегда явно указывать список столбцов, в которые будут добавляться новые значения;

  3. В случае использования синтаксиса (б) подзапрос SELECT может быть адресован либо к этой же таблице, либо к другой таблице базы данных, либо к другой базе данных на сервере;

  4. Если для некоторого столбца таблицы задано значение по умолчанию, и требуется в добавляемой записи использовать именно это значение, то в разделе «Значения» для этого столбца необходимо написать ключевое слово DEFAULT.

Примеры:

INSERT INTO detail (detail_name)

VALUES ('Подшипник')

INSERT INTO supply (supplier_id, supply_quantity, supply_cost,

supply_date, detail_id)

VALUES (4, 177, 453.45, '25.09.2009', 1)

INSERT supplier (supplier_type, supplier_name)

VALUES (DEFAULT, 'Смирнов С. С.')

      1. Модификация существующих записей (update)

Общий синтаксис:

UPDATE <таблица>

SET <столбец> = <значение> [, <столбец> = <значение>]

[FROM <таблица(ы) источников>]

[WHERE <условие>]

Примеры:

UPDATE detail

SET weight = 210

UPDATE material

SET material_name = 'Олово'

WHERE material_id = 2

UPDATE delivery

SET department_id = NULL,

delivery_date = delivery_date + 1 /*увеличение даты поставки на день

WHERE delivery_id = 1 OR department_id > 3

UPDATE detail

SET detail_name = detail_name + '!!!'

WHERE detail_name LIKE '_а%' AND weight BETWEEN 6 AND 10

      1. Удаление записей из таблицы (delete)

Общий синтаксис:

DELETE<таблица>

[WHERE] <условие>

Примеры:

DELETE detail

WHERE detail_id IN (2, 5, 8)

DELETE detail

WHERE weight IS NULL

DELETE detail

Задание:

  • Заполните базу данных средствами ManagementStudio. Для этого следует воспользоваться командой «Открыть таблицу» контекстного меню таблицы в «Обозревателе объектов» (рис. 4.1).

  • Составьте 9 запросов на модификацию данных: 3 INSERT, 3UPDATE, 3DELETE.

  1. Запросы на выборку данных

    1. Общий синтаксис запроса select

SELECT [DISTINCT] <список столбцов>

FROM <таблица(-ы) источник>

[WHERE <ограничения>]

[GROUP BY <столбцы из раздела SELECT или операция над этими столбцами>]

[HAVING <ограничения на результаты GROUP BY>]

[ORDER BY <список столбцов для сортировки>]

[FOR XML …]

Разделы SELECT и FROM обязательно должны присутствовать в каждом запросе; остальные разделы могут отсутствовать или присутствовать частично.

    1. Примеры реализации запросов

Наиболее простые запросы:

1. Выбрать название и вес деталей

Рис. 5.1. Результаты выполнения запроса №1

2. Выбрать всю информацию из таблицы материалов

Рис. 5.2. Результаты выполнения запроса №2

Уникальность DISTINCT

3. Выбрать уникальные коды поставщиков из таблицы поставок

Рис. 5.3. Результаты выполнения запроса №3

Ограничение WHERE

4. Выбрать количество и даты поставки детали с кодом 1

Рис. 5.4. Результаты выполнения запроса №4

5. Выбрать названия поставщиков с кодами 1, 4 и 6

или

Рис. 5.5. Результаты выполнения запроса №5

6. Выбрать всю информацию о поставках, сделанных до 1.10.2009

Рис. 5.6. Результаты выполнения запроса №6

7. Выбрать всю информацию о деталях, не начинающихся на букву «В» (в любом регистре) и чей вес меньше 50

Рис. 5.7. Результаты выполнения запроса №7

8. Выбрать название и код материала для деталей с весом от 5 до 10 г или имеющих в названии букву «н» в третьей позиции

Рис. 5.8. Результаты выполнения запроса №8

9. Выбрать названия поставщиков длиной не больше 15-и символов

Рис. 5.9. Результаты выполнения запроса №9

10. Выбрать месяца и годы поставок деталей

Рис. 5.10. Результаты выполнения запроса №10

Сортировка ORDER BY

11. Упорядочить поставки сначала по коду поставщика, а затем по дате поставки

Рис. 5.11. Результаты выполнения запроса №11

12. Выбрать названия поставщиков с кодами 4, 6, 8, 9, упорядоченных по алфавиту в обратном порядке

Рис. 5.12. Результаты выполнения запроса №12

Агрегация и группировка GROUP BY

13. Посчитать количество деталей, для которых задан вес

или

Рис. 5.13. Результаты выполнения запроса №13

14. Определить средний вес деталей из материала с кодом 2

Рис. 5.14. Результаты выполнения запроса №2

15. Из поставок, совершенных до 1.10.2009, выбрать самую крупную поставку и самую мелкую

Рис. 5.15. Результаты выполнения запроса №15

16. Для поставщиков с кодами в диапазоне 5 - 8 посчитать суммарное количество поставленных ими деталей

Рис. 5.16. Результаты выполнения запроса №16

17. Посчитать количество поставленных деталей в каждом месяце каждого года; результаты упорядочить в порядке убывания года и месяца

Рис. 5.17. Результаты выполнения запроса №17

Ограничение на группировки HAVING

18. Выбрать материалы, для которых суммарный вес выполненных из них деталей не больше 20

Рис. 5.18. Результаты выполнения запроса №18

19. Из поставок 2008-го года выбрать детали, поставлявшиеся более одного раза

Рис. 5.19. Результаты выполнения запроса №19

Преобразование типов CAST

20. Получить сведения о датах поставок в текстовом виде

Рис. 5.20. Результаты выполнения запроса №20

21. Получить сведения из таблицы деталей в виде строк «Деталь X имеет вес Y»

Рис. 5.21. Результаты выполнения запроса №21

Альтернативы CASE

22. Разделить детали на легкие (весом до 20), средние (между 20 и 50) и тяжелые

Рис. 5.22. Результаты выполнения запроса №22

Обработка NULL-значений

23. Получить сведения о деталях и их весах, причем если у детали вес не задан, то вместо NULL написать -100

Рис. 5.23. Результаты выполнения запроса №23

Функция существования EXISTS

24. Выбрать название и код материала только тех деталей, которые когда-либо поставлялись

Рис. 5.24. Результаты выполнения запроса №24

25. Выбрать названия тех материалов, из которых не изготовлена ни одна деталь

Рис. 5.25. Результаты выполнения запроса №25

Подзапросы

26. Получить сведения о самой последней (по дате) поставке

Рис. 5.26. Результаты выполнения запроса №26

27. Получить все поставки деталей из материала с кодом 2

Рис. 5.27. Результаты выполнения запроса №27

28. Для каждого поставщика получить сведения о самой первой (по дате) его поставке

Рис. 5.28. Результаты выполнения запроса №28

29. Для каждого поставщика получить его имя и дату последнего заказа

Рис. 5.29. Результаты выполнения запроса №29

Объединение таблиц JOIN

30. Получить таблицу вида: название детали, название материала, из которого выполнена эта деталь

или

или

Рис. 5.30. Результаты выполнения запроса №30

31. Получить таблицу вида: поставщик, название детали, количество и дата поставки для деталей, у которых задан вес

Рис. 5.31. Результаты выполнения запроса №31

32. Выбрать всю информацию о тех деталях, которые когда-либо поставлялись

Рис. 5.32. Результаты выполнения запроса №32

33. Для каждого поставщика посчитать суммарную величину его поставок

Рис. 5.33. Результаты выполнения запроса №33

34. Выбрать названия материалов и сделанных из них деталей

Рис. 5.34. Результаты выполнения запроса №34

35. Получить все данные о поставщиках, поставках и деталях

Рис. 5.35. Результаты выполнения запроса №35

Объединение таблиц UNION

36. Получить таблицу названий и весов деталей, причем последняя строка таблицы должна содержать итоги в виде суммарного веса всех деталей

Рис. 5.36. Результаты выполнения запроса №36

37. Получить таблицу из двух полей, где первое поле – название детали, материала, поставщика или дата поставки, а второе поле – длина строки из первого поля

Рис. 5.37. Результаты выполнения запроса №37