Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Базы данных. Практический курс. В 2 частях. Ч.1. Объектно-реляционные базы данных на примере PostgreSQL 9.5. Учебное пособие.pdf
X
- •Введение
- •Контрольные вопросы
- •Создание базы данных
- •Создание таблиц
- •Создание последовательностей
- •Ввод данных
- •Оператор CREATE TABLE
- •Оператор ALTER TABLE
- •Операторы DROP TABLE и DROP
- •Создание индексов
- •Контрольные вопросы
- •Средства определения данных языка SQL
- •Средства запроса данных языка SQL
- •Чтение заданных столбцов из одиночной таблицы
- •Чтение заданных строк из одиночной таблицы
- •Чтение заданных строк и столбцов из одиночной таблицы
- •Сортировка результатов
- •Агрегатные функции и группировка
- •Оконные функции
- •Чтение данных из нескольких таблиц с применением вложенных запросов
- •Чтение данных из нескольких таблиц с помощью операции соединения
- •Объединения
- •Средства модификации данных языка SQL
- •Вставка данных, оператор INSERT
- •Изменение данных, оператор UPDATE
- •Удаление данных, оператор DELETE
- •Транзакции
- •SQL-представления
- •Использование представлений для скрытия столбцов и строк
- •Использование представлений для отображения вычисляемых столбцов
- •Использование представлений для скрытия сложного синтаксиса
- •SQL-запросы в прикладных программах
- •Хранимые процедуры
- •Триггеры
- •Использование триггеров для проверки допустимости вводимых данных
- •Триггер, обновляющий представление
- •Триггер, обеспечивающий ссылочную целостность
- •Модуль TABLEFUNC
- •Словарь метаданных
- •Контрольные вопросы
- •Функция ROW_NUMBER
- •Функция COALESCE
- •Числовые функции
- •Тригонометрические функции
- •Контрольные вопросы
- •Заключение
- •Библиографический список

Глава 3. Введение в язык SQL 3.2. Средства запроса данных языка SQL
Столбец можно удалить в любой момент. При этом, однако, все
данные из этого столбца будут потеряны.
3.2 Средства запроса данных языка SQL
Создав таблицу, можно записывать в нее данные, изменять
их значения и удалять данные из таблицы. Предполагается, что
данные, приведенные в табл. 2.1-2.5 уже введены в базу данных.
Запросы, которые позволяют добавлять, модифицировать и удалять
строки в таблицах, будут рассмотрены далее в этом разделе.
3.2.1 Чтение заданных столбцов из одиночной таблицы
Следующий запрос произведет выборку (чтение) трех из пяти
столбцов таблицы ARTIST:
SELECT Name, Nationality, BirthDate
FROM ARTIST;
Имена запрашиваемых столбцов перечисляются после ключевого слова SELECT, а имя отношения (таблицы), из которого считываются данные, указывается после ключевого слова FROM. Результат
запроса при использовании данных из таблицы ARTIST (см. табл. 2.2)
будет иметь следующий вид:
Name Nationality BirthDate
Miro Spanish 1870
Kandinsky Russian 1854
Frings US 1700
Klee German 1900
Mloos US <NULL>
Tobey US <NULL>
Matisse French <NULL>
Chagall French <NULL>
Результатом работы оператора SELECT всегда является отношение. Этот оператор берет одно или несколько отношений, манипулирует ими определенным образом и выдает на выходе одно отношение. Даже если результатом является всего лишь одно число,
41

3.2. Средства запроса данных языка SQL Глава 3. Введение в язык SQL
это число рассматривается как отношение, имеющее одну строку и
один столбец.
Порядок столбцов в результирующей таблице определяется
порядком следования их имен после ключевого слова SELECT. Предположим, что порядок имен столбцов в запросе будет следующим:
SELECT Nationality, Name, BirthDate
FROM ARTIST;
Результат работы запроса будет следующим:
Nationality Name BirthDate
Spanish Miro 1870
Russian Kandinsky 1854
US Frings 1700
German Klee 1900
US Mloos <NULL>
US Tobey <NULL>
French Matisse <NULL>
French Chagall <NULL>
Следующий запрос извлекает из таблицы ARTIST только столбец Nationality:
SELECT Nationality
FROM ARTIST;
Результатом будет таблица:
Nationality
Spanish
Russian
US
German
US
US
French
French
Следует обратить внимание, что в последней таблице есть
одинаковые строки. Согласно определению отношения, повторения строк в отношении недопустимо. Однако процесс поиска и
42

