Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МУ КП ИОСУ 2015.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
5 Мб
Скачать
☆

I nsert into poverka values (1, '05.30.2012', 1, 11234, 1, 'соответствует')

8. Запросы к базе данных

8.1. Запрос- модификация структуры таблицы sred (добавление столбца)

ALTER TABLE sred ADD sred_firma VARCHAR(50)

8.2. Запрос- изменение данных в таблице sred

UPDATE sred SET sred_firma = 'ОАО "Электроприбор" г. Чебоксары' WHERE sred_kod='ЩК120'

8.3. Запрос-удаление строк таблицы poversotr

D ELETE FROM poversotr WHERE pov_tabnom=12346

Оператор SELECT имеет следующий формат:

SELECT [ALL | DISTINCT ] {*|[имя_столбца

[AS новое_имя]]} [,...n]

FROM имя_таблицы [[AS] псевдоним] [,...n]

[WHERE <условие_поиска>]

[GROUP BY имя_столбца [,...n]]

[HAVING <критерии выбора групп>]

[ORDER BY имя_столбца [ASC| DESC] [,...n]]

Обработка элементов оператора SELECT выполняется в следующей последовательности:

  1. FROM – определяются имена используемых таблиц;

  2. WHERE – выполняется фильтрация строк таблицы в соответствии с заданными условиями;

  3. GROUP BY – образуются группы строк, имеющих одно и то же значение в указанном столбце;

  4. HAVING – фильтруются группы строк таблицы в соответствии с указанным условием;

  5. SELECT – устанавливается, какие столбцы должны присутствовать в выходных данных;

  6. ORDER BY – определяется упорядоченность результатов выполнения операторов (сортировка).

Порядок предложений и фраз в операторе SELECT не может быть изменен. Только два предложения SELECT и FROM являются обязательными, все остальные могут быть опущены. SELECT – закрытая операция: результат запроса к таблице представляет собой другую таблицу.

С помощью WHERE-параметра пользователь определяет, какие блоки данных из приведенных в списке FROM таблиц появятся в результате запроса. За ключевым словом WHERE следует перечень условий поиска, определяющих те строки, которые должны быть выбраны при выполнении запроса. Существует пять основных типов условий поиска:

Сравнение: сравниваются результаты вычисления одного выражения с результатами вычисления другого (операторы сравнения: = – равенство; < – меньше; > – больше; <= – меньше или равно; >= – больше или равно; <> – не равно).

Диапазон: проверяется, попадает ли результат вычисления выражения в заданный диапазон значений (Оператор BETWEEN используется для поиска значения внутри некоторого интервала, определяемого своими минимальным и максимальным значениями. При этом указанные значения включаются в условие поиска, например, WHERE Цена Between 100 And 150).

Принадлежность множеству: проверяется, принадлежит ли результат вычислений выражения заданному множеству значений (Оператор IN используется для сравнения некоторого значения со списком заданных значений, при этом проверяется, соответствует ли результат вычисления выражения одному из значений в предоставленном списке. NOT IN используется для отбора любых значений, кроме тех, которые указаны в представленном списке. Например, WHERE Город IN (‘Москва’, ‘Самара’)).

Соответствие шаблону: проверяется, отвечает ли некоторое строковое значение заданному шаблону (В операторе LIKE используются символы % и _. % - заменяет 0 или n-е количество символов, _ - 0 или 1 символ)

Значение NULL: проверяется, содержит ли данный столбец определитель NULL (неизвестное значение).

8.4. Запрос, реализующий операцию естественного соединения таблиц zayvka, poverka, poversotr, velich, с использованием конструкции WHERE

SELECT poverka.poverka_data, poversotr.pov_fam, poverka.poverka_otm, velich.vel_naim, zayvka.zayvka_srok, zayvka.prib_nom

FROM zayvka, poverka, poversotr, velich

W HERE zayvka.zayvka_s = poverka.zayvka_s AND poverka.pov_tabnom = poversotr.pov_tabnom AND poverka.vel_kod = velich.vel_kod

8.5. Запрос, реализующий операцию естественного соединения таблиц dogovor и zakazchik, с использованием конструкции INNER JOIN .. ON

SELECT dogovor.dog_nom, dogovor.dog_data, dogovor.dog_sum, zakazchik.zak_fio, zakazchik.zak_naim

F ROM dogovor INNER JOIN zakazchik ON dogovor.zak_kod = zakazchik.zak_kod

8.6. Запрос на выборку данных из таблицы poversotr, реализующий операцию вертикального среза

SELECT pov_tabnom, pov_fam, pov_oklad FROM poversotr

8.7. Запрос на выборку данных из таблицы sred, реализующий операцию горизонтального среза

S ELECT sred_kod, sred_naim ,sred_firma FROM sred

WHERE sred_naim LIKE '%Щитовой%'

8.8. Запрос на выборку данных, реализующий операцию произведения таблиц pribor, sred

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

