SQL (ˈɛsˈkjuˈɛl; англ. structured query language - «язык структурированных запросов») - декларативный язык программирования, применяемый для создания, модификации и управления данными в реляционной базе данных.
Соответствие стандартам SQL разных БД:
SQL (Structured Query Language - язык структурированных запросов). SQL является, прежде всего, информационно-логическим языком, предназначенным для описания хранимых данных, для извлечения хранимых данных и для модификации данных.
SQL не является языком программирования. В связи с усложнением язык SQL стал более языком прикладного программирования, а пользователи получили возможность использовать визуальные построители запросов.
SQL является регистронезависимым языком. Cтроки в SQL берутся в одинарные кавычки.
Язык SQL представляет собой совокупность операторов. Операторы SQL делятся на:
операторы определения данных (Data Definition Language, DDL) - язык описания схемы в ANSI, состоит из команд, которые создают объекты (таблицы, индексы, просмотры, и так далее) в базе данных (CREATE, DROP, ALTER и др.).
операторы манипуляции данными (Data Manipulation Language, DML) - это набор команд, которые определяют, какие значения представлены в таблицах в любой момент времени (INSERT, DELETE, SELECT, UPDATE и др.).
операторы определения доступа к данным (Data Control Language, DCL) - состоит из средств, которые определяют, разрешить ли пользователю выполнять определенные действия или нет (GRANT/REVOKE , LOCK/UNLOCK).
операторы управления транзакциями (Transaction Control Language, TCL)
К сожалению, эти термины не используются повсеместно во всех реализациях. Они подчеркиваются ANSI и полезны на концептуальном уровне, но большинство SQL программ практически не обрабатывают их отдельно, так что они по существу становятся функциональными категориями команд SQL.
SELECT раздел JOINПростой JOIN (=пересечение JOIN =INNER JOIN) - означает показывать только общие записи обоих таблиц. Каким образом записи считаются общими определяется полями в join- выражении. Например следующая запись: FROM t1 JOIN t2 ON t1. id = t2. id
означает что будут показаны записи с одинаковыми id, существующие в обоих таблицах.
LEFT JOIN (или LEFT OUTER JOIN) означает показывать все записи из левой таблицы (той, которая идет первой в join- выражении) независимо от наличия соответствующих записей в правой таблице. Если записей нет в правой таблицы устанавливается пустое значение NULL.
RIGHT JOIN (или RIGHT OUTER JOIN) действует в противоположность LEFT JOIN - показывает все записи из правой (второй) таблицы и только совпавшие из левой (первой) таблицы.
Другие виды JOIN объединений: MINUS - вычитание; FULL JOIN - полное объединение; CROSS JOIN - “Каждый с каждым” или операция декартова произведения.
INSERT IGNORE Если в команде INSERT со строками, имеющими много значений, указывается ключевое слово IGNORE, то все строки, имеющие дублирующиеся ключи PRIMARY или UNIQUE в этой таблице, будут проигнорированы и не будут внесены. Если не указывать IGNORE, то данная операция вставки прекращается при обнаружении строки, имеющей дублирующееся значение существующего ключа
Команда REPLACE отличается от INSERT только тем, что если в таблице имеется запись с таким же значением в индексированном поле (unique index), как у новой записи, то старая запись удаляется перед добавлением новой.
UPDATE < tablename> SET { | } .,. .< COLUMN name> = < VALUE expresslon> [ WHERE < predlcate> | WHERE CURRENT OF < cursor name> (* только для вложения* ) ] ; UPDATE peers SET zone= "voip" ; # обновить все строки в столбце zone таблицы peers UPDATE stat SET whp= "13x13x13" WHERE id = 1 ; UPDATE countries SET nm_ukr= ( SELECT del_countries. ukrainian FROM del_countries WHERE countries. nm_en= del_countries. english ) ;WordPress использование, настройка : в таблице wp_posts удалить все вхождения строки
UPDATE wp_posts SET post_content = REPLACE (post_content, "" , "" ) ;DELETE FROM
SELECT model, COUNT(model) AS Qty_model, AVG(price) AS Avg_price FROM PC GROUP BY model; |
В этом запросе для каждой модели ПК определяется их количество и средняя стоимость. Все строки с одинаковыми значениями model (номер модели) образуют группу, и на выходе SELECT вычисляются количество значений и средние значения цены для каждой группы. Результатом выполнения запроса будет следующая таблица:
model | Qty_model | Avg_price |
1121 | 3 | 850.0 |
1232 | 4 | 425.0 |
1233 | 3 | 843.33333333333337 |
1260 | 1 | 350.0 |
Если бы в SELECT присутствовал столбец с датой, то можно было бы вычислять эти показатели для каждой конкретной даты. Для этого нужно добавить дату в качестве группирующего столбца, и тогда агрегатные функции вычислялись бы для каждой комбинации значений (модель−дата).
Существует несколько определенных правил выполнения агрегатных функций :
- Если в результате выполнения запроса не получено ни одной строки (или не одной строки для данной группы), то исходные данные для вычисления любой из агрегатных функций отсутствуют. В этом случае результатом выполнения функций COUNT будет нуль, а результатом всех других функций - NULL.
- Аргумент агрегатной функции не может сам содержать агрегатные функции (функция от функции). Т.е. в одном запросе нельзя, скажем, получить максимум средних значений.
- Результат выполнения функции COUNT есть целое число (INTEGER). Другие агрегатные функции наследуют типы данных обрабатываемых значений.
- Если при выполнении функции SUM был получен результат, превышающий максимальное значение используемого типа данных, возникает ошибка .
Итак, если запрос не содержит предложения GROUP BY , то агрегатные функции , включенные в предложение SELECT , исполняются над всеми результирующими строками запроса. Если запрос содержит предложение GROUP BY , каждый набор строк, который имеет одинаковые значения столбца или группы столбцов, заданных в предложении GROUP BY , составляет группу, и агрегатные функции выполняются для каждой группы отдельно.
Предложение HAVINGЕсли предложение WHERE определяет предикат для фильтрации строк, то предложение HAVING применяется после группировки для определения аналогичного предиката, фильтрующего группы по значениям агрегатных функций . Это предложение необходимо для проверки значений, которые получены с помощью агрегатной функции не из отдельных строк источника записей, определенного в предложении FROM , а из групп таких строк . Поэтому такая проверка не может содержаться в предложении WHERE .
Запросы написаны без экранирующих кавычек, так как у MySQL , MS SQL и PostGree они разные.
SQL запрос: получение указанных (нужных) полей из таблицы SELECT id, country_title, count_people FROM table_nameПолучаем список записей: ВСЕ страны и их население. Название нужных полей указываются через запятую.
SELECT * FROM table_name
* обозначает все поля. То есть, будут показы АБСОЛЮТНО ВСЕ поля данных.
SQL запрос: вывод записей из таблицы исключая дубликаты SELECT DISTINCT country_title FROM table_nameПолучаем список записей: страны, где находятся наши пользователи. Пользователей может быть много из одной страны. В этом случае это ваш запрос.
SQL запрос: вывод записей из таблицы по заданному условию SELECT id, country_title, city_title FROM table_name WHERE count_people>100000000Получаем список записей: страны, где количество людей больше 100 000 000.
SQL запрос: вывод записей из таблицы с упорядочиванием SELECT id, city_title FROM table_name ORDER BY city_titleПолучаем список записей: города в алфавитном порядке. В начале А, в конце Я.
SELECT id, city_title FROM table_name ORDER BY city_title DESC
Получаем список записей: города в обратном (DESC ) порядке. В начале Я, в конце А.
SQL запрос: подсчет количества записей SELECT COUNT(*) FROM table_nameПолучаем число (количество) записей в таблице. В данном случае НЕТ списка записей.
SQL запрос: вывод нужного диапазона записей SELECT * FROM table_name LIMIT 2, 3Получаем 2 (вторую) и 3 (третью) запись из таблицы. Запрос полезен при создании навигации на WEB страницах.
SQL запросы с условиямиВывод записей из таблицы по заданному условию с использованием логических операторов.
SQL запрос: конструкция AND (И) SELECT id, city_title FROM table_name WHERE country="Россия" AND oil=1Получаем список записей: города из России И имеют доступ к нефти. Когда используется оператор AND , то должны совпадать оба условия.
SQL запрос: конструкция OR (ИЛИ) SELECT id, city_title FROM table_name WHERE country="Россия" OR country="США"Получаем список записей: все города из России ИЛИ США. Когда используется оператор OR , то должно совпадать ХОТЯ БЫ одно условие.
SQL запрос: конструкция AND NOT (И НЕ) SELECT id, user_login FROM table_name WHERE country="Россия" AND NOT count_comments to_date(‘01.01.80′,’dd.mm.yyyy’);Данный запрос вернет данные о сотрудниках, которые приняты на работу в определенный промежуток времени. Хоть структура запроса отличается, от выполнение команд SQL в этих системах похоже, за исключением мелких деталей.
Использование SQL в сети InternetС появлением всемирной паутины, то есть интернета, сфера использования языка SQL расширяется. Как известно, в сети хранится масса информации, но она не хаотично расположена, а размещена на сайтах и серверах по определенным критериям.
За хранение информации в Интернете, как и в других местах, отвечают непосредственно базы данных, а сайты являются системами управления. Как правило, сайты и их программный код организованы на разных языках программирования, но в основе баз данных лежит одна из разновидностей SQL, а именно язык создания баз данных, ориентированный под веб-интерфейсы MySQL.
Синтаксис и основной набор команд этого языка полностью копируют привычный всем SQL, но с некоторыми своими дополнениями, которые и дают ему отличие от Microsoft tSQL Server.
Команды SQL полностью похожи не только по синтаксису, но и по стандартному набору служебных слов. Разница состоит только в вызове и структурировании запроса. Для примера можно рассмотреть запрос для создания новой таблицы, именно она является первым, чему учат детей в школах на информатике:
$link = mysqli_connect("localhost", "root", "", "tester");
if (!$link) die("Error");
$query = "create table users(
login VARCHAR(20),
password VARCHAR(20)
if (mysqli_query($link, $query)) echo "Таблица создана.";
elseecho "Таблица не создана: ".mysqli_error();
mysqli_close($link);
В результате выполнения такого запроса можно получить новую таблицу "Юзеры", в которой будет два поля: логин и пароль.
Синтаксис изменен под Вэб, но в основу положены команды MicrosoftSQLServer.
Построение запросов MicrosoftSQLServerВыборка из таблиц определенного набора данных одна из основных задач SQL. Для таких операций предусмотрена команда select в SQL. Именно о ней пойдет речь ниже.
Правила построение команды очень просты, а сама команда select в SQL строится следующим образом. К примеру, есть таблица, в которой имеются данные о сотруднике, которая, к примеру, имеет имя Person. Поставим задачу, что из таблицы нужно выбрать данные о сотрудниках, дата рождения которых - в промежутке от первого января до первого марта текущего года включительно. Для такой выборки необходимо выполнить команду SQL, в которой будет не только стандартная конструкция, но и условие выбора:
Select * from Person
Where P_BerthDay >= ‘01/01/2016’ and P_BerthDay= ‘01/01/2016’ and P_BerthDay= @DB and P_BerthDay