МОСКОВСКИЙ ЭНЕРГЕТИЧЕСКИЙ ИНСТИТУТ (ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ)
ИНСТИТУТ АВТОМАТИКИ И ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИ
КАФЕДРА ПРИКЛАДНОЙ МАТЕМАТИКИ
Лабораторная работа № 5.
Одномерные статические запросы и хранимые процедуры.
Выполнили
студенты группы А-13-08
каф. Прикладной Математики
Буренков Сергей
Захаров Антон
Москва, 2011
Задание 1
Выдать статистику по учебным заведениям вашего государства только прием 1990 года. Отчет должен начинаться заголовком и цифрой общим количеством записей по запросу (по приему 90-го года). Далее таблица, включающая перечень учебных заведений с цифрами, не равными нулю.
Запросы:
Вариант 1 (в диалоговом SQL)
SELECT COUNT(*) AS 'Было принято учащихся в 1990 году'
FROM arm
WHERE gp='90'
go
SELECT uch_zavedenie AS 'Учебное заведение', COUNT(*) AS 'Количество принятых учащихся'
FROM arm
JOIN vuz ON vuz.cod = arm.vuz_k
WHERE gp='90'
GROUP BY uch_zavedenie
ORDER BY uch_zavedenie
Вариант 2 (с помощью хранимой процедуры)
CREATE PROCEDURE lab5_p1 AS
BEGIN
SELECT COUNT(*) AS 'Было принято учащихся в 1990 году'
FROM arm
WHERE gp='90'
SELECT uch_zavedenie AS 'Учебное заведение', COUNT(*) AS 'Количество принятых учащихся'
FROM arm
JOIN vuz ON vuz.cod = arm.vuz_k
WHERE gp='90'
GROUP BY uch_zavedenie
ORDER BY uch_zavedenie
END
Результаты:
Вариант 1 (в диалоговом SQL)
Вариант 2 (с помощью хранимой процедуры)
Задание 2
Выдать статистику по городам вашего государства. Отчет должен начинаться с соответствующего заголовка и цифры - общего количества записей по запросу. Далее таблица, включающая перечень городов с цифрами, не равными нулю.
Запросы:
Вариант 1 (в диалоговом SQL)
SELECT COUNT(*) AS 'Всего учебных заведений'
FROM vuz_gorod
WHERE nazvanie_stran LIKE('АРМЕНИЯ %')
go
SELECT vuz_gorod.nazvanie_goroda AS 'Название города', COUNT(*) AS 'Количество учебных заведений'
FROM vuz_gorod
JOIN gorod ON gorod.cod = vuz_gorod.cod_goroda
WHERE nazvanie_stran LIKE('АРМЕНИЯ %')
GROUP BY vuz_gorod.nazvanie_goroda
ORDER BY vuz_gorod.nazvanie_goroda
Вариант 2 (с помощью хранимой процедуры)
CREATE PROCEDURE lab5_p2 AS
BEGIN
SELECT COUNT(*) AS 'Всего учебных заведений'
FROM vuz_gorod
WHERE nazvanie_stran LIKE('АРМЕНИЯ %')
SELECT vuz_gorod.nazvanie_goroda AS 'Название города', COUNT(*) AS 'Количество учебных заведений'
FROM vuz_gorod
JOIN gorod ON gorod.cod = vuz_gorod.cod_goroda
WHERE nazvanie_stran LIKE('АРМЕНИЯ %')
GROUP BY vuz_gorod.nazvanie_goroda
ORDER BY vuz_gorod.nazvanie_goroda
END
Результаты:
Вариант 1 (в диалоговом SQL)
Вариант 2 (с помощью хранимой процедуры)
Задание 3
Выдать статистику по вашему государству по следующим специальностям: 0202, 0203, 0205, 0206 (общее число по каждой специальности), а также в каких учебных заведениях и сколько обучается по этим специальностям. Отчет должен начинаться с соответствующего заголовка. Далее четыре таблицы, где каждая таблица начинается с заголовка: СПЕЦИАЛЬНОСТЬ <шифр> - ВСЕГО <цифра> (не равная нулю), а заканчивается перечнем учебных заведений с цифрами, не равными нулю.
Запросы:
Вариант 1 (в диалоговом SQL)
SELECT 'Статистика по специальностям 0202, 0203, 0205 и 0206'
go
SELECT '0202' AS 'Специальность', COUNT(*) AS 'Всего'
FROM arm
WHERE spec = '000202'
go
SELECT uch_zavedenie AS 'Учебное заведение', COUNT(*) AS 'Количество обучаемых'
FROM arm
JOIN vuz ON vuz.cod = vuz_k
WHERE spec = '000202'
GROUP BY uch_zavedenie
ORDER BY uch_zavedenie
go
SELECT '0203' AS ' Специальность', COUNT(*) AS 'Всего'
FROM arm
WHERE spec = '000203'
go
SELECT uch_zavedenie AS 'Учебное заведение', COUNT(*) AS 'Количество обучаемых'
FROM arm
JOIN vuz ON vuz.cod = vuz_k
WHERE spec = '000203'
GROUP BY uch_zavedenie
ORDER BY uch_zavedenie
go
SELECT '0205' AS ' Специальность', COUNT(*) AS 'Всего'
FROM arm
WHERE spec = '000205'
go
SELECT uch_zavedenie AS 'Учебное заведение', COUNT(*) AS 'Количество обучаемых'
FROM arm
JOIN vuz ON vuz.cod = vuz_k
WHERE spec = '000205'
GROUP BY uch_zavedenie
ORDER BY uch_zavedenie
go
SELECT '0206' AS ' Специальность', COUNT(*) AS 'Всего'
FROM arm
WHERE spec = '000206'
go
SELECT uch_zavedenie AS 'Учебное заведение', COUNT(*) AS 'Количество обучаемых'
FROM arm
JOIN vuz ON vuz.cod = vuz_k
WHERE spec = '000206'
GROUP BY uch_zavedenie
ORDER BY uch_zavedenie
Вариант 2 (с помощью хранимой процедуры)
CREATE PROCEDURE lab5_p3 @num VARCHAR(6) AS
BEGIN
PRINT 'Специальность ' + @num
SELECT COUNT(*) AS 'Всего'
FROM arm
WHERE spec = @num
SELECT uch_zavedenie AS 'Учебное заведение', COUNT(*) AS 'Количество обучаемых'
FROM arm
JOIN vuz ON vuz.cod = vuz_k
WHERE spec = @num
GROUP BY uch_zavedenie
ORDER BY uch_zavedenie
END
SELECT 'Статистика по специальностям 0202, 0203, 0205 и 0206'
EXEC lab5_p3 '000202'
EXEC lab5_p3 '000203'
EXEC lab5_p3 '000205'
EXEC lab5_p3 '000206'
Результаты:
Вариант 1 (в диалоговом SQL)
Вариант 2 (с помощью хранимой процедуры)