Примеры SQL-запросов в MariaDB (MySQL)

Обновлено Обновлено: Опубликовано Опубликовано:

Тематические термины: MariaDBMySQL, SQL

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

Выборка (SELECT)
Вставка (INSERT)
Обновление (UPDATE)
Удаление (DELETE)
Создание таблицы
Использование в PHP

Выборка данных (SELECT)

Синтаксис:

> SELECT <fields1> FROM <table> [ WHERE <conditions> ORDER BY <fields2> LIMIT <count> ]

* где fields1 — поля для выборки через запятую, также можно указать все поля знаком *; table — имя таблицы, из которой вытаскиваем данные; conditions — условия выборки; fields2 — поле или поля через запятую, по которым выполнить сортировку; count — количество строк для выгрузки.
* запрос в квадратных скобках не является обязательным для выборки данных.

Простые примеры использования select

Обычная выборка данных:

> SELECT * FROM users

Выборка данных с объединением двух таблиц (JOIN):

SELECT u.name, r.* FROM users u JOIN users_rights r ON r.user_id=u.id

* в данном примере идет выборка данных с объединением таблиц users и users_rights. Объединяются они по полям user_id (в таблице users_rights) и id (users). Извлекается поле name из первой таблицы и все поля из второй.

Выборка с интервалом по времени:

> SELECT * FROM users WHERE date >= DATE_SUB(NOW(),INTERVAL 1 HOUR)

* будут выбраны данные за последний час (поле date). 

Примеры более сложных запросов или используемых редко

Объединение с группировкой выбранных данных в одну строку (GROUP_CONCAT):

> SELECT GROUP_CONCAT(DISTINCT CONVERT(id USING  'utf8')  SEPARATOR ', ') as ids FROM users

* из таблицы users извлекаются данные по полю id, все они помещаются в одну строку, значения разделяются запятыми.

Группировка данных по двум и более полям:

> SELECT * FROM users GROUP BY CONCAT(title, '::', birth)

* итого, в данном примере мы сделаем выгрузку данных из таблицы users и сгруппируем их по полям title и birth. Перед группировкой мы делаем объединение полей в одну строку с разделителем ::.

Объединение результатов из двух таблиц (UNION):

> (SELECT id, fio, address, 'Пользователи' as type FROM users)
UNION 
(SELECT id, fio, address, 'Покупатели' as type FROM customers)

* в данном примере идет выборка данных из таблиц users и customers.

Вставка (INSERT)

Синтаксис 1:

> INSERT INTO <table> (<fields>) VALUES (<values>)

Синтаксис 2:

> INSERT INTO <table> VALUES (<values>)

* где table — имя таблицы, в которую заносим данные; fields — перечисление полей через запятую; values — перечисление значений через запятую.
* первый вариант позволит сделать вставку только по перечисленным полям — остальные получат значения по умолчанию. Второй вариант потребует вставки для всех полей.

Примеры использования insert

Вставка нескольких строк одним запросом:

> INSERT INTO cities ('name', 'country') VALUES ('Москва', 'Россия'), ('Париж', 'Франция'), ('Фунафути' ,'Тувалу');

* в данном примере мы одним SQL-запросом добавим 3 записи.

Обновление (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 = 'Масква';

Удаление (DELETE)

Синтаксис:

> DELETE FROM <table> WHERE <conditions>

* где table — имя таблицы; conditions — условие (как и в случае с UPDATE, использовать DELETE без условия опасно — СУБД не запросит подтверждения, а просто удалит все данные).

Создание таблицы

Синтаксис:

> 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=utf8;

* где table — имя таблицы (в примере users_rights); field1, field2 — имя полей (в примере создается 3 поля — id, user_id, rights); options1, options2 — параметры поля (в примере int(10) unsigned NOT NULL); table options — общие параметры таблицы (в примере ENGINE=InnoDB DEFAULT CHARSET=utf8).

Использование запросов в PHP

Подключаемся к базе данных:

mysql_connect ('localhost', 'login', 'password') or die ("MySQL connect error");
mysql_select_db ('db_name');
mysql_query("SET NAMES 'utf8'");

* где подключение выполняется к базе на локальном сервере (localhost); учетные данные для подключения — login и password (соответственно, логин и пароль); в качестве базы используется db_name; используемая кодировка UTF-8.

Также можно создать постоянное подключение:

mysql_pconnect ('localhost', 'login', 'password') or die ("MySQL connect error");

* однако есть вероятность достигнуть максимально разрешенного лимита хостинга. Данным способом стоит пользоваться на собственных серверах, где мы сами можем контролировать ситуацию.

Завершить подключение:

mysql_close();

* в PHP выполняется автоматически, кроме постоянных подключений (mysql_pconnect).

Запрос к MySQL (Mariadb) в PHP делается функцией mysql_query(), а извлечение данных из запроса — mysql_fetch_array():

$result = mysql_query("SELECT * FROM users");
while ($mass = mysql_fetch_array($result)) {
    echo $mass[name] . '<br>';
}

* в данном примере выполнен запрос к таблице users. Результат запроса помещен в переменную $result. Далее используется цикл while, каждая итерация которого извлекает массив данных и помещает его в переменную $mass — в каждой итерации мы работаем с одной строкой базы данных.

Используемая функция mysql_fetch_array() возвращает ассоциативный массив, с которым удобно работать, но есть еще альтернатива — mysql_fetch_row(), которая возвращает обычный нумерованный массив.

На этом все. Если Вам нужно помочь с выполнением запроса, пишите мне на почту master@dmosk.ru

# Серверы # Базы данных # MySQL
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет