SQL. Руководство для использования с любыми SQL СУБД
Покупка
Тематика:
Системы управления базами данных (СУБД)
Издательство:
ДМК Пресс
Автор:
Фиайли Крис
Перевод:
Хаванов А. В.
Год издания: 2023
Кол-во страниц: 454
Дополнительно
Вид издания:
Учебное пособие
Уровень образования:
ВО - Бакалавриат
ISBN: 978-5-89818-323-3
Артикул: 816353.01.99
Доступ онлайн
В корзину
Книга посвящена языку программирования SQL, применяемому для работы с реляционными базами данных. Обсуждается версия языка ANSI SQL-92 (SQL2). В настоящем издании рассказывается об использовании запросов SQL для решения соответствующих классов задач по выборке данных, их модификации или по работе с объектами структуры базы данных. Все конструкции подробно описываются и иллюстрируются большим количеством примеров. Кроме того, для каждого типа запросов рассматриваются отклонения от стандарта в реализации наиболее распространенных СУБД: MS Access, MS SQL Server, Oracle, MySQL и PostgreSQL. Книга предназначена всем, кто желает самостоятельно изучить язык SQL или усовершенствовать свои знания по этой теме.
- Полная коллекция по информатике и вычислительной технике
- ДМК Пресс. Информационные системы и технологии
- ДМК Пресс. ИТ-технологии для профессионалов
- Интермедиатор. Информационные системы и технологии (сводная)
- Интермедиатор. ИТ-технологии для профессионалов (сводная)
- Системы управления базами данных (СУБД)
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 09.03.01: Информатика и вычислительная техника
- 09.03.02: Информационные системы и технологии
- 09.03.03: Прикладная информатика
- 09.03.04: Программная инженерия
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов.
Для полноценной работы с документом, пожалуйста, перейдите в
ридер.
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, но он рассчитан главным образом на тех программистов, кто самостоятельно разрабатывает, пишет и внедряет СУБД
Доступ онлайн
В корзину