Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Методическое пособие 241

.pdf
Скачиваний:
4
Добавлен:
30.04.2022
Размер:
675.96 Кб
Скачать

Рис. 1. Окно текстового редактора для работы с SQL-запросами

3. Для указания базы данных назначения в окне текстового редактора написать команду:

use learn_db;

4. Написать запросы на выборку из одной таблицы

4.1.выборка всех полей из таблицы «student»:

SELECT * FROM student;

4.2. выборка полей «lastname», «firstname», «secondname» из таблицы «student» с заданием алиасов:

SELECT lastname AS [фамилия], firstname AS [имя],

19

secondname AS [отчество] FROM student;

4.3. выборка из таблицы «student» с сортировкой по полю «lastname» по возрастанию:

SELECT lastname, firstname, secondname FROM student ORDER BY lastname;

4.4. выборка из таблицы «student» с сортировкой по полю «lastname» по возрастанию, по полю «firstname» по убыванию:

SELECT lastname, firstname, secondname FROM student ORDER BY lastname ASC, firstname DESC;

4.5. выборка из таблицы «student» с простым условием отбора со сравнением – студенты группы с кодом 1:

SELECT * FROM student WHERE id_group=1;

4.6. выборка из таблицы «student» с составным условием отбора – студенты группы с кодом 1 и поступившие в 2015 году:

SELECT * FROM student WHERE id_group=1 AND admissionyear=2015;

4.7. выборка из таблицы «student» с простым условием отбора с BETWEEN – студенты, поступившие в период с 2013 года по 2017:

SELECT * FROM student WHERE admissionyear BETWEEN 2013 and 2017;

4.8. выборка из таблицы «student» с простым условием отбора с IN – студенты групп с кодами 1,3,9:

SELECT * FROM student WHERE id_group IN (1,3,9);

4.9. выборка из таблицы «student» с простым условием отбора с LIKE по первой букве фамилии:

20

SELECT * FROM student WHERE lastname LIKE ‘А%’;

4.10. выборка из таблицы «student» с простым условием отбора с LIKE по первой и предпоследней букве фамилии:

SELECT * FROM student WHERE lastname LIKE ‘А%к_’;

4.11. выборка из таблицы «student» с группировкой и подсчетом количества – количество студентов в каждой группе:

SELECT id_group, COUNT(id) AS studcount FROM student GROUP BY id_group;

4.12. выборка из таблицы «learnplan» с группировкой и суммой – сумма часов преподаваемых дисциплин по каждому преподавателю:

SELECT id_teacher, SUM(id) AS sumhours FROM learnplan GROUP BY teacher;

4.13. выборка из таблицы «learnplan» с условием отбора, группировкой и подсчетом суммы и условием отбора после группировки – сумма часов преподаваемых дисциплин для группы с кодом 1 по каждому преподавателю с суммой часов более 800:

SELECT id_teacher, SUM(id) AS sumhours FROM learnplan WHERE id_group=1 GROUP BY teacher HAVING SUM(id)>800;

5. Написать запросы на выборку из нескольких таблиц

5.1. простая выборка из двух таблиц с простым условием – выборка всех полей из таблиц «student» и «studgroup» при условии, что код группы из таблицы «student» равен коду группы из таблицы «studgroup»:

21

SELECT * FROM student, studgroup where student.id_group=studgroup.id

5.2. простая выборка из двух таблиц с составным условием – выборка всех полей из таблиц «student» и «studgroup» при условии, что код группы из таблицы «student» равен коду группы из таблицы «studgroup» и код специальности равен 4:

SELECT * FROM student, studgroup where student.id_group=studgroup.id AND id_speciality=4

5.3. выборка из двух таблиц с INNER JOIN – выборка всех полей из таблиц «student» и «studgroup» при условии, что код группы из таблицы «student» равен коду группы из таблицы «studgroup», в выборку не попадут студенты без группы и группы без студентов:

SELECT * FROM student INNER JOIN studgroup ON (student.id_group=studgroup.id);

5.4. выборка из двух таблиц с LEFT JOIN – выборка всех полей из таблиц «student» и «studgroup» при условии, что код группы из таблицы «student» равен коду группы из таблицы «studgroup», в выборку попадут студенты без группы и не попадут группы без студентов:

SELECT * FROM student LEFT JOIN studgroup ON (student.id_group=studgroup.id);

