Учебник по языку sql (ddl, dml) на примере диалекта ms sql server. часть четвертая

Как это работает

Разберем принцип работы реинвестирования. Допустим, у вас
есть миллион рублей для вложений. Вы покупаете на него акции крупных компаний.
В конце года получаете дивиденды на 150 тысяч рублей. Теперь думаете, какой вид
реинвестирования выбрать: полное или частичное.

Можете часть отложить на сбережения или потратить в удовольствие, остальное вложить обратно в акции или другой инвестиционный инструмент. Чем больше реинвестируете, тем больше прибыль. Главное, подходить к инвестициям с умом.

Прибыль получается за счет двух факторов:

  1. Проценты;
  2. Время.

Не позволяйте деньгам утекать в никуда, пусть работают и
приносят прибыль.

Язык запросов SQL

База данных — централизованное хранилище данных, обеспечивающее хранение, доступ, первичную обработку и поиск информации.

Базы данных разделяются на:

  • Иерархические
  • Сетевые
  • Реляционные
  • Объектно-ориентированные

SQL (Structured Query Language) — представляет из себя структурированный язык запросов (перевод с английского). Язык ориентирован на работу с реляционными (табличными) базами данных. Язык прост и, по сути, состоит из команд (интерпретируемый), посредством которых можно работать с большими массивами данных (базами данных), удаляя, добавляя, изменяя информацию в них и осуществляя удобный поиск.

Для работы с SQL кодом необходима система управления базами данных (СУБД), которая предоставляет функционал для работы с базами данных.

Система управления базами данных (СУБД) — совокупность языковых и программных средств, предназначенных для создания, ведения и совместного использования БД многими пользователями.

Обычно, для обучения используется СУБД Microsoft Access, но мы будем использовать более распространенную в веб сфере систему — MySQL. Для удобства будет использовать веб-интерфейс или онлайн сервис для построения sql запросов , принцип работы с которыми описан ниже.

Важно: При работе с реляционными или табличными базами данных строки таблицы будем называть записями, а столбцы — полями.

Каждый столбец должен иметь свой тип данных, т.е. должен быть предназначен для внесения данных определенного типа. описаны в одном из уроков данного курса.

Составляющие языка SQL

Язык SQL состоит из следующих составных частей:

  1. язык манипулирования данными (Data Manipulation Language, DML);
  2. язык определения данных (Data Definition Language, DDL);
  3. язык управления данными (Data Control Language, DCL).

1.Язык манипулирования данными состоит из 4 главных команд:

  • выборка данных из БД — SELECT
  • вставка данных в таблицу БД — INSERT
  • обновление (изменение) данных в таблицах БД —
  • удаление данных из БД — DELETE

2.

Язык определения данных используется для создания и изменения структуры базы данных и ее составных частей — таблиц, индексов, представлений (виртуальных таблиц), а также триггеров и сохраненных процедур.

Мы будем рассматривать лишь несколько из основных команд языка. Ими являются:

  • создание базы данных — CREATE DATABASE
  • создание таблицы — CREATE TABLE
  • изменение таблицы (структуры) — ALTER TABLE
  • удаление таблицы — DROP TABLE

3.

Язык управления данными используется для управления правами доступа к данным и выполнением процедур в многопользовательской среде.

Оператор insert into: добавление записи в таблицу

Начнём с добавления новых данных в таблицу. Для добавления записи используется следующий синтаксис:

В начале добавим город в таблицу городов:

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

Теперь создадим запись о погоде за сегодняшний день.
При определении таблицы weather_log мы решили ссылаться на город, путём записи в поле city_id идентификатора города из таблицы cities. Так как мы только что добавили новый город, ничего не мешает использовать его идентификатор в записи о погоде.
Идентификатором города будет первичный ключ, который также был определён в качестве первого поля таблицы. Нумерация этого поля начинается с единицы, значит первая добавленная запись имеет идентификатор . Зная это, запрос на добавление записи о погоде в Санкт-Петербурге за третье сентября 2017 года выглядит так:

