SQL. Structured Query Language. Структурированный язык запросов

Содержание

Слайд 2

Группы операторов языка SQL:

DDL (Язык Определения Данных);
DML (Язык Манипулирования Данными);
DCL (Язык Управления

Группы операторов языка SQL: DDL (Язык Определения Данных); DML (Язык Манипулирования Данными); DCL (Язык Управления Данными).
Данными).

Слайд 3

SQL DDL (Язык Определения Данных)

Основные операторы
CREATE [OPTIONS] – создает объекты;
ALTER [OPTIONS] –SQL DDL (Язык Определения Данных) Основные операторы CREATE [OPTIONS] – создает объекты;
изменяет объекты;
DROP [OPTIONS] – удаляет объекты;

Слайд 4

DML (Язык Манипулирования Данными)
• SELECT – оператор выборки;
• INSERT – оператор вставки данных;

DML (Язык Манипулирования Данными) • SELECT – оператор выборки; • INSERT –
UPDATE - оператор изменения данных;
• DELETE – оператор удаления данных;
• TRUNCATE - оператор удаления данных;
• COMMIT – зафиксирует транзакцию;
• ROLLBACK – откат транзакции.

Слайд 5

DCL (Язык Управления Данными)

операторы, которые управляют правами пользователя:
• GRANT - используется для

DCL (Язык Управления Данными) операторы, которые управляют правами пользователя: • GRANT -
назначения привилегий пользователям.
• REVOKE - осуществляется отмена привилегий.

Слайд 6

POSTGRESQL

POSTGRESQL

Слайд 7

История

СУБД POSTGRES - разрабатывался под руководством Майкла Стоунбрейкера (Michael Stonebraker), профессора Калифорнийского

История СУБД POSTGRES - разрабатывался под руководством Майкла Стоунбрейкера (Michael Stonebraker), профессора
университета в Беркли.
До этого Майкл Стоунбрейкер уже возглавлял разработку INGRES : POSTGRES возник, как результат продолжения работы.
Первая версия СУБД была выпущена в 1989 году.
В 1994 году Беркли Эндрю и Джоли Чену взялись за его дальнейшее развитие. Проект получил название Postgres95.
К 1996 году получило новое развитие, связь с языком SQL и получило название PostgreSQL.

Слайд 8

Установка PostgreSQL

Скачайте с сайта:
www.postgrespro.ru/
postgresql-13.2-1-windows-x64
PostgreSQL_9.6.12_64bit_Setup – установочник PostgreSQL .
PgAdmin3_1.22.1_X86bit_Setup — графическое средство для

Установка PostgreSQL Скачайте с сайта: www.postgrespro.ru/ postgresql-13.2-1-windows-x64 PostgreSQL_9.6.12_64bit_Setup – установочник PostgreSQL .
PostgreSQL. Программа упрощает основные задачи администрирования, отображает объекты баз данных, позволяет выполнять запросы SQL.

Слайд 9

Приглашение имеет вид : postgres=#.
«Postgres» здесь — имя базы данных, к которой

Приглашение имеет вид : postgres=#. «Postgres» здесь — имя базы данных, к
вы сейчас подключены. Один сервер
PostgreSQL может одновременно обслуживать несколько баз данных, но одновременно вы работаете только с одной из них.
При неправильным отображением русских букв в терминале :
Вести команду chcp 1251.
В свойствах окна измените на «Lucida Console».

Слайд 10

Полезные консольные команды psql

\? Справка по командам psql.
\h Справка по SQL: список

Полезные консольные команды psql \? Справка по командам psql. \h Справка по
доступных команд или синтаксис конкретной команды.
\x Переключает обычный табличный вывод(столбцы и строки) на расширенный (каждый столбец на отдельной строке) и обратно. Удобно для просмотра нескольких «широких» строк.
\l Список баз данных.
\dt Список таблиц.
\q Завершить сеанс работы.

Слайд 11

Создание новой базы данных с именем test

postgres=# CREATE DATABASE test;
Переключение на созданную

