Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СУБД (Лазицкас Екатерина Александровна).docx
Скачиваний:
30
Добавлен:
25.02.2016
Размер:
104.02 Кб
Скачать

Выборка данных с использованием предложения select

Все запросы на получение любого количества данных из одного или нескольких отношений, выполняются с помощью предложения SELECT. В общем случае результатом реализации предложенияSELECTбудет новое отношение. К этому новому отношению может быть снова применена командаSELECT, т.е. такие операции могут быть вложены друг в друга.

Простейший синтаксис SELECT-выражения:

SELECT [DISTINCT] <список атрибутов>

FROM <список таблиц>

[WHERE <условие отбора>]

[ORDER BY <список атрибутов>]

[GROUP BY <список атрибутов>]

[HAVING <условие отбора>]

[UNION предложение SELECT];

Ключевое слово SELECTсообщает БД, что данное предложение является запросом на извлечение информации. После ключевого словаSELECTчерез запятую указываются атрибуты, сведения которых запрашиваются.

После ключевого слова FROM через запятую указывается список таблиц, из которых извлекается информация.

Пример:список студентов.

SELECTФамилия, Имя

FROMСтуденты;

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

Пример:список городов, в которых проживают студенты.

SELECTГород

FROMСтуденты;

Для исключения дублирования значений атрибута используется ключевое слово DISTINCT.

Пример:

SELECT DISTINCT Город

FROM Студенты;

Предложение WHEREпозволяет указать условие (предикат), по которому отбираются строки, входящие в результирующее отношение. В этом предложении могут использоваться операции сравнения и логические операторы.

Пример:студенты «Иванов», учащихся на 3 курсе, получающие стипендию.

SELECT *

FROM Студенты

WHERE Фамилия=’Иванов’ AND Курс=3 AND Стипендия IS NOT NULL;

При задании логического условия предложения WHEREмогут использоваться операторы:

- IN– оператор списка. Справа после него в круглых скобках через запятую указывается список значений на проверку значения поля проверяемых строк.

Пример:вывести список студентов, проживающих в Пуховичах, Барановичах и Осиповичах.

SELECT*

FROMСтуденты

WHEREГородIN(‘Пуховичи’, ‘Барановичи’, ’Осиповичи’);

- BETWEEN– используется для проверки условия вхождения значения поля в заданный интервал. Граничные значения входят в интервал, с которым происходит сравнение.

Пример:выведем студентов, у которых средний бал в промежутке от 7 до 9.

SELECTФамилия, Имя

FROMСтуденты

WHEREСредний балBETWEEN7AND9;

- LIKE– применим только к символьным полям. Этот оператор просматривает строковое значение полей с целью определения, входит ли заданное в оператореLIKEстрока в символьную строку значения проверяемого поля. Для выборки строковых значений по заданному образцу можно применять шаблон искомого образца подстроки:

1 – знак подчеркивания(_) – определяет наличие в указанном месте подстроки одного любого символа.

2 – знак процента(%) – определяет наличие в указанном месте подстроки любого число символов.

Пример:найти человека (забыли Иващенко или Еващенко)

SELECTФамилия

FROMСтуденты

WHEREФамилияLIKE‘_ващенко’;

- IS NULL – ну тут всё понятно.

Не смотря на то, что SQLработает с данными, в понятиях строк, столбцов и таблиц имеется возможность применения значений выражений, построенных с использованием встроенной функции, констант, имен столбцов, определяемых как своего рода виртуальные столбцы. Они помещаются в списки столбцов и могут сопровождаться псевдонимами. Если вместо спецификацииSQLобнаруживает число, то она воспринимается как числовая константа.

Пример:

SELECT‘Фамилия’,Surname, ’Имя’,Name, 100

FROMStudent;

Агрегирующие функции– позволяют получать из таблицы сводную информацию из таблицы, выполняя операции над группой строк. Для задания вSELECTзапросе агрегирующих операций используются следующие ключевые слова:

- COUNT– определяет количество строк или значений поля.

- SUM– вычисляет арифметическую функцию.

- AVGсреднее.

- MINминимальное.

- MAXмаксимальное.

В SELECTзапросе агрегирующие функции используются аналогично именам полей, при этом имена полей используются в качестве аргументов этих функций.