Как ускорить работу компьютера (ноутбука) Windows 7

О выборе NoSQL-баз данных

  1. Хранение больших объёмов неструктурированной информации. База данных NoSQL не накладывает ограничений на типы хранимых данных. Более того, при необходимости в процессе работы можно добавлять новые типы данных.
  2. Использование облачных вычислений и хранилищ. Облачные хранилища — отличное решение, но они требуют, чтобы данные можно было легко распределить между несколькими серверами для обеспечения масштабирования. Использование, для тестирования и разработки, локального оборудования, а затем перенос системы в облако, где она и работает — это именно то, для чего созданы NoSQL базы данных.
  3. Быстрая разработка. Если вы разрабатываете систему, используя agile-методы, применение реляционной БД способно замедлить работу. NoSQL базы данных не нуждаются в том же объёме подготовительных действий, которые обычно нужны для реляционных баз.

Оператор update: обновление информации в БД

При добавлении записи очень легко совершить ошибку: сделать опечатку, не указать значение для одного из полей, и так далее.
Естественно, язык SQL предлагает возможности для редактирования уже созданных записей.

Предположим, что при добавлении погодной записи пользователь ошибся и ввёл неверную дату. Чтобы исправить эту ошибку, нужно использовать оператор обновления — .
Запрос с этим оператором позволяет обновить значение одного или нескольких полей в существующей записи. Выглядит он так:

Но чтобы правильно составить запрос, необходимо определить условие для поиска записи, которую предлагается обновить. В противном случае, если не указать это условие, то будут обновлены абсолютно все записи в таблице.
В качестве такого условия лучше всего использовать первичный идентификатор записи. Поэтому, прежде чем выполнять запрос обновления, нужно выполнить запрос на чтение информации из таблицы, чтобы узнать, под каким идентификатором сохранилась ошибочная запись.
Допустим, этот идентификатор — единица, а правильная дата — пятое сентября 2017 года.

Запрос на обновление:

JOIN-соединения – операции горизонтального соединения данных

Если суть РДБ – разделяй и властвуй, то суть операций объединений снова склеить разбитые по таблицам данные, т.е. привести их обратно в человеческий вид.

  1. JOIN – левая_таблица JOIN правая_таблица ON условия_соединения
  2. LEFT JOIN – левая_таблица LEFT JOIN правая_таблица ON условия_соединения
  3. RIGHT JOIN – левая_таблица RIGHT JOIN правая_таблица ON условия_соединения
  4. FULL JOIN – левая_таблица FULL JOIN правая_таблица ON условия_соединения
  5. CROSS JOIN – левая_таблица CROSS JOIN правая_таблица
Краткий синтаксис Полный синтаксис Описание (Это не всегда всем сразу понятно. Так что, если не понятно, то просто вернитесь сюда после рассмотрения примеров.)
JOIN INNER JOIN Из строк левой_таблицы и правой_таблицы объединяются и возвращаются только те строки, по которым выполняются условия_соединения.
LEFT JOIN LEFT OUTER JOIN Возвращаются все строки левой_таблицы (ключевое слово LEFT). Данными правой_таблицы дополняются только те строки левой_таблицы, для которых выполняются условия_соединения. Для недостающих данных вместо строк правой_таблицы вставляются NULL-значения.
RIGHT JOIN RIGHT OUTER JOIN Возвращаются все строки правой_таблицы (ключевое слово RIGHT). Данными левой_таблицы дополняются только те строки правой_таблицы, для которых выполняются условия_соединения. Для недостающих данных вместо строк левой_таблицы вставляются NULL-значения.
FULL JOIN FULL OUTER JOIN Возвращаются все строки левой_таблицы и правой_таблицы. Если для строк левой_таблицы и правой_таблицы выполняются условия_соединения, то они объединяются в одну строку. Для строк, для которых не выполняются условия_соединения, NULL-значения вставляются на место левой_таблицы, либо на место правой_таблицы, в зависимости от того данных какой таблицы в строке не имеется.
CROSS JOIN Объединение каждой строки левой_таблицы со всеми строками правой_таблицы. Этот вид соединения иногда называют декартовым произведением.
  1. Это короче и не засоряет запрос лишними словами;
  2. По словам LEFT, RIGHT, FULL и CROSS и так понятно о каком соединении идет речь, так же и в случае просто JOIN;
  3. Считаю слова INNER и OUTER в данном случае ненужными рудиментами, которые больше путают начинающих.
