Шпаргалка по SQL
Собрал шаблоны типовых запросов, в конце поста задачник на эти запросы. Синтаксис во всех запросах — MS SQL.
Шаблоны типовых запросов SQL
Выборка записей из таблицы
select поле1, поле2 from таблица1
вместо списка полей может быть * — тогда выведудтся все поля
Выборка записей из таблицы с сортировкой по возрастанию
select поле1, поле2 from таблица1 order by поле1 asc
Выборка записей из таблицы с сортировкой по убыванию
select поле1, поле2 from таблица1 order by поле1 desc
Выборка записей из таблицы с условием на численное поле
select поле1, поле2 from таблица1 where поле1 = 777
вместо = может быть >, <, >=, <=
Выборка записей из таблицы с условием на строковое поле
select поле1, поле2 from таблица1 where поле1 = "777"
Выборка с группировкой
select поле1, sum(поле2) from таблица1 group by поле1
вместо sum может быть min, max, count и другие функции
все поля, к которым не применяются функции, должны быть перечислены в секции group by
Выборка из двух таблиц
select таб1.поле1, таб2.поле2 from таблица1 as таб1 join таблица2 as таб2 on таб2.поле3 = таб1.поле4
вместо таблица2 может быть таблица1, если в таблице есть поле, ссылающееся на эту же таблицу
Вставка новой записи
insert into таблица1 ([поле1], [поле2]) values (значениие1, значение2)
Изменение записи
update таблица1 set поле1 = значение1 where поле2 = значение2
Удаление записи
delete from таблица1 where поле1 = значение1
Задачник по SQL
Для решения задач можно использовать сервис http://sqlfiddle.com
Нужно выбрать базу данных MS SQL и создать тестовую базу запросом:
CREATE TABLE Departments ([Id] int, [Name] varchar(100)) ; CREATE TABLE Employees ([Id] int, [Name] varchar(100), [Salary] int, [ManagerId] int, [DepartamentId] int) ; INSERT INTO Departments ([Id], [Name]) VALUES (1, 'Sales'), (2, 'Development') ; INSERT INTO Employees ([Id], [Name], [Salary], [ManagerId], [DepartamentId]) VALUES (1, 'Ivanov', 100000, null, 1), (2, 'Petrov', 120000, 1, 1), (3, 'Sidorov', 130000, 2, 1), (4, 'Korotkov', 120000, 2, 1), (5, 'Filev', 90000, 1, 1), (6, 'Smirnov', 125000, null, 2), (7, 'Godov', 125000, null, null) ;
Задачи:
- Фамилии и зарплаты всех сотрудников
- Фамилии и зарплаты всех сотрудников, отсортированные по зарплате по возрастанию
- Фамилии и зарплаты всех сотрудников, отсортированные по зарплате по убыванию
- Фамилии и зарплаты всех сотрудников, у которых зарплата больше 100000
- Фамилии и зарплаты всех сотрудников, у которых зарплата равна 100000
- Фамилии и зарплаты всех сотрудников, у которых зарплата больше либо равна 100000
- Фамилии и зарплаты всех сотрудников, у которых фамилия Ivanov
- Ид департамента и максимальная зарплата в этом департаменте
- Имя сотрудника и название его отдела
- Имя сотрудника и имя его начальника
- Добавить сотрудника с именем Semenov, зарплатой 70000, менеджером Ivanov и отделом Sales
- Изменить зарплату сотрудника Godov на 80000
- Удалить сотрудника Godov
/*1. Фамилии и зарплаты всех сотрудников*/
select Name, Salary from Employees
/*2. Фамилии и зарплаты всех сотрудников, отсортированные по зарплате по возрастанию*/
select Name, Salary from Employees order by Salary asc
/*3. Фамилии и зарплаты всех сотрудников, отсортированные по зарплате по убыванию*/
select Name, Salary from Employees order by Salary desc
/*4. Фамилии и зарплаты всех сотрудников, у которых зарплата больше 100000*/
select Name, Salary from Employees where Salary > 100000
/*5. Фамилии и зарплаты всех сотрудников, у которых зарплата равна 100000*/
select Name, Salary from Employees where Salary = 100000
/*6. Фамилии и зарплаты всех сотрудников, у которых зарплата больше либо равна 100000*/
select Name, Salary from Employees where Salary >= 100000
/*7. Фамилии и зарплаты всех сотрудников, у которых фамилия Ivanov*/
select Name, Salary from Employees where Name = ‘Ivanov’
/*8. Ид департамента и максимальная зарплата в этом департаменте*/
select DepartamentId, max(Salary) from Employees group by DepartamentId
/*9. Имя сотрудника и название его отдела*/
select emp.Name, dep.Name from Employees as emp
join Departments as dep on dep.Id = emp.DepartamentId
/*10. Имя сотрудника и имя его начальника*/
select emp2.Name, emp1.Name from Employees as emp1
join Employees as emp2 on emp1.Id = emp2.ManagerId
/*11. Добавить сотрудника с именем Semenov, зарплатой 70000, менеджером Ivanov и отделом Sales*/
insert into Employees
([Id], [Name], [Salary], [ManagerId], [DepartamentId])
values
(8, ‘Semenov’, 70000, 1, 1)
/*12. Изменить зарплату сотрудника Godov на 80000*/
update Employees
set Salary = 80000
where Id = 7
/*13. Удалить сотрудника Godov*/
delete from Employees
where Id = 7