Шпаргалка по SQL

28.03.2019 at 18:02


Собрал шаблоны типовых запросов, в конце поста задачник на эти запросы. Синтаксис во всех запросах — 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)  
;

Задачи:

  1. Фамилии и зарплаты всех сотрудников
  2. Фамилии и зарплаты всех сотрудников, отсортированные по зарплате по возрастанию
  3. Фамилии и зарплаты всех сотрудников, отсортированные по зарплате по убыванию
  4. Фамилии и зарплаты всех сотрудников, у которых зарплата больше 100000
  5. Фамилии и зарплаты всех сотрудников, у которых зарплата равна 100000
  6. Фамилии и зарплаты всех сотрудников, у которых зарплата больше либо равна 100000
  7. Фамилии и зарплаты всех сотрудников, у которых фамилия Ivanov
  8. Ид департамента и максимальная зарплата в этом департаменте
  9. Имя сотрудника и название его отдела
  10. Имя сотрудника и имя его начальника
  11. Добавить сотрудника с именем Semenov, зарплатой 70000, менеджером Ivanov и отделом Sales
  12. Изменить зарплату сотрудника Godov на 80000
  13. Удалить сотрудника 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

Tags: