Примеры решения задач
Задача
Задача. Выберите из таблицы workers записи с id равным 3, 5, 6, 10.
Решение:
SELECT * FROM workers WHERE id IN(3,5,6,10)
Задача
Задача. Выберите из таблицы workers записи с id равным 3, 5, 6, 10 и логином, равным 'eee', 'zzz' или 'ggg'.
Решение:
SELECT * FROM workers WHERE id IN(3,5,6,10) AND login IN("eee", "zzz", "ggg")
Задача
Задача. Выберите из таблицы workers записи c зарплатой от 500 до 1500.
Решение:
SELECT * FROM workers WHERE price BETWEEN 500 AND 1500
Задача
Задача. Выберите из таблицы workers все записи так, чтобы вместо id было workersId, вместо login – workersLogin, вместо salary - workersSalary.
Решение:
SELECT id AS userId, login AS userLogin, salary AS userSalary FROM workers
Задача
Задача. Найдите в таблице workers минимальный возраст.
Решение:
SELECT MIN(age) FROM workers
Задача
Задача. Найдите в таблице workers суммарный возраст.
Решение:
SELECT SUM(age) FROM workers
Задача
Задача. Вставьте в таблицу workers запись с полем date с текущим моментом времени в формате 'год-месяц-день часы:минуты:секунды'.
Решение:
INSERT INTO workers ('name', 'date') VALUES ('Вася', NOW())
Задача
Задача. Вставьте в таблицу workers запись с полем date с текущей датой в формате 'год-месяц-день'.
Решение:
INSERT INTO workers ('name', 'date') VALUES ( 'Маша', CURDATE())
Задача
Задача. При выборке из таблицы workers запишите день, месяц и год в отдельные поля.
Решение:
SELECT EXTRACT(DAY FROM date) AS day,
EXTRACT(MONTH FROM date) AS month,
EXTRACT(YEAR FROM date) AS year
FROM workers
Задача
Задача. Выберите из таблицы workers записи, в которых минуты больше секунд.
Решение:
SELECT * FROM workers WHERE HOUR(date) > SECOND(date)
Задача
Задача. При выборке из таблицы workers прибавьте к дате 1 год.
Решение:
SELECT DATE_ADD(date, INTERVAL 1 YEAR) as date FROM workers
Или:
SELECT date + INTERVAL 1 YEAR as date FROM workers
Задача
Задача. При выборке из таблицы workers отнимите от даты 1 год.
Решение:
SELECT DATE_ADD(date, INTERVAL - 1 YEAR) as date FROM workers
Или:
SELECT date - INTERVAL 1 YEAR as date FROM workers
Задача
Задача. При выборке из таблицы workers прибавьте к дате 3 года, 4 месяца.
Решение:
SELECT DATE_ADD(date, INTERVAL "3:4" YEAR_MONTH) as date FROM workers
Или:
SELECT date + INTERVAL 3 YEAR + INTERVAL 4 MONTH as date FROM workers
Задача
Задача. При выборке из таблицы workers прибавьте к дате 4 дня, 3 часа, 2 минуты, 1 секунду.
Решение:
SELECT DATE_SUB(date, INTERVAL "4 3:2:1" DAY_SECOND) FROM workers
Задача
Задача. При выборке из таблицы workers прибавьте к дате 3 дня и отнимите 2 часа.
Решение:
SELECT date + INTERVAL 3 DAY - INTERVAL 2 HOUR FROM workers
Задачи для решения
На IN
Выберите из таблицы workers записи с id равным 1, 2, 3, 5, 14.
Решение:
SELECT * FROM workers WHERE id IN(1,2,3,5,14)
Выберите из таблицы workers записи с login равным 'eee', 'bbb', 'zzz'.
Решение:
SELECT * FROM workers WHERE login IN("eee", "bbb", "zzz")
Выберите из таблицы workers записи с id равным 1, 2, 3, 7, 9, и логином, равным 'user', 'admin', 'ivan' и зарплатой больше 300.
Решение:
SELECT * FROM workers WHERE id IN(1,2,3,7,9) AND login IN("user", "admin", "ivan") AND price>300
На BETWEEN
Выберите из таблицы workers записи c зарплатой от 100 до 1000.
Решение:
SELECT * FROM workers WHERE salary BETWEEN 100 AND 1500
Выберите из таблицы workers записи c id от 3 до 10 и зарплатой от 300 до 500.
Решение:
SELECT * FROM workers WHERE id BETWEEN 3 AND 10 AND salary BETWEEN 100 AND 500
На AS
Выберите из таблицы workers все записи так, чтобы вместо id было userId, вместо login – userLogin, вместо salary - userSalary.
Решение:
SELECT id AS userId, login AS userLogin, salary AS userSalary FROM workers
На DISTINCT
Выберите из таблицы workers все записи так, чтобы туда попали только записи с разной зарплатой (без дублей).
Решение:
SELECT DISTINCT salary FROM workers
Получите SQL запросом все возрасты без дублирования.
Решение:
SELECT DISTINCT age FROM workers
На MIN и MAX
Найдите в таблице workers минимальную зарплату.
Решение:
SELECT MIN(salary) FROM workers
Найдите в таблице workers максимальную зарплату.
Решение:
SELECT MAX(salary) FROM workers
На SUM
Найдите в таблице workers суммарную зарплату.
Решение:
SELECT SUM(salary) FROM workers
Найдите в таблице workers суммарную зарплату для людей в возрасте от 21 до 25.
Решение:
SELECT SUM(salary) FROM workers WHERE age BETWEEN 21 AND 25
Найдите в таблице workers суммарную зарплату для id, равного 1, 2, 3 и 5.
Решение:
SELECT SUM(salary) FROM workers WHERE id IN(1,2,3,5)
На AVG
Найдите в таблице workers среднюю зарплату.
Решение:
SELECT AVG(salary) FROM workers
Найдите в таблице workers средний возраст.
Решение:
SELECT AVG(age) FROM workers
На NOW, CURRENT_DATE, CURRENT_TIME
Выберите из таблицы workers все записи, у которых дата больше текущей.
Решение:
SELECT * FROM workers WHERE date>CURRENT_DATE()
Вставьте в таблицу workers запись с полем date с текущим моментом времени в формате 'год-месяц-день часы:минуты:секунды'.
Решение:
INSERT INTO workers ('name', 'date') VALUES ('Вася', NOW())
Вставьте в таблицу workers запись с полем date с текущей датой в формате 'год-месяц-день'.
Решение:
INSERT INTO workers ('name', 'date') VALUES ('Петя', CURDATE())
Вставьте в таблицу workers запись с полем time с текущим моментом времени в формате 'часы:минуты:секунды'.
Решение:
INSERT INTO workers ('name', 'time') VALUES ('Коля', CURTIME())
На работу с частью даты
Выберите из таблицы workers все записи за 2016 год.
Решение:
SELECT * FROM workers WHERE YEAR(date) = 2016
Выберите из таблицы workers все записи за март любого года.
Решение:
SELECT * FROM workers WHERE MONTH(date) = 3
Выберите из таблицы workers все записи за третий день месяца.
Решение:
SELECT * FROM workers WHERE DAY(date) = 3
Выберите из таблицы workers все записи за пятый день апреля любого года.
Решение:
SELECT * FROM workers WHERE MONTH(date) = 4 AND DAY(date) = 5
Выберите из таблицы workers все записи за следующие дни любого месяца: 1, 7, 11, 12, 15, 19, 21, 29.
Решение:
SELECT * FROM workers WHERE DAY(date) IN(1,7,11,12,15,19,21,29)
Выберите из таблицы workers все записи за вторник.
Решение:
SELECT * FROM workers WHERE DAYOFWEEK(date)= 3
Выберите из таблицы workers все записи за первую декаду любого месяца 2016 года.
Решение:
SELECT * FROM workers WHERE DAY(date) <= 10 AND YEAR(date)= 2016
Выберите из таблицы workers все записи, в которых день меньше месяца.
Решение:
SELECT * FROM workers WHERE DAY(date) < MONTH(date)
При выборке из таблицы workers запишите день, месяц и год в отдельные поля.
Решение:
SELECT DAY(date) AS day, MONTH(date) AS month, YEAR(date) AS year FROM workers
При выборке из таблицы workers создайте новое поле today, в котором будет номер текущего дня недели.
Решение:
SELECT WEEKDAY(NOW()) as today FROM workers;
На EXTRACT, DATE
При выборке из таблицы workers запишите год, месяц и день в отдельные поля с помощью EXTRACT.
Решение:
SELECT EXTRACT(YEAR FROM date) AS year,
EXTRACT(MONTH FROM date) AS month,
EXTRACT(DAY FROM date) AS day
FROM workers
При выборке из таблицы workers запишите день, месяц и год в отдельное поле с помощью DATE в формате 'год-месяц-день'.
Решение:
SELECT DATE(date) FROM workers
На DATE_FORMAT
При выборке из таблицы workers выведите дату в формате '31.12.2025'.
Решение:
SELECT DATE_FORMAT(date, '%d.%m.%Y') FROM workers
При выборке из таблицы workers выведите дату в формате '2025% 31.12'.
Решение:
SELECT DATE_FORMAT(date, '%Y%% %m.%d') FROM workers
На INTERVAL, DATE_ADD, DATE_SUB
При выборке из таблицы workers прибавьте к дате 1 день.
Решение:
SELECT DATE_ADD(date, INTERVAL 1 DAY) FROM workers
При выборке из таблицы workers отнимите от даты 1 день.
Решение:
SELECT DATE_ADD(date, INTERVAL -1 DAY) FROM workers
При выборке из таблицы workers прибавьте к дате 1 день, 2 часа.
Решение:
SELECT DATE_ADD(date, INTERVAL "1:2" DAY_HOUR) FROM workers
При выборке из таблицы workers прибавьте к дате 1 год, 2 месяца.
Решение:
SELECT DATE_ADD(date, INTERVAL "1:2" YEAR_MONTH) FROM workers
При выборке из таблицы workers прибавьте к дате 1 день, 2 часа, 3 минуты.
Решение:
SELECT DATE_SUB(date, INTERVAL "1:2:3" DAY_SECOND) FROM workers
При выборке из таблицы workers прибавьте к дате 1 день, 2 часа, 3 минуты, 5 секунд.
Решение:
SELECT DATE_SUB(date, INTERVAL "1 2:3:5" DAY_SECOND) FROM workers
При выборке из таблицы workers прибавьте к дате 2 часа, 3 минуты, 5 секунд.
Решение:
SELECT DATE_SUB(date, INTERVAL "2:3:5" HOUR_SECOND) FROM workers WHERE
При выборке из таблицы workers прибавьте к дате 1 день и отнимите 2 часа.
Решение:
SELECT DATE_ADD(date, INTERVAL 1:-2 DAY_HOUR) FROM workers
При выборке из таблицы workers прибавьте к дате 1 день и отнимите 2 часа, 3 минуты.
Решение:
SELECT DATE_ADD(date, INTERVAL 1 -2 -3 DAY_MINUTE) FROM workers
На математические операции
При выборке из таблицы workers создайте новое поле res, в котором будет число 3.
Решение:
SELECT 3 AS res FROM workers
При выборке из таблицы workers создайте новое поле res, в котором будет строка 'eee'.
Решение:
SELECT "eee" AS res FROM workers
При выборке из таблицы workers создайте новое поле 3, в котором будет число 3.
Решение:
SELECT 3 FROM workers
При выборке из таблицы workers создайте новое поле res, в котором будет лежать сумма зарплаты и возраста.
Решение:
SELECT SUM(age) AND SUM(salary) AS res FROM workers
При выборке из таблицы workers создайте новое поле res, в котором будет лежать разность зарплаты и возраста.
Решение:
SELECT (salary - age) AS res FROM workers
При выборке из таблицы workers создайте новое поле res, в котором будет лежать произведение зарплаты и возраста.
Решение:
SELECT (salary * age) AS res FROM workers
При выборке из таблицы workers создайте новое поле res, в котором будет лежать среднее арифметическое зарплаты и возраста.
Решение:
SELECT ((salary * age)/2) AS res FROM workers
Выберите из таблицы workers все записи, в которых сумма дня и месяца меньше 10-ти.
Решение:
SELECT (MONTH(date) + DAY(date)) FROM workers
На LEFT, RIGHT, SUBSTRING
При выборке из таблицы workers получите первые 5 символов поля description.
Решение:
SELECT LEFT(description, 5) FROM workers
При выборке из таблицы workers получите последние 5 символов поля description.
Решение:
SELECT RIGHT(description, 5) FROM workers
При выборке из таблицы workers получите из поля description символы со второго по десятый.
Решение:
SELECT SUBSTRING(description, 2,10) FROM workers
На UNION
Даны две таблицы: таблица category и таблица sub_category с полями id и name. Достаньте одним запросом названия категорий и подкатегорий.
Решение:
SELECT id, name FROM workers UNION SELECT id, name FROM sub_category
На CONCAT, CONCAT_WS
При выборке из таблицы workers создайте новое поле res, в котором будут лежать одновременно зарплата и возраст (слитно).
Решение:
SELECT CONCAT(salary, age) AS res FROM workers
При выборке из таблицы workers создайте новое поле res, в котором будут лежать одновременно зарплата и возраст (слитно), а после возраста будут идти три знака '!'.
Решение:
SELECT CONCAT(salary, age, '!!!') AS res FROM workers
При выборке из таблицы workers создайте новое поле res, в котором будут лежать одновременно зарплата и возраст через дефис.
Решение:
SELECT CONCAT_WS('-', salary, age) AS res FROM workers
При выборке из таблицы workers получите первые 5 символов логина и добавьте троеточие.
Решение:
SELECT CONCAT (LEFT(login, 5), '...') AS log FROM workers;
На GROUP BY
Найдите самые маленькие зарплаты по группам возрастов (для каждого возраста свою минимальную зарплату).
Решение:
SELECT MIN(salary), MAX(salary) FROM workers GROUP BY age
Найдите самый большой возраст по группам зарплат (для каждой зарплаты свой максимальный возраст).
Решение:
SELECT MAX(age) FROM workers GROUP BY salary ;
На GROUP_CONCAT
Выберите из таблицы workers уникальные возраста так, чтобы для каждого возраста было поле res, в котором будут лежать через дефис id записей с таким возрастом.
Решение:
SELECT DISTINCT age AS res (SELECT GROUP_CONCAT( id SEPARATOR '-') ) FROM workers
На подзапросы
Выберите из таблицы workers все записи, зарплата в которых больше средней зарплаты.
Решение:
SELECT * FROM workers WHERE salary >(SELECT AVG(salary) FROM workers)
Выберите из таблицы workers все записи, возраст в которых меньше среднего возраста, деленного на 2 и умноженного на 3.
Решение:
SELECT * FROM workers WHERE age < (SELECT AVG(age)/2*3 FROM workers)
Выберите из таблицы workers записи с минимальной зарплатой.
Решение:
SELECT * FROM workers WHERE salary = (SELECT MIN(salary) FROM workers)
Выберите из таблицы workers записи с максимальной зарплатой.
Решение:
SELECT * FROM workers WHERE salary = (SELECT MAX(salary) FROM workers)
При выборке из таблицы workers создайте новое поле max, в котором будет лежать максимальное значение зарплаты для возраста 25 лет.
Решение:
SELECT MAX(salary) AS max FROM workers WHERE age = 25 !!!!!!
При выборке из таблицы workers создайте новое поле avg, в котором будет лежать деленная на 2 разница между максимальным значением возраста и минимальным значением возраста в во всей таблице.
Решение:
SELECT (SELECT (MAX(age) - MIN(age))/2 FROM workers) AS avg
При выборке из таблицы workers создайте новое поле avg, в котором будет лежать деленная на 2 разница между максимальным значением зарплаты и минимальным значением зарплаты для возраста 25 лет.
Решение:
SELECT (SELECT (MAX(age) - MIN(age))/2 FROM workers ) AS avg FROM workers WHERE age = 25
На JOIN
Даны две таблицы: таблица category с полями id и name и таблица page с полями id, name и category_id. Достаньте одним запросом все страницы вместе с их категориями.
Решение:
SELECT * FROM page LEFT JOIN category ON page.catogory_id = category.id
Даны 3 таблицы: таблица category с полями id и name, таблица sub_category с полями id и name и таблица page с полями id, name и sub_category_id. Достаньте одним запросом все страницы вместе с их подкатегориями и категориями.
Решение:
SELECT * FROM page LEFT JOIN category ON page.catogory_id = category.id
LEFT JOIN sub_category ON category.id = sub_category.category_id
На работу с полями
Создайте базы данных test1 и test2.
Решение:
CREATE DATABASE test1
CREATE DATABASE test2
Удалите базу данных test2.
Решение:
DROP DATABASE test2
Создайте в базе данных test1 таблицы table1 и table2 с полями id, login, salary, age, date.
Решение:
CREATE TABLE table1(
id INT(1),
login VARCHAR(255),
salary INT(6),
age INT(6),
date DATE NOT NULL
primary key (Id)
);
CREATE TABLE table2(
id INT(1),
login VARCHAR(255),
salary INT(6),
age INT(6),
date DATE NOT NULL
primary key (Id)
);
Переименуйте таблицу table2 в table3.
Решение:
RENAME TABLE table2 TO table3
Удалите таблицу table3.
Решение:
DROP TABLE table3
Добавьте в таблицу table1 поле status.
Решение:
ALTER TABLE table1 ALTER COLUMN status
Удалите из таблицы table1 поле age.
Решение:
ALTER TABLE table1 DROP COLUMN age
Переименуйте поле login на user_login.
Решение:
RENAME COLUMN login TO user_login
Смените типа поля salary с int на varchar(255).
Решение:
ALTER TABLE table1 CHANGE salary salary VARCHAR(255)
Очистите таблицу table1.
Решение:
DELETE FROM table1
Очистите все таблицы базы данных test1.
Решение:
TRUNCATE test1