Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

SQL. Руководство для использования с любыми SQL СУБД

Покупка
Артикул: 816353.01.99
Доступ онлайн
279 ₽
В корзину
Книга посвящена языку программирования SQL, применяемому для работы с реляционными базами данных. Обсуждается версия языка ANSI SQL-92 (SQL2). В настоящем издании рассказывается об использовании запросов SQL для решения соответствующих классов задач по выборке данных, их модификации или по работе с объектами структуры базы данных. Все конструкции подробно описываются и иллюстрируются большим количеством примеров. Кроме того, для каждого типа запросов рассматриваются отклонения от стандарта в реализации наиболее распространенных СУБД: MS Access, MS SQL Server, Oracle, MySQL и PostgreSQL. Книга предназначена всем, кто желает самостоятельно изучить язык SQL или усовершенствовать свои знания по этой теме.
Фиайли, К. SQL. Руководство для использования с любыми SQL СУБД : учебное пособие / К. Фиайли ; пер. с англ. А. В. Хаванова. - 2-е изд. - Москва : ДМК Пресс, 2023. - 454 с. - ISBN 978-5-89818-323-3. - Текст : электронный. - URL: https://znanium.com/catalog/product/2102610 (дата обращения: 30.04.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
SQL

QUICK START

Крис Фиайли
VISUAL QUICKSTART GUIDE
SQL

Chris Fehily
QUICK START
SQL

Крис Фиайли

Издание рекомендовано в качестве учебного пособия 
для студентов технических вузов

Москва, 2023

2-е издание, электронное
УДК 004.43
ББК 32.973.26-018.1
Ф48

Ф48
Фиайли, Крис.

SQL. Руководство для использования с любыми SQL СУБД / К. Фиайли ; 
пер. с англ. А. В. Хаванова. — 2-е изд., эл. — 1 файл pdf : 454 с. — Москва : ДМК 
Пресс, 2023. — (Quick Start). — Систем. требования: Adobe Reader XI либо Adobe 
Digital Editions 4.5 ; экран 10". — Текст : электронный.

ISBN 978-5-89818-323-3
Книга посвящена языку программирования SQL, применяемому для работы с реляционными 
базами данных. Обсуждается версия языка ANSI SQL-92 (SQL2).
В настоящем издании рассказывается об использовании запросов SQL для решения 
соответствующих классов задач по выборке данных, их модификации или по работе с 
объектами структуры базы данных. Все конструкции подробно описываются и иллюстрируются 
большим количеством примеров. Кроме того, для каждого типа запросов рассматриваются 
отклонения от стандарта в реализации наиболее распространенных СУБД: MS 
Access, MS SQL Server, Oracle, MySQL и PostgreSQL.
Книга предназначена всем, кто желает самостоятельно изучить язык SQL или усовершенствовать 
свои знания по этой теме.

УДК 004.43 
ББК 32.973.26-018.1

Электронное издание на основе печатного издания: SQL. Руководство для использования с любыми 
SQL СУБД / К. Фиайли ; пер. с англ. А. В. Хаванова. — Москва : ДМК Пресс, 2012. — 451 с. — 
(Quick Start). — ISBN 5-94074-233-5. — Текст : непосредственный.

В соответствии со ст. 1299 и 1301 ГК РФ при устранении ограничений, установленных техническими средствами защиты 
авторских прав, правообладатель вправе требовать от нарушителя возмещения убытков или выплаты компенсации.

ISBN 978-5-89818-323-3
©  Перевод на русский язык, оформление 
ДМК Пресс
Содержание

Введение
..................................................................................................................... 11

Глава 1. Основные характеристики СУБД.................................................. 24

Выполнение программ SQL..................................................................... 25
Microsoft Access........................................................................................ 27
Microsoft SQL Server ................................................................................ 30
Oracle.......................................................................................................... 33
MySQL ........................................................................................................ 36
PostgreSQL ................................................................................................. 38

Глава 2. Реляционная модель......................................................................... 41

Таблицы, столбцы и строки ................................................................... 43
Первичные ключи .................................................................................... 47
Внешние ключи ........................................................................................ 51
Связи .......................................................................................................... 54
Нормализация........................................................................................... 57
Наша типовая база данных ..................................................................... 63

Глава 3. Основы SQL ........................................................................................... 69

