- •Порядок оформления и защиты курсового проекта
- •Требования к содержанию проекта
- •Пример выполнения этапов проектирования
- •1. Текстовое описание предметной области «Метрологическая лаборатория»
- •2. Документы предметной области
- •Реквизиты сторон:
- •Б) Заявка на поверку средств измерений
- •6. Логическая модель данных на основе инфологической модели данных
- •Физическая модель данных
- •4. Диаграмма функциональных зависимостей на основе анализа
- •5. Нормализованная инфологическая модель данных на основе анализа представленных документов предметной области*
- •I nsert into poverka values (1, '05.30.2012', 1, 11234, 1, 'соответствует')
- •8. Запросы к базе данных
- •9. Процедуры
- •10. Триггеры
- •Рекомендуемые предметные области для проектирования
- •Рекомендуемые источники:
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 выполняется в следующей последовательности:
FROM – определяются имена используемых таблиц;
WHERE – выполняется фильтрация строк таблицы в соответствии с заданными условиями;
GROUP BY – образуются группы строк, имеющих одно и то же значение в указанном столбце;
HAVING – фильтруются группы строк таблицы в соответствии с указанным условием;
SELECT – устанавливается, какие столбцы должны присутствовать в выходных данных;
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