ID Name DepartmentID ID Name
1000 Иванов И.И. 1 1 Администрация
1001 Петров П.П. 3 3 ИТ
1002 Сидоров С.С. 2 2 Бухгалтерия
1003 Андреев А.А. 3 3 ИТ
1004 Николаев Н.Н. 3 3 ИТ
ID Name DepartmentID ID Name
1000 Иванов И.И. 1 1 Администрация
1001 Петров П.П. 3 3 ИТ
1002 Сидоров С.С. 2 2 Бухгалтерия
1003 Андреев А.А. 3 3 ИТ
1004 Николаев Н.Н. 3 3 ИТ
1005 Александров А.А. NULL NULL NULL
ID Name DepartmentID ID Name
1000 Иванов И.И. 1 1 Администрация
1002 Сидоров С.С. 2 2 Бухгалтерия
1001 Петров П.П. 3 3 ИТ
1003 Андреев А.А. 3 3 ИТ
1004 Николаев Н.Н. 3 3 ИТ
NULL NULL NULL 4 Маркетинг и реклама
NULL NULL NULL 5 Логистика
ID Name DepartmentID ID Name
1000 Иванов И.И. 1 1 Администрация
1001 Петров П.П. 3 3 ИТ
1002 Сидоров С.С. 2 2 Бухгалтерия
1003 Андреев А.А. 3 3 ИТ
1004 Николаев Н.Н. 3 3 ИТ
1005 Александров А.А. NULL NULL NULL
NULL NULL NULL 4 Маркетинг и реклама
NULL NULL NULL 5 Логистика
ID Name DepartmentID ID Name
1000 Иванов И.И. 1 1 Администрация
1001 Петров П.П. 3 1 Администрация
1002 Сидоров С.С. 2 1 Администрация
1003 Андреев А.А. 3 1 Администрация
1004 Николаев Н.Н. 3 1 Администрация
1005 Александров А.А. NULL 1 Администрация
1000 Иванов И.И. 1 2 Бухгалтерия
1001 Петров П.П. 3 2 Бухгалтерия
1002 Сидоров С.С. 2 2 Бухгалтерия
1003 Андреев А.А. 3 2 Бухгалтерия
1004 Николаев Н.Н. 3 2 Бухгалтерия
1005 Александров А.А. NULL 2 Бухгалтерия
1000 Иванов И.И. 1 3 ИТ
1001 Петров П.П. 3 3 ИТ
1002 Сидоров С.С. 2 3 ИТ
1003 Андреев А.А. 3 3 ИТ
1004 Николаев Н.Н. 3 3 ИТ
1005 Александров А.А. NULL 3 ИТ
1000 Иванов И.И. 1 4 Маркетинг и реклама
1001 Петров П.П. 3 4 Маркетинг и реклама
1002 Сидоров С.С. 2 4 Маркетинг и реклама
1003 Андреев А.А. 3 4 Маркетинг и реклама
1004 Николаев Н.Н. 3 4 Маркетинг и реклама
1005 Александров А.А. NULL 4 Маркетинг и реклама
1000 Иванов И.И. 1 5 Логистика
1001 Петров П.П. 3 5 Логистика
1002 Сидоров С.С. 2 5 Логистика
1003 Андреев А.А. 3 5 Логистика
1004 Николаев Н.Н. 3 5 Логистика
1005 Александров А.А. NULL 5 Логистика

Работа в сервисе sql fiddle