Создание новой базы данных с именем test postgres=# CREATE DATABASE test; Переключение
базу:
postgres=# \c test
приглашение сменилось на test=#
test=# \? – полный список команд

Слайд 12

Типы данных

integer — целые числа;
text — текстовые строки;
boolean — логический тип, принимающий

Типы данных integer — целые числа; text — текстовые строки; boolean —
значения true (истина) или false (ложь);
Date - дата.
неопределенное значение null «значение неизвестно» или «значение не задано».
полный список типов данных : postgrespro.ru/doc/datatype.html

Слайд 13

Схема данных

Схема данных

Слайд 14

Пример создания таблицу дисциплин

CREATE TABLE courses(
c_no text PRIMARY KEY,
title text,
hours integer

Пример создания таблицу дисциплин CREATE TABLE courses( c_no text PRIMARY KEY, title
);
Полный список ограничений целостности:
postgrespro.ru/doc/ddl-constraints.html

Слайд 15

Наполнение таблиц

INSERT INTO courses(c_no, title,hours)
VALUES ('CS301', 'Базы данных', 30),
('CS305', 'Сети ЭВМ',

Наполнение таблиц INSERT INTO courses(c_no, title,hours) VALUES ('CS301', 'Базы данных', 30), ('CS305', 'Сети ЭВМ', 60);
60);

Слайд 16

Создание таблицы students

test=# CREATE TABLE students (
s_id integer PRIMARY KEY,
name text,
start_year

Создание таблицы students test=# CREATE TABLE students ( s_id integer PRIMARY KEY,
integer );
Заполнение:
test=# INSERT INTO students(s_id, name, start_year)
VALUES (1451, 'Анна', 2014),
(1432, 'Виктор', 2014),
(1556, 'Нина', 2015);

Слайд 17

Создание внешнего ключа

test=# CREATE TABLE exams(
s_id integer REFERENCES students(s_id),
c_no text REFERENCES courses(c_no),
score

Создание внешнего ключа test=# CREATE TABLE exams( s_id integer REFERENCES students(s_id), c_no
integer,
CONSTRAINT pk PRIMARY KEY(s_id, c_no)
);
test=# INSERT INTO exams(s_id, c_no, score)
VALUES (1451, 'CS301', 5),
(1556, 'CS301', 5),
(1451, 'CS305', 5),
(1432, 'CS305', 4);

Слайд 18

Общая форма команды CREATE TABLE

Общая форма команды CREATE TABLE

Слайд 19

Создание ограничений

NOT NULL – (NULL - неопределенность ) –не содержит неопределенное значение.
CHECK

Создание ограничений NOT NULL – (NULL - неопределенность ) –не содержит неопределенное
задаётся выражение, возвращающее булевский результат, по которому определяется, будет ли успешна операция добавления или изменения для конкретного значения.
CREATE TABLE aircrafts
( aircraft_code char( 3 ) NOT NULL,
model text NOT NULL,
range integer NOT NULL,
CHECK ( range > 0 ),
PRIMARY KEY ( aircraft_code ));
CREATE TABLE progress
( ...
mark numeric( 1 ),
CONSTRAINT valid_mark CHECK ( mark >= 3 AND mark <= 5 ),
...
);

Слайд 20

Ограничение уникальности UNIQUE – все значения столбца должны быть уникальными.
CREATE TABLE students
(

Ограничение уникальности UNIQUE – все значения столбца должны быть уникальными. CREATE TABLE
record_book numeric( 5 ) UNIQUE,
... );
CREATE TABLE students
( record_book numeric( 5 ),
name text NOT NULL,
...
CONSTRAINT unique_record_book UNIQUE ( record_book ),
…);

Слайд 21

