Упражнения 1. 1. SELECT SUBJ_ID, SUBJ_NAME, SEMESTER, HOUR FROM SUBJECT; 2. SELECT * FROM EXAM_MARKS WHERE EXAM_MARKS.SUBJ_ID=10; 3. SELECT KURS, SURNAME, NAME, STIPEND FROM STUDENT; 4. SELECT SUBJ_NAME, HOUR FROM SUBJECT WHERE SEMESTER=4; 5. SELECT DISTINCT MARK FROM EXAM_MARKS; 6. SELECT SURNAME FROM STUDENT WHERE KURS>=3; 7. SELECT SURNAME, NAME, KURS FROM STUDENT WHERE STUDENT.STIPEND>140; 8. SELECT SUBJ_NAME FROM SUBJECT WHERE HOUR>30; 9. SELECT * FROM UNIVERSITY WHERE RATING>300; 10. SELECT SURNAME, NAME, KURS FROM STUDENT WHERE STIPEND>=100 AND CITY="Воронеж"; 11. SELECT * FROM STUDENT WHERE (STIPEND <100 OR NOT (BIRTHDAY>=#10/03/1980# AND STUDENT_ID>1003)); 12. SELECT * FROM STUDENT WHERE NOT ((BIRTHDAY=#10/03/1980# OR STIPEND>100) AND STUDENT_ID>=1003); Упражнение 2. 1. SELECT SUBJ_ID FROM EXAM_MARKS WHERE EXAM_DATE Between #1/10/2000# And #1/20/2000#; 2. SELECT DISTINCT SUBJECT.SUBJ_NAME FROM SUBJECT INNER JOIN EXAM_MARKS ON EXAM_MARKS.SUBJ_ID=SUBJECT.SUBJ_ID WHERE STUDENT_ID=12 OR STUDENT_ID=32; 3. SELECT SUBJ_NAME FROM SUBJECT WHERE SUBJ_NAME Like "И*"; 4. SELECT * FROM STUDENT WHERE NAME Like "И*" OR NAME Like "С*"; 5. SELECT * FROM EXAM_MARKS WHERE MARK Is Null; 6. SELECT * FROM EXAM_MARKS WHERE MARK Is Not Null; Упражнение 3 1. SELECT UCase([STUDENT_ID]) & ";" & UCase([SURNAME]) & ";" & UCase([NAME]) & ";" &[STIPEND]& ";" & [KURS] & ";" & UCase([CITY]) & ";" & [BIRTHDAY] & ";" & [UNIV_ID] AS Поле FROM STUDENT; 2. SELECT UCase(Left([NAME],1) & "." & [SURNAME]) & ";место жительства-" & UCase([CITY]) & ";родился-" & Format(BIRTHDAY, "d.m.yy") AS Поле FROM STUDENT; 3. SELECT LCase(Left([NAME],1) & "." & [SURNAME] & ";место жительства-" & [CITY] & ";родился: " & Format([BIRTHDAY], "d-mmm-yyyy")) AS Поле FROM STUDENT; 4. SELECT [NAME] & " " & [SURNAME] & " родился в " & Year(BIRTHDAY)& " году." AS Поле FROM STUDENT; 5. SELECT SURNAME, NAME, STIPEND*100 FROM STUDENT; 6. SELECT Lcase([NAME] & " " & [SURNAME]) & " родился в " & Year(BIRTHDAY) & " году." AS Поле FROM STUDENT WHERE KURS=1 OR KURS=2 OR KURS=4; 7. SELECT "Код-" & [UNIV_ID] & ";" & [UNIV_NAME] & "-г. " & [CITY] & ";Рейтинг=" & [RATING] AS Поле FROM UNIVERSITY; 8. SELECT "Код-" & [UNIV_ID] & ";" & [UNIV_NAME] & "-г. " & [CITY] & ";Рейтинг=" & Round(RATING/100,0)*100 AS Поле FROM UNIVERSITY; Упражнение 4 1.1 SELECT Count(*) AS [Количество студентов] FROM EXAM_MARKS WHERE MARK Is Not Null And SUBJ_ID=22; 1.2 SELECT Count(*) AS [Количество предметов] FROM (SELECT DISTINCT SUBJ_ID FROM EXAM_MARKS); 2. SELECT STUDENT_ID, MIN(MARK) FROM EXAM_MARKS GROUP BY STUDENT_ID; 3. SELECT STUDENT_ID, MAX(MARK) FROM EXAM_MARKS GROUP BY STUDENT_ID; 4. SELECT Min(SURNAME) AS Выражение1 FROM STUDENT WHERE (((STUDENT.[SURNAME]) Like "И*")); 5. SELECT SUBJ_NAME, MAX(SEMESTER) FROM SUBJECT GROUP BY SUBJ_NAME; 6. SELECT EXAM_DATE, COUNT(STUDENT_ID) FROM EXAM_MARKS GROUP BY EXAM_DATE; 7. SELECT SEMESTER, SUBJ_NAME, Avg(MARK) AS [AVG] FROM SUBJECT INNER JOIN EXAM_MARKS ON SUBJECT.SUBJ_ID = EXAM_MARKS.SUBJ_ID GROUP BY SEMESTER, SUBJ_NAME; 8. SELECT STUDENT_ID, AVG(MARK) AS AVG FROM EXAM_MARKS GROUP BY STUDENT_ID; 9. SELECT SUBJ_ID, AVG(MARK) AS AVG FROM EXAM_MARKS GROUP BY SUBJ_ID; 10. SELECT SUBJ_ID, COUNT(STUDENT_ID) AS [СТУДЕНТОВ] FROM EXAM_MARKS WHERE MARK is Not Null GROUP BY SUBJ_ID; 11. SELECT SEMESTER, COUNT(SUBJ_ID) AS [Предметов] FROM SUBJECT GROUP BY SEMESTER; Упражнение 5. 1. SELECT STUDENT_ID, SURNAME, STIPEND*1.2 FROM STUDENT ORDER BY STIPEND, SURNAME; 2. SELECT STUDENT_ID, MAX(MARK) AS MAX, MIN(MARK) AS MIN FROM EXAM_MARKS GROUP BY STUDENT_ID; 3. SELECT SEMESTER, HOUR, SUBJ_NAME, SUBJ_ID FROM SUBJECT ORDER BY Not SEMESTER, HOUR; 4. SELECT EXAM_DATE, Sum(MARK) AS SUM FROM EXAM_MARKS GROUP BY EXAM_DATE ORDER BY Sum(MARK) DESC; 5. SELECT EXAM_DATE, Avg(MARK) AS AVG, Min(MARK) AS MIN, Max(MARK) AS MAX FROM EXAM_MARKS GROUP BY EXAM_DATE ORDER BY Max(MARK) DESC; Упражнение 6 1. Напишите запрос с подзапросом для получения данных обо всех оценках студента с фамилией «Иванов». Предположим, что его персональный номер неизвестен. Всегда ли такой запрос будет корректным? SELECT STUDENT_ID, MARK FROM EXAM_MARKS WHERE (STUDENT_ID = (SELECT Max(STUDENT_ID) FROM STUDENT WHERE SURNAME="Зайцева") AND MARK is Not Null); 2. Напишите запрос, выбирающий данные об именах всех студентов, имеющих по предмету с идентификатором 101 балл выше общего среднего балла. SELECT NAME, MARK FROM EXAM_MARKS INNER JOIN STUDENT ON EXAM_MARKS.STUDENT_ID=STUDENT.STUDENT_ID WHERE SUBJ_ID=10 AND (MARK > (SELECT AVG(MARK) FROM EXAM_MARKS)); 3. Напишите запрос, который выполняет выборку имен всех студентов, имеющих по предмету с идентификатором 102 балл ниже общего среднего балла/ SELECT NAME, MARK FROM EXAM_MARKS INNER JOIN STUDENT ON EXAM_MARKS.STUDENT_ID=STUDENT.STUDENT_ID WHERE SUBJ_ID=10 AND (MARK < (SELECT AVG(MARK) FROM EXAM_MARKS)); 4. Напишите запрос, выполняющий вывод количества предметов, по которым экзаменовался каждый студент, сдававший более 20 предметов. SELECT STUDENT_ID, Count([SUBJ_ID]) AS [Count] FROM EXAM_MARKS WHERE MARK is Not NULL GROUP BY STUDENT_ID HAVING Count(SUBJ_ID)>=2; Надо HAVING Count(SUBJ_ID)>20; 5. Напишите команду SELECT, использующую связанные подзапросы и выполняющую вывод имен и идентификаторов студентов, у которых стипендия совпадает с максимальным значением стипендии для города, в котором живет студент. SELECT STUDENT_ID, NAME, STIPEND FROM STUDENT WHERE STIPEND = (SELECT Max(STUD.STIPEND) AS [Max] FROM STUDENT as STUD GROUP BY STUD.CITY HAVING STUD.CITY=STUDENT.CITY) 6. Напишите запрос, который позволяет вывести имена и идентификаторы всех студентов, для которых точно известно, что они проживают в городе, где нет ни одного университета. SELECT STUDENT_ID, NAME FROM STUDENT WHERE CITY Not IN (SELECT DISTINCT UNIVERSITY.CITY FROM UNIVERSITY); 7. Напишите два запроса, которые позволяют вывести имена и идентификаторы всех студентов, для которых точно известно, что он проживают не в том городе, где расположен их университет. Один запрос с использованием соединения, а другой - с использованием связанного подзапроса. SELECT STUDENT_ID, NAME FROM STUDENT WHERE CITY <> (SELECT UNIVERSITY.CITY FROM UNIVERSITY WHERE UNIVERSITY.UNIV_ID=STUDENT.UNIV_ID); SELECT STUDENT_ID, NAME, UNIVERSITY.CITY, STUDENT.CITY FROM STUDENT INNER JOIN UNIVERSITY ON UNIVERSITY.UNIV_ID=STUDENT.UNIV_ID WHERE UNIVERSITY.CITY <> STUDENT.CITY; Упражнения 7 1. Напишите запрос с EXISTS, позволяющий вывести данные обо всех студентах, обучающихся в вузах, которые имеют рейтинг выше 300 SELECT * FROM STUDENT WHERE EXISTS (SELECT * FROM UNIVERSITY WHERE RATING>300 AND STUDENT.UNIV_ID = UNIVERSITY.UNIV_ID ); 2. Напишите предыдущий запрос, используя соединения. SELECT STUDENT_ID, SURNAME, NAME, STUDENT.UNIV_ID, RATING FROM STUDENT INNER JOIN UNIVERSITY ON STUDENT.UNIV_ID = UNIVERSITY.UNIV_ID WHERE RATING>300; 3. Напишите запрос с EXISTS, выбирающий сведения обо всех студентах, для которых в том же городе, где живет студент, существу ют университеты, в которых он не учится. SELECT * FROM STUDENT WHERE EXISTS (SELECT * FROM UNIVERSITY WHERE STUDENT.UNIV_ID <> UNIVERSITY.UNIV_ID AND STUDENT.CITY = UNIVERSITY.CITY); 4. Напишите запрос, выбирающий из таблицы SUBJECT данные о названиях предметов обучения, экзамены по которым сданы более чем одним студентом. SELECT SUBJ_NAME FROM SUBJECT WHERE EXISTS (SELECT MARK FROM EXAM_MARKS WHERE SUBJECT.SUBJ_ID = EXAM_MARKS.SUBJ_ID AND MARK is Not NULL); Упражнения 8 1. Напишите запрос, выбирающий данные о названиях университетов, рейтинг которых равен или превосходит рейтинг Воронежского государственного университета. SELECT UNIV_NAME, RATING FROM UNIVERSITY WHERE RATING >= (SELECT RATING FROM UNIVERSITY WHERE UNIV_NAME = "ВГУ"); 2. Напишите запрос, использующий ANY или ALL, выполняющий выборку данных о студентах, у которых в городе их постоянного местожительства нет университета. SELECT ALL * FROM STUDENT WHERE STUDENT.CITY Not IN (SELECT CITY FROM UNIVERSITY); 3. Напишите запрос, выбирающий из таблицы EXAM_MARKS данные о названиях предметов обучения, для которых значение полученных на экзамене оценок (поле MARK) превышает любое значение оценки для предмета, имеющего идентификатор, равный 105. SELECT DISTINCT SUBJ_NAME FROM EXAM_MARKS INNER JOIN SUBJECT ON EXAM_MARKS.SUBJ_ID=SUBJECT.SUBJ_ID WHERE MARK > ANY (SELECT MARK FROM EXAM_MARKS WHERE SUBJ_ID = 10); 4. Напишите этот же запрос с использованием МАХ. SELECT DISTINCT SUBJ_NAME FROM EXAM_MARKS INNER JOIN SUBJECT ON EXAM_MARKS.SUBJ_ID = SUBJECT.SUBJ_ID WHERE MARK >= (SELECT Max(MARK) FROM EXAM_MARKS WHERE SUBJ_ID = 10); Упражнения 9 1. Напишите запрос, который выполняет вывод данных о фамилиях сдававших экзамены студентов (вместе с идентификаторами каждого сданного ими предмета обучения). SELECT SURNAME, SUBJ_ID FROM EXAM_MARKS INNER JOIN STUDENT ON EXAM_MARKS.STUDENT_ID = STUDENT.STUDENT_ID WHERE MARK is Not Null; 2. Напишите запрос, который выполняет выборку значений фамилии всех студентов с указанием для студентов, сдававших экзамены, идентификаторов сданных ими предметов обучения. SELECT SURNAME, SUBJ_ID FROM EXAM_MARKS RIGHT JOIN STUDENT ON EXAM_MARKS.STUDENT_ID=STUDENT.STUDENT_ID; 3. Напишите запрос, который выполняет вывод данных о фамилиях студентов, сдававших экзамены, вместе с наименованиями каждого сданного ими предмета обучения. SELECT SURNAME, SUBJ_NAME FROM SUBJECT INNER JOIN (STUDENT INNER JOIN EXAM_MARKS ON STUDENT.STUDENT_ID = EXAM_MARKS.STUDENT_ID) ON SUBJECT.SUBJ_ID = EXAM_MARKS.SUBJ_ID WHERE MARK Is Not Null; 4. Напишите запрос на выдачу для каждого студента названий всех предметов обучения, по которым этот студент получил оценку 4 или 5. SELECT SURNAME, SUBJ_NAME FROM SUBJECT RIGHT JOIN (STUDENT LEFT JOIN EXAM_MARKS ON STUDENT.STUDENT_ID=EXAM_MARKS.STUDENT_ID) ON SUBJECT.SUBJ_ID=EXAM_MARKS.SUBJ_ID WHERE MARK = 4 OR 5; 5. Напишите запрос на выдачу данных о названиях всех предметов, по которым студенты получили только хорошие (4 и 5) оценки. В выходных данных должны быть приведены фамилии студентов, названия предметов и оценка. SELECT SURNAME, SUBJ_NAME, MARK FROM SUBJECT INNER JOIN (STUDENT INNER JOIN EXAM_MARKS ON STUDENT.STUDENT_ID = EXAM_MARKS.STUDENT_ID) ON SUBJECT.SUBJ_ID = EXAM_MARKS.SUBJ_ID WHERE EXAM_MARKS.SUBJ_ID IN (SELECT DISTINCT EXAM_MARKS.SUBJ_ID FROM EXAM_MARKS WHERE EXAM_MARKS.SUBJ_ID Not IN (SELECT EXAM_MARKS.SUBJ_ID FROM EXAM_MARKS WHERE MARK <= 3)); 6. Напишите запрос, который выполняет вывод списка университетов с рейтингом, превышающим 300, вместе со значением максимального размера стипендии, получаемой студентами в этих университетах. SELECT UNIVERSITY.UNIV_ID, UNIVERSITY.UNIV_NAME, UNIVERSITY.RATING, UNIVERSITY.CITY, Max(STUDENT.STIPEND) AS STIP FROM UNIVERSITY INNER JOIN STUDENT ON UNIVERSITY.UNIV_ID = STUDENT.UNIV_ID WHERE (((UNIVERSITY.RATING)>300)) GROUP BY UNIVERSITY.UNIV_ID, UNIVERSITY.UNIV_NAME, UNIVERSITY.RATING, UNIVERSITY.CITY; 7. Напишите запрос на выдачу списка фамилий студентов (в алфавитном порядке) вместе со значением рейтинга университета, где каждый из них учится, включив в список и тех студентов, для которых в базе данных не указано место их учебы. SELECT STUDENT.SURNAME, UNIVERSITY.RATING FROM UNIVERSITY RIGHT JOIN STUDENT ON UNIVERSITY.UNIV_ID = STUDENT.UNIV_ID ORDER BY STUDENT.SURNAME; Упражнения 10 1. Написать запрос, выполняющий вывод списка всех пар фамилий студентов, проживающих в одном городе. При этом не включать в список комбинации фамилий студентов самих с собой (то есть комбинацию типа «Иванов-Иванов») и комбинации фамилий студентов, отличающиеся порядком следования (то есть включать одну из двух комбинаций типа «Иванов-Петров» и «Петров-Иванов»). SELECT A.SURNAME, B.SURNAME FROM STUDENT as A, STUDENT as B WHERE (A.CITY = B.CITY) AND (A.STUDENT_ID < B.STUDENT_ID); 2.1. Написать запрос, выполняющий вывод списка всех пар названий университетов, расположенных в одном городе, не включая в список комбинации названий университетов самих с собой и пары названий университетов, отличающиеся порядком следования. SELECT A.UNIV_NAME, B.UNIV_NAME FROM UNIVERSITY AS A, UNIVERSITY AS B WHERE (A.CITY=B.CITY) And (A.UNIV_ID < B.UNIV_ID); 2.2. Написать запрос, который позволяет получить данные о названиях университетов и городов, в которых они расположены, с рейтингом, равным или превышающим рейтинг ВГУ SELECT UNIV_NAME, CITY FROM UNIVERSITY WHERE RATING >= (SELECT RATING FROM UNIVERSITY WHERE UNIV_NAME = "ВГУ"); Выполнил: Каминский А. А. П-22БН 19.11.2015г.