Введение в базы данных и SQL

Содержание

Слайд 2

ВВЕДЕНИЕ

SQL (Structured Query Language)

Структурированный язык запросов

DQL – запросы на извлечение данных
SELECT

DML –

ВВЕДЕНИЕ SQL (Structured Query Language) Структурированный язык запросов DQL – запросы на
запросы на изменение данных
INSERT/UPDATE/DELETE

DDL – запросы на определение данных
CREATE/ALTER/DROP

DCL – запросы на изменение доступа
GRANT/REVOKE

TPL – запросы на управление транзакцией
COMMIT/ROLLBACK

assign(f, ‘c:\data\somefile.dat’);
reset(f);
readline(f, s1);
readline(f, s2);
close(f);

Как было до SQL:

Слайд 3

ОСНОВНЫЕ ОПЕРАЦИИ РЕЛЯЦИОННОЙ АЛГЕБРЫ

Объединение

Пересечение

Вычитание

Произведение

Выборка

Проекция

Соединение

Деление

Традиционные

Специализированные

ОСНОВНЫЕ ОПЕРАЦИИ РЕЛЯЦИОННОЙ АЛГЕБРЫ Объединение Пересечение Вычитание Произведение Выборка Проекция Соединение Деление Традиционные Специализированные

Слайд 4

ОСНОВНЫЕ ОПЕРАЦИИ РЕЛЯЦИОННОЙ АЛГЕБРЫ

Объединение

SELECT first_name,
second_name,
last_name
FROM math_students
UNION
SELECT first_name,
second_name,

ОСНОВНЫЕ ОПЕРАЦИИ РЕЛЯЦИОННОЙ АЛГЕБРЫ Объединение SELECT first_name, second_name, last_name FROM math_students UNION
last_name
FROM sport_students

UNION ALL – быстрый, но не убирает повторяющиеся записи

UNION – медленный оператор!

UNION – медленный оператор!

Слайд 5

ОСНОВНЫЕ ОПЕРАЦИИ РЕЛЯЦИОННОЙ АЛГЕБРЫ

Использование
звездочек в
приложение

SELECT *
FROM math_students
UNION
SELECT *
FROM sport_students

Зачем

ОСНОВНЫЕ ОПЕРАЦИИ РЕЛЯЦИОННОЙ АЛГЕБРЫ Использование звездочек в приложение SELECT * FROM math_students
мне перечислять поля, когда я могу поставить звездочку!

Я тут добавила спортсменам столбец с телефончиком

Мой запрос теперь не работает!

Запрещено

Слайд 6

ОСНОВНЫЕ ОПЕРАЦИИ РЕЛЯЦИОННОЙ АЛГЕБРЫ

SELECT first_name,
second_name,
last_name
FROM math_students
INTERSECT
SELECT first_name,
second_name,

ОСНОВНЫЕ ОПЕРАЦИИ РЕЛЯЦИОННОЙ АЛГЕБРЫ SELECT first_name, second_name, last_name FROM math_students INTERSECT SELECT
last_name
FROM sport_students

Пересечение

Слайд 7

ОСНОВНЫЕ ОПЕРАЦИИ РЕЛЯЦИОННОЙ АЛГЕБРЫ

SELECT first_name,
second_name,
last_name
FROM math_students
EXCEPT
SELECT first_name,
second_name,

ОСНОВНЫЕ ОПЕРАЦИИ РЕЛЯЦИОННОЙ АЛГЕБРЫ SELECT first_name, second_name, last_name FROM math_students EXCEPT SELECT
last_name
FROM sport_students

Вычитание

* Для Oracle MINUS

Слайд 8

ОСНОВНЫЕ ОПЕРАЦИИ РЕЛЯЦИОННОЙ АЛГЕБРЫ

SELECT p.first_name,
p.second_name,
p.last_name,
l.name,
l.eng_name
FROM programmers p,

ОСНОВНЫЕ ОПЕРАЦИИ РЕЛЯЦИОННОЙ АЛГЕБРЫ SELECT p.first_name, p.second_name, p.last_name, l.name, l.eng_name FROM programmers
programmer_level l
ORDER BY 1, 2, 3, 5

Произведение

SELECT c.credit_num,
c.amount As credit_amount,
m.n As mon_num,
m.n*month_payment As paid
FROM month_num m,
my_credit c
ORDER BY c.credit_num, m.n

^
Задание! Добавить колонку с остатком долга по кредиту!

Слайд 9

ОСНОВНЫЕ ОПЕРАЦИИ РЕЛЯЦИОННОЙ АЛГЕБРЫ

Выборка

SELECT id,
mark,
model,
year
FROM best_car
WHERE