Синтаксис SQL .......................................................................................... 69
Типы данных ............................................................................................. 75
Строковые типы данных ......................................................................... 77
Битовые типы данных .............................................................................. 79
Точные числовые типы данных ............................................................. 80
Действительные числовые типы данных .............................................. 82
Календарные типы данных ..................................................................... 84
Интервальные типы данных ................................................................... 88
Значение null ............................................................................................. 90
SQL

Глава 4. Выбор данных из произвольной таблицы............................... 92

Выбор столбцов с помощью предложений SELECT и FROM ............ 93
Создание псевдонимов столбцов с помощью предложения AS ........ 96
Удаление повторяющихся строк
с помощью ключевого слова DISTINCT ............................................... 99
Сортировка строк с помощью предложения ORDER BY..................101
Фильтрация строк с помощью предложения WHERE .......................109
Комбинирование условий с помощью операторов AND, OR и NOT ...114
Сравнение по шаблону оператором LIKE............................................122
Сравнение с диапазоном с помощью оператора BETWEEN .............128
Фильтрация с помощью оператора IN .................................................131
Проверка на значение null с помощью оператора IS NULL...............134

Глава 5. Операторы и функции ......................................................................137

Создание производных столбцов .........................................................138
Арифметические операции ...................................................................140
Определение последовательности вычисления ..................................143
Объединение строк с помощью оператора || ......................................145
Выбор произвольной подстроки
с помощью функции SUBSTRING() .....................................................149
Переключение регистра символов строки
с использованием функций UPPER() и LOWER() ..............................153
Удаление пробелов с помощью функции TRIM() .............................155
Определение длины произвольной строки
с помощью функции CHARACTER_LENGTH() ................................159
Поиск подстроки с использованием функции POSITION() .............161
Операции с данными даты и времени ..................................................165
Извлечение значений текущих даты и времени..................................169
Отображение информации о пользователе.........................................171
Преобразование типов данных с помощью функции CAST() ..........173
Вычисление условных значений с помощью выражения CASE........179
Проверка на значения null
с использованием функции COALESCE()............................................184
Сравнение выражений с помощью функции NULLIF() ....................185

Глава 6. Суммирование и группировка данных .....................................188

Использование агрегатных функций ...................................................189
Поиск минимума посредством функции MIN() ................................192
Поиск максимума с использованием функции MAX() .....................194
Вычисление суммы с помощью функции SUM() ..............................196
Порядок расчета среднего значения с помощью функции AVG() ....198
Подсчет строк с помощью функции COUNT() .................................200
Содержание

Исключение повторных значений
с помощью предложения DISTINCT ....................................................202
Группирование строк с использованием предложения GROUP BY .....206
Фильтрация групп с помощью предложения HAVING......................215

Глава 7. Выбор данных из нескольких таблиц .......................................219

Уточнение имен столбцов .....................................................................220
Создание псевдонимов таблиц с помощью предложения AS ...........222
Использование объединений .................................................................224
Создание объединений с помощью синтаксиса JOIN и WHERE ......228
Создание произвольного перекрестного объединения
с использованием предложения CROSS JOIN......................................233
Создание произвольного естественного объединения
с использованием предложения NATURAL JOIN ...............................236
Создание внутреннего объединения
с помощью команды INNER JOIN ........................................................241
Создание внешних объединений
с помощью команды OUTER JOIN.......................................................265
Создание самообъединения ...................................................................279
Комбинирование строк с помощью оператора UNION ....................286
Поиск общих строк с помощью команды INTERSECT .....................295
Поиск разных строк с помощью команды EXCEPT...........................297

Глава 8. Подзапросы ..........................................................................................299

Принципы работы с подзапросами ......................................................300
Структура подзапросов..........................................................................302
Подзапросы и объединения ...................................................................303
Простые и сложные запросы .................................................................307
Определение названий столбцов в подзапросах.................................313
Значения null в подзапросах...................................................................314
Использование подзапросов в качестве выражений
в списке заголовков столбцов ...............................................................316
Сравнение значений, возвращаемых подзапросом,
с использованием операторов сравнения.............................................320
Проверка на вхождение во множество с помощью оператора IN ...325
Сравнение всех значений запроса
с помощью ключевого слова ALL .........................................................333
Сравнение некоторых значений запроса
с помощью ключевого слова ANY........................................................337
Проверка наличия выборки с помощью оператора EXISTS..............341
Сравнение эквивалентных запросов .....................................................347
SQL

Глава 9. Добавление, обновление и удаление строк...........................348