SELECT * FROM pribor, sred

8.9. Запрос на выборку данных, реализующий операцию объединения (velich_1 velich)

Для выполнения операции объединения необходимо иметь две таблицы совместимые по типу. Создадим таблицу, совместимую по типу

CREATE TABLE velich_1

(vel_kod SMALLINT NOT NULL PRIMARY KEY,

vel_naim VARCHAR(50))

Заполним новую таблицу строками.

SELECT vel_kod, vel_naim FROM velich UNION SELECT vel_kod, vel_naim FROM velich_1

Строки-дубликаты в результате запроса удаляются. Свойство первичного ключа теряется.

Запросы 8.9 и 8.10 выполнены с использованием техники вложенного запроса

8.9. Запрос на выборку данных, реализующий операцию вычитания (velich_1 – velich)

Для выполнения операции таблицы должны быть совместимые по типу.

SELECT vel_kod, vel_naim FROM velich_1

WHERE NOT EXISTS

(SELECT vel_kod, vel_naim

FROM velich WHERE velich_1.vel_kod=velich.vel_kod

A ND velich_1.vel_naim=velich.vel_naim)

8.10. Запрос на выборку данных, реализующий операцию пересечения (velich_1 velich)

Для выполнения операции таблицы должны быть совместимые по типу.

SELECT vel_kod, vel_naim FROM velich_1

WHERE EXISTS

(SELECT vel_kod, vel_naim

FROM velich WHERE velich_1.vel_kod=velich.vel_kod

AND velich_1.vel_naim=velich.vel_naim)

С помощью итоговых (агрегатных) функций в рамках SQL-запроса можно получить ряд обобщающих статистических сведений о множестве отобранных значений выходного набора. Итоговые функции могут использоваться только в списке предложения SELECT и в составе предложения HAVING. Во всех других случаях это недопустимо. Если список в предложении SELECT содержит итоговые функции, а в тексте запроса отсутствует фраза GROUP BY, обеспечивающая объединение данных в группы, то ни один из элементов списка предложения SELECT не может включать каких-либо ссылок на поля, за исключением ситуации, когда поля выступают в качестве аргументов итоговых функций.

Пользователю доступны следующие основные итоговые (агрегатные) функции:

Count (Выражение) - определяет количество записей в выходном наборе SQL-запроса, часто вместо (Выражение) используют символ * или имя столбца таблицы;

Min/Max (Выражение) - определяют наименьшее и наибольшее из множества значений в некотором поле запроса;

Avg (Выражение) - эта функция позволяет рассчитать среднее значение множества значений, хранящихся в определенном поле отобранных запросом записей. Оно является арифметическим средним значением, т.е. суммой значений, деленной на их количество.

Sum (Выражение) - вычисляет сумму множества значений, содержащихся в определенном поле отобранных запросом записей.

Чаще всего в качестве выражения выступают имена столбцов. Выражение может вычисляться и по значениям нескольких таблиц.

Все эти функции оперируют со значениями в единственном столбце таблицы или с арифметическим выражением и возвращают единственное значение. Функции COUNT, MIN и MAX применимы как к числовым, так и к нечисловым полям, тогда как функции SUM и AVG могут использоваться только в случае числовых полей, за исключением COUNT(*).

8.11. Запросы с использованием агрегации данных и группировки

1. для определения количества поверок в разрезе дат поверок

S ELECT COUNT(*) AS 'количество поверок', poverka_data AS 'дата поверки' FROM poverka GROUP BY poverka_data

2. для определния дат, в которые проводилось более 1-ой поверки

S ELECT COUNT(*) AS 'количество поверок', poverka_data AS 'дата поверки' FROM poverka GROUP BY poverka_data HAVING COUNT(*)>1

3. для определения наибольшего оклада поверщиков

SELECT MAX(pov_oklad) AS 'наибольший оклад' FROM poversotr

8.12. Запросы с использованием функций

1. с использованием функции для работы с данными типа DATETIME для определения номера месяца поступления поверщика на работу

S ELECT pov_fam AS 'фамилия', MONTH(pov_datapost)AS 'номер месяца поступления' FROM poversotr

2. с использованием строковой функции LEN для определения количества символов в наименовании СИ

SELECT sred_naim AS 'нименование СИ ', LEN(sred_naim) AS 'количество букв в наименовании СИ' FROM sred

8.13. Запросы с использованием техники вложенного запроса для определения поверщиков, имеющих наибольший оклад

S ELECT pov_fam, pov_ima, pov_oklad FROM poversotr WHERE pov_oklad=(SELECT MAX(pov_oklad) FROM poversotr)

8.14. Запросы для создания представлений

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

Создание и изменение представлений:

CREATE| ALTER VIEW имя _ представления

AS SELECT_оператор

C REATE VIEW dogzak AS SELECT dogovor.dog_nom, zakazchik.zak_fio FROM dogovor, zakazchik WHERE dogovor.zak_kod=zakazchik.zak_kod