Пример:найти среднее значение оценок по всем записям таблицы экзаменационные оценки.

SELECTAVG(Оценка)

FROMЭкзаменационные оценки;

Предложение GROUP BY позволяет группировать записи в подмножества, определяемое значениями какого-либо поля, и применять агрегирующие функции уже не ко всем записям таблицы, а отдельно к каждой сформированной группе. В предложении также может участвовать несколько атрибутов, по которым осуществляется группировка, а также указывается порядок разбиения столбцов на группы. В предложенииGROUPBYдолжны быть указаны все выбираемые столбцы, приведенные после ключевого словаSELECT, кроме столбцов, указанных в качестве аргумента в агрегирующей функции. При необходимости часть сформированных групп может быть исключена с помощью предложенияHAVING.

Пример:найти максимальную оценку каждого студента.

SELECTID_Студента,MAX(Оценка)

FROMЭкзаменационные оценки

GROUPBYID_Студента

Пример 2: посчитать максимальную оценку каждого студента по каждому предмету

SELECTID_Студента,ID_Предмета,MAX(Оценка)

FROMЭкзаменационные оценки

GROUPBYID_Студента,ID_Предмета

Пример 3:посчитать максимальную оценку каждого студента по каждому предмету> 6

SELECTID_Студента,ID_Предмета,MAX(Оценка)

FROMЭкзаменационные оценки

GROUPBYID_Студента,ID_Предмета

HAVINGMAX(Оценка) > 6;

Упорядочение выходных данных осуществляется с помощью предложения ORDER BY, после которого указываются имена атрибутов, используемых для сортировки. Сортировка по возрастанию применяется по умолчанию. При необходимости сортировать атрибут по убыванию, после спецификации столбца указывается словоDESC. В случае сортировки групп полей, предложениеORDERBYпомещается послеGROUPBY. После названия атрибута можно писать его порядковый номер.

Пример:отсортировать названия предметов таблицы предметы по убыванию.

SELECTНазвание предмета

FROMПредметы

ORDERBYНазвание предметаDESC;

Язык SQLпозволяет использовать один запрос внутри других запросов (т.е. вкладывать запросы друг в друга).

Пример: вывести информацию об оценках студента Петрова.

SELECT*

FROMЭкзаменационные оценки

WHEREID_СтудентаIN(SELECTID_Студента

FROMСтуденты

WHEREФамилия=’Петров’);

Пример:вывести оценки студентов, проживающих в Минске

SELECTОценка

FROMЭкзаменационные оценки

WHEREID_СтудентаIN(SELECTID_Студент

FROMСтуденты

WHEREГород=’Минск’);

Формирование связных подзапросов:

При использовании подзапросов во внутреннем запросе можно ссылаться на таблицу, имя которой указано в предложении FROMвнешнего запроса. В этом случае такой связанный подзапрос выполняется по одному разу для каждой таблицы.

Пример: выдать сведения обо всех предметах обучения, по которым проводился экзамен 20 января 2012 года.

SELECT *

FROM Предметы AS A

WHERE #20/01/2012# IN (SELECT Дата

FROMЭкзаменационные оценкиASB

WHEREA.ID_Предмета=B.ID_Предмета);

SELECTA.ID_Предмета, Название, Часы, Семестр

FROMПредметыASA, Экзаменационные оценкиASB

WHEREA.ID_Предмета=B.ID_ПредметаANDB.Дата = #20/01/2012#;

Связывать можно еще с помощью команды INNER JOIN

Пример:

SELECTНазвание,ID_Студента, Оценка

FROMПредметыINNERJOINЭкзаменационные оценкиONПредметы.ID_Предмета=Экзаменационные Оценки.ID_предмета

Пример 2:найти студентов, получивших стипендию больше средней на курсе.

SELECT Фамилия

FROM Студенты AS A

WHERE A.Стипендия> (SELECT AVG (Стипендия)

FROM Студенты AS B

WHERE A.Курс=B.Курс);

SELECT Фамилия

FROM Студенты A, (SELECT Курс, AVG (Стипендия) AS F

FROM Студенты B

GROUP BY Курс) С

WHERE A.Стипендия >C. F AND A.Курс=C.Курс;