Операция JOIN

AS

AS

AS оператор select

3) Например, создание представления:

CREATE VIEW Stud_Names

SELECT StudentName, Stipend

FROM Students;

Синтаксис оператора SELECT очень громоздкий. Обобщенно он содержит:

SELECT перечень_имен_столбцов [ INTO имя_новой_таблицы ]

[ FROM таблица_источник ] [ WHERE условие_выборки ]

[ GROUP BY группирование_по ]

[ HAVING условие_выборки_при группировании ]

[ ORDER BY упорядоченность [ ASC | DESC ] ] (по возрастанию/убыванию)

4) Например:

SELECT StudentID, StudentName, Stipend, StudentDescription

FROM dbo.Students

Если необходимы все столбцы таблицы, указывается звездочка (*):

5) SELECT * FROM Students

6) Пример выборки без условия, т.е., результирующая выборка по количеству строк соответствует таблице-источнику:

SELECT StudentName, Stipend

FROM dbo.Students

7) Пример выборки по условию:

SELECT StudentID, StudentName, Stipend, StudentDescription

FROM dbo.Students

WHERE StudentName = ‘Иванов’

Можно динамически формировать вычисляемый столбец. Это можно делать непосредственно указанием в операторе CREATE TABLEи в операторе SELECT. Вычисляемый столбец физически хранится в таблице и его значения обновляются, когда изменяются какие-либо другие столбцы, на основе которых он вычисляется.

8) Например, при выборке из таблицы можно вычислять ActualStip (фактическая стипендия):

SELECT StudentName, Stipend * 1.17 AS ActualStip

FROM dbo.Students

ОператорCREATE TABLE создает пустую таблицу. Оператор INSERT предназначен для вставки строки в таблицу. Вставка в таблицу предполагает задание значений столбцов. Например:

9) INSERT dbo.Students ( StudentID, StudentName, Stipend, StudentDescription)

VALUES (1234, 'Иванов', 1200, 'староста') или

10) другой порядок ввода значений, указанный явно:

INSERT dbo.Students ( StudentName, StudentID, Stipend, StudentDescription)

VALUES ('Иванова', 5678, 1200, '')

11) имена столбцов перечислять не обязательно, если значения перечислены в порядке, соответствующем указанному в CREATE TABLE:

INSERT dbo.Students

VALUES (9012, 'Иванов', NULL, 'восстановлен')

12) Значения столбцов можно обновлять:

UPDATE dbo.Students

SET Stipend = 1000

WHERE StudentID = 9012

13) Пример возможностей синтаксиса операторов SQL

CREATE VIEW studmark_view

SELECT c.StudName, c.StudGroup, e.Mark, e.Date

FROM StudentExam e JOIN Student c on e.StudID = c.StudID ;

Основная литература

Учебник / Учебное пособие Раздел Страницы
1. Карпова Т.С. Базы данных: модели, разработка, реализация. - СПб.: Питер, 2001.- 304 с.; ил. Глава 5 66-103
2. Хомоненко А.Д, Цыганков В.М., Мальцев М.Г. Базы данных: Учебник для высших учебных заведений / под ред. проф. Хомоненко А.Д., 6-ое изд. – М.:Бином-Пресс; СПб.:Корона-Век, 2007.-736с. Гл.10 277-365

 

Дополнительная литература

Учебник / Учебное пособие Раздел Страницы
1. Дейт К. Дж. Введение в системы баз данных, 6-е издание: Пер. с англ. – К.;М.; СПб.: Издательский дом “Вильямс”,. 1999. – 848 с.: ил. (7-е и 8-е издание). 6.1 – 6.5, 6.7 – 6.10 142-156, 159--170
2. Коннолли Т., Бегг К., Страчан А. Базы данных: проектирование, реализация и сопровождение. Теория и практика, 2-е изд.: Пер. с англ. - М.: Издательский дом “Вильямс”,. 2001. – 1120 с.: ил. 13.1 – 13.5, 14.7,14.8 421-471, 529-533

Лекция №5. Запросы к базе данных

В рамках данной лекции рассматриваются нижеследующие вопросы:

· Примеры операций реляционной алгебры SELECT, JOIN, PROJECT