Онлайн проверка sql запросов возможна при помощи сервиса sqlFiddle.
Самый простой способ организации работы состоит из следующих этапов:

  1. В верхней части рабочей области сервиса выбираем язык: SQLite(WebSQL);
    Открывшаяся рабочая область разделена визуально на 3 окна: левое — для кода создания таблиц и заполнения их данными, правое — для кода запросов, нижнее — для отображения результатов запросов.
  2. В левое окно помещается код для создания таблиц и вставки в них данных (пример кода расположен ниже). Затем щелкается кнопка «Build Schema».

После того как схема построена (об этом сигнализирует надпись на зеленом фоне «Schema Ready»), в правое окошко вставляется код запроса и щелкается кнопка Run SQL.

Еще пример:
Теперь некоторые пункты рассмотрим подробнее.Создание таблиц:

Пример: создайте сразу три таблицы (teachers, lessons и courses); добавьте по нескольку значений в каждую таблицу.

* для тех, кто незнаком с синтаксисом — просто скопировать полностью код и вставить в левое окошко сервиса

* урок по созданию таблиц в языке SQL далее

/*teachers*/
 
CREATE TABLE `teachers` (
  `id` INT(11) NOT NULL,
  `name` VARCHAR(25) NOT NULL,
  `code` INT(11),
  `zarplata` INT(11),
  `premia` INT(11),
  PRIMARY KEY (`id`)
);
INSERT INTO teachers VALUES (1, 'Иванов',1,10000,500), (2, 'Петров',1,15000,1000) ,(3, 'Сидоров',1,14000,800), (4,'Боброва',1,11000,800);
 
/*lessons*/
CREATE TABLE `lessons` (
  `id` INT(11) NOT NULL,
  `tid` INT(11),
  `course` VARCHAR(25),
  `date` VARCHAR(25),
PRIMARY KEY (`id`)
);
INSERT INTO lessons VALUES (1,1, 'php','2015-05-04'), (2,1, 'xml','2016-13-12');
 
/*courses*/
CREATE TABLE `courses` (
  `id` INT(11) NOT NULL,
  `tid` INT(11),
  `title` VARCHAR(25),
  `length` INT(11),
PRIMARY KEY (`id`)
);
INSERT INTO courses VALUES (1,1, 'php',54), (2,1, 'xml',72), (3,2, 'sql',25);

В результате получим таблицы с данными:

Отправка запроса:
Для того чтобы протестировать работоспособность сервиса, добавьте в правое окошко код запроса.

Пример: при помощи запроса выберите все данные из таблицы teachers, касаемые учителя с фамилией Иванов

SELECT * FROM `teachers` WHERE `name` = 'Иванов';

На дальнейших уроках SQL будет использоваться та же схема, поэтому необходимо будет просто копировать схему и вставлять в левое окно сервиса.

Онлайн визуализации схемы базы данных

Для онлайн визуализации схемы базы данных можно воспользоваться сервисом https://dbdesigner.net/:

  1. Создать свой аккаунт (войти в него, если уже есть).
  2. Щелкнуть по кнопке Go to Application.
  3. Меню Schema -> Import.
  4. Скопировать и вставить в появившееся окно код создания и заполнения таблиц базы данных

Далее к уроку 0 Язык sql создание таблиц

Оператор join: объединение записей из двух таблиц

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

Поменяем запрос на показ погодных записей, чтобы он объединял две таблицы, а в поле города показывалось его название, а не идентификатор:

Важно усвоить три самых главных момента:

  1. При чтении из объединённых таблиц, в перечислении полей после SELECT нужно явно указывать в поле имени также имя таблицы, с которой производится объединение.
  2. Всегда есть основная таблица (тб1), из которой читается большинство полей и присоединяемая (тб2), имя которой определяется после оператора JOIN.
  3. Помимо указания имени второй таблицы, обязательно следует указать условие, по которому будет происходить объединение. В этом примере таким условием будет соответствие идентификатора города из тб1 (weather_log.city_id) первичному ключу города из тб2 (cities.id).