Первичный ключ.
CREATE TABLE students
( record_book numeric( 5 ) PRIMARY KEY,
…);
CREATE TABLE students
(

Первичный ключ. CREATE TABLE students ( record_book numeric( 5 ) PRIMARY KEY,
record_book numeric( 5 ),
...
PRIMARY KEY ( record_book ));
Внешний ключ.
CREATE TABLE progress
( record_book numeric( 5 ),
...
FOREIGN KEY ( record_book )
REFERENCES students ( record_book )
);

Слайд 22

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

DROP TABLE имя таблицы;

Удаление таблицы DROP TABLE имя таблицы;

Слайд 23

Выборка данных. Простые запросы.Оператор SELECT

SELECT имя_поля1, имя_поля2 ...
FROM имя_таблицы;
Вывод два столбца из

Выборка данных. Простые запросы.Оператор SELECT SELECT имя_поля1, имя_поля2 ... FROM имя_таблицы; Вывод
таблицы courses:
SELECT title AS course_title, hours
FROM courses;
Конструкция AS позволяет переименовать столбец, если это необходимо.

Слайд 24

Оператор SELECT

Чтобы вывести все столбцы, необходимо указать символ звездочки:
SELECT * FROM courses;
Чтобы

Оператор SELECT Чтобы вывести все столбцы, необходимо указать символ звездочки: SELECT *
результирующей строке убрать дублирующие строки, после select надо добавить слово distinct:
SELECT DISTINCT start_year FROM students;
Подробно в документации:

Слайд 25

Заданий условий

Условие фильтрации записывается во фразе WHERE:
SELECT * FROM courses
WHERE

Заданий условий Условие фильтрации записывается во фразе WHERE: SELECT * FROM courses
hours > 45;
Условие должно иметь логический тип. Оно может содержать отношения =, <> (или !=), >, >=, <, <=, Like (NOT Like) .
может объединять опреаторов с and, or, not и круглых скобок — как в обычных языках программирования.
Можно использовать шаблоны %, _.
Between …. And….
Примеры
SELECT * FROM aircrafts WHERE model LIKE 'Airbus%';
SELECT * FROM aircrafts WHERE range BETWEEN 3000 AND 6000;
SELECT model, aircraft_code, range FROM aircrafts
WHERE range >= 4000 AND range <= 6000;

Слайд 26

Удаление строки DELETE

DELETE FROM Имя_таблицы
WHERE условие;
Примеры.
DELETE FROM aircrafts WHERE aircraft_code =

Удаление строки DELETE DELETE FROM Имя_таблицы WHERE условие; Примеры. DELETE FROM aircrafts
'CN1';
DELETE FROM aircrafts WHERE range > 10000 OR range < 3000;
DELETE FROM aircrafts;

Слайд 27

Создание вычисляемых полей

SELECT model, range, range / 1.609 AS miles FROM aircrafts;

Создание вычисляемых полей SELECT model, range, range / 1.609 AS miles FROM aircrafts;

Слайд 28

Упорядочение данных ORDER BY

По возрастанию (по умолчанию):
SELECT * FROM aircrafts ORDER BY

Упорядочение данных ORDER BY По возрастанию (по умолчанию): SELECT * FROM aircrafts
range;
По убыванию DESC :
SELECT * FROM aircrafts ORDER BY range DESC;
Ограничение число строк (LIMIT) :
SELECT airport_name, city, longitude
FROM airports
ORDER BY longitude DESC
LIMIT 3;
Для пропуска строк (OFFSET):
SELECT airport_name, city, longitude
FROM airports
ORDER BY longitude DESC
LIMIT 3 OFFSET 3;

Слайд 29

Условные выражения

CASE WHEN condition THEN result
[WHEN ...]
[ELSE result]
END;
SELECT model, range,
CASE

Условные выражения CASE WHEN condition THEN result [WHEN ...] [ELSE result] END;
WHEN range < 2000 THEN ‘Ближнемагистральный'
WHEN range < 5000 THEN ‘Среднемагистральный‘
ELSE ' Дальнемагистральный '
END AS type
FROM aircrafts
ORDER BY model;

Слайд 30

model | range | type
---------------------+-------+---------------------
Airbus A319-100 | 6700 | Дальнемагистральный
Airbus A320-200 |

model | range | type ---------------------+-------+--------------------- Airbus A319-100 | 6700 | Дальнемагистральный
5700 | Дальнемагистральный
Airbus A321-200 | 5600 | Дальнемагистральный
Boeing 737-300 | 4200 | Среднемагистральный
Boeing 767-300 | 7900 | Дальнемагистральный
Boeing 777-300 | 11100 | Дальнемагистральный
Bombardier CRJ-200 | 2700 | Среднемагистральный
Cessna 208 Caravan | 1200 | Ближнемагистральный

Слайд 31

Группировка данных GROUP BY

Группировка данных – это объединение записей в соответствии со

Группировка данных GROUP BY Группировка данных – это объединение записей в соответствии
значениями некоторого заданного поля.
Для группировки результатов выборки совместно с оператором SELECT используется предложение GROUP BY. Данное предложение должно следовать после предложение WHERE, но перед предложением ORDER BY. Как правило, совместно с предложением GROUP BY используются функции агрегирования.

Слайд 32

Пример 1.

Надо подсчитать количество покупок товаров, сделанных каждым из клиентов, используется следующий

Пример 1. Надо подсчитать количество покупок товаров, сделанных каждым из клиентов, используется
запрос:
SELECT Код_клиента,
SUM(Продано) AS Количество_покупок,
FROM Продажи
GROUP BY Код_клиента;

Слайд 33

Пример 2

SELECT aircraft_code, fare_conditions, count( * )
FROM seats
GROUP BY aircraft_code, fare_conditions
ORDER BY

Пример 2 SELECT aircraft_code, fare_conditions, count( * ) FROM seats GROUP BY
aircraft_code, fare_conditions;
aircraft_code | fare_conditions | count
---------------+-----------------+-------
319 | Business | 20
319 | Economy | 96
320 | Business | 20
320 | Economy | 120

Слайд 34

HAVING

Чтобы сузить множество группированных записей
SELECT departure_city, count( * )
FROM routes
GROUP BY departure_city
HAVING

HAVING Чтобы сузить множество группированных записей SELECT departure_city, count( * ) FROM
count( * ) >= 15
ORDER BY count DESC;

Слайд 35

СОЕДИНЕНИЯ

Соединение двух таблиц на основе равенства значений атрибутов
SELECT a.aircraft_code, a.model, s.seat_no, s.fare_conditions
FROM

СОЕДИНЕНИЯ Соединение двух таблиц на основе равенства значений атрибутов SELECT a.aircraft_code, a.model,
seats AS s, aircrafts AS a
WHERE s.aircraft_code = a.aircraft_code
AND a.model ~ '^Cessna'
ORDER BY s.seat_no;
SELECT a.aircraft_code, a.model, s.seat_no, s.fare_conditions
FROM seats s
JOIN aircrafts a
ON s.aircraft_code = a.aircraft_code
WHERE a.model ~ '^Cessna'
ORDER BY s.seat_no;

Слайд 36

ВНЕШНИЕ СОЕДИНЕНИЯ

Левое внешнее соединение(LEFT OUTER JOIN )
SELECT a.aircraft_code AS a_code,
a.model, r.aircraft_code AS

ВНЕШНИЕ СОЕДИНЕНИЯ Левое внешнее соединение(LEFT OUTER JOIN ) SELECT a.aircraft_code AS a_code,
r_code,
count( r.aircraft_code ) AS num_routes
FROM aircrafts a
LEFT OUTER JOIN routes r ON r.aircraft_code = a.aircraft_code
GROUP BY 1, 2, 3
ORDER BY 4 DESC;
Правое внешнее соединение(RIGHT OUTER JOIN)
Полное внешнее соединение(FULL OUTER JOIN)

Слайд 37

ОПЕРАЦИИ С ВЫБОРКАМИ

В SELECT предусмотрены средства выполнения операции с выборками, как множествами:
UNION-

ОПЕРАЦИИ С ВЫБОРКАМИ В SELECT предусмотрены средства выполнения операции с выборками, как
для вычисления объединения множества строк из двух выборок;
INTERSECT – для вычисления пересечения множества строк из двух выборок;
EXCERT- для вычисления разности множества строк из двух выборок;

Слайд 38

UNION

Вопрос: В какие города можно улететь: либо из Москвы, либо из Санкт-Петербурга?
SELECT

UNION Вопрос: В какие города можно улететь: либо из Москвы, либо из
arrival_city FROM routes
WHERE departure_city = ‘Москва'
UNION
SELECT arrival_city FROM routes
WHERE departure_city = ' Санкт-Петербурга '
ORDER BY arrival_city;

Слайд 39

INTERSECT

Вопрос: В какие города можно улететь: как из Москвы, так из Санкт-Петербурга?
SELECT

INTERSECT Вопрос: В какие города можно улететь: как из Москвы, так из
arrival_city FROM routes
WHERE departure_city = ‘Москва'
INTERSECT
SELECT arrival_city FROM routes
WHERE departure_city = ' Санкт-Петербурга '
ORDER BY arrival_city;

Слайд 40

EXCEPT

Вопрос: В какие города можно улететь:из Санкт-Петербурга , но нельзя из Москвы?
SELECT

EXCEPT Вопрос: В какие города можно улететь:из Санкт-Петербурга , но нельзя из
arrival_city FROM routes
WHERE departure_city = ‘Санкт-Петербурга'
EXCEPT
SELECT arrival_city FROM routes
WHERE departure_city = ' Москва'
ORDER BY arrival_city;

Слайд 41

Подзапросы

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

Подзапросы Вложенная команда select, заключенная в круглые скобки, называется подзапросом. Подзапросы могут
предложениях SELECT, FROM, WHERE и HAVING.

Слайд 42

Примеры

SELECT name,
(SELECT score
FROM exams
WHERE exams.s_id = students.s_id
AND exams.c_no = 'CS305')
FROM students;
name |

Примеры SELECT name, (SELECT score FROM exams WHERE exams.s_id = students.s_id AND
score
−−−−−−−+−−−−−−−
Анна | 5
Виктор | 4
Нина |
(3 rows)

Слайд 43

Использование подзапросов в WHERE

SELECT *
FROM exams
WHERE (SELECT start_year
FROM

Использование подзапросов в WHERE SELECT * FROM exams WHERE (SELECT start_year FROM
students
WHERE students.s_id = exams.s_id) > 2014;
s_id | c_no | score
−−−−−−+−−−−−−−+−−−−−−−
1556 | CS301 | 5

Слайд 44

SELECT name, start_year
FROM students
WHERE s_id in (SELECT s_id
FROM exams
WHERE c_no =

SELECT name, start_year FROM students WHERE s_id in (SELECT s_id FROM exams
'CS305');
name | start_year
−−−−−−−−+−−−−−−−−−−−−
Анна | 2014
Виктор | 2014

Слайд 45

SELECT name, start_year
FROM students
WHERE s_id NOT IN (SELECT s_id
FROM exams
WHERE score <

SELECT name, start_year FROM students WHERE s_id NOT IN (SELECT s_id FROM
5);
name | start_year
−−−−−−+−−−−−−−−−−−−
Анна | 2014
Нина | 2015

Слайд 46

SELECT name, start_year
FROM students
WHERE NOT EXISTS (SELECT s_id
FROM exams
WHERE exams.s_id

SELECT name, start_year FROM students WHERE NOT EXISTS (SELECT s_id FROM exams
= students.s_id AND score < 5);

Слайд 47

Изменение данных

UPDATE имя_таблицы
            SET имя_поля_1=значение_1
            [,имя_поля_2=значение_2]
            …
            [,имя_поля_N=значение_N]
            [WHERE условие];
UPDATE courses
SET hours

Изменение данных UPDATE имя_таблицы SET имя_поля_1=значение_1 [,имя_поля_2=значение_2] … [,имя_поля_N=значение_N] [WHERE условие]; UPDATE
= hours*2
WHERE c_no = 'CS301';