лекция. Учебник по sql если вы хотите узнать, что такое sql этот сайт для вас
Скачать 7.88 Mb.
|
Собрал книгу: Александров А.А. (youtube-канал: andrei-tash, ссылка на скачивание книги: gracefinance.ru/sql-ex.ru.zip) Интерактивный учебник по SQL Если вы хотите узнать, что такое SQL - этот сайт для вас. Если вы знаете, что такое SQL, но хотите научиться писать запросы на этом языке - этот сайт для вас. Если вы думаете, что умеете писать запросы, не торопитесь покидать сайт. Возможно, вы откроете что-то новое для себя. Если вы не знаете как и где писать запросы - это то, что вы так долго искали. Вы сможете выполнять адресованные к учебным базам запросы непосредственно на сайте. Если вам покажется все понятным в настоящем учебнике, испытайте себя на тестах SQL-EX.RU Обучающий этап здесь уже доступен для разных СУБД, включая MSSQL, MySQL, Oracle, PostgreSQL. Мы надеемся, что сайт окажется полезным как новичкам, так и профессионалам в SQL. Запросы в тексте учебника выполняются реальной СУБД. Пока это Microsoft SQL Server, но мы планируем** возможность использования также и других серверов баз данных, начиная со свободно распространяемых и заканчивая коммерческими продуктами: MySQL PostgreSQL Oracle с тем, чтобы можно было изучать особенности диалектов языка SQL у разных СУБД. Однако уже сейчас вы можете адресовать запросы не только к MS SQL Server, но и к MySQL и PostgreSQL, используя консоль sql-ex team * Требуется регистрация/авторизация ** Свои замечания и пожелания вы можете высказать, используя почтовую форму Содержание: Введение (1.1) Чему посвящен этот учебник? (1.2) Что необходимо для работы с учебником? (1.3) Как работать с учебником? (1.4) Используемая терминология и особенности реализации (1.5) Благодарности (Часть I) Характерные ошибки при решении задач на написание запросов на выборку (SELECT) (Глава 1) База данных «Компьютерная фирма» (Глава 2) База данных «Фирма вторсырья» (Глава 3) База данных «Корабли» (Глава 4) Подсказки и решения (Часть II) Язык манипуляции данными в SQL (Глава 5) Оператор SELECT (Глава 6) Операторы модификации данных (Часть III) Готовимся ко второму этапу тестирования (Глава 7) Функции Transact-SQL для работы со строками и данными типа даты/времени Числовые функции в SQL Server (Глава 8) Типичные проблемы (Часть IV) Новое в стандарте и реализациях языка SQL Оператор MERGE (Глава 9) Функции ранжирования (Глава 10) Операторы PIVOT и UNPIVOT (Глава 11) Общие табличные выражения (CTE) Оконные функции CROSS APPLY / OUTER APPLY Функция CONCAT Функция EOMONTH Функция STRING_AGG Функция STRING_SPLIT Функция CHOOSE (Часть V) Заметки о типах данных CHAR и VARCHAR Float(n) Целочисленное деление Методы типа данных XML Язык определения данных (SQL DDL) Создание базовых таблиц Категорная целостность или целостность сущностей Проверочные ограничения Оператор ALTER TABLE Значения по умолчанию Ссылочная целостность: внешний ключ (FOREIGN KEY) Вложенные запросы в проверочных ограничениях Проверочное ограничение уровня таблицы INFORMATION_SCHEMA и Oracle (Глава 14) База данных «Аэрофлот» (Глава 15) База данных «Окраска» Ошибки в задачах DML Вопросы оптимизации Основные операции плана выполнения SQL Server Описание операций плана выполнения в Postgresql Описание операций плана выполнения в Oracle MySQL. Использование переменных в запросе Графовые базы данных Графовые базы данных SQL Server Запросы к графовой базе данных Приложения Приложение 1. Описание учебных баз данных Приложение 2. Список задач Приложение 3. Хроники Торуса Заключение Список цитируемых источников Введение Если вы хотите узнать, как получить информацию из базы данных, но не знаете, с чего начать, то эта книга для вас. Если же вы знакомы с языком SQL или даже являетесь специалистом по базам данных, то вам будет интересно оценить свои знания. Цель этой книги — быстрое изучение языка SQL. При этом «быстрое» вовсе не означает «поверхностное». Напротив, оставляя в стороне многие аспекты языка, автор старается дать глубокое понимание логической структуры данных и, как следствие, правильного построения запросов с учетом этой структуры. Надеемся, что чтение этой книги облегчит понимание и того, о чем здесь не написано. Чему посвящен этот учебник? Книга посвящена практическому использованию языка SQL и, в первую очередь, извлечению информации из реляционной базы данных, то есть наиболее синтаксически сложному оператору SELECT. Однако здесь вы также найдете необходимую информацию по другим операторам подъязыка манипуляции данными (DML — Data Manipulation Language), а именно, операторам INSERT, UPDATE и DELETE, осуществляющим модификацию данных. В дальнейшем планируется добавить разделы, посвященные подъязыку определения схемы – DDL (Data Definition Language), посредством которого создаются и изменяются объекты базы данных, в частности, таблицы и представления. Такая подача материала связана с тем, что учебник предназначен, в основном, для потенциальных пользователей и разработчиков приложений СУБД, которых, в первую очередь, интересуют вопросы извлечения информации из существующих баз данных, и только потом — их модификации и создания структур хранения. Все примеры учебника можно выполнять он-лайн на реальном сервере баз данных. Вы можете также редактировать существующие и создавать новые запросы при помощи встроенного редактора, и также выполнять их на сервере. Ряд глав книги содержат упражнения, рекомендуемые для закрепления изучаемого материала. Вы можете воспользоваться системой проверки правильности решения этих упражнений на сайте «Упражнения по SQL» , откуда и заимствованы эти упражнения Следуя испытанной практике, мы предлагаем вам поучиться на чужих ошибках. При этом, мы, разбирая ошибочные решения некоторых упражнений, в большинстве случаев не даем окончательных «правильных» решений. Этому есть две причины: задачу можно решить разными способами; поэтому, давая правильное решение, мы ограничивали бы творческую активность читателя; возможность самостоятельно решить задачу дает больший обучающий эффект, как показал опыт поддержки сайта SQL-EX.RU Справедливости ради, заметим, что после выяснения причины ошибки в результате анализа неверных решений их исправление не должно составлять большого труда. Приведенные в книге ошибочные решения не являются надуманными. Эти запросы писали посетители сайта, которые после неудачных попыток решить задачу просили объяснить, почему верный, по их мнению, запрос не принимается системой проверки. Поэтому мы берем на себя смелость утверждать, что это объяснение причин таких «характерных» ошибок, позволит добиться значительно большего прогресса в изучении SQL, чем простое рассмотрение примеров использования тех или иных конструкций языка. Что необходимо для работы с учебником? Для решения рассматриваемых в учебнике задач вы можете: 1. Использовать имеющуюся консоль для выполнения запросов. Сейчас запросы выполняются на Microsoft SQL Server, но мы планируем расширить круг используемых в учебнике СУБД. В частности, мы предполагаем реализовать выполнение запросов на СУБД Oracle, PostgreSQL, MySQL. 2. Если вы хотите использовать имеющуюся у вас СУБД, вы можете скачать скрипты учебных баз данных , каждый из которых создаст необходимые таблицы в вашей базе данных и наполнит их данными. 3. Если вы уже знакомы с языком SQL, посетите www.sql-ex.ru , где в режиме он-лайн можно решать не только представленные здесь простые задачи для начинающих. Более сложные задачи позволят вам оценить свой уровень практического владения языком SQL, а рейтинговая система даст вам возможность посоревноваться с другими ее участниками, которых уже несколько сотен тысяч. Реализованная на сайте система проверки будет контролировать правильность ваших решений, а имеющийся форум позволит вам познакомиться с решениями других посетителей. Вы можете пройти хорошую школу, разобравшись в опубликованных на форуме решениях, так как многие из них писались истинными профессионалами. Как работать с учебником? Если вы только приступаете к изучению языка SQL , то лучше начать с Части II , где рассматривается синтаксис оператора SELECT, и каждая глава содержит номера упражнений, которые рекомендуется решить для закрепления соответствующего материала. Затем переходите к Части I , которая поможет преодолеть затруднения при решении упражнений и разобраться в нюансах. С операторами модификации данных можно познакомиться в Главе 6 . Упражнения по этим операторам не рассматриваются в книге (хотя в будущем обязательно появятся), поскольку они достаточно просты, и сложные конструкции могут возникать здесь только за счет использования подзапросов. Однако достаточное число примеров в книге и решение задач на сайте SQL-EX.RU позволят вам в полной мере усвоить этот материал. Если вы в какой-то степени уже знакомы с языком SQL, то начинайте с Части I , обращаясь к Части II лишь для получения справки по тем или иным предложениям оператора SELECT или чтобы узнать о специфических особенностях реализации (в настоящее время мы используем MS SQL Server 2012). Чтение остальных частей книги зависит от степени вашей подготовки. Надеюсь, что они также окажутся полезными для вас. Я советую начать чтение книги с описания предметной области, моделируемой учебной базой данных; и внимательного изучения схемы данных. Затем стоит познакомиться с «неправильным» решением и самостоятельно найти в нем ошибку, исправить и выполнить, а затем прочитать объяснение. Убедиться в правильности своего понимания, вы можете на SQL-EX.RU Если вам все понятно и без объяснений, то эта книга вам не нужна. В таком случае заходите на SQL-EX.RU и попробуйте опередить лидеров рейтинга, выполнив упражнения повышенной сложности, которые не рассматриваются в этом учебнике. На сайте имеется сервис оценки эффективности запросов. Там вы сможете не только научиться писать правильные запросы, но и решать задачу оптимально, то есть таким образом, чтобы запросы при их выполнении потребляли меньше ресурсов сервера. Используемая терминология и особенности реализации Будем считать синонимами термины таблица и отношение; строка и кортеж; столбец, атрибут и поле. Интересующихся тонкостями терминологии отсылаю к фундаментальной книге Дейта [1] Примеры в учебнике, по мере возможности, выдержаны в рамках стандарта языка SQL. Однако там, где потребовались специфические средства (встроенные функции, например) при написании запросов использовался диалект языка SQL Server (на данный момент на сайтах sql- ex.ru и sql-tutorial.ru используется версия 2012 этой СУБД). Все приведенные в книге скрипты проверялись именно на этой СУБД. Справочную информацию по особенностям реализации вы найдете в Части III этой электронной книги. Поддержка других СУБД постоянно расширяется как на сайте учебника, так и на sql-ex.ru . Достаточно сказать, что для решения задач обучающего этапа можно выбрать не только SQL Server, но также и MySQL, PostgreSQL, Oracle. Там, где решение типовых задач в рамках стандарта по тем или иным причинам невозможно, приводятся примеры запросов в диалектах разных СУБД. Благодарности В первую очередь я хотел бы поблагодарить своих коллег по созданию и сопровождению сайта SQL- EX.RU — Майстренко А.В., Лысенко О.В., Калинкина В.Ю., Валуева Д.И., Долгополова В., Курочкина П.А., Красовского Е.А., Коптельцева В.В. без помощи которых не было бы ни сайта, ни книги. Автор выражает особую признательность Гершовичу В.И., который первым предложил написать данную книгу, а также своим соавторам - Бежаеву А.Ю., Чебыкину Д.Н., Красовскому Е.А. - написавшим отдельные материалы для этой книги. Я благодарен всем авторам задач, лицам, внесшим свой вклад в развитие ресурса, а также многочисленным посетителям, ошибки которых здесь и анализируются. Я не стану здесь перечислять всех поименно, т.к. их имена всегда можно увидеть на сайте www.sql-ex.ru Две схемы данных и многие формулировки задач по этим схемам заимствованы из книги Дж.Ульмана и Дж.Уидома [2] , которым автор выражает свою признательность. Характерные ошибки при решении задач на написание запросов на выборку (SELECT) Засим следовали несколько примерных диалогов между учителем и учеником, совершенно невразумительных для рационального уха и любой дуалистической или двузначной логики; ответы учителей на вопросы учеников заключались, как правило, в том, чтобы дать палкой по башке, вылить на голову кувшин холодной воды, пинком вышвырнуть за дверь или, в лучшем случае, глядя им в лицо, повторить их же вопрос. Х. Кортасар. Игра в классики В этой части анализируются ошибочные решения задач обучающего этапа и первого рейтингового этапа тестирования на сайте «Упражнения по SQL» . Мы стараемся не давать «правильных» решений за исключением наиболее простых задач, чтобы облегчить вводный этап обучения для начинающих. Тем не менее, многие представленные решения являются почти правильными, и их исправление не составит труда, если вникнуть в причину ошибки. Некоторые подсказки вынесены в отдельную главу «Подсказки и решения» , где даются дополнительные пояснения, а также рассматриваются некоторые альтернативные подходы к решению задачи. База данных «Компьютерная фирма» Схема БД состоит из четырех таблиц (рис.1.1): Product(maker, model, type) PC(code, model, speed, ram, hd, cd, price) Laptop(code, model, speed, ram, hd, screen, price) Printer(code, model, color, type, price) Таблица Product представляет производителя (maker), номер модели (model) и тип (PC — ПК, Laptop — портативный компьютер или Printer — принтер). Предполагается, что в этой таблице номера моделей уникальны для всех производителей и типов продуктов. В таблице PC для каждого номера модели, обозначающего ПК, указаны скорость процессора — speed (МГерц), общий объем оперативной памяти - ram (Мбайт), размер диска — hd (в Гбайт), скорость считывающего устройства - cd (например, '4х') и цена — price. Таблица Laptop аналогична таблице РС за исключением того, что вместо скорости CD- привода содержит размер экрана — screen (в дюймах). В таблице Printer для каждой модели принтера указывается, является ли он цветным — color ('y', если цветной), тип принтера — type (лазерный — Laser, струйный — Jet или матричный — Matrix) и цена — price. Схема БД состоит из четырех таблиц (рис.1.1): Product(maker, model, type) PC(code, model, speed, ram, hd, cd, price) Laptop(code, model, speed, ram, hd, screen, price) Printer(code, model, color, type, price) Таблица Product представляет производителя (maker), номер модели (model) и тип (PC — ПК, Laptop — портативный компьютер или Printer — принтер). Предполагается, что в этой таблице номера моделей уникальны для всех производителей и типов продуктов. В таблице PC для каждого номера модели, обозначающего ПК, указаны скорость процессора — speed (МГерц), общий объем оперативной памяти - ram (Мбайт), размер диска — hd (в Гбайт), скорость считывающего устройства - cd (например, '4х') и цена — price. Таблица Laptop аналогична таблице РС за исключением того, что вместо скорости CD-привода содержит размер экрана — screen (в дюймах). В таблице Printer для каждой модели принтера указывается, является ли он цветным — color ('y', если цветной), тип принтера — type (лазерный — Laser, струйный — Jet или матричный — Matrix) и цена — price. Рис. 1.1. Схема базы данных «Компьютерная фирма» Дополнительную информацию можно извлечь из представленной на рис. 1.1 логической схемы данных. Таблицы по типам продукции (ПК, портативные компьютеры и принтеры) содержат внешний ключ (model) к таблице Product. Связь «один-ко-многим» означает, что в каждой из этих таблиц может отсутствовать модель, имеющаяся в таблице Product. С другой стороны, модель с одним и тем же номером может встречаться в такой таблице несколько раз, причем даже с полностью идентичными техническими характеристиками, так как первичным ключом здесь является столбец code. Последнее требует пояснения, так как разные люди вкладывают в понятие модели разный смысл. В рамках данной схемы считается, что модель — это единство производителя и технологии. Например, одинаковые модели могут комплектоваться технологически идентичными накопителями, но разной емкости, скажем, 60 и 80 Гбайт. В частности, это означает, что допустимо присутствие в таблице PC двух ПК с одинаковыми номерами модели, но по разной цене. На языке предметной области данная схема может означать, что в таблице Product содержится информация обо всех известных поставщиках рассматриваемой продукции и моделях, которые они поставляют, а в остальных таблицах находятся имеющиеся в наличии (или продаже) модели. Поэтому вполне возможна ситуация, когда имеется поставщик (maker) с моделями, ни одной из которых нет в наличии. |