· Оператор SELECT в SQL

· Вложенные запросы

· Запросы с групповой обработкой

· План исполнения SELECT

 

Для реализации запросов к базе данных в языке SQL предназначен оператор SELECT. Сначала представляет интерес рассмотрение функциональности операций реляционной алгебры SELECT, JOIN, PROJECT.

Пусть имеются 2 сущности: Студент и Дисциплина и связующая (ассоциативная) сущность СтудентДисциплина, представляющая связи между экземплярами сущностей (или строк таблиц)

Студент       Дисциплина
Студ_ИД Студ_Фио Студ_рейтинг СтудентДисциплина Дсц_ИД Наим
Иванов Студ_ИД Дсц_ИД Оценка ТАУ
Иванов ОБЖ
Иванова    
         

 

Операция SELECT -выборка кортежей по условию

Запрос к Студент:

а) выбрать кортежи по условию Студ_Фио = Иванов имеет результирующее отношение с 3-мя атрибутами, в котором 2 кортежа;

б) выбрать кортежи по условию Студ_ИД = 2 имеет результирующее отношение, в котором может быть только один кортеж

в) выбрать кортежи по условию Студ_рейтинг > 45 имеет результирующее отношение, в котором 0 кортежей.

Операция PROJECT -проекция кортежей по перечню атрибутов

Запрос к Студент:

а) проекция по «Иванов» имеет результирующее отношение, в котором 1 кортеж, причем в результирующем отношении 1 атрибут;

б) проекция по «Иванова» имеет результирующее отношение, в котором 1 кортеж, причем в результирующем отношении 1 атрибут;

в) проекция по «Студ_ИД» имеет результирующее отношение, в котором 3 кортежа, причем в результирующем отношении 1 атрибут;

г) проекция по «Студ_рейтинг» имеет результирующее отношение, в котором 2 кортежа, причем в результирующем отношении 1 атрибут; Студ_ИД

г) проекция по «Студ_ИД, Студ_рейтинг» имеет результирующее отношение, в котором 3 кортежа, причем в результирующем отношении 2 атрибута.

Эквисоединение Студент JOIN СтудентДисциплина по равенству Студ_ИД

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

Студ_ИД Студ_Фио Студ_рейтинг Студ_ИД Дсц_ИД Оценка
Иванов
Иванов
Иванова

 

Левое внешнее соединение Студент JOIN СтудентДисциплина по равенству Студ_ИД

Студент (левое отношение) СтудентДисциплина
Студ_ИД Студ_Фио Студ_рейтинг Студ_ИД Дсц_ИД Оценка
Иванов
Иванов
Иванов   NULL NULL
Иванова

 

Левое внешнее соединение Студент JOIN СтудентДисциплина по равенству Студ_ИД

 

Студент СтудентДисциплина
Студ_ИД Студ_Фио Студ_рейтинг Студ_ИД Дсц_ИД Оценка
Иванов
Иванова
Иванов

 

Операции реляционной алгебры предполагают процедурное описание действий над данными. Язык SQL основывается на непроцедурном реляционном исчислении, в конечном итоге осуществляющем проверку истинности логических функций. Для приведенных таблиц примером такой проверки может быть проверка: истинно ли логическое выражение «Студ_ИД==1 и Студ_Фио==Иванов и Студ_рейтинг==40».

В языке SQL отсутствует операция проекции. Ей соответствует операторSELECTс перечнематрибутов результирующего отношения.

Пример оператораSELECT, использующего эквисоединение Студент JOIN СтудентДисциплина по равенству Студ_ИД

SELECT c.StudFio, c.StudRate, e.Mark, e.DiscID

FROM StudentDisc e JOIN Student c on e.StudID = c.StudID ;

Вложенным запросом называется запрос, помещенный в оператор SELECT, INSERT, UPDATE или DELETE или в другой вложенный запрос. Подзапрос может быть использован везде, где разрешены выражения. Вложенный запрос еще называют внутренним запросом или внутренней выборкой. При этом оператор, содержащий вложенный запрос, называют внешним запросом или внешней выборкой.

Для приведенных выше таблиц вложенный запрос может быть, например, таким:

SELECT StudFio

FROM Student