Глава 3. Введение в язык SQL 3.2. Средства запроса данных языка SQL
удаления таких повторений отнимает много времени. Таким образом, на практике все же приходится сталкиваться с одинаковыми
строками.
Если нужно, чтобы СУБД нашла и удалила повторяющие-
ся строки, при запросе необходимо использовать ключевое слово
DISTINCT:
SELECT DISTINCT Nationality
FROM ARTIST;
Результат будет иметь вид:
Nationality
Spanish
Russian
US
German
French
3.2.2 Чтение заданных строк из одиночной таблицы
Ранее рассмотренные SQL-запросы выбирали определенные
столбцы всех строк таблицы. Теперь рассмотрим запросы, позволяющие выбирать столбцы определенных строк. Следующий запрос
получает все столбцы из тех строк таблицы ARTIST, которые содержат сведения о художниках французской национальности:
SELECT ArtistID, Name, Nationality, BirthDate, DeceasedDate
FROM ARTIST
WHERE Nationality = ’French’;
Результат имеет следующий вид:
ArtistID Name Nationality BirthDate DeceasedDate
107 Matisse French <NULL> <NULL>
108 Chaggall French <NULL> <NULL>
Второй способ запросить все столбцы таблицы – использовать
специальный символ ’*’ после ключевого слова SELECT. Приведенный ниже запрос эквивалентен предыдущему:
SELECT *
43

3.2. Средства запроса данных языка SQL Глава 3. Введение в язык SQL
FROM ARTIST
WHERE Nationality = ’French’;
Шаблон SELECT/FROM/WHERE – это фундаментальный шаблон построения SQL-запросов для выборки данных. В предложении WHERE
могут содержаться различного рода условия. Например, следующий запрос извлекает все столбцы из тех строк таблицы ARTIST, где
значение столбца BirthDate меньше 1880:
SELECT ArtistID, Name, Nationality, BirthDate, DeceasedDate
FROM ARTIST
WHERE BirthDate < 1880;
Результат следующий:
ArtistID Name Nationality BirthDate DeceasedDate
101 Miro Spanish 1870 1950
102 Kandinsky Russian 1854 1900
103 Frings US 1700 1800
Следует обратить внимание на то, что когда столбец имеет
тип данных char или varchar, сравниваемые значения должны помещаться в одиночные кавычки. Если столбец имеет тип данных
integer или numeric, кавычки необязательны.
В предложении WHERE можно указать более одного условия,
если использовать ключевое слово AND:
SELECT *
FROM ARTIST
WHERE Nationality = ’US’ AND BirthDate < 1800;
Результат будет следующий:
ArtistID Name Nationality BirthDate DeceasedDate
103 Frings US 1700 1800
3.2.3 Чтение заданных строк и столбцов из одиночной таблицы
Объединив описанные выше методы, можно выбирать из таблицы определенные столбцы и определенные строки. Следующий
запрос извлекает из таблицы ARTIST столбцы Name и Nationality
художников французской национальности:
44

Глава 3. Введение в язык SQL 3.2. Средства запроса данных языка SQL
SELECT Name, Nationality
FROM ARTIST
WHERE Nationality = ’French’;
Этот запрос выдаст следующую таблицу:
Name Nationality
Matisse French
Chagall French
Еще одна форма предложения WHERE предполагает задания
списка значений, которые может иметь столбец. Это делается с
помощью ключевого слова IN:
SELECT Name, Nationality
FROM ARTIST
WHERE Nationality IN (’Russian’, ’German’);
Результат будет следующим:
Name Nationality
Kandinsky Russian
Klee German
Строка исходного отношения войдет в результирующую таблицу, если ее столбец Nationality имеет значение ’Russian’ или
’German’.
Чтобы выбрать строки, у которых столбец Nationality не равен
ни одному из этих значений, используйте ключевое слово NOT IN:
SELECT Name, Nationality
FROM ARTIST
WHERE Nationality NOT IN (’Russian’, ’German’);
Результат этого запроса будет следующим:
Name Nationality
Miro Spanish
Frings US
Moos US
Tobey US
Matisse French
Chagall French
45

3.2. Средства запроса данных языка SQL Глава 3. Введение в язык SQL
Обратите внимание на принципиальное различие между ключевыми словами IN и NOT IN. При использовании IN столбец может
иметь любое из значений, указанных в списке. При использовании
NOT IN столбец не должен принимать ни одно из перечисленных
значений.
3.2.4 Диапазоны, специальные символы и пустые
значения в предложениях WHERE
В предложениях WHERE могут также указываться диапазоны и
шаблоны поиска. Для задания диапазонов используется ключевое
слово BETWEEN. Например, запрос
SELECT Name, Nationality
FROM ARTIST
WHERE BirthDate BETWEEN 1700 AND 1890;
даст следующий результат:
Name Nationality
Miro Spanish
Kandinsky Russian
Frings US
Рассмотренный запрос эквивалентен следующему:
SELECT Name, Nationality
FROM ARTIST
WHERE BirthDate >= 1700
AND BirthDate <= 1890;
Таким образом, диапазон, задаваемый ключевым словом
BETWEEN, включает в себя граничные значения (в данном случае
1700 и 1890).
Для задания шаблонов поиска в SQL используется ключевое
слово LIKE. Символ подчеркивания (’_’) представляет любой одиночный символ. С его помощью можно находить значения, удовлетворяющие заданному шаблону:
SELECT *
FROM ARTIST
WHERE Nationality LIKE ’S_anish’;
46