Отображение названий столбцов в таблице ........................................349
Вставка строк с помощью команды INSERT ......................................352
Изменение строк с помощью команды UPDATE ...............................358
Удаление строк с помощью команды DELETE ...................................363

Глава 10. Создание, изменение и удаление таблиц ..............................367

Порядок создания таблиц ......................................................................368
Основные принципы работы с ограничениями ..................................369
Создание новой таблицы с помощью команды CREATE TABLE .....371
Запрет значения null с помощью ограничения NOT NULL ...............373
Присвоение значения по умолчанию
с помощью ограничения DEFAULT ......................................................376
Задание первичного ключа
с помощью ограничения PRIMARY KEY ............................................379
Задание внешнего ключа с помощью ограничения FOREIGN KEY .....383
Присвоение уникальных значений
с помощью ограничения UNIQUE ........................................................389
Проверка значений столбца с помощью ограничения CHECK ........392
Создание временной таблицы
с помощью команды CREATE TEMPORARY TABLE .........................395
Создание новой таблицы на основе существующей
с помощью команды SELECT INTO .....................................................398
Изменение таблицы с помощью команды ALTER TABLE .................401
Удаление таблицы с помощью команды DROP TABLE ....................404

Глава 11. Индексы .................................................................................................405

Создание индекса с помощью команды CREATE INDEX .................405
Удаление индекса с помощью команды DROP INDEX .....................409

Глава 12. Представления ....................................................................................411

Создание представления с помощью команды CREATE VIEW ........411
Считывание данных из представления .................................................417
Изменение данных через представление .............................................419
Удаление представления с помощью команды DROP VIEW............424

Глава 13. Транзакции ...........................................................................................425

Выполнение транзакций .........................................................................426

Приложение ....................................................................................................................431

Предметный указатель .............................................................................................445
Посвящается моему отцу
Благодарности

Беки Морган (Becky Morgan) – за критику первого варианта рукописи.
Марджори Баер (Marjorie Baer) – за то, что посоветовала прочитать книгу «Do you know
SQL?».
Кэти Симпсон (Kathy Simpson) – за то, что иногда ради работы жертвовала сном.
Лизу Бразиил (Lisa Brazieal) – за постоянное «вырезать и вклеить».
Морин Форис (Maureen Forys) – за отсутствие переносов в ключевых словах.
Брайена Штайнвега (Bryan Steinweg) – за переносы на следующую страницу.
Даррена Пеннингтона (Darren Pennington) – за то, что садился на своего любимого
«конька».
Нэнси Олдридж-Рюнцель (Nancy Aldrich-Ruenzel) – за свежие идеи.