Тинькофф Инвестиции от Тинькофф Брокер. Достоинства

Манипулирование данными

Insert Into

После создания таблицы (смотри
), её можно заполнять кортежами с помощью команды INSERT INTO. Синтаксис:

   INSERT INTO table_name (name_of_attr_1 
                             [, name_of_attr_2 ])
   VALUES (val_attr_1 
           [, val_attr_2 ]);
      

Чтобы вставить первый кортеж в отношение SUPPLIER (из
) мы используем следующее выражение:

   INSERT INTO SUPPLIER (SNO, SNAME, CITY)
   VALUES (1, 'Smith', 'London');
      

Чтобы вставить первый кортеж в отношение SELLS используется:

   INSERT INTO SELLS (SNO, PNO)
   VALUES (1, 1);
      

Обновление

Для изменения одного или более значений атрибутов кортежей в отношении
используется команда UPDATE. Синтаксис:

   UPDATE table_name
   SET name_of_attr_1 = value_1 
       [, ... [, name_of_attr_k = value_k]]
   WHERE condition;
      

Чтобы изменить значение атрибута PRICE детали ‘Screw’ в отношении
PART используется:

   UPDATE PART
   SET PRICE = 15
   WHERE PNAME = 'Screw';
      

Новое значение атрибута PRICE кортежа, чьё имя равно ‘Screw’ теперь стало 15.

Удаление

Для удаления кортежа из отдельной таблицы используется команда DELETE
FROM. Синтаксис:

   DELETE FROM table_name
   WHERE condition;
      

Чтобы удалить поставщика называемого ‘Smith’, из таблицы SUPPLIER используем
следующее выражение:

   DELETE FROM SUPPLIER
   WHERE SNAME = 'Smith';
      

Веб-сайт для создания приложений (клиентских приложений SQL)Build-an-app website, for SQL client development

На нашем веб-сайте для создания приложений можно выбрать один из длинного списка языков программирования для подключения к SQL Server.On our Build-an-app webpages, you can choose from a long list of programming languages for connecting to SQL Server. Клиентская программа может работать с различными операционными системами.And your client program can run a variety of operating systems.

Веб-сайт для создания приложений уделяет особое внимание простоте и доступности функций для начинающих разработчиков.Build-an-app emphasizes simplicity and completeness for the developer who is just getting started. Приведенные ниже шаги показывают, как это сделать.The steps explain the following tasks:

  1. Установка Microsoft SQL ServerHow to install Microsoft SQL Server
  2. Скачивание и установка средств и драйверов.How to download and install tools and drivers.
  3. Осуществление необходимых настроек в соответствии с выбранной операционной системой.How to make any necessary configurations, as appropriate for your chosen operating system.
  4. Компиляция предоставленного исходного кода.How to compile the provided source code.
  5. Как запустить программу.How to run the program.

Далее представлено несколько приблизительных разделов с описаниями, содержащихся на веб-сайте.Next are a couple approximate outlines of the detail provided on the website:

Java в UbuntuJava on Ubuntu

  1. Настройка средыSet up your environment

    • Шаг 1.1. Установка SQL ServerStep 1.1 Install SQL Server
    • Шаг 1.2. Установка Java.Step 1.2 Install Java
    • Шаг 1.3. Установка пакета средств разработки Java (JDK).Step 1.3 Install the Java Development Kit (JDK)
    • Шаг 1.4. Установка Maven.Step 1.4 Install Maven
  2. Создание приложения Java с помощью SQL Server.Create Java application with SQL Server

    • Шаг 2.1. Создание приложения Java, которое подключается к SQL Server и выполняет запросы.Step 2.1 Create a Java app that connects to SQL Server and executes queries
    • Шаг 2.2. Создание приложения Java, которое подключается к SQL Server с помощью популярной платформы Hibernate.Step 2.2 Create a Java app that connects to SQL Server using the popular framework Hibernate
  3. Ускорение работы приложения Java в 100 раз.Make your Java app up to 100x faster

    Шаг 3.1. Создание приложения Java для демонстрации индексов Columnstore.Step 3.1 Create a Java app to demonstrate Columnstore indexes