Глава 3. Введение в язык SQL 3.2. Средства запроса данных языка SQL
Подчеркивание означает, что данном месте может стоять
любой символ. Результатом этого запроса является следующая
таблица:
ArtistID Name Nationality BirthDate DeceasedDate
101 Miro Spanish 1870 1950
Следует обратить особое внимание на такую ситуацию. Чтобы
найти всех художников, чье имя начинается на букву ’М’ и состоит
из четырех символов, нельзя использовать следующий шаблон:
SELECT *
FROM ARTIST
WHERE Name LIKE ’M___’;
Результатом будет таблица, состоящая из нулевого количества строк. Причина такого результата заключается в том, что
столбец Name имеет тип char(25). Следовательно, каждое имя будет
содержать двадцать пять символов, а не четыре, как предполагалось в шаблоне.
Символ процента (’%’) представляет последовательность из
одного или нескольких произвольных символов. Запрос, возвращающий строки художников, чьи имена начинаются с буквы ’M’, можно записать следующим образом:
SELECT *
FROM ARTIST
WHERE Name LIKE ’M%’;
Результат будет следующим:
ArtistID Name Nationality BirthDate DeceasedDate
101 Miro Spanish 1870 1950
105 Moos US <NULL> <NULL>
107 Matisse French <NULL> <NULL>
Если требуется найти всех художников, чьи национальности
заканчиваются на букву ’h’, можно использовать символ процента
следующим образом:
SELECT *
FROM ARTIST
WHERE Nationality LIKE ’%h’;
47

3.2. Средства запроса данных языка SQL Глава 3. Введение в язык SQL
Результат будет таким:
ArtistID Name Nationality BirthDate DeceasedDate
101 Miro Spanish 1870 1950
107 Matisse French <NULL> <NULL>
108 Chagall French <NULL> <NULL>
Для поиска пустых значений в предложении WHERE служит конструкция IS NULL. Следующий запрос выдает имена и национальности всех художников, у которых не указан год рождения:
SELECT Name, Nationality
FROM ARTIST
WHERE BirthDate IS NULL;
Результат запроса будет таким:
Name Nationality
Moos US
Tobey US
Matisse French
Chagall French
3.2.5 Сортировка результатов
Порядок строк в таблице, возвращаемой оператором SELECT,
является произвольным. Если нужно отсортировать строки результата, это можно сделать с помощью конструкции ORDER BY. Например, следующий запрос возвращает имена и национальности художников, отсортированных в алфавитном порядке по именам:
SELECT Name, Nationality
FROM ARTIST
ORDER BY Name;
Результатом будет следующая таблица:
Name Nationality
Chagall French
Frings US
Kandinsky Russian
продолжение таблицы на следующей странице
48

Глава 3. Введение в язык SQL 3.2. Средства запроса данных языка SQL
Name Nationality
Klee German
Matisse French
Miro Spanish
Moos US
Tobey US
По умолчанию сортировка в SQL производится в порядке возрастания. Для явного указания порядка сортировки можно использовать ключевые слова ASC (по возрастанию) и DESC (по убыванию).
Например, следующий запрос отсортирует художников по именам
в обратном порядке:
SELECT Name, Nationality
FROM ARTIST
ORDER BY Name DESC;
Результат будет таким:
Name Nationality
Tobey US
Moos US
Miro Spanish
Matisse French
Klee German
Kandinsky Russian
Frings US
Chagall French
Сортировать можно и более чем по одному столбцу. Чтобы
отсортировать список имен художников и их национальностей сначала по национальностям в обратном порядке, а потом внутри каждой национальности по именам в прямом порядке, можно было бы
использовать такой запрос:
SELECT Name, Nationality
FROM ARTIST
ORDER BY Nationality DESC, Name ASC;
Это приведет к следующему результату:
49

3.2. Средства запроса данных языка SQL Глава 3. Введение в язык SQL
Name Nationality
Frings US
Moos US
Tobey US
Miro Spanish
Kandinsky Russian
Klee German
Chagall French
Matisse French
3.2.6 Агрегатные функции SQL
В SQL имеется пять агрегатных функций: COUNT, SUM, AVG, MAX
и MIN. Они выполняют различные действия над результатами оператора SELECT. Функция COUNT работает вне зависимости от типа
данных столбца, а функции SUM, AVG, MAX и MIN оперируют только
числовыми столбцами (integer, numeric и т. д.).
Функция COUNT подсчитывает количество строк в результате,
а функция SUM вычисляет сумму значений числового столбца. Например, следующий SQL-запрос подсчитывает количество строк в
таблице ARTIST:
SELECT COUNT(*)
FROM ARTIST;
Результат данного запроса представлен в таблице:
Count
8
Как уже говорилось ранее, результатом SQL-оператора SELECT
всегда является отношение. Если, как в данном случае, результат
представляет собой одиночное число, это число все равно считается отношением, имеющим одну строку и один столбец.
Рассмотрим следующие два запроса:
SELECT COUNT(Nationality)
FROM ARTIST;
и
SELECT COUNT(DISTINCT Nationality)
FROM ARTIST;
50
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