ОСНОВНЫЕ ОПЕРАЦИИ РЕЛЯЦИОННОЙ АЛГЕБРЫ Выборка SELECT id, mark, model, year FROM best_car
year = 2019

SELECT id,
mark,
model,
year
FROM best_car
WHERE mark = 'KIA'

1

2

Слайд 10

ОСНОВНЫЕ ОПЕРАЦИИ РЕЛЯЦИОННОЙ АЛГЕБРЫ

Выборка

SELECT id,
mark,
model,
year
FROM best_car
WHERE

ОСНОВНЫЕ ОПЕРАЦИИ РЕЛЯЦИОННОЙ АЛГЕБРЫ Выборка SELECT id, mark, model, year FROM best_car
year = 2019
AND mark = 'KIA'

3

SELECT id,
mark,
model,
year
FROM best_car
WHERE mark = 'KIA'
OR mark = 'MAZDA'

4

SELECT id,
mark,
model,
year
FROM best_car
WHERE year in (2019, 2020)

5

SELECT id,
mark,
model,
year
FROM best_car
WHERE year not in (2019, 2020)

6

Слайд 11

ОСНОВНЫЕ ОПЕРАЦИИ РЕЛЯЦИОННОЙ АЛГЕБРЫ

Выборка

SELECT id,
mark,
model,
year
FROM best_car
WHERE

ОСНОВНЫЕ ОПЕРАЦИИ РЕЛЯЦИОННОЙ АЛГЕБРЫ Выборка SELECT id, mark, model, year FROM best_car
mark LIKE '%DA%'

7

SELECT id,
mark,
model,
year
FROM best_car
WHERE mark LIKE '_IA'

8

% - любое количество любых символов

_ - один любой символ, не пустой

\_, \% - экранирование

Слайд 12

ОСНОВНЫЕ ОПЕРАЦИИ РЕЛЯЦИОННОЙ АЛГЕБРЫ

Выборка

SELECT id,
mark,
model,
year
FROM best_car
WHERE

ОСНОВНЫЕ ОПЕРАЦИИ РЕЛЯЦИОННОЙ АЛГЕБРЫ Выборка SELECT id, mark, model, year FROM best_car
mark LIKE 'MA%'

9

SELECT id,
mark,
model,
year
FROM best_car
WHERE mark LIKE '%ZD%'

10

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

Слайд 13

ОСНОВНЫЕ ОПЕРАЦИИ РЕЛЯЦИОННОЙ АЛГЕБРЫ

Выборка

Справочник клиентов, как могут приходить клиенты:
ООО ‘Работа не волк’
ООО

ОСНОВНЫЕ ОПЕРАЦИИ РЕЛЯЦИОННОЙ АЛГЕБРЫ Выборка Справочник клиентов, как могут приходить клиенты: ООО
«Ракета»
ОАО Ветер
ООО, «Одежда для программистов»
Я помню, только слово «Ракета».
Быстрый поиск не подойдет.

Практический кейс

Слайд 14

ОСНОВНЫЕ ОПЕРАЦИИ РЕЛЯЦИОННОЙ АЛГЕБРЫ

Выборка

SELECT id,
mark,
model,
year
FROM best_car
WHERE

ОСНОВНЫЕ ОПЕРАЦИИ РЕЛЯЦИОННОЙ АЛГЕБРЫ Выборка SELECT id, mark, model, year FROM best_car
UPPER(model) like UPPER('granta')

SELECT id,
mark,
model,
year
FROM best_car
WHERE LOWER(model) like LOWER('granta')

Слайд 15

ОСНОВНЫЕ ОПЕРАЦИИ РЕЛЯЦИОННОЙ АЛГЕБРЫ

SELECT DISTINCT
mark,
model
FROM best_car

Проекция

1) Делаем проекцию по

ОСНОВНЫЕ ОПЕРАЦИИ РЕЛЯЦИОННОЙ АЛГЕБРЫ SELECT DISTINCT mark, model FROM best_car Проекция 1)
столбцам MARK, MODEL:

SELECT DISTINCT
mark,
year
FROM best_car

2) Делаем проекцию по столбцам MARK, YEAR

Используешь DISTINCT в алгоритмах?
Проверь модель!

Слайд 16

ОСНОВНЫЕ ОПЕРАЦИИ РЕЛЯЦИОННОЙ АЛГЕБРЫ

Соединение

SELECT
t.last_name As last_name,
t.first_name As first_name,
p.name As

ОСНОВНЫЕ ОПЕРАЦИИ РЕЛЯЦИОННОЙ АЛГЕБРЫ Соединение SELECT t.last_name As last_name, t.first_name As first_name,
position_name
FROM my_teacher t
INNER JOIN teacher_position p ON (t.position_id = p.id)