Python в WindowsPython on Windows

  1. Настройка средыSet up your environment

    • Шаг 1.1. Установка SQL ServerStep 1.1 Install SQL Server
    • Шаг 1.2. Установка Python.Step 1.2 Install Python
    • Шаг 1.3. Установка драйвера ODBC и служебной программы командной строки SQL для SQL Server.Step 1.3 Install the ODBC Driver and SQL Command Line Utility for SQL Server
  2. Создание приложения Python с помощью SQL Server.Create Python application with SQL Server

    • Шаг 2.1. Установка драйвера Python для SQL Server.Step 2.1 Install the Python driver for SQL Server
    • Шаг 2.2. Создание базы данных для приложения.Step 2.2 Create a database for your application
    • Шаг 2.3. Создание приложения Python, которое подключается к SQL Server и выполняет запросы.Step 2.3 Create a Python app that connects to SQL Server and executes queries
  3. Ускорение работы приложения Python в 100 раз.Make your Python app up to 100x faster

    • Шаг 3.1. Создание новой таблицы с 5 млн записей с помощью программы sqlcmd.Step 3.1 Create a new table with 5 million using sqlcmd
    • Шаг 3.2. Создание приложения Python, которое запрашивает эту таблицу и измеряет затраченное время.Step 3.2 Create a Python app that queries this table and measures the time taken
    • Шаг 3.3. Измерение времени, затрачиваемого на выполнение запроса.Step 3.3 Measure how long it takes to run the query
    • Шаг 3.4. Добавление индекса columnstore в таблицу.Step 3.4 Add a columnstore index to your table
    • Шаг 3.5. Измерение времени, затрачиваемого на выполнение запроса с индексом columnstore.Step 3.5 Measure how long it takes to run the query with a columnstore index

На следующих снимках экрана показано, как выглядит наш веб-сайт документации по разработке SQL.The following screenshots give you an idea of what our SQL development documentation website looks like.

Средства миграции и другие инструментыMigration and other tools

Эти средства используются для переноса, настройки и предоставления других функций для баз данных SQL.These tools are used to migrate, configure, and provide other features for SQL databases.

ИнструментTool DescriptionDescription
Диспетчер конфигурацийConfiguration Manager Используйте диспетчер конфигурации SQL Server, чтобы настроить службы SQL Server и сетевые соединения.Use SQL Server Configuration Manager to configure SQL Server services and configure network connectivity. Configuration Manager работает в Windows.Configuration Manager runs on Windows
Database Experimentation AssistantDatabase Experimentation Assistant Database Experimentation Assistant позволяет оценить целевую версию SQL для данной рабочей нагрузки.Use Database Experimentation Assistant to evaluate a targeted version of SQL for a given workload.
Помощник по миграции данныхData Migration Assistant Помощник по миграции данных поможет вам выполнить переход на современную платформу данных благодаря обнаружению проблем совместимости, которые могут влиять на функциональные возможности базы данных в новой версии SQL Server или базы данных SQL Azure.The Data Migration Assistant tool helps you upgrade to a modern data platform by detecting compatibility issues that can impact database functionality in your new version of SQL Server or Azure SQL Database.
Распределенное воспроизведениеDistributed Replay Функция распределенного воспроизведения позволяет оценить влияние будущих обновлений SQL Server.Use the Distributed Replay feature to help you assess the impact of future SQL Server upgrades. Ее также можно использовать для оценки влияния обновлений аппаратной части и операционной системы, а также для настройки SQL Server.Also use Distributed Replay to help assess the impact of hardware and operating system upgrades, and SQL Server tuning.
ssbdiagnosessbdiagnose Программа ssbdiagnose сообщает о проблемах в диалогах Service Broker или в конфигурации служб Service Broker.The ssbdiagnose utility reports issues in Service Broker conversations or the configuration of Service Broker services.
Помощник по миграции SQL ServerSQL Server Migration Assistant Помощник по миграции SQL Server используется для автоматизации миграции баз данных в SQL Server из Microsoft Access, DB2, MySQL, Oracle и Sybase.Use SQL Server Migration Assistant to automate database migration to SQL Server from Microsoft Access, DB2, MySQL, Oracle, and Sybase.

