Uploaded by Qwerty Qwerty

Лабы

advertisement
Упражнения 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г.
Download