- •Тгмт Лекции по дисциплине «Базы данных»
- •Введение
- •Основные понятия и определения
- •Архитектура базы данных.
- •Процесс прохождения пользовательского запроса
- •Пользователи банков данных
- •Классификация моделей данных
- •Теоретико-графовые модели данных
- •Иерархическая модель данных
- •Сетевая модель данных
- •Реляционная модель данных
- •Основы реляционной алгебры
- •Операции над множествами.
- •Специальные операции.
- •Проектирование реляционных бд на основе принципов нормализации
- •Системный анализ предметной области
- •Инфологическая модель предметной области.
- •Нормальные формы er-диаграмм
- •Даталогические модели
- •Получение реляционной схемы из er-диаграммы
- •Физические модели
- •Проектирование реляционной базы данных
- •Универсальное отношение
- •Пример проектирования реляционной бд
- •Введение в sql
- •Основные понятия и компоненты. Инструкции и имена
- •Типы данных
- •Встроенные функции
- •Значения null
- •Ограничения целостности. Первичный ключ таблицы
- •Внешний ключ таблицы
- •Р ис. 23. Связь внешнего и первичного ключей Определение уникального столбца
- •Определение проверочных ограничений
- •Определение значения по умолчанию
- •Управление таблицами Команда создания таблицы — create table
- •Изменение структуры таблицы — команда alter table
- •Управление данными Извлечение данных — команда select
- •Раздел select
- •Раздел from
- •Раздел where
- •Раздел order by
- •Раздел group by
- •Раздел compute
- •Раздел union
- •Раздел into. Использование команды select...Into
- •Добавление данных — команда insert
- •Изменение данных — команда update
- •Удаление данных — команда delete
Управление данными Извлечение данных — команда select
Основным инструментом выборки данных в языке SQL является команда SELECT. С помощью этой команды можно получить доступ к данным, представленным как совокупность таблиц практически любой сложности.
Чаще всего используется упрощенный вариант команды SELECT, имеющий следующий синтаксис:
SELECT <Список_выбора>
[INTO <Новая_таблица>]
FROM <Исходная_таблица>
[WHERE <Условие_отбора>]
[GROUP BY <Ключи группировки>]
[HAVING <Условие_отбора>]
[ORDER BY <Ключи_сортировки> [ASC | DESC]]
Инструкция SELECT разбивается на отдельные разделы, каждый из которых имеет свое назначение. Из приведенного синтаксического описания видно, что обязательными являются только разделы SELECT и FROM, а остальные разделы могут быть опущены. Полный список разделов следующий:
SELECT
INTO
FROM
WHERE
GROUP BY
HAVING
UNION
ORDER BY
COMPUTE
FOR
OPTION
Раздел select
Основное назначение раздела SELECT — задание набора столбцов, возвращаемых после выполнения запроса, т. е. внешнего вида результата. В простейшем случае возвращается столбец одной из таблиц, участвующих в запросе. В более сложных ситуациях набор значений в столбце формируется как результат вычисления выражения. Такие столбцы называются вычисляемыми и по умолчанию им не присваивается никакого имени. Пользователь может указать для столбца, возвращаемого после выполнения запроса, произвольное имя. Такое имя называется псевдонимом (alias). Наиболее часто это требуется при работе с разделом INTO, в котором каждый из возвращаемых столбцов должен иметь имя, и это имя должно быть уникально.
Синтаксис раздела SELECT следующий:
SELECT [ALL | DISTINCT]
[TOP n [PERCENT] [WITH TIES]]
< Список_выбора >
Ключевые слова ALL| DISTINCT
При указании ключевого слова ALL в результат запроса выводятся все строки, удовлетворяющие сформулированным условиям, тем самым разрешается включение в результат одинаковых строк. Параметр ALL используется по умолчанию.
Если в запросе SELECT указывается ключевое слово DISTINCT, то в результат выборки не будет включаться более одной повторяющейся строки. Таким образом, каждая возвращенная строка будет уникальной.
Ключевое слово TOP n [PERCENT] [WITH TIES]
Использование ключевого слова ТОР n, где n — числовое значение, позволяет отобрать в результат не все строки, а только n первых. При этом выбираются первые строки результата выборки, а не исходных данных. Поэтому набор строк в результате выборки при указании ключевого слова ТОР может меняться в зависимости от порядка сортировки. Если в запросе используется раздел WHERE, то ключевое слово ТОР работает с набором строк, возвращенных после применения логического условия, определенного в разделе WHERE.
Продемонстрируем использование ключевого слова ТОР:
SELECT TOP 5 * FROM Студенты
Из таблицы Студенты было выбрано 5 первых строк.
Можно также выбирать не фиксированное количество строк, а определенный процент от всех строк, удовлетворяющих условию. Для этого необходимо добавить ключевое слово PERCENT:
SELECT TOP 10 PERCENT FROM Студенты
Если указанное количество процентов строк представляет собой нецелое число, то всегда выполняется округление в большую сторону.
При указании вместе с предложением ORDER BY ключевого слова WITH TIES в результат будут включены строки, совпадающие по значению колонки сортировки с последними выведенными строками запроса SELECT TOP n [PERCENT].
Использование ключевого слова WITH TIES в следующем примере позволит обеспечить выдачу в ответ на запрос информации обо всех студентах первой по порядку группы:
SELECT TOP 10 PERCENT WITH TIES *
FROM Студенты
ORDER BY Номер_группы
Предложение <Список_выбора>
Синтаксис предложения <Список_выбора> следующий:
<Список выбора>::=
{*
|{<Имя_таблицы> | <Псевдоним_таблицы>}.*
|{<Имя_столбца> | <Выражение>}
[[AS] <Псевдоним_столбца>]
|<Псевдоним_столбца> = <Выражение>
} [,…,n]
Символ «*» означает включение в результат всех столбцов, имеющихся в списке таблиц раздела FROM.
Если в результат не нужно включать все столбцы всех таблиц, то можно явно указать имя объекта, из которого необходимо выбрать все столбцы (<Имя_таблицы>.* или <Псевдоним_таблицы>.*).
Отдельный столбец таблицы в результат выборки включается явным указанием имени столбца (параметр <Имя_столбца>). Столбец должен принадлежать одной из таблиц, указанных в разделе FROM. Если столбец с указанным именем имеется более чем в одном источнике данных, перечисленных в разделе FROM, то необходимо явно указать имя источника данных, к которому принадлежит столбец в формате <Имя_таблицы>.<Имя_столбца>. В противном случае будет выдано сообщение об ошибке.
Например, попробуем выбрать данные из столбца ID_Дисциплина, который имеется в таблицах «Дисциплина» и «Учебный_план»:
SELECT ID_Дисциплина, Наименование, Семестр
FROM Дисциплина, Учебный_план
В ответ будет выдано сообщение об ошибке, указывающее на некорректное использование имени ID_Дисциплина.
То есть в этом случае необходимо явно указать имя источника данных, которому принадлежит столбец, например:
SELECT Дисциплина.ID_Дисциплина, Наименование, Семестр
FROM Дисциплина, Учебный план
Столбцам, возвращаемым как результат выполнения запроса, могут быть присвоены псевдонимы. Псевдонимы позволяют изменить имя исходного столбца или поименовать столбец, содержимое которого получено как результат вычисления выражения. Имя псевдонима указывается с помощью параметра [AS] <Псевдоним_столбца>. Ключевое слово AS необязательно при задании псевдонима.
В общем случае не требуется уникальности имен столбцов результата выборки, поэтому разные столбцы могут иметь одинаковые имена или псевдонимы.
Столбцы в результате выборки могут быть не только копией столбца одной из исходных таблиц, но и формироваться на основе вычисления выражения. Такой столбец в списке выбора задается с помощью конструкции <Выражение> [[AS] <Псевдоним_столбца>]. Выражение при этом может содержать константы, имена столбцов, функции, а также их комбинации. Дополнительно столбцу, формируемому на основе вычисления выражения, можно присвоить псевдоним, указав его с помощью параметра [AS] <Псевдоним_столбца>. По умолчанию вычисляемый столбец не имеет имени.
Другой способ формирования вычисляемого столбца состоит в использовании конструкции со знаком равенства: <Псевдоним_столбца> = <Выражение>. Единственным отличием этого способа от предыдущего является необходимость обязательного задания псевдонима. В простейшем случае выражение является именем столбца, константой, переменной или функцией. Если в качестве выражения выступает имя столбца, то получаем еще один способ задания псевдонима для столбца.
Рассмотрим следующий пример. Пусть для таблицы «Студенты» необходимо построить запрос, представляющий фамилию, имя и отчество в одной колонке. Используя операцию конкатенации (сложения) символьных строк и значение ФИО в качестве псевдонима столбца, построим запрос:
SELECT ТОР 10 Фамилия + ' ' + Имя + ' ' + Отчество as ФИО, Номер_Группы
FROM Студенты
