Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Базы данных. Практический курс. В 2 частях. Ч.1. Объектно-реляционные базы данных на примере PostgreSQL 9.5. Учебное пособие.pdf
Скачиваний:
0
Добавлен:
06.09.2026
Размер:
2 Мб
Скачать
Глава 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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]