Информация в примере с базой данных – вымышленная. Я позаимствовал пару
названий из новелл Яна М. Бэнкса (Iain M. Bank's).
SQL – это стандартный язык программирования, 
применяемый для создания, модификации, 
поиска и извлечения информации, 
хранящейся в произвольной реляционной 
базе данных, управляемой соответствующей 
системой управления базами
данных (СУБД).
С помощью SQL вы можете, в частности,
превратить любой вопрос типа «А где живут 
наши клиенты?» в такую команду, которую 
программное обеспечение вашей
базы данных сможет понять и выполнить
(для приведенного вопроса это может
быть команда SELECT city, state FROM
customers). Если вы уже умеете извлекать
информацию аналогичного типа с помощью 
графического инструментария построения 
запросов, то, скорее всего, заметили, 
что он становится весьма ограничивающим 
и громоздким по мере того, как
сложность ваших запросов возрастает. Вот
здесь и нужен SQL, хотя решением указанной 
проблемы его возможности не ограничиваются. 
Например, вы можете применять
SQL для того, чтобы добавлять, модифицировать 
и удалять данные и объекты базы
данных. И именно потому, что язык SQL
такой мощный, его поддерживают наиболее 
популярные СУБД, в частности Micro-
soft Access, Oracle и MySQL, хотя уровень

этой поддержки существенно зависит от
того, о какой именно СУБД идет речь.
Прежде чем перейти к собственно программированию, 
имеет смысл познакомиться 
с основными идеями реляционных
баз данных и SQL. Так мы и поступим.

SQL

SQL – это:

язык программирования;

простой в изучении;

непроцедурный;

встроенный и/или интерактивный;

стандартизованный;

используемый для манипулирования данными 
и объектами баз данных;

не аббревиатура.

Рассмотрим пункты этого списка подробнее.


Язык программирования

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

Введение
SQL

эту программу, написанную на языке SQL.
Это значит, что СУБД выполняет те запросы, 
которые вы ей передали, и отображает
результаты их работы, в том числе какое-
нибудь сообщение об ошибке. Надо сказать,
что языки программирования, называемые
также формальными языками, отличаются 
от языков общения, называемых неформальными 
или естественными языками,
главным образом тем, что создаются под
конкретную цель, полностью лишены двусмысленности, 
имеют весьма ограниченные
словарный запас и гибкость. Таким образом, 
если вы не получили результата от работы 
своей программы, на который рассчитывали 
при ее написании, это произошло 
потому, что ваша программа содержит
какую-либо ошибку (логическую или синтаксическую – 
в последнем случае, скорее
всего, будет выведено соответствующее сообщение, 
описывающее ошибку), а не потому, 
что компьютер неправильно понял
ваши инструкции, формализованные в виде
программы (эта информация проясняет,
почему отладка программ считается одной
из основных задач программирования).

Будучи формальным языком, SQL, как
и другой язык этого типа, имеет свои синтаксис 
и семантику. Синтаксис включает
собственно слова и символы, которые вы
можете применять, а также правила, по
которым эти слова и символы можно использовать 
при создании команд и программ. 
Семантика помогает выяснить реальное 
значение, смысл любой синтаксически 
правильной команды. Вы вполне
можете написать на SQL какую-нибудь
команду, соответствующую синтаксису
языка, которая, тем не менее, будет выражать 
неверный смысл (то есть будет правильной 
синтаксически, но неверной семантически). 
Подробнее о синтаксисе и семантике 
SQL рассказывается в главе 3.

Простой в изучении

Уточним: SQL прост в изучении по сравнению 
с другими языками программирования. 
Дело в том, что, если вы пока не написали 
ни одной программы, переход от
неформального языка к любому формальному 
языку вас поначалу сильно разочарует. 
Тем не менее подчеркнем, что команды 
на SQL читаются как предложения
неформального языка, что уже сильно облегчает 
понимание смысла. Так, любой
новичок в программировании, скорее всего, 
поймет, что записанная на SQL команда 
SELECT au_fname, au_lname FROM authors
ORDER BY au_lname совпадает по смыслу с
предложением «Перечислить имена и фамилии 
всех авторов, сортируя их по фамилиям». 
Но этот человек почти наверняка
сочтет эквивалентную по смыслу программу, 
написанную на C или на Perl, абсолютно 
непонятной.

Непроцедурный

Заметим сразу: если вы никогда не программировали, 
то можете пропустить этот раздел, 
не беспокоясь об утрате целостности
восприятия остального материала; но если
вы программировали на C или Perl, то имели
дело с процедурным языком. А для любого
процедурного языка программист должен
явно прописывать шаги, которые выполняет
компьютер, чтобы получить желаемый результат. 
SQL относится к непроцедурным
языкам (такие языки еще называют «декларативными»). 
Программируя на таком языке, 
вам надо описать то, что именно вы хотите 
сделать, а не то, как вы собираетесь
это делать. В случае с SQL оптимизатор,
который входит в состав программного
обеспечения вашей СУБД, самостоятельно
рассчитает это самое «как». Именно поэтому 
SQL не содержит таких конструкций
Введение
13

управления, как IF-THEN-ELSE, WHILE и
операторов перехода GOTO1.

Чтобы наглядно продемонстрировать различие 
между процедурными и непроцедурными 
языками, мы написали две эквивалентные 
программы, выполняющие по сути одну
и ту же задачу. Первая программа, текст которой 
приведен в листинге 1, написана на
Microsoft Access Visual Basic, то есть на процедурном 
языке. Вторая программа, текст
которой приведен в листинге 2, написана на
SQL. Программа на VB извлекает имена авторов 
из таблицы, содержащей информацию 
о них. Конечно, нет необходимости
вникать в детали первой программы, но обратите 
внимание, что она использует цикл
Do Until для того, чтобы явно определить
то, как именно извлекать нужные данные.
Вторая программа делает то же самое, но
одной-единственной командой SQL. В первом 
случае мы имеем примерно 20 строк
кода, а во втором – всего одну команду. Но
важнее всего другое: программируя на SQL,
вам надо указать только то, что именно необходимо 
сделать, а дальше сама СУБД автоматически 
и незаметно для вас определяет 
и исполняет ту последовательность пошаговых 
операций, которую требуется выполнить 
для достижения желаемого результата.
Более того, листинг 2 – это простейший из
всех возможных запрос SQL. А если к этому
запросу добавить обычные операции сортировки, 
фильтрации и объединения, то для
выполнения всего, что будет делать усложненная, 
но единственная команда SELECT,
записанная на SQL, может понадобиться до
100 строк процедурного кода.

1 Однако управляющие конструкции обычно присутствуют 
в SQL и применяются при создании
так называемых хранимых процедур – определенных 
наборов инструкций, предназначенных
для выполнения сложных действий с данными. –
Прим. науч. ред.

Листинг 1. Этот код на Microsoft Access Visual Basic
извлекает имена и фамилии из таблицы в базе
данных, содержащей информацию об авторах,
и помещает результат выборки в выходной массив

Sub GetAuthorNames()
Dim db As Database
Dim rs As Recordset
Dim i As Integer
Dim au_names() As String
Set db = CurrentDb()
Set rs = db.OpenRecordset("authors")
rs.MoveLast
ReDim au_names(rs.RecordCount - 1, 1)
With rs
.MoveFirst
i = 0
Do Until .EOF
au_names(i,0) = ![au_fname]
au_names(i,1) = ![au_lname]
i = i + 1
.MoveNext
Loop
End With
rs.Close
db.Close
End Sub

Листинг 2. Эта команда SQL выполняет ту же
самую задачу, что и вся процедура на VB,
показанная в листинге 1. Внутренний оптимизатор
СУБД сам определяет, как наилучшим образом
извлечь соответствующие данные

SELECT au_fname, au_lname
FROM authors;
SQL

Встроенный и/или интерактивный

Если вы включаете команды SQL как элементы 
в какие-нибудь программы, написанные 
на процедурных языках, считается,
что вы применяете так называемый встроенный 
SQL, а те процедурные языки, на которых 
написаны эти более крупные или,
точнее, несущие программы, называют базовыми. 
Таким языком на практике чаще
всего оказывается какой-нибудь язык программирования 
общего назначения, в частности 
C, Java или COBOL, или какой-либо
язык сценариев, например Perl, PHP или
Python. То есть любой сценарий PHP,
запускаемый как CGI-программа, может
применять вложенные команды SQL, чтобы
запрашивать произвольную базу СУБД
MySQL. СУБД в этом случае передаст результат 
этого запроса какой-нибудь переменной 
PHP для отображения и дальнейшей 
обработки. Например, как это показано 
в листинге 3, команда SQL встроена
в программу, написанную на Access Visual
Basic.
Если в режиме реального времени адресовать 
команды на языке SQL непосредственно 
вашей СУБД, а она отобразит соответствующие 
результаты сразу же, как
только получит, значит, вы применяете
интерактивный или динамический SQL.
Отметим, что все современные серверы
СУБД поставляются в комплекте с такими
графическими приложениями или утилитами 
командной строки, которые воспринимают 
интерактивные команды SQL или/и
текстовые файлы, содержащие SQL-программы, 
то есть сценарии.
В настоящем издании рассматриваются
только интерактивные команды SQL, поскольку 
их можно встроить в любую прикладную 
программу или сценарий. Однако
имейте в виду, что между интерактивными
и встроенными командами могут существовать 
небольшие синтаксические различия.

Листинг 3. Здесь Visual Basic выполняет функцию
базового языка для встроенного SQL. Однако во всех
примерах данной книги используется синтаксис
только интерактивного SQL, который может слегка
отличаться от синтаксиса встроенного SQL
в зависимости от конкретной СУБД

Sub GetAuthorNames2()
Dim db As Database
Dim rs As Recordset
Set db = CurrentDb()
Set rs = db.OpenRecordset("SELECT
→ au_fname, au_lname FROM authors;")
‘ Далее программа обрабатывает результаты
→ запроса, находящиеся в переменной rs.
rs.Close
db.Close
End Sub

Рис. 1. Титульный лист 626-страничного документа
ANSI, который называется X3.135-1992 Database
Language – SQL и, собственно, официально
определяет стандарт SQL-92.
При желании вы можете купить электронную
версию этого документа на сайте www.ansi.org,
но он рассчитан главным образом на тех
программистов, кто самостоятельно
разрабатывает, пишет и внедряет СУБД
Доступ онлайн
279 ₽
В корзину