Встраивание SQL

В этом разделе мы опишем в общих чертах как SQL может быть встроен в конечный язык (например в C). Есть две главных причины, по которым мы хотим пользоваться SQL из конечного языка:

  • Существуют запросы, которые нельзя сформулировать на чистом SQL(т.е. рекурсивные запросы). Чтобы выполнить такие запросы, нам необходим
    конечный язык, обладающий большей мощностью выразительности, чем
    SQL.

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

Программа, использующая встроенный SQL в конечном языке, состоит из выражений конечного языка и выражений встроенного SQL
(ESQL). Каждое выражение ESQL начинается с ключевых слов EXEC SQL. Выражения ESQL преобразуются в выражения на конечном языке
с помощью прекомпилятора (который обычно вставляет вызовы библиотечных процедур, которые
выполняют различные команды SQL).

Если мы посмотрим на все примеры из мы поймём, что результатом запроса очень часто являются множество
кортежей. Большинство конечных языков не предназначено для работы с множествами,
поэтому нам нужен механизм доступа к каждому отдельному кортежу из множества
кортежей, возвращаемого выражением SELECT. Этот механизм можно предоставить,
определив курсор. После этого, мы можем использовать команду FETCH для получения
кортежа и установления курсора на следующий кортеж.

Подробней про встраивание SQL смотри у
[],
[],
or
[].

Предыдущий Начало Следующий
Операции в реляционной модели данных В начало главы Архитектура

Спонсоры:

Хостинг:

Maxim ChirkovДобавить, Поддержать, Вебмастеру

Булевы операторы и простые операторы сравнения

AND логическое И. Ставится между двумя условиями (условие1 AND условие2). Чтобы выражение вернуло True, нужно, чтобы истинными были оба условия
OR логическое ИЛИ. Ставится между двумя условиями (условие1 OR условие2). Чтобы выражение вернуло True, достаточно, чтобы истинным было только одно условие
NOT инвертирует условие/логическое_выражение. Накладывается на другое выражение (NOT логическое_выражение) и возвращает True, если логическое_выражение = False и возвращает False, если логическое_выражение = True
Условие Значение
= Равно
< Меньше
> Больше
<= Меньше или равно
>= Больше или равно
<>
!=
Не равно
IS NULL Проверка на равенство NULL
IS NOT NULL Проверка на неравенство NULL

Соединения (джойны)

Теперь мы хотим увидеть названия (не обязательно уникальные) всех книг Дэна Брауна, которые были взяты из библиотеки, и когда эти книги нужно вернуть:

Результат:

Title Return Date
The Lost Symbol 2016-03-23 00:00:00
Inferno 2016-04-13 00:00:00
The Lost Symbol 2016-04-19 00:00:00

По большей части запрос похож на предыдущий за исключением секции . Это означает, что мы запрашиваем данные из другой таблицы. Мы не обращаемся ни к таблице “books”, ни к таблице “borrowings”. Вместо этого мы обращаемся к новой таблице, которая создалась соединением этих двух таблиц.

— это, считай, новая таблица, которая была сформирована комбинированием всех записей из таблиц «books» и «borrowings», в которых значения совпадают. Результатом такого слияния будет:

А потом мы делаем запрос к этой таблице так же, как в примере выше. Это значит, что при соединении таблиц нужно заботиться только о том, как провести это соединение. А потом запрос становится таким же понятным, как в случае с «простым запросом» из пункта 3.

Давайте попробуем чуть более сложное соединение с двумя таблицами.