5.5. выборка из двух таблиц с RIGHT JOIN – выборка всех полей из таблиц «student» и «studgroup» при условии, что код группы из таблицы «student» равен коду группы из таблицы «studgroup», в выборку не попадут студенты без группы и попадут группы без студентов:

SELECT * FROM student RIGHT JOIN studgroup ON

22

(student.id_group=studgroup.id);

5.6. выборка из двух таблиц с UNION – выборка ФИО из таблиц «student» и «teacher», в выборку попадают только уникальные в пределах подзапроса записи:

SELECT lastname, firstname,'stud' AS person FROM student UNION SELECT lastname, firstname,'teach' AS person FROM teacher;

5.7. выборка из двух таблиц с UNION ALL – выборка ФИО из таблиц «student» и «teacher», в выборку попадают все записи:

SELECT lastname, firstname,'stud' AS person FROM student UNION ALL SELECT lastname, firstname,'teach' AS person FROM teacher;

6. Написать запросы на выборку с подзапросами 6.1. выборка с простым условием отбора со

сравнением с подзапросом – список студентов одной группы специальности с кодом 4:

SELECT lastname, firstname FROM student WHERE id_group=(SELECT TOP 1 id FROM studgroup WHERE id_speciality=4);

6.2. выборка с простым условием отбора с IN с подзапросом – список студентов всех групп специальности с кодом 4:

SELECT lastname, firstname FROM student WHERE id_group IN (SELECT id FROM studgroup WHERE id_speciality=4);

6.3. выборка с простым условием отбора с ANY – список записей учебного плана у которых объем дисциплины больше объема хотя бы в одной записи из списка

23

записей учебного плана для специальности с кодом 4:

SELECT * FROM learnplan WHERE volume > ANY (SELECT volume FROM learnplan WHERE id_group=4);

6.4. выборка с простым условием отбора с ALL – список записей учебного плана у которых объем дисциплины больше объема во всех записях из списка записей учебного плана для специальности с кодом 4:

SELECT * FROM learnplan WHERE volume > ALL (SELECT volume FROM learnplan WHERE id_group=4);

6.5. выборка с простым условием отбора с EXISTS – список студентов не прикрепленных ни к какой группе, если есть хотя бы одна группа:

SELECT * FROM student WHERE id_group IS NULL AND EXISTS (SELECT id FROM studgroup);

7. Написать запросы на вставку данных 7.1. Вставка предопределенных данных – вставка

1 записи в таблицу «studgroup» в поля «id_speciality», «name» значений 3, '2551' соответственно:

INSERT INTO studgroup (id_speciality, name) VALUES (3, '2551');

7.2. Вставка сгенерированных случайно данных – вставка 1 записи в таблицу «studgroup» в поля «id_speciality», «name» значений 3 и сгенерированного случайно имени в диапазоне от 2611 до 2651 соответственно:

INSERT INTO studgroup (id_speciality, name) VALUES (3, CONVERT(nvarchar(4), ROUND(RAND()*40+2611,0)));

7.3. Вставка данных из нескольких элементов с использованием преобразования типов данных – вставка 1

записи в таблицу «studgroup» в поля «id_speciality»,

24

«name» значений 3 и сгенерированного случайно имени преобразованного в тип nvarchar(4):

INSERT INTO studgroup (id_speciality, name) VALUES (3, CONVERT(nvarchar(4), ROUND(RAND()*40+2611,0)));

7.4. Вставка данных и с использованием встроенных функций работы с датой – вставка студента Петрова Петра Петровича с датой рождения полученной отниманием от текущей даты 20 лет:

INSERT INTO student (lastname, firstname, secondname, birthdate) VALUES ('Петров', 'Петр', 'Петрович', DATEADD(year, -20, SYSDATETIME()));

7.5. Вставка данных и с использованием встроенных функций работы с датой – вставка студента Петрова Петра Петровича с датой рождения полученной генерацией из частей 2000 год, 6 месяц, 13 день:

INSERT INTO student (lastname, firstname, secondname, birthdate) VALUES ('Петров', 'Петр', 'Петрович', DATEFROMPARTS(2000, 6, 13));

7.6. Вставка данных и с использованием встроенных функций работы со строками – вставка 1 записи в таблицу «discipline» с использованием переменной со значением «Математика» в поля «name» и «shortname», краткое имя состоит из 5 первый букв полного и преобразовано в верхний регистр:

INSERT INTO discipline (name, shortname) VALUES (@name, UPPER(LEFT(@name,5)));

8. Написать запросы на изменение данных во всех таблицах

8.1. Изменение всех полей по условию на предопределенные значения – перевод всех преподавателей

25

с кафедры с кодом 2 на кафедру с кодом 1:

UPDATE teacher SET id_chair=1 WHERE id_chair=2;

8.2. Изменение части полей по условию на сгенерированные случайно значения – изменение всех окладов случайным образом в диапазоне от 10 000 до

30 000 руб.:

UPDATE post SET pay=ROUND(RAND()*20000+10000,0);

8.3. Изменение части полей по условию – увеличение окладов меньших 50 000 руб. на 20%:

UPDATE post SET pay=pay*1,2 WHERE pay<50000;

8.4. Изменение части полей по условию с использованием преобразования типов – изменение номеров зачетки студентов группы с кодом 1 путем добавления к ней через «-» сконвертированного в строку года из даты рождения для группы с кодом 3:

UPDATE student SET numstudcard = numstudcard + '-' + CONVERT(nvarchar(4), DATEPART(year, birthdate)) WHERE id_group=3;

9. Написать запросы на вставку данных (несколько записей) в таблицы

9.1. Вставка нескольких записей из той же таблицы, выбранных по условию – вставка записей в учебный план из учебного плана для группы с кодом 2:

INSERT INTO learnplan (id_discipline, id_teacher, id_group, volume) SELECT id_discipline, id_teacher, id_group, volume FROM learnplan WHERE id_group=2;

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

26

полей – вставка записей в учебный план из учебного плана для группы с кодом 2 с увеличением объема часов на 10%:

INSERT INTO learnplan (id_discipline, id_teacher, id_group, volume) SELECT id_discipline, id_teacher, id_group, volume*1,1 FROM learnplan WHERE id_group=2;

10.Написать запросы на удаление данных

10.1. Удаление по условию – удаление студента с кодом 10:

DELETE FROM student WHERE id=10;

10.2. Удаление по условию (IN) – удаление студента с кодами 7, 9, 10:

DELETE FROM student WHERE id IN (7, 9, 10);

10.3. Удаление по условию – удаление студентов групп с кодами меньше хотя бы одного кода группы специальности с кодом 5:

DELETE FROM student WHERE id_group > ANY (SELECT id FROM studgroup WHERE id_speciality=5);

10.4. Удаление по условию (EXISTS) – удаление преподавателей с должностью, для которой нет записей в учебном плане:

DELETE FROM teacher WHERE id_post=1 AND NOT EXISTS (SELECT id FROM learnplan INNER JOIN teacher ON learnplan.id_teacher = teacher.id) WHERE teacher.id_post=1);

10.5. Удаление по условию LIKE – удаление преподавателей с фамилией, начинающейся на «Н»:

DELETE FROM teacher WHERE lastname LIKE ‘Н%’;

27

3. РАБОТА С ДАННЫМИ СРЕДСТВАМИ ЯЗЫКА TRANSACT-SQL (8 ч)

3.1. Требуемые ресурсы и инструменты

Установленный программный продукт Microsoft

SQL ServerExpress

Созданные ранее и заполненные БД по предметным областям 2-4 раздела 6.

3.2.Порядок действий

Выполнить задания, описанные в разделе 7, используя инструменты и последовательность действий, описанные в разделе 0.

4. СОЗДАНИЕ ТАБЛИЦ СРЕДСТВАМИ ЯЗЫКА TRANSACT-SQL (4 ч)

4.1. Требуемые ресурсы и инструменты

Установленный программный продукт Microsoft

SQL ServerExpress

Разработанная ранее физическая модель предметной области 1 раздела 6 в виде ER-диаграммы диаграммы

(Рис. 2).

4.2.Порядок действий

1.Создать БД с именем learn_db.

2.В панели инструментов нажать на кнопку «New Query» (1) - появится окно текстового редактора (2) для работы с SQL-запросами (Рис. 3).

3.Для указания базы данных назначения в окне текстового редактора написать команду: use learn_db;

4.Написать запросы на создание всех таблиц для БД предметных областей

4.1.Создать таблицу «faculty» с полями «id» типа

28