Справочники, инструменты, документация

SQL: Запросы в примерах

Примеры SQL запросов к базе данных MySQL. Что такое SELECT, INSERT, UPDATE запросы.

Создание подключения.

$mysql = new mysqli("localhost", "ИМЯ ПОЛЬЗОВАТЕЛЯ", "УСТАНОВЛЕННЫЙ ПАРОЛЬ", "ИМЯ БАЗЫ ДАННЫХ");
$mysql->query("SET NAMES 'utf8'");

if($mysql->connect_error) {
 echo 'Error Number: ' . $mysql->connect_errno . '<br>';
 echo 'Error: ' . $mysql->connect_error;
}

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

$mysql->query("CREATE TABLE `story` 
 (id INT(18) NOT NULL,
 name VARCHAR(100) NOT NULL,
 bio TEXT NOT NULL,
 PRIMARY KEY(id)
 )");

Удаление таблицы.

$mysql->query("DROP TABLE `story`"); 

Добавление записи в таблицу.

$mysql->query("INSERT INTO `users`(`name`, `surname`) VALUES('Женя', 'Новикова')"); 

Обновление всех полей age.

$mysql->query("UPDATE `users` SET `age` = '35' "); 

Обновление определенного значения или id < 3 и так далее.

$mysql->query("UPDATE `users` SET `age` = '35' WHERE `id` = 3 "); 

Обновление по значению.

$mysql->query("UPDATE `users` SET `age` = '12' WHERE `name` = 'Дима' ");

Удаление определенной записи.

$mysql->query("DELETE FROM `users` WHERE `id` = 3 "); 
$mysql->query("DELETE FROM `users` WHERE `id` = 3 AND ` name` = 'Миша' ");

Вывести количество записей.

$result = $mysql->query("SELECT * FROM `users`");
print_r($result);
echo $result->num_rows; 

Вывод в цикле.

if($result->num_rows > 0){
 // print_r($result->fetch_assoc()); // Array ( [id] => 1 [name] => Миша [surname] => Новиков [age] => 44 ) // вывод первой записи
 // print_r($result->fetch_all()); // // вывод массива всех записей
 while($row = $result->fetch_assoc()){
  echo 'ID: ' . $row['id'] . ' Имя: ' . $row['name'] . ' Фам: ' . $row['surname'] . '<br>';
 }
}

Выносим вывод в функцию.

function printResults($result){
 if($result->num_rows > 0){
  while($row = $result->fetch_assoc()){
   echo 'ID: ' . $row['id'] . ' Имя: ' . $row['name'] . ' Фам: ' . $row['surname'] . '<br>';
  }
 }
 echo '<hr>';
}

Выводим через функцию.

$result = $mysql->query("SELECT * FROM `users`"); // вывод всех полей
printResults($result);

$result = $mysql->query("SELECT `id`, `name` FROM `users`"); // вывод определенных полей
printResults($result);

$result = $mysql->query("SELECT `id`, `name` FROM `users` WHERE `id` = 2"); // вывод с условием WHERE
printResults($result);

$result = $mysql->query("SELECT * FROM `users` WHERE `id` > 1 ORDER BY `id` ASC"); // вывод с сортировкой
printResults($result);

$result = $mysql->query("SELECT * FROM `users` WHERE `id` > 1 ORDER BY `id` DESC"); // вывод с сортировкой в обратном порядке
printResults($result);

$result = $mysql->query("SELECT * FROM `users` LIMIT 2"); // лимитированный вывод, только 2 первые записи
printResults($result);

$result = $mysql->query("SELECT * FROM `users` LIMIT 2, 1"); // лимитированный вывод, пропускаем 2 первые записи и показываем 1 последующую
printResults($result);

Закрываем подключение к базе.

$mysql->close();

SELECT (выбрать) запросы

SELECT – запрос, который выбирает уже существующие данные из БД. Для выбора можно указывать определённые параметры выбора. Например, суть запроса русским языком звучит так - ВЫБРАТЬ такие-то колонки ИЗ такой-то таблицы ГДЕ параметр такой-то колонки равен значению.

Выбирает ВСЕ данные в таблице tbl_name.

SELECT * FROM tbl_name;

Выведет количество записей в таблице tbl_name.

SELECT count(*) FROM tbl_name;

Выбирает (SELECT) из(FROM) таблицы tbl_name лимит (LIMIT) 3 записи, начиная с 2.

SELECT * FROM tbl_name LIMIT 2,3;

Выбирает (SELECT) ВСЕ (*) записи из (FROM) таблицы tbl_name и сортирует их (ORDER BY) по полю id по порядку.

SELECT * FROM tbl_name ORDER BY id;

Выбирает (SELECT) ВСЕ записи из (FROM) таблицы tbl_name и сортирует их (ORDER BY) по полю id в ОБРАТНОМ порядке.

SELECT * FROM tbl_name ORDER BY id DESC;

Выбирает (SELECT) ВСЕ (*) записи из (FROM) таблицы users и сортирует их (ORDER BY) по полю id в порядке возрастания, лимит (LIMIT) первые 5 записей.

SELECT * FROM users ORDER BY id LIMIT 5;

Выбирает все записи из таблицы users, где поле fname соответствует значению Gena.

SELECT * FROM users WHERE fname='Gena';

Выбирает все записи из таблицы users, где значение поля fname начинается с Ge.

SELECT * FROM users WHERE fname LIKE 'Ge%';

Выбирает все записи из таблицы users, где fname заканчивается на na, и упорядочивает записи в порядке возрастания значения id.

SELECT * FROM users WHERE fname LIKE '%na' ORDER BY id;

Выбирает все данные из колонок fname, lname из таблице users.

SELECT fname, lname FROM users;

Допустим у Вас в таблице пользовательских данных есть страна. Так вот если Вы хотите вывести ТОЛЬКО список встречающихся значений (чтобы, например, Россия не выводилось 20 раз, а только один), то используем DISTINCT. Выведет, из массы повторяющихся значений Россия, Украина, Беларусь. Таким образом, из таблицы users колонки country будут выведены ВСЕ УНИКАЛЬНЫЕ значения

SELECT DISTINCT country FROM users;

Выбирает ВСЕ данные строк из таблицы users где age имеет значения 18, 19 и 21.

SELECT * FROM users WHERE age IN (18,19,21);

Фильтрация по одному условию и нескольким значениям с применением IN (включение) или NOT IN (исключение).

select * from Customers
where City IN ('London', 'Berlin')

select * from Customers
where City NOT IN ('Madrid', 'Berlin','Bern')

Фильтрация по нескольким условиям с применением AND (выполняются все условия) или OR (выполняется хотя бы одно условие) и нескольким значениям.

select * from Customers
where Country = 'Germany' AND City not in ('Berlin', 'Aachen') AND CustomerID > 15

select * from Customers
where City in ('London', 'Berlin') OR CustomerID > 4

Выбирает МАКСИМАЛЬНОЕ значение age в таблице users. То есть если у Вас в таблице самое большее значение age (с англ. возраст) равно 55, то результатом запроса будет 55.

SELECT max(age) FROM users;

Выберет данные из таблицы users по полям name и age ГДЕ age принимает самое маленькое значение.

SELECT name, min(age) FROM users;

Выберет данные из таблицы users по полю name ГДЕ id НЕ РАВЕН 2.

SELECT name FROM users WHERE id!='2';

INSERT (новая запись) запросы

INSERT – запрос, который позволяет ПЕРВОНАЧАЛЬНО вставить запись в БД. То есть создаёт НОВУЮ запись (строчку) в БД.

Делает новую запись в таблице users, в поле name вставляет Сергей, а в поле age вставляет 25. Таким образом, в таблицу дописывается новая строки с данными значениями. Если колонок больше, то они оставшиеся останутся либо пустыми, либо с установленными по умолчанию значениями.

INSERT INTO users (name, age) VALUES ('Сергей', '25');

UPDATE запросы

UPDATE – запрос, который позволяет ПЕРЕЗАПИСАТЬ значения полей или ДОПИСАТЬ что-то в уже существующей строке в БД. Например, есть готовая строка, но в ней нужно перезаписать параметр возраста, так как он изменился со временем.

В таблице users ГДЕ id равно 3 значение поля age становится 18.

UPDATE users SET age = '18' WHERE id = '3';

Всё то же самое, что и в первом запросе, просто показан синтаксис запроса, где перезаписываются два поля и более. В таблице users ГДЕ id равно 3 значение поля age становится 18, а country Россия.

UPDATE users SET age = '18', country = 'Россия' WHERE id = '3';

DELETE (удалить запись) запросы

DELETE – запрос, который удаляет строку из таблицы.

Удаляет строку из таблицы users ГДЕ id равен 10.

DELETE FROM users WHERE id = '10';

DROP (удалить таблицу)

DROP – запрос, который удаляет таблицу.

Удаляет целиком таблицу tbl_name.

DROP TABLE tbl_name;

Прочие запросы

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

Данный сложный запрос ВЫБИРАЕТ колонки id,name,country В ТАБЛИЦАХ users,admins ГДЕ registration_date (дата) не старше 14 дней И activation НЕ РАВНО 0, СОРТИРОВАТЬ по registration_date в обратном порядке (новое в начале).

SELECT id,name,country FROM users,admins WHERE TO_DAYS(NOW()) - TO_DAYS(registration_date) <= 14 AND activation != '0' ORDER BY registration_date DESC;

Запрос в запросе в SQL. Обновить возраст среди пользователей на 18+, где пол - мужской.

UPDATE users SET age = '18+' WHERE age = ( SELECT age FROM users WHERE male = 'man'); 

Вывести список всех баз.

SHOW databases;

Выведет список ВСЕХ таблиц в Базе Данных base_name.

SHOW tables in base_name;