SELECT
t.last_name As last_name,
t.first_name As first_name,
p.name As position_name
FROM my_teacher t,
teacher_position p
WHERE t.position_id = p.id

Внутреннее соединение
INNER JOIN

Альтернативный вариант:

Слайд 17

ОСНОВНЫЕ ОПЕРАЦИИ РЕЛЯЦИОННОЙ АЛГЕБРЫ

Соединение

SELECT
t.last_name As last_name,
t.first_name As first_name,
p.name As

ОСНОВНЫЕ ОПЕРАЦИИ РЕЛЯЦИОННОЙ АЛГЕБРЫ Соединение SELECT t.last_name As last_name, t.first_name As first_name,
position_name
FROM my_teacher t
LEFT OUTER JOIN teacher_position p ON (t.position_id = p.id)

SELECT
t.last_name As last_name,
t.first_name As first_name,
p.name As position_name
FROM my_teacher t
RIGHT OUTER JOIN teacher_position p ON (t.position_id = p.id)

Внешнее соединение
OUTER JOIN

LEFT JOIN

RIGHT JOIN

SELECT
t.last_name As last_name,
t.first_name As first_name,
p.name As position_name
FROM my_teacher t
FULL OUTER JOIN teacher_position p ON (t.position_id = p.id)

FULL JOIN

Слайд 18

ОСНОВНЫЕ ОПЕРАЦИИ РЕЛЯЦИОННОЙ АЛГЕБРЫ

Деление

Таблица 1. Преподаватели

3. Преподаватели,
которые сразу читают два предмета

Таблица

ОСНОВНЫЕ ОПЕРАЦИИ РЕЛЯЦИОННОЙ АЛГЕБРЫ Деление Таблица 1. Преподаватели 3. Преподаватели, которые сразу
2. Дисциплины,
которые хочу посетить

Напомню о чем тема

Слайд 19

ОСНОВНЫЕ ОПЕРАЦИИ РЕЛЯЦИОННОЙ АЛГЕБРЫ

Деление

Немного об агрегатных функциях

АГРЕГАТНЫЕ ФУНКЦИИ
COUNT, SUM, AVG, MIN, MAX

SELECT

ОСНОВНЫЕ ОПЕРАЦИИ РЕЛЯЦИОННОЙ АЛГЕБРЫ Деление Немного об агрегатных функциях АГРЕГАТНЫЕ ФУНКЦИИ COUNT,
COUNT(id)
FROM my_teacher

Сравните

SELECT COUNT(position_id)
FROM my_teacher

Считает записи с непустым атрибутом

SELECT SUM(id)
FROM my_teacher

SELECT AVG(id)
FROM my_teacher

SELECT MIN(id)
FROM my_teacher

Мат. операция по столбцу

SELECT
position_id,
COUNT(*) As n
FROM my_teacher
GROUP BY position_id

SELECT
teacher As name,
Count(*) As n
FROM gd_teacher_subject
GROUP BY teacher
HAVING COUNT(*) = 1

Группировки

Слайд 20

ОСНОВНЫЕ ОПЕРАЦИИ РЕЛЯЦИОННОЙ АЛГЕБРЫ

Деление

SELECT
teacher,
subject
FROM gd_teacher_subject

SELECT
subject
FROM my_favorite_subject

Делимое

Делитель

SELECT

ОСНОВНЫЕ ОПЕРАЦИИ РЕЛЯЦИОННОЙ АЛГЕБРЫ Деление SELECT teacher, subject FROM gd_teacher_subject SELECT subject
teacher
FROM gd_teacher_subject all_teachers,
my_favorite_subject my_subjects,
(SELECT COUNT(*) n
FROM my_favorite_subject) v_subject_count
WHERE all_teachers.subject = my_subjects.subject
GROUP BY teacher, v_subject_count.n
HAVING COUNT(*) = v_subject_count.n

SELECT teacher
FROM gd_teacher_subject all_teachers,
my_favorite_subject my_subjects
WHERE all_teachers.subject = my_subjects.subject
GROUP BY teacher
HAVING COUNT(*) = 2

Частное

Слайд 21

ОСНОВНЫЕ ОПЕРАЦИИ РЕЛЯЦИОННОЙ АЛГЕБРЫ

Задачи для самостоятельного решения

1. Найдите все города на букву

ОСНОВНЫЕ ОПЕРАЦИИ РЕЛЯЦИОННОЙ АЛГЕБРЫ Задачи для самостоятельного решения 1. Найдите все города
“К” в таблице my_city

2. Найдите город из 4 букв в таблице my_city (не использовать функцию длины)

3. Найдите город в названии, которого две буквы «о» в таблице my_city

4. Выведите город с наименьшим населением в 2000 году, а затем в 2010.
Используя таблицы: my_city, city_population

Проверим, что отложилось ☺