Обзор основных sql запросов
Содержание:
- Задание псевдонимов для столбцов запроса
- Основные арифметические операторы SQL
- 8.1.Отличие SQL от процедурных языков программирования
- 8.2.Формы и составные части SQL
- Объединение таблиц в SQL
- Команда DESCRIBE
- Синтаксис
- JOIN-соединения – операции горизонтального соединения данных
- Манипулирование данными
- Создание базы данных и таблиц в SQL
- Логические операторы SQLite
- JOIN-соединения – операции горизонтального соединения данных
- SQL Учебник
- Допустим, что вы дошли до этого момента
- PHP и MySQL
- Инструкция USE
- Выборка информации
- Самостоятельная работа для закрепления материала
- RDBMS
- Основные моменты при изучении Sql
- SELECT – оператор выборки данных
Задание псевдонимов для столбцов запроса
ФИО | Дата приема | Дата рождения | ZP |
---|---|---|---|
Иванов Иван Иванович | 2015-04-08 | 1955-02-19 | 5000 |
Петров Петр Петрович | 2015-04-08 | 1983-12-03 | 1500 |
NULL | 2015-04-08 | 1976-06-07 | 2500 |
NULL | 2015-04-08 | 1982-04-17 | 2000 |
FullName1 | FullName2 | FullName3 |
---|---|---|
Иванов Иван Иванович | Иванов Иван Иванович | Иванов Иван Иванович |
Петров Петр Петрович | Петров Петр Петрович | Петров Петр Петрович |
NULL | Сидоров Сидор | Сидоров Сидор |
NULL | Андреев Андрей | Андреев Андрей |
Основные арифметические операторы SQL
Оператор | Действие |
---|---|
+ | Сложение (x+y) или унарный плюс (+x) |
— | Вычитание (x-y) или унарный минус (-x) |
* | Умножение (x*y) |
Деление (x/y) | |
% | Остаток от деления (x%y). Для примера 15%10 даст 5 |
ID | Name | Result1 | Result2 | Result3 |
---|---|---|---|---|
1000 | Иванов И.И. | 2500 | 2500 | 2500 |
1001 | Петров П.П. | 225 | 225 | 225 |
1002 | Сидоров С.С. | NULL | ||
1003 | Андреев А.А. | 600 | 600 | 600 |
1004 | Николаев Н.Н. | NULL | ||
1005 | Александров А.А. | NULL |
ID | Name |
---|---|
1000 | Иванов И.И. |
1004 | Николаев Н.Н. |
1002 | Сидоров С.С. |
8.1.Отличие SQL от процедурных языков программирования
Язык SQL – относится к классу непроцедурных языков программирования. В отличие от универсальных процедурных языков, которые также могут быть использованы для работы с базами данных, язык SQL ориентирован не на записи, а на множества. Это означает следующее. В качестве входной информации для формулируемого на языке SQL запроса к базе данных используется множество кортежей-записейодной или нескольких таблицотношений. В результате выполнения запроса также образуется множество кортежей результирующей таблицы-отношения. Другими словами в SQL результатом любой операции над отношениями также является отношение. Запрос SQL задает не процедуру, т.е. последовательность действий, необходимых для получения результата, а условия, которым должны удовлетворять кортежи результирующего отношения, сформулированные в терминах входного (или входных) отношений.
8.2.Формы и составные части SQL
Существуют и используются две формы языка SQL: интерактивный SQL
и встроенный SQL.
Интерактивный SQL используется для непосредственного ввода и получения результата SQL-запросов пользователем в интерактивном режиме.
Встроенный SQL состоит из команд SQL, встроенных внутрь программ, которые обычно написаны на некотором другом языке (Паскаль, С, С++ и др.). Это делает программы, написанные на таких языках, более мощными и эффективными, обеспечивая возможность работы с помощью них с данными, хранящимися в реляционных базах данных, требуя, однако, введения дополнительных средств, обеспечивающих интерфейс SQL с языком, в который он встраивается.
И интерактивный, и встроенный SQL обычно разделяют на следующие составные части.
Язык Определения Данных – DDL (Data Definition Language), дает возможность создания, изменения и удаления различных объектов базы данных (таблиц, индексов, пользователей, привилегий и т.д.).
Объединение таблиц в SQL
Так как таблиц в базе данных несколько, то может возникнуть необходимость показать данные сразу из нескольких таблиц. И отфильтровать их по каким-нибудь общим значениям. Так, например в нашей таблице с пользователями, пользователю Pulse не присвоен статус, но есть отдельная таблица со статусами. При этом общим параметром у нас будет id (хотя конечно логичнее было бы общим параметром использовать например ник, но да ладно, смысл от этого не меняется). Для получения данных используем команду INNER JOIN:
По сути мы объединили записи из двух разных таблиц users_nick и users_status в одну. Но взли только тот результат в котором совпадают id. Я в этом примере показал именно INNER JOIN потому что это, вроде как, считается “правильным” синтаксисом и красивым кодом, но по сути это тоже самое, что если бы мы написали:
Оба варианта правильные и ты можешь использовать тот который тебе удобней.
Кстати, обрати внимание, что когда мы используем команду SELECT и выбираем какие-то столбцы из разных таблиц, и при этом эти столбцы имеют одинаковые названия (как у нас столбец status есть в обеих таблицах) то нужно вначале написать какую таблицу мы имеем ввиду, потом поставить точку и написать столбец. Иначе на выходе получим ошибку
Также полезно помнить про существование итоговых функций, они нужны для получения, например характеристик таблицы:
- COUNT (столбец) — возвращает количество строк;
- SUM (столбец) — возвращает сумму значений в данном столбце;
- AVG (столбец) — возвращает среднее значение данного столбца;
- MIN (столбец) — возвращает наименьшее значение данного столбца;
- MAX (столбец) — возвращает наибольшее значение данного столбца.
Например:
покажет нам максимальное значение в столбце id таблицы users_nick.
При использовании команды SELECT стоит помнить про команду UNION. Которая позволяет объединить два запроса SELECT в один.
В этом запросе мы сначала нашли пользователя с ником Pulse в одной таблице. А потом вывели все записи из из столбца status второй таблицы.
Команда DESCRIBE
Команда описывает или выводит список столбцов таблицы вместе с их спецификациями. Кроме того, она позволяет получать описание процедур или пакетов Oracle. Эта команда чрезвычайно полезна при выполнении рутинных обязанностей администратора баз данных. Если, например, нет уверенности в том, какой столбец нужно выбрать в определенной таблице, но точно известно, к какой именно таблице следует выполнить запрос, с помощью команды можно получить список всех столбцов, которые имеются в данной таблице
Поскольку команда может применяться даже в отношении метаданных (словаря данных), с ее помощью можно также очень легко знакомиться с информацией о таблицах и столбцах и их применении, которая является критически важной для работы с базой данных
В листинге ниже показано, как команда позволяет отображать столбцы и типы столбцов таблицы.
SQL> DESCRIBE employees Name Null? Type ---------------------- -------- --------------------- EMPLOYEE_ID NOT NULL NUMBER(6) FIRST_NAME VARCHAR2(20) LAST_NAME NOT NULL VARCHAR2(25) EMAIL NOT NULL VARCHAR2(25) PHONE_NUMBER VARCHAR2(20) HIRE_DATE NOT NULL DATE JOB_ID NOT NULL VARCHAR2(10) SALARY NUMBER(8,2) COMMISSION_PCT NUMBER(2,2) MANAGER_ID NUMBER(6) DEPARTMENT_ID NUMBER(4) SQL>
Синтаксис
UпDАТE cлатыsе{UпDАТE cотыптрySEТ cлатыsе{SEТ поптылатяопзнак равно поптылатяоп+1⏞еИкспреssяопWЧАСEрE cлатыsе{WЧАСEрE памезнак равно′USА′⏞еИкспреssяоп⏟преdяcате;}заявление{\ displaystyle \ left. {\ begin {array} {rl} \ textstyle {\ mathtt {UPDATE ~ clause}} & \ {{\ mathtt {UPDATE \ country}} \\\ textstyle {\ mathtt {SET ~ clause} } & \ {{\ mathtt {SET \ Population = ~}} \ overbrace {\ mathtt {Population + 1}} ^ {\ mathtt {expression}} \\\ textstyle {\ mathtt {WHERE ~ clause}} & \ { {\ mathtt {WHERE \ \ underbrace {{name =} \ overbrace {‘USA’} ^ {expression}} _ {predicate};}} \ end {array}} \ right \} {\ textstyle {\ texttt {инструкция }}}}
Диаграмма, показывающая несколько элементов языка SQL, составляющих одну инструкцию
Язык SQL подразделяется на несколько языковых элементов, в том числе:
- Предложения , которые являются составными компонентами утверждений и запросов. (В некоторых случаях это необязательно.)
- Выражения , которые могут создавать либо скалярные значения, либо таблицы, состоящие из столбцов и строк данных.
- Предикаты , которые задают условия, которые могут быть оценены с помощью трехзначной логики SQL (3VL) (истина / ложь / неизвестно) или логических значений истинности и используются для ограничения эффектов операторов и запросов или для изменения потока программы.
- Запросы , которые извлекают данные на основе определенных критериев. Это важный элемент SQL .
-
Операторы , которые могут иметь постоянное влияние на схемы и данные или могут управлять транзакциями
Операторы SQL также включают в себя терминатор оператора точка с запятой («;»). Хотя он не требуется на каждой платформе, он определен как стандартная часть грамматики SQL.
, потоком программы, соединениями, сеансами или диагностикой.
- Незначительные пробелы обычно игнорируются в операторах и запросах SQL, что упрощает форматирование кода SQL для удобства чтения.
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 | Логистика |
Манипулирование данными
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
Для создания новой базы данных используется команда CREATE DATABASE. Потом указывается имя новой базы и ещё запомни, что команда в SQL должна заканчиваться ” ; “
Как видишь мы сказали: СОЗДАЙ БАЗУ ДАННЫХ all_users. Теперь нужно сказать о том, что мы хотим поработать с этой базой. Для этого существует команда USE
DROP
Если базу данных нужно удалить используется команда DROP DATABASE имя_базы; Командой DROP, кстати, можно удалять все что угодно, не только базы. Например, чтобы удалить таблицу используется команда DROP TABLE имя_таблицы; А если нужно удалить все данные из таблицы, но саму таблицу при этом оставить, то есть команда: TRUNCATE TABLE имя_таблицы;
CREATE TABLE
Так как база данных состоит из таблиц, то теперь переходим непосредственно к созданию таблиц. Для этого используется команда CREATE TABLE. После которой нужно указать название новой таблицы. А потом в скобках, через запятую, перечислить какие в таблице будут колонки и типы данных в этих колонках. Давай для примера создадим таблицу с именами пользователей и их статусом на сайте:
Теперь давай посмотрим, что мы там насоздавали:
Ну и давай более детально разберем саму команду которую мы вводили:
- CREATE TABLE users_nick – создай таблицу с именем users_nick;
- id INT AUTO_INCREMENT PRIMARY KEY – первый столбец таблицы мы назвали id. Присвоили ему тип данных INT т.е. целочисленные значения (это означает что там не может быть дробей, букв, символов – ничего кроме целых чисел). Командой AUTO_INCREMENT мы попросили MySQL самостоятельно заполнять строки этой колонки при внесении новых записей в таблицу, при этом добавляя +1 к каждой новой записи. Другими словами мы создали счётчик, чтобы добиться уникальности значений именно в этой колонке. А уникальные значения нам нужны чтобы применить параметр PRIMARY KEY т.е. назначить значения из этой колонки первичными ключами – уникальными идентификаторами строк таблицы. Используя значения именно из этой колонки мы в последствии будем обращаться к строкам в этой таблице;
- nick NVARCHAR(64) NOT NULL – второй столбец мы назвали nick. И присвоили ему тип NVARCHAR это строковые данные переменного размера, при этом ограничив размер значения 64 байтами. Кстати, некоторые “авторитетные” интернет-школы в своих курсах утверждают что значение в скобках – это количество символов. Это не совсем так, вернее это так для однобайтовых кодировок, таких как LATIN. Потому что там 1 символ = 1 байт, но мы используем UTF-8 и это многобайтовая кодировка, а значит один символ может занимать больше одного байта. Потому просто запомни – значение в скобках это размер строки в байтах. Командой NOT NULL мы обозначили что значение в этом столбце не может быть равно NULL т.е. не может быть пустым.
- status NVARCHAR(32) – третий столбец мы назвали status. Тип – строковые данные переменного размера, размер – 32 байта, и раз мы не указывали NOT NULL – этот столбец может быть пустым.
Также создадим таблицу в которой будут перечислены возможные статусы пользователей:
SHOW TABLES
Чтобы посмотреть все созданные нами таблицы используется команда:
Если нужно удалить отдельную запись из таблицы, то используется команда DELETE:
Здесь мы сказали: УДАЛИ ИЗ ТАБЛИЦЫ users_nick ТАМ ГДЕ id РАВЕН 1.
Логические операторы SQLite
Вот список всех логических операторов, доступных в SQLite.
Оператор | Описание |
AND | Оператор AND допускает существование множества условий в предложении WHERE оператора SQL. |
BETWEEN | Оператор BETWEEN используется для поиска значений, находящихся в пределах набора значений, с учетом минимального значения и максимального значения. |
EXISTS | Оператор EXISTS используется для поиска наличия строки в указанной таблице, соответствующей определенным критериям. |
IN | Оператор IN используется для сравнения значения со списком литеральных значений, которые были указаны. |
NOT IN | Отрицание оператора IN, которое используется для сравнения значения со списком значений буквального значения, которые были указаны. |
LIKE | Оператор LIKE используется для сравнения значения с аналогичными значениями с помощью подстановочных операторов. |
GLOB | Оператор GLOB используется для сравнения значения с аналогичными значениями с помощью подстановочных операторов. Кроме того, GLOB чувствителен к регистру, в отличие от LIKE. |
NOT | Оператор NOT меняет смысл логического оператора, с которым он используется. Например. НЕ СУЩЕСТВУЕТ, НЕ МЕЖДУ, НЕ ВХОДИТ и т. Д. Это оператор отрицания. |
OR | Оператор OR используется для объединения нескольких условий в предложение WHERE оператора SQL. |
IS NULL | Оператор NULL используется для сравнения значения со значением NULL. |
IS | Оператор IS работает как = |
IS NOT | Оператор IS работает как! = |
|| | Добавляет две разные строки и создает новую. |
UNIQUE | Оператор UNIQUE выполняет поиск каждой строки указанной таблицы для уникальности (без дубликатов). |
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 | Логистика |
SQL Учебник
SQL ГлавнаяSQL ВведениеSQL СинтаксисSQL SELECTSQL SELECT DISTINCTSQL WHERESQL AND, OR, NOTSQL ORDER BYSQL INSERT INTOSQL Значение NullSQL Инструкция UPDATESQL Инструкция DELETESQL SELECT TOPSQL MIN() и MAX()SQL COUNT(), AVG() и …SQL Оператор LIKESQL ПодстановочныйSQL Оператор INSQL Оператор BETWEENSQL ПсевдонимыSQL JOINSQL JOIN ВнутриSQL JOIN СлеваSQL JOIN СправаSQL JOIN ПолноеSQL JOIN СамSQL Оператор UNIONSQL GROUP BYSQL HAVINGSQL Оператор ExistsSQL Операторы Any, AllSQL SELECT INTOSQL INSERT INTO SELECTSQL Инструкция CASESQL Функции NULLSQL ХранимаяSQL Комментарии
Допустим, что вы дошли до этого момента
- Выбирать детальные данные по условию WHERE из одной таблицы
- Умеете пользоваться агрегатными функциями и группировкой из одной таблицы
ID | Name | Birthday | … | Salary | BonusPercent | DepartmentName | PositionName |
---|---|---|---|---|---|---|---|
1000 | Иванов И.И. | 19.02.1955 | 5000 | 50 | Администрация | Директор | |
1001 | Петров П.П. | 03.12.1983 | 1500 | 15 | ИТ | Программист | |
1002 | Сидоров С.С. | 07.06.1976 | 2500 | NULL | Бухгалтерия | Бухгалтер | |
1003 | Андреев А.А. | 17.04.1982 | 2000 | 30 | ИТ | Старший программист | |
1004 | Николаев Н.Н. | NULL | 1500 | NULL | ИТ | Программист | |
1005 | Александров А.А. | NULL | 2000 | NULL | NULL | NULL |
ID | Name | Birthday | … | Salary | BonusPercent | DepartmentName | PositionName |
---|---|---|---|---|---|---|---|
1000 | Иванов И.И. | 19.02.1955 | 5000 | 50 | Администрация | Директор | |
1001 | Петров П.П. | 03.12.1983 | 1500 | 15 | ИТ | Программист | |
1002 | Сидоров С.С. | 07.06.1976 | 2500 | NULL | Бухгалтерия | Бухгалтер | |
1003 | Андреев А.А. | 17.04.1982 | 2000 | 30 | ИТ | Старший программист | |
1004 | Николаев Н.Н. | NULL | 1500 | NULL | ИТ | Программист | |
1005 | Александров А.А. | NULL | 2000 | NULL | NULL | NULL |
DepartmentName | PositionCount | EmplCount | SalaryAmount | SalaryAvg |
---|---|---|---|---|
NULL | 1 | 2000 | 2000 | |
Администрация | 1 | 1 | 5000 | 5000 |
Бухгалтерия | 1 | 1 | 2500 | 2500 |
ИТ | 2 | 3 | 5000 | 1666.66666666667 |
ID | Name | Salary |
---|---|---|
1005 | Александров А.А. | 2000 |
1003 | Андреев А.А. | 2000 |
1000 | Иванов И.И. | 5000 |
1004 | Николаев Н.Н. | 1500 |
1001 | Петров П.П. | 1500 |
1002 | Сидоров С.С. | 2500 |
PHP и MySQL
Еще раз хочу подчеркнуть, что запросы при создании интернет-проекта — это обычное дело. Чтобы их использовать в php-документах выполните такой алгоритм действий:
- Соединяемся с БД при помощи команды mysql_connect();
- Используя mysql_select_db() выбираем нужную БД;
- Обрабатываем запрос при помощи mysql_fetch_array();
- Закрываем соединение командой mysql_close().
Важно! Работать с БД не сложно. Главное — правильно написать запрос
Начинающие вебмастера подумают. А что почитать по этой теме? Хотелось бы порекомендовать книгу Мартина Грабера «SQL для простых смертных». Она написана так, что новичкам все будет понятно. Используйте ее в качестве настольной книги.
Но это теория. Как же обстоит дело на практике? В действительности интернет-проект нужно не только создать, но еще и вывести в ТОП Гугла и Яндекса. В этом вас поможет видеокурс «Создание и раскрутка сайта».
Инструкция USE
Для того, чтобы начать взаимодействие с какой-либо базой данных, необходимо подключиться к ней. Для этого существует команда . Посмотрим пример:
INI
MariaDB > USE lexone.ru;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
1 2 3 4 |
MariaDB>USElexone.ru; Readingtableinformationforcompletionoftableandcolumnnames Youcanturnoffthisfeaturetogetaquickerstartupwith-A Databasechanged |
Но перед тем, как подключаться к базам данных, нужно узнать, какие-же вообще есть базы данных на нашем сервере. Нельзя подключиться к тому, сам не знаю к чему. Для этого используется инструкция .
Выборка информации
Для извлечения значений из БД используется команда SELECT. Пишем такой код:
SELECT * FROM ‘table’ WHERE id = ‘1’
В данном примере в таблице выбираем все имеющиеся поля. Это происходит если прописать в команде звездочку «*». Если нужно выбрать какое-то выборочное значение пишем так:
SELECT log , pass FROM table WHERE id = ‘1’
Необходимо отметить, что умения работать с базами данных будет недостаточно. Для создания профессионального интернет-проекта придется научиться добавлять на страницы данные из БД. Для этого ознакомьтесь с языком веб-программирования php. В этом вам поможет классный курс Михаила Русакова.
Самостоятельная работа для закрепления материала
LCode | LDescr |
---|---|
1 | L-1 |
2 | L-2a |
2 | L-2b |
3 | L-3 |
5 | L-5 |
RCode | RDescr |
---|---|
2 | B-2a |
2 | B-2b |
3 | B-3 |
4 | B-4 |
LCode | LDescr | RCode | RDescr |
---|---|---|---|
2 | L-2a | 2 | B-2a |
2 | L-2a | 2 | B-2b |
2 | L-2b | 2 | B-2a |
2 | L-2b | 2 | B-2b |
3 | L-3 | 3 | B-3 |
LCode | LDescr | RCode | RDescr |
---|---|---|---|
1 | L-1 | NULL | NULL |
2 | L-2a | 2 | B-2a |
2 | L-2a | 2 | B-2b |
2 | L-2b | 2 | B-2a |
2 | L-2b | 2 | B-2b |
3 | L-3 | 3 | B-3 |
5 | L-5 | NULL | NULL |
LCode | LDescr | RCode | RDescr |
---|---|---|---|
2 | L-2a | 2 | B-2a |
2 | L-2b | 2 | B-2a |
2 | L-2a | 2 | B-2b |
2 | L-2b | 2 | B-2b |
3 | L-3 | 3 | B-3 |
NULL | NULL | 4 | B-4 |
LCode | LDescr | RCode | RDescr |
---|---|---|---|
1 | L-1 | NULL | NULL |
2 | L-2a | 2 | B-2a |
2 | L-2a | 2 | B-2b |
2 | L-2b | 2 | B-2a |
2 | L-2b | 2 | B-2b |
3 | L-3 | 3 | B-3 |
5 | L-5 | NULL | NULL |
NULL | NULL | 4 | B-4 |
LCode | LDescr | RCode | RDescr |
---|---|---|---|
1 | L-1 | 2 | B-2a |
2 | L-2a | 2 | B-2a |
2 | L-2b | 2 | B-2a |
3 | L-3 | 2 | B-2a |
5 | L-5 | 2 | B-2a |
1 | L-1 | 2 | B-2b |
2 | L-2a | 2 | B-2b |
2 | L-2b | 2 | B-2b |
3 | L-3 | 2 | B-2b |
5 | L-5 | 2 | B-2b |
1 | L-1 | 3 | B-3 |
2 | L-2a | 3 | B-3 |
2 | L-2b | 3 | B-3 |
3 | L-3 | 3 | B-3 |
5 | L-5 | 3 | B-3 |
1 | L-1 | 4 | B-4 |
2 | L-2a | 4 | B-4 |
2 | L-2b | 4 | B-4 |
3 | L-3 | 4 | B-4 |
5 | L-5 | 4 | B-4 |
RDBMS
RDBMS расшифровывается как реляционная система управления базами данных.
RDBMS является основой для SQL, а также для всех современных систем баз данных, таких как MS SQL Server, IBM DB2, Oracle, MySQL и Microsoft Access.
Данные в RDBMS хранятся в объектах базы данных, называемых таблицами. Таблица — это набор связанных записей данных, состоящий из столбцов и строк.
Посмотрите на таблицу «Customers»:
Пример
SELECT * FROM Customers;
Каждая таблица разбита на более мелкие сущности, называемые полями.
Поля в таблице Customers состоят из CustomerID, CustomerName, ContactName, Address, City, PostalCode и Country.
Поле — это столбец в таблице, предназначенный для хранения определенной информации о каждой записи в таблице.
Запись, также называемая строкой, каждая отдельная запись, существующая в таблице.
Например, в приведенной выше таблице Customers имеется 91 запись. Запись — это горизонтальная сущность в таблице.
Столбец — это вертикальная сущность в таблице, содержащая всю информацию, связанную с определенным полем в таблице.
Основные моменты при изучении 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 — первичный ключ.
SELECT – оператор выборки данных
ID | Name | Birthday | 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 | Сидоров С.С. |