Простые sql запросы
Содержание:
- Типы данных и выражения sql
- JOIN-соединения – операции горизонтального соединения данных
- Команда HOST
- Оператор create table: создание таблиц
- Основа любой базы данных — таблицы и 4 типа запросов
- Создание таблицы
- Запрос для выборки данных (select)
- Команда UPDATE
- Обновление (UPDATE)
- Команда SPOOL
- Примеры портфелей по стратегии Asset Allocation
- Язык запросов SQL
- Оператор insert into: добавление записи в таблицу
- Типы данных SQL
- Сравнение данных за две даты
- Что это такое
- Тинькофф Инвестиции от Тинькофф Брокер. Достоинства
- Команда SQLPROMPT
- Выполнение запросов
- Основные моменты при изучении Sql
Типы данных и выражения sql
Типы
данных
Символьный
тип данных содержащий буквы, цифры,
специальные символы
CHAR
или CHAR
(n)
– символьные строки фиксированные
данные
VARCHAR
(n)
– символьные строки
Целые
числа
INTЕGER
или INT
– целое для решения которого отводится,
как байта
SMALLINT
– короткое
целое (2 байта)
FLOAT
–
число плавающих точек
DECIMAL
(p)
– аналогично FLOAT
с числовым значение цифр р
DECIMAL
(p,
n)
– аналогично предыдущим, р – общее
количество десятичных чисел
Денежный
тип
MONEY
(p,
n)
– аналогично типу DECIMAL
(p,
n)
Дата
и время
DATE
— дата
TIME
— время
INTERVAL
– временный интервал
DATETIME
– момент время
Двоичные
данные
BINARY
BYTE
BLOB
– хранить данные любого объема в двоичном
коде
Последовательный
тип
SERIAL
– тип данных на основе INTEGER
позволяющий сформировать уникальные
значения
Выражения
Арифметические
выражения
+,
-, *, %, /, ^,
Логические
операции
AND
– логическое умножение
OR
– лог сложение
NOT
–лог отриц
Текстовые
операции
&
— слияние слов
Пример
выражения
Kol*Price
(Kol*Price)/8200
AVG
Язык
SQL
оперирует терминами: таблица, строка,
столбец или колонка.
Полное
имя таблицы: имя _ владельца.имя_таблицы
Полное
имя столбца: имя _ владельца.имя_столбца
Основной
яз SQL составляет операции, условно
разбитые на несколько групп.
Категории
операторов
SQL:
-
Date
Definition Language (DDC) -
Date
Manipulation Language (DML) -
Date
Control Language (DCL) -
Transaction
Control Language (TCL) -
Cursor
Control Language (CCL)
JOIN-соединения – операции горизонтального соединения данных
Если суть РДБ – разделяй и властвуй, то суть операций объединений снова склеить разбитые по таблицам данные, т.е. привести их обратно в человеческий вид.
- JOIN – левая_таблица JOIN правая_таблица ON условия_соединения
- LEFT JOIN – левая_таблица LEFT JOIN правая_таблица ON условия_соединения
- RIGHT JOIN – левая_таблица RIGHT JOIN правая_таблица ON условия_соединения
- FULL JOIN – левая_таблица FULL JOIN правая_таблица ON условия_соединения
- 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 | — | Объединение каждой строки левой_таблицы со всеми строками правой_таблицы. Этот вид соединения иногда называют декартовым произведением. |
- Это короче и не засоряет запрос лишними словами;
- По словам LEFT, RIGHT, FULL и CROSS и так понятно о каком соединении идет речь, так же и в случае просто JOIN;
- Считаю слова 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 | Логистика |
Команда HOST
Команда позволяет выполнять в SQL*Plus команды операционной системы.Например, может возникнуть необходимость посмотреть, существует ли некий файл в определенном каталоге, или выдать команды или на уровне , а затем вернуться в сеанс SQL*Plus и возобновить взаимодействие с базой данных Oracle.
Ниже приведен пример применения команды :
SQL> HOST cp /u01/app/oracle/new.sql /tmp
В этом примере команда помогает скопировать файл из указанного каталога в каталог .
С помощью команды можно выполнять практически все те же команды, которые доступны на уровне операционной системы. Слово можно заменять восклицательным знаком (!):
SQL> ! cp /u01/app/oracle/new.sql /tmp
На заметку! В случае ввода команды HOST без параметров вы попадаете в каталог операционной системы, из которого изначально запускали сеанс SQL*Plus.
По завершении работы с операционной системой достаточно ввести в командной строке и на экране снова появится приглашение покинутого ранее сеанса SQL*Plus.
Например:
SQL> HOST $ exit SQL>
Оператор create table: создание таблиц
Создав новую БД, сообщим MySQL, что теперь мы собираемся работать именно с ней.
Выбор активной БД выполняется командой:
Пришло время создать первые таблицы!
Для ведения дневника по всем правилам, понадобится создать три таблицы: города (cities), пользователи (users) и записи о погоде (weather_log).
В подразделе «Запись» этой главы описано, как должна выглядеть структура таблицы weather_log. Переведём это описание на язык SQL:
Чтобы ввести многострочную команду в командной строке используйте символ в конце каждой строки (кроме последней).
Теперь создадим таблицу городов:
MySQL может показать созданную таблицу, если попросить об этом командой: .
В ответе будут перечислены все поля таблицы, их тип и другие характеристики.
Первичный ключ
В примере с созданием новой таблицы при перечислении необходимых полей первым полем идёт .
Это поле называется первичным ключом. Обязательно создавать первичный ключ в каждой таблице.
Первичный ключ — это особенное поле, в котором сохраняется уникальный идентификатор записи. Он нужен, чтобы у программиста и базы данных всегда была возможность однозначно обратиться к одной конкретной записи для её чтения, обновления или удаления.
Если назначить поле первичным ключом, то БД будет следить за тем, чтобы значение в этом поле больше не повторялось в таблице.
А если ещё и добавить аттрибут , то MySQL при добавлении новых записей будет заполнять это поле сама. будет играть роль счётчика — каждая новая запись в таблице получит значение на единицу больше максимального существующего значения.
Основа любой базы данных — таблицы и 4 типа запросов
Основой любой базы данных являются всего две вещи — это таблицы и 4 типа запросов. Именно с них и началось. Все эти сложности, которые описываются тысячами веб-сайтов в Интернете, появились уже после них и применяются к этим азам.
Первым делом, рассмотрим что такое таблица. Хоть раз, но каждый открывал эксельный файл или электронную таблицу OpenOffice (см. обзор офисных пакетов). Так вот это, по сути, и есть база данных. У вас есть колонки и строки, в пересечении которых вы заполняете данные (числа, текст, даты и прочее).
Однако, тут есть важный момент — если эксель позволяет произвольно вставлять данные в любую ячейку, то существующие базы данных имеют некоторые ограничения.
1. Каждая колонка имеет уникальное некое имя (аналогично A, B, C).
2. В каждой колонке могут располагаться данные только одного типа. К примеру, в любой ячейке колонки B только числа, в колонке C только текст, в колонке F только даты.
3. Количество колонок фиксировано и исчислимо. Простыми словами, в экселе вы можете в любой момент вставить некие данные в ячейку рядом с определенными колонками. В базах данных же, подобное требует, что бы вы сначала добавили колонку с именем и определили ее тип, а только лишь потом редактировали данные.
4. Единицей измерения таблицы принято считать не отдельную ячейку, а каждую строку. К примеру, если у вас в таблице три колонки «Имя (Name) / День рождения (Date) / Возраст (Age)», то единицей измерения считается «Вася / 12.12.2012 / 7», а не какое-либо отдельное значение. Конечно, редактировать или просматривать отдельные ячейки этой строки можно, но добавлять данные в таблицу можно только построчно.
5. Существует специальное значение NULL, которое обозначает отсутствие данных в ячейке. Понять суть можно из следующего момента — далеко не у всех типов данных можно установить такое значение, которое можно было бы считать отсутствием данных. К примеру, для текста отсутствие данных можно как-то сравнить с пустой строкой (хотя и это не всегда корректно), а вот для чисел такого значения просто не существует (0 это число; к примеру, «осталось 0 яблок»). Поэтому и было введено специальное значение NULL.
Пример таблицы somedata:
Name (текст) | Date (даты) | Age (цифры) |
---|---|---|
Вася | 12.12.2012 | 7 |
Анжелика | 22.02.2002 | 17 |
Кротомир | 30.08.1999 | 20 |
Рассмотрим основные 4 типа запросов. Не сложно догадаться, что подобную таблицу хотелось бы каким-то образом составлять под конкретные задачи, а так же получать отфильтрованные данные. Просто представьте, что в таблице выше не 3 строки, а целых 10 000. Найти что-либо или подкорректировать будет весьма проблематично. Именно поэтому и были введены следующие 4 типа запросов:
1. Вставка (insert) — позволяет вставлять в таблицу единицы измерения, то есть строки.
2. Удаление (delete) — позволяет удалять из таблицы строки данных.
3. Обновление (update) — позволяет изменять отдельные ячейки строк.
4. Выборка (select) — позволяет из данных таблицы получать произвольного вида подтаблицы с необходимыми результатами, которые так же называют выборками.
Рассмотрим все типы более подробно.
Но, перед этим, хотелось бы отметить, что будет использован синтаксис для базы данных MySQL. Однако, для азов это не так критично, так как приведенные примеры если и будут отличаться в разных базах данных, то весьма незначительно.
Создание таблицы
Синтаксис:
> CREATE TABLE <table> (<field1> <options1>, <field2> <options2>) <table options>
Пример:
> CREATE TABLE IF NOT EXISTS `users_rights` (
`id` int(10) unsigned NOT NULL,
`user_id` int(10) unsigned NOT NULL,
`rights` int(10) unsigned NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf-8;
* где table — имя таблицы (в примере users_rights); field1, field2 — имя полей (в примере создается 3 поля — id, user_id, rights); options1, options2 — параметры поля (в примере int(10) unsigned NOT NULL); table options — общие параметры таблицы (в примере ENGINE=InnoDB DEFAULT CHARSET=utf-8).
Запрос для выборки данных (select)
Это, пожалуй, один из самых часто используемых типов sql-запросов (ведь данные составляются не для хранения, а для их использования) и поэтому у него имеется масса дополнительных возможностей (сортировка, группировка и так далее; о них читайте в прочих обзорах, в рамках этого обзора они не столь важны).
Строится данный запрос следующим образом:
select col1, col2, ..., colN from table where clause;
где select — это начало запроса, col1, col2, …, colN — это перечисление колонок, которые необходимо отобразить (важно знать, что если требуются все колонки таблицы, то вместо перечисления можно указывать просто символ звездочки *, что очень удобно, особенно, если структура таблицы постоянно корректируется или же заранее не известны все доступные колонки, кроме тех, что в фильтре), from — обозначает, что далее будет указано имя таблицы, where — обозначает, что далее будет указан фильтр, clause — сам фильтр (аналогично delete и update). После sql-запроса ставится точка с запятой
Примечание: Важно отметить, что часть where с clause являются необязательными. То есть, если фильтр не требуется, то их можно не писать
Однако, если фильтр нужен, то обе составляющих необходимо использовать в запросе.
Рассмотрим пример. Допустим, нам необходимо получить возраст и имя всех тех, чье день рождение было до 1-го января 1999 года. Тогда sql-запрос будет выглядеть так:
select Name, Age from somedata where Date < '01.01.1999';
Обратите внимание, что порядок колонок после select может быть произвольным, что позволяет получать удобные для восприятия подтаблицы данных (выборки)
Команда UPDATE
Команда UPDATE — производит изменения в уже существующей записи или во множестве записей в таблице SQL. Изменяет существующие значения в таблице или в основной таблице представления.
Команда UPDATE Синтаксис команды
Синтаксис команды UPDATE
Команда UPDATE. Основные ключевые слова и параметры команды UPDATE
- schema — идентификатор полномочий, обычно совпадающий с именем некоторого пользователя
- table view — имя таблицы SQL, в которой изменяются данные; если определяется представление, данные изменяются в основной таблице SQL представления
- subquery_1 — подзапрос, который сервер обрабатывает тем же самым способом как представление
- сolumn — столбец таблицы SQL или представления SQL, значение которого изменяется; если столбец таблицы из предложения SET опускается, значение столбца остается неизменяемым
- expr — новое значение, назначаемое соответствующему столбцу; это выражение может содержать главные переменные и необязательные индикаторные переменные
- subquery_2 — новое значение, назначаемое соответствующему столбцу
- subquery_3 — новое значение, назначаемое соответствующему столбцу
WHERE — определяет диапазон изменяемых строк теми, для которых определенное условие является TRUE; если опускается эта фраза, модифицируются все строки в таблице или представлении.
При выдаче утверждения UPDATE включается любой UPDATE-триггер, определенный на таблице.Подзапросы. Если предложение SET содержит подзапрос, он возвращает точно одну строку для каждой модифицируемой строки. Каждое значение в результате подзапроса назначается соответствующим столбцам списка в круглых скобках. Если подзапрос не возвращает никакие строки, столбцу назначается NULL. Подзапросы могут выбирать данные из модифицируемой таблицы. Предложение SET может совмещать выражения и подзапросы.
Команда UPDATE Пример 1
Изменение для всех покупателей рейтинга на значение, равное 200:
Команда UPDATE Пример 2
Замена значения столбца во всех строках таблицы, как правило, используется редко. Поэтому в команде UPDATE, как и в команде DELETE, можно использовать предикат. Для выполнения указанной замены значений столбца rating, для всех покупателей, которые обслуживаются продавцом Giovanni (snum = 1003), следует ввести:
Команда SQL UPDATE Пример 3
В предложении SET можно указать любое количество значений для столбцов, разделенных запятыми:
Команда UPDATE Пример 4
В предложении SET можно указать значение NULL без использования какого-либо специального синтаксиса (например, такого как IS NULL). Таким образом, если нужно установить все рейтинги покупателей из Лондона (city = ‘London’) равными NULL-значению, необходимо ввести:
Команда UPDATE Пример 5
Поясняет использование следующих синтаксических конструкций команды UPDATE:
- Обе формы предложения SET вместе в одном утверждении.
- Подзапрос.
- Предложение WHERE, ограничивающее диапазон модифицируемых строк.
Вышеупомянутое утверждение UPDATE выполняет следующие операции:
- Модифицирует только тех служащих, кто работают в Dallas или Detroit
- Устанавливает значение колонки deptno для служащих из Бостона
- Устанавливает жалованье каждого служащего в 1.1 раз больше среднего жалованья всего отдела
- Устанавливает комиссионные каждого служащего в 1.5 раза больше средних комиссионных всего отдела
Обновление (UPDATE)
Синтаксис:
> UPDATE <table> SET <field>='<value>’ WHERE <conditions>
* где table — имя таблицы; field — поле, для которого будем менять значение; value — новое значение; conditions — условие (без него делать update опасно — можно заменить все данные во всей таблице).
Обновление с использованием замены (REPLACE):
UPDATE <table> SET <field> = REPLACE(<field>, ‘<что меняем>’, ‘<на что>’);
Примеры:
UPDATE cities SET name = REPLACE(name, ‘Масква’, ‘Москва’);
UPDATE cities SET name = REPLACE(name, ‘Масква’, ‘Москва’) WHERE country = ‘Россия’;
UPDATE cities SET name = REPLACE(name, ‘Ма’, ‘Мо’) WHERE name = ‘Масква’;
Если мы хотим перестраховаться, результат замены можно сначала проверить с помощью SELECT:
SELECT REPLACE(name, ‘Ма’, ‘Мо’) FROM cities WHERE name = ‘Масква’;
Команда SPOOL
Команда позволяет сохранять вывод одного и более SQL-операторов в файлах операционной системы, как в UNIX, так и в Windows:
SQL> SET LINESIZE 180 SQL> SPOOL employee.lst SQL> SELECT emp_id, last_name, salary, manager FROM employee; SQL> SPOOL OFF;
По умолчанию создаваемые этой командой буферные (spooled) текстовые файлы сохраняются как . Хотя по умолчанию принято сохранять вывод в файле,его также можно отправлять и на принтер. Буферизация файлов является очень полезным приемом при использовании SQL для оказания помощи в написании SQL-сценариев, и некоторые примеры его применения можно найти в приложении.
С помощью команды можно добавлять данные в существующий буферный файл, а также полностью заменять его (по умолчанию происходит замена). Ниже приведен весь синтаксис этой команды:
SPOOL { имя_файла |REP|APP]| OFF | OUT }
Ниже описаны параметры команды .
- . Специфицирует имя буферного файла. Расширение может выглядеть по-разному, но в большинстве случаев используется предлагаемое по умолчанию расширение .lst.
- . Указывает, что требуется создать новый файл.
- . Указывает на необходимость замены содержимого существующего файла или создания нового файла, если он не существует. Это поведение по умолчанию.
- . Указывает на необходимость добавить содержимое буфера в конец указанного файла.
- . Указывает, что требуется остановить процесс буферизации.
- : Указывает, что требуется остановить процесс буферизации и отправить файл на принтер по умолчанию. В некоторых операционных системах этот параметр не поддерживается.
У команды имеет множество способов применения. Например, она легко экспортируется для перехвата результатов оператора . Перед этим, однако, должен обязательно задаваться формат вывода путем определения значений для переменных и . Ниже приведен пример:
SQL> SPOOL /u01/app/oracle/data/employees.txt; SQL> SELECT * FROM hr.employees; SQL> SPOOL OFF;
В этом примере файл служит для перехвата всех данных из таблицы . Далее его можно будет использовать для загрузки данных в другую таблицу с помощью утилиты SQL*Loader.
Примеры портфелей по стратегии Asset Allocation
Бенджамин Грэм, автор известной любому инвестору книги “Разумный инвестор” и учитель Уоррена Баффета, предложил очень простой портфель, который на 50 % состоит из акций и на 50 % из облигаций. Это динамичный вариант. Если произошел кризис, то уменьшаем долю облигаций до 20 – 25 % и наращиваем долю акций. И, наоборот, при перегреве рынка, росте котировок акций продаем их и увеличиваем долю облигаций.
Fidelity – одна из крупнейших компаний по управлению активами в мире разработала следующие варианты инвестпортфелей:
Консервативный
Сбалансированный
Портфель роста
Агрессивный
Среднегодовая доходность по этим вариантам распределения активов составила:
Консервативный | Сбалансированный | Роста | Агрессивный |
5,96 % | 7,96 % | 8,97 % | 9,65 % |
Рейтинговое агентство Morningstar ввело больше активов, чем Fidelity. Добавились товары и недвижимость.
Консервативный
Умеренный (доля недвижимости – 4 %, денежного рынка – 2 %)
Портфель роста
Агрессивный
Язык запросов SQL
База данных — централизованное хранилище данных, обеспечивающее хранение, доступ, первичную обработку и поиск информации.
Базы данных разделяются на:
- Иерархические
- Сетевые
- Реляционные
- Объектно-ориентированные
SQL (Structured Query Language) — представляет из себя структурированный язык запросов (перевод с английского). Язык ориентирован на работу с реляционными (табличными) базами данных. Язык прост и, по сути, состоит из команд (интерпретируемый), посредством которых можно работать с большими массивами данных (базами данных), удаляя, добавляя, изменяя информацию в них и осуществляя удобный поиск.
Для работы с SQL кодом необходима система управления базами данных (СУБД), которая предоставляет функционал для работы с базами данных.
Система управления базами данных (СУБД) — совокупность языковых и программных средств, предназначенных для создания, ведения и совместного использования БД многими пользователями.
Обычно, для обучения используется СУБД Microsoft Access, но мы будем использовать более распространенную в веб сфере систему — MySQL. Для удобства будет использовать веб-интерфейс или онлайн сервис для построения sql запросов , принцип работы с которыми описан ниже.
Важно: При работе с реляционными или табличными базами данных строки таблицы будем называть записями, а столбцы — полями.
Каждый столбец должен иметь свой тип данных, т.е. должен быть предназначен для внесения данных определенного типа. описаны в одном из уроков данного курса.
Составляющие языка SQL
Язык SQL состоит из следующих составных частей:
- язык манипулирования данными (Data Manipulation Language, DML);
- язык определения данных (Data Definition Language, DDL);
- язык управления данными (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 года выглядит так:
Типы данных SQL
Типы данных SQL разделяются на три группы:
— строковые;
— с плавающей точкой (дробные числа);
— целые числа, дата и время.
-
Типы данных SQL строковые
Типы данных SQL Описание Строки фиксированной длиной (могут содержать буквы, цифры и специальные символы). Фиксированный размер указан в скобках. Можно записать до 255 символов Может хранить не более 255 символов. Может хранить не более 255 символов. Может хранить не более 65 535 символов. Может хранить не более 65 535 символов. Может хранить не более 16 777 215 символов. Может хранить не более 16 777 215 символов. Может хранить не более 4 294 967 295 символов. Может хранить не более 4 294 967 295 символов. Позволяет вводить список допустимых значений. Можно ввести до 65535 значений в SQL Тип данных ENUM список. Если при вставке значения не будет присутствовать в списке ENUM, то мы получим пустое значение.
Ввести возможные значения можно в таком формате:SQL Тип данных SET напоминает ENUM за исключением того, что SET может содержать до 64 значений. -
Типы данных SQL с плавающей точкой (дробные числа) и целые числа
Типы данных SQL Описание Может хранить числа от -128 до 127 Диапазон от -32 768 до 32 767 Диапазон от -8 388 608 до 8 388 607 Диапазон от -2 147 483 648 до 2 147 483 647 Диапазон от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807 Число с плавающей точкой небольшой точности. Число с плавающей точкой двойной точности. Дробное число, хранящееся в виде строки. -
Типы данных SQL — Дата и время
Типы данных SQL Описание Дата в формате ГГГГ-ММ-ДД Дата и время в формате Дата и время в формате timestamp. Однако при получении значения поля оно отображается не в формате timestamp, а в виде ГГГГ-ММ-ДД ЧЧ:ММ:СС Время в формате Год в двух значной или в четырехзначном формате.
Сравнение данных за две даты
Хотя данная статистика из рода задач довольно редко встречаемых, но все-таки необходимость в ее получении иногда существует. И получить такую статистику ничуть не сложнее других.
Работать мы будем с двумя таблицами, структура которых представлена ниже:
Структура таблицы products
CREATE TABLE IF NOT EXISTS `products` ( `id` int(11) NOT NULL AUTO_INCREMENT, `ShopID` int(11) NOT NULL, `Name` varchar(150) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf-8 AUTO_INCREMENT=10 ;
Структура таблицы statistics
CREATE TABLE IF NOT EXISTS `statistics` ( `id` int(11) NOT NULL AUTO_INCREMENT, `ProductID` bigint(20) NOT NULL, `Orders` int(11) NOT NULL, `Date` date NOT NULL DEFAULT '0000-00-00', PRIMARY KEY (`id`), KEY `ProductID` (`ProductID`) ) ENGINE=MyISAM DEFAULT CHARSET=utf-8 AUTO_INCREMENT=20 ;
Дело в том, что стандарт языка SQL допускает использование вложенных запросов везде, где разрешается использование ссылок на таблицы. Здесь вместо явно указанных таблиц, благодаря использованию псевдонимов, будут применяться результирующие таблицы вложенных запросов с имеющейся связью один – к – одному. Результатом каждой результирующей таблицы будут данные о количестве произведенных заказов некоего товара за определенную дату, полученные путем выполнения запроса на выборку данных из таблицы statistics по требуемым критериям. Иными словами мы свяжем таблицу statistics саму с собой. Пример запроса:
SELECT stat1.Name, stat1.Orders, stat1.Date, stat2.Orders, stat2.Date FROM (SELECT statistics.ProductID, products.Name, statistics.Orders, statistics.Date FROM products JOIN statistics ON products.id = statistics.ProductID WHERE DATE(statistics.date) = '2014-09-04') AS stat1 JOIN (SELECT statistics.ProductID, statistics.Orders, statistics.Date FROM statistics WHERE DATE(statistics.date) = '2014-09-12') AS stat2 ON stat1.ProductID = stat2.ProductID
В итоге имеем такой результат:
+------------------------+----------+------------+----------+------------+ | Name | Orders1 | Date1 | Orders2 | Date2 | +------------------------+----------+------------+----------+------------+ | Процессоры Pentium II | 1 | 2014-09-04 | 1 | 2014-09-12 | | Процессоры Pentium III | 1 | 2014-09-04 | 10 | 2014-09-12 | | Оптическая мышь Atech | 10 | 2014-09-04 | 3 | 2014-09-12 | | DVD-R | 2 | 2014-09-04 | 5 | 2014-09-12 | | DVD-RW | 22 | 2014-09-04 | 18 | 2014-09-12 | | Клавиатура MS 101 | 5 | 2014-09-04 | 1 | 2014-09-12 | | SDRAM II | 26 | 2014-09-04 | 12 | 2014-09-12 | | Flash RAM 8Gb | 8 | 2014-09-04 | 7 | 2014-09-12 | | Flash RAM 4Gb | 18 | 2014-09-04 | 30 | 2014-09-12 | +------------------------+----------+------------+----------+------------+
Что это такое
Sql — язык структурированных запросов. Создан для определения типа данных, предоставления доступа к ним и обработке информации за короткие промежутки времени. Он описывает компоненты или какие-то результаты, которые вы хотите видеть на интернет-проекте.
Если говорить по-простому, то этот язык программирования позволяет добавлять, изменять, искать и отображать информацию в БД. Популярность mysql связана с тем, что он используется для создания динамических интернет-проектов, основа которых составляет база данных. Поэтому для разработки функционального блога вам необходимо выучить этот язык.
Тинькофф Инвестиции от Тинькофф Брокер. Достоинства
Команда SQLPROMPT
Администратору баз данных обычно приходится иметь дело с несколькими базами данных. Из-за этого при выполнении множества задач на протяжении дня очень легко забыть, к какой базе данных подключен тот или иной сеанс SQL*Plus. Поэтому во избежание допущения грубых ошибок (вроде удаления производственных таблиц вместо разрабатываемых или тестируемых), следует всегда настраивать среду так, чтобы имя экземпляра базы данных постоянно отображалось в приглашении, напоминая о том, с какой базой данных происходит взаимодействие.
Для настройки приглашения SQL*Plus так, чтобы в нем отображалось имя базы данных, служит приведенная ниже команда, в которой используется специальная предопределенная переменная (предопределенные переменные подробно рассматриваются в разделе “Предопределенные переменные SQL*Plus” далее в главе):
SQL> SET SQLPROMPT '_CONNECT_IDENTIFIER > ' nick >
Обратите внимание, что команда приводит к немедленному изменению приглашения в интерфейсе SQL*Plus. После выдачи этой команды приглашение приобретает более значимый вид, ясно указывающий на то, с какой базой данных происходит взаимодействие, и избавляет от необходимости делать по этому поводу какие-либо предположения
В данном примере оно указывает на то, что в текущий момент подключение установлено с базой данных .
Для настройки приглашения SQL*Plus можно также использовать и другие специальные предопределенные переменные. Например, с помощью переменной в приглашении отображается имя пользователя:
SQL> SET SQLPROMPT "_USER > " APPOWNER >
Применив одновременно переменные и , можно сделать так, чтобы в приглашении отображалось и имя базы данных, и имя текущего пользователя:
SQL> SET SQLPROMPT "_USER'@'_CONNECT_IDENTIFIER > " APPOWNER@nick >
Используя переменные и , в приглашении можно отображать не только имя текущего пользователя, но и привилегии, которыми он обладает:
SQL> SET SQLPROMPT "_USER _PRIVILEGE> " SYS AS SYSDBA>
С помощью переменных , и в приглашении можно отобразить имя пользователя, текущую дату и имя базы данных:
SQL> SET SQLPROMPT "_USER 'on' _DATE 'at' _CONNECT_IDENTIFIER > " SYS on 20-JUN-09 at nick>
При желании строку, вроде показанной выше, легко добавить в файл ,чтобы желаемые значения устанавливались автоматически при каждом входе в систему, и их не приходилось настраивать вручную.
Выполнение запросов
По умолчанию, если вы не устанавливали дополнительные программы, у MySQL нет графического интерфейса пользователя. Это значит, что единственный способ работы с ней — это использование командной строки.
- Откройте командную строку (Выполнить: cmd.exe).
- Перейдите в каталог с установленной MySQL: .
- Выполните: .
- Введите пароль, заданный при установке.
Если вы всё выполнили верно, то в командной строке запустится клиент для работы с MySQL (вы поймете это по строке приглашения «mysql>»). С этого момента можно вводить любые SQL запросы, но каждый запрос обязательно должен заканчиваться точкой с запятой
Основные моменты при изучении Sql
Как уже отмечалось выше, запросы применяются для обработки и ввода новой информации в БД, состоящую из таблиц. Каждая ее строка — это отдельная запись. Итак, создадим БД. Для этого напишите команду:
Create database ‘bazaname’
В кавычках пишем имя БД на латинице. Старайтесь придумать для нее понятное имя. Не создавайте базу типа «111», «www» и тому подобное.
После создания БД устанавливаем кодировку windows-1251:
SET NAMES ‘utf-8’
Это нужно чтобы контент на сайте правильно отображаться.
Теперь создаем таблицу:
CREATE TABLE ‘bazaname’ . ‘table’ (
id INT(8) NOT NULL AUTO_INCREMENT PRIMARY KEY,
log VARCHAR(10),
pass VARCHAR(10),
date DATE
);
Во второй строке мы прописали три атрибута. Посмотрим, что они означают:
- Атрибут NOT NULL означает, что ячейка не будет пустой (поле обязательное для заполнения);
- Значение AUTO_INCREMENT — автозаполнение;
- PRIMARY KEY — первичный ключ.