Теперь мы хотим получить имена и фамилии людей, которые взяли из библиотеки книги автора “Dan Brown”.

На этот раз давайте пойдем снизу вверх:

Шаг Step 1 — откуда берем данные? Чтобы получить нужный нам результат, нужно соединить таблицы “member” и “books” с таблицей “borrowings”. Секция JOIN будет выглядеть так:

Шаг 2 — какие данные показываем? Нас интересуют только те данные, где автор книги — “Dan Brown”

Шаг 3 — как показываем данные? Теперь, когда данные получены, нужно просто вывести имя и фамилию тех, кто взял книги:

Супер! Осталось лишь объединить три составные части и сделать нужный нам запрос:

Что даст нам:

First Name Last Name
Mike Willis
Ellen Horton
Ellen Horton

Отлично! Но имена повторяются (они не уникальны). Мы скоро это исправим.

5. Агрегирование

Грубо говоря, агрегирования нужны для конвертации нескольких строк в одну. При этом, во время агрегирования для разных колонок используется разная логика.

Давайте продолжим наш пример, в котором появляются повторяющиеся имена. Видно, что Ellen Horton взяла больше одной книги, но это не самый лучший способ показать эту информацию. Можно сделать другой запрос:

Что даст нам нужный результат:

First Name Last Name Number of books borrowed
Mike Willis 1
Ellen Horton 2

Почти все агрегации идут вместе с выражением . Эта штука превращает таблицу, которую можно было бы получить запросом, в группы таблиц. Каждая группа соответствует уникальному значению (или группе значений) колонки, которую мы указали в . В нашем примере мы конвертируем результат из прошлого упражнения в группу строк. Мы также проводим агрегирование с , которая конвертирует несколько строк в целое значение (в нашем случае это количество строк). Потом это значение приписывается каждой группе.

Каждая строка в результате представляет собой результат агрегирования каждой группы.

Можно прийти к логическому выводу, что все поля в результате должны быть или указаны в , или по ним должно производиться агрегирование. Потому что все другие поля могут отличаться друг от друга в разных строках, и если выбирать их ‘ом, то непонятно, какие из возможных значений нужно брать.

В примере выше функция обрабатывала все строки (так как мы считали количество строк). Другие функции вроде или обрабатывают только указанные строки. Например, если мы хотим узнать количество книг, написанных каждым автором, то нужен такой запрос:

Результат:

author sum
Robin Sharma 4
Dan Brown 6
John Green 3
Amish Tripathi 2

Здесь функция обрабатывает только колонку и считает сумму всех значений в каждой группе.

6. Подзапросы

Подзапросы это обычные SQL-запросы, встроенные в более крупные запросы. Они делятся на три вида по типу возвращаемого результата.

SELECT – оператор выборки данных

ID Name Birthday Email PositionID DepartmentID HireDate ManagerID
1000 Иванов И.И. 1955-02-19 i.ivanov@test.tt 2 1 2015-04-08 NULL
1001 Петров П.П. 1983-12-03 p.petrov@test.tt 3 3 2015-04-08 1003
1002 Сидоров С.С. 1976-06-07 s.sidorov@test.tt 1 2 2015-04-08 1000
1003 Андреев А.А. 1982-04-17 a.andreev@test.tt 4 3 2015-04-08 1000
(No column name) (No column name) (No column name)
825 2015-04-11 12:12:36.0406743 1
  • Целое / Целое = Целое (т.е. в данном случае происходит целочисленное деление)
  • Вещественное / Целое = Вещественное
  • Целое / Вещественное = Вещественное
ID (No column name) (No column name) (No column name) (No column name)
1000 10 10 10 10.000000
1001 10 10.01 10.01 10.010000
1002 10 10.02 10.02 10.020000
1003 10 10.03 10.03 10.030000
ID Name
1003 Андреев А.А.
1000 Иванов И.И.
1001 Петров П.П.
1002 Сидоров С.С.
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector