Язык запросов SQL

Содержание

Слайд 2

SQL – Structured Query Language

SQL – это структурированный язык запросов к реляционным

SQL – Structured Query Language SQL – это структурированный язык запросов к
базам данных (БД).
SQL – декларативный язык, основанный на операциях реляционной алгебры.
Стандарты SQL, определённые Американским национальным институтом стандартов (ANSI):
SQL-1 (SQL/89) – первый вариант стандарта.
SQL-2 (SQL/92) – основной расширенный стандарт.
SQL-3 (SQL/1999, SQL/2003) – относится к объектно-реляционной модели данных.
Подмножества языка SQL:
DDL (Data Definition Language) – команды создания/изменения/удаления объектов базы данных (create/alter/drop);
DML (Data Manipulation Language) – команды добавления/модификации/удаления данных (insert/update/delete), а также команда извлечения данных select;
DCL (Data Control Language) – команды управления данными (установка/снятие ограничений целостности). Входит в подмножество DDL.

Слайд 3

Команды DDL

CREATE – создание объекта.
ALTER – изменения структуры объекта.
DROP – удаление объекта.
Общий

Команды DDL CREATE – создание объекта. ALTER – изменения структуры объекта. DROP
вид синтаксиса команд DDL:
create
alter тип_объекта имя_объекта [параметры];
drop

Слайд 4

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

CREATE TABLE [имя_схемы.]имя_таблицы
( имя_поля тип_данных [(размер)] [NOT NULL]
[DEFAULT выражение]
[ограничения_целостности_поля…]
.,..
[,

Создание таблиц CREATE TABLE [имя_схемы.]имя_таблицы ( имя_поля тип_данных [(размер)] [NOT NULL] [DEFAULT
ограничения_целостности_таблицы .,..]
)
[ параметры ];
ограничения_целостности (ОЦ):
[CONSTRAINT имя_ОЦ ] название_ОЦ [параметры]

Слайд 5

Типы данных

Символьные типы:
CHAR [(длина)] – строка фиксированной длины.
Длина по умолчанию – 1,

Типы данных Символьные типы: CHAR [(длина)] – строка фиксированной длины. Длина по
максимальная длина 2000 б.
Строка дописывается до указанной длины пробелами.
VARCHAR2 (длина) – строка переменной длины.
Максимальная длина 4000 б. Хранятся только значащие символы.
Числовой тип:
NUMBER [(точность[, масштаб])] – используется для представления
чисел с заданной точностью.
Точность по умолчанию 38, масштаб по умолчанию – 0.
number(4) – числа от -999 до 9999
number(8,2) – числа от -99999.99 до 999999.99
DATE – дата и время с точностью до секунды. Занимает 7 байт.
sysdate – функция получения текущих даты и времени.
Тип date поддерживает арифметику дат:
sysdate+1 – завтра
(дата1 – дата2) – количество дней, прошедших между двумя датами
(sysdate – 0.5) – 12 часов назад

Слайд 6

Подмножество команд DML

INSERT – добавление строк в таблицу.
Добавляет одну или несколько строк

Подмножество команд DML INSERT – добавление строк в таблицу. Добавляет одну или
в указанную таблицу.
UPDATE – изменение данных.
Изменяет значения одного или нескольких полей в записях указанной таблицы.
Можно указать условие, по которому выбираются обновляемые строки.
Если условие не указано, обновляются все строки таблицы.
Если ни одна строка не удовлетворяет условию, ни одна строка не будет обновлена.
DELETE – удаление строк из таблицы.
Удаляет одну или несколько строк из таблицы.
Можно указать условие, по которому выбираются удаляемые строки.
Если условие не указано, удаляются все строки таблицы.
Если ни одна строка не удовлетворяет условию, ни одна строка не будет удалена.

Слайд 7

Добавление данных

INSERT – добавление строк в таблицу:
INSERT INTO имя_таблицы [(список_полей_таблицы)]
{ VALUES

Добавление данных INSERT – добавление строк в таблицу: INSERT INTO имя_таблицы [(список_полей_таблицы)]
(список_выражений) | запрос };
Примеры:
-- Добавить в таблицу "Отделы" новую запись (все поля):
insert into depart
values(7, 'Договорной отдел');
-- Добавить в таблицу "Сотрудники" новую запись (не все поля):
insert into emp (tabno, name, born, gender, depno, passport, pass_date_pass_get,
post, salary, phone)
values( 301, 'САВИН АНДРЕЙ ПАВЛОВИЧ', to_date('11.07.1969', 'dd.mm.yyyy'),
'М', 5, '4405092876', to_date('15.02.1999', 'dd.mm.yyyy'),
'ОВД "Митино" г.Москвы', 'программист', 38050, '121-34-11');
Замечание: значение по умолчанию используется только тогда, когда значение поля не вводится в явном виде.

Слайд 8

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

UPDATE – изменение данных:
UPDATE имя_таблицы
SET имя_поля1 = выражение1 [, имя_поля2

Изменение данных UPDATE – изменение данных: UPDATE имя_таблицы SET имя_поля1 = выражение1
= выражение2,…]
[WHERE условие];
Примеры:
-- Изменить статус сотрудника Бобкова Л.П., табельный номер 74, по отношению к проекту 30."Система автоматизированного управления предприятием":
update job
set rel = 'консультант'
where tabno = 74 and pro = 30;
-- Перевести сотрудника Жаринова А.В., табельный номер 68, на должность ведущего программиста и повысить оклад на три тысячи рублей:
update emp
set post = 'ведущий программист', salary = salary+3000
where tabno = 68;

Слайд 9

Удаление данных

DELETE – удаление строк из таблицы:
DELETE FROM имя_таблицы
[ WHERE условие ];
Примеры.
--

Удаление данных DELETE – удаление строк из таблицы: DELETE FROM имя_таблицы [
Удалить сведения о том, что сотрудник Афонасьев В.Н., табельный номер 147, участвует в проектах:
delete from job
where tabno=147;
-- Удалить сведения о сотруднике Афонасьеве В.Н., табельный номер 147:
delete from emp
where tabno = 147;
Замечание: отменить удаление данных можно командой
ROLLBACK;

Слайд 10

Язык запросов SQL. Команда SELECT

Язык запросов SQL. Команда SELECT

Слайд 11

Команда SELECT – выборка данных

Общий синтаксис:
SELECT [{ ALL | DISTINCT }] {

Команда SELECT – выборка данных Общий синтаксис: SELECT [{ ALL | DISTINCT
список_вывода | * }
FROM имя_таблицы1 [ алиас1 ] [, имя_таблицы2 [ алиас2 ].,..]
[ WHERE условие_отбора_записей ]
[ GROUP BY { имя_поля | выражение }.,.. ]
[ HAVING условие_отбора_групп ]
[ UNION [ALL] SELECT …]
[ ORDER BY имя_поля1 | целое [ ASC | DESC ]
[, имя_поля2 | целое [ ASC | DESC ].,..]];
Примеры:
select * from departs;
select name, post from emp;

Слайд 12

Формирование списка вывода (проекция)

Общий синтаксис списка вывода:
[{all | distinct}] { * |

Формирование списка вывода (проекция) Общий синтаксис списка вывода: [{all | distinct}] {
выражение1 [алиас1] [, выражение2 [алиас2] .,..]}
Список ввода находится между ключевыми словами SELECT и FROM.
Вывести все поля всех записей из таблицы Проекты (Project):
select * from project;
Вывести список сотрудников с указанием их должности и № отдела:
select depno, name, post
from emp;
Вывести список сотрудников с указанием их должности и зарплаты:
select name 'ФИО', post 'Должность', salary*0.87 'Зарплата'
from emp;

Слайд 13

Формирование списка вывода (проекция)

1. select post, salary
from emp;
2. select DISTINCT post, salary
from

Формирование списка вывода (проекция) 1. select post, salary from emp; 2. select
emp;
3. select DISTINCT depno, post
from emp;

select name 'ФИО', born 'Дата рождения', adr 'Адрес'
from emp;

Слайд 14

Упорядочение результата

1. select *
from Project
order by dbegin;
2. select depno, name, post
from emp
order

Упорядочение результата 1. select * from Project order by dbegin; 2. select
by depno, name; -- order by 1,2;
select name 'ФИО', post 'Должность', salary 'Зарплата'
from emp
order by 3 DESC;
select depno 'Номер отдела', post 'Должность', salary 'Зарплата'
from emp
order by 1, 3 DESC, 2;

Слайд 15

Выбор данных из таблицы (селекция)

WHERE – содержит условия выбора отдельных записей. Условие является логическим

Выбор данных из таблицы (селекция) WHERE – содержит условия выбора отдельных записей.
выражением и может принимать одно из 3-х значений:
TRUE – истина,
FALSE – ложь,
NULL – неизвестное, неопределённое значение (интерпретируется как ложь).
Условие формируется путём применения различных операторов и предикатов. Операторы сравнения:
= равно, <>, != не равно, > больше,
>= больше или равно, <= меньше или равно, < меньше.
Вывести список сотрудников 2-го отдела:
select * from emp
where depno = 2;

Слайд 16

Логические операторы

Для формирования условий используются следующие логические операторы:
AND – логическое произведение (И),
OR

Логические операторы Для формирования условий используются следующие логические операторы: AND – логическое
– логическая сумма (ИЛИ),
NOT – отрицание (НЕ).
Операция И: Операция ИЛИ:

Операция НЕ:

Слайд 17

Выбор данных из таблицы по условию

1. select * from emp
where depno = 2

Выбор данных из таблицы по условию 1. select * from emp where
AND salary > 3000 ;
2. select * from emp
where born > '31/12/1979' AND sex = 'м';
select * from emp
where depno=2 OR depno = 5;
select * from emp
where (depno=2 OR depno = 5) AND salary >= 3000 ;
select * from emp
where NOT (depno=2 OR depno = 5);

Слайд 18

Выбор данных из таблицы по условию

select *
from project
where dend >

Выбор данных из таблицы по условию select * from project where dend
sysdate AND cost > 2000000;

select *
from emp
where post = 'инженер' OR post = 'ведущий инженер' ;

Задание 3:

select *
from emp
where post = 'охранник' AND salary > 2000;

Задание 1

Задание 2

Слайд 19

Предикаты формирования условия

Предикат вхождения в список значений:
имя_поля IN ( значение1 [, значение2,...

Предикаты формирования условия Предикат вхождения в список значений: имя_поля IN ( значение1
] )
выражение IN ( значение1 [, значение2,... ] )
Примеры:
select *
from emp
where depno IN ( 5, 8, 9 ) ;
select *
from emp
where post IN ( 'инженер', 'ведущий инженер' );

Слайд 20

Предикаты формирования условия

Предикат вхождения в диапазон:
имя_поля BETWEEN минимальное_значение AND максимальное_значение
выражение

Предикаты формирования условия Предикат вхождения в диапазон: имя_поля BETWEEN минимальное_значение AND максимальное_значение
BETWEEN минимальное_значение AND максимальное_значение
Минимальное значение должно быть меньше либо равно максимальному.
Примеры:
select *
from emp
where depno BETWEEN 2 AND 5 ;
select *
from emp
where salary*0.87 BETWEEN 2000 AND 3000;

Слайд 21

Предикаты формирования условия

Предикат поиска подстроки: имя_поля LIKE 'шаблон'
Этот предикат применяется только к

Предикаты формирования условия Предикат поиска подстроки: имя_поля LIKE 'шаблон' Этот предикат применяется
полям типа CHAR и VARCHAR. Возможно использование шаблонов:
'_' – один любой символ,
'%' – произвольное количество любых символов (в т.ч., ни одного).
Примеры:
1. select * from emp
where post LIKE '%экономист%' ;
2. select * from emp
where post LIKE 'инженер_%' ;

Слайд 22

Предикаты формирования условия

Предикат поиска неопределенного значения:
значение IS [NOT] NULL
Если значения является

Предикаты формирования условия Предикат поиска неопределенного значения: значение IS [NOT] NULL Если
неопределенным (NULL), то предикат IS NULL выдаст истину, а предикат IS NOT NULL – ложь.
Примеры:
select *
from emp
where phone IS NULL ;
select *
from project
where cost IS NOT NULL ;

Слайд 23

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

Задание 1:

select *
from emp
where name LIKE '%ЮРИЙ%';

Задание 3:

select *

Использование предикатов Задание 1: select * from emp where name LIKE '%ЮРИЙ%';

from emp
where post LIKE 'нач%отдел%';

Задание 2:

select *
from project
where cost BETWEEN 1000000 AND 2000000;

Слайд 24

Агрегирующие функции

COUNT – подсчёт количества строк (значений). Применяется к записям и полям любого типа.

Агрегирующие функции COUNT – подсчёт количества строк (значений). Применяется к записям и
Имеет 3 формата вызова:
count (*) – количество строк результата;
count (имя_поля) – количество значений указанного поля, не являющихся NULL-значениями.
count (distinct имя_поля) – количество разных не-NULL значений
указанного поля.
MAX, MIN 
SUM 
AVG 

Слайд 25

Примеры использования функции COUNT

1. select count(*)
from emp;
2. select count( phone )
from emp;
select

Примеры использования функции COUNT 1. select count(*) from emp; 2. select count(
count (DISTINCT post)
from emp;
Задание: вывести количество сотрудников 6-го отдела.

select count(*)
from emp
where depno = 6;

Слайд 26

Примеры использования агрегирующих функций

1. select max(cost) "Максимальная цена", min(cost) "Минимальная цена"
from project;
2. select sum(salary)

Примеры использования агрегирующих функций 1. select max(cost) "Максимальная цена", min(cost) "Минимальная цена"

from emp
where depno = 8;
select avg(salary)
from emp
where sex = 'Ж';
select min(dbegin), max(dend)
from project;

Слайд 27

Группировка данных: предложение GROUP BY

Агрегирующие функции обычно используются совместно с предложением GROUP BY.

Группировка данных: предложение GROUP BY Агрегирующие функции обычно используются совместно с предложением

Например, следующая команда считает количество сотрудников по отделам:
select depno, count(*)
from emp
group by depno;

Слайд 28

Примеры использования GROUP BY

select depno, MIN(salary) minsal, MAX(salary) maxsal
from emp
group by depno;
select

Примеры использования GROUP BY select depno, MIN(salary) minsal, MAX(salary) maxsal from emp
depno, COUNT(distinct post) cnt
from emp
group by depno;
select depno, SUM(salary) allsal
from emp
group by depno;
select post, AVG(salary) avgsal
from emp
group by post;

Слайд 29

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

Правило использования GROUP BY :
В списке вывода при использовании GROUP BY могут

Использование GROUP BY Правило использования GROUP BY : В списке вывода при
быть указаны только функции агрегирования, константы и поля, перечисленные в GROUP BY.
Например, нельзя получить сведения о том, у каких сотрудников самая высокая зарплата в своём отделе с помощью такого запроса:
select depno, name, max(salary) as max_sal
from emp
group by depno;
Этот запрос синтаксически неверен!

Слайд 30

Группировка по нескольким полям

select depno, post, count(*), sum(salary)
from emp
group by depno, post;
2. select

Группировка по нескольким полям select depno, post, count(*), sum(salary) from emp group
depno, sex, count(*)
from emp
group by depno, sex;
Задание: вывести информацию о зарплате и количестве сотрудников, которые получают такую зарплату.

select salary, count(*)
from emp
group by salary;

Слайд 31

Использование фразы HAVING

Если необходимо вывести не все записи, полученные в результате группировки

Использование фразы HAVING Если необходимо вывести не все записи, полученные в результате
(GROUP BY), то условие на группы можно указать во фразе HAVING.
Пример:
select depno, count(*), 'человек(а)'
from emp
group by depno
having count(*)>5;
Правило: нельзя указывать агрегирующие функции в части WHERE –
это синтаксическая ошибка!
Задание: вывести список отделов, в которых средняя зарплата больше 3000

select depno, avg(salary)
from emp
group by depno
having avg(salary) > 3000;

Слайд 32

Подзапросы

Подзапрос – это запрос SELECT, расположенный внутри другой команды.
Подзапросы можно разделить

Подзапросы Подзапрос – это запрос SELECT, расположенный внутри другой команды. Подзапросы можно
на следующие группы в зависимости от возвращаемых результатов:
скалярные
векторные
табличные
Подзапросы бывают:
некоррелированные – не содержат ссылки на запрос верхнего уровня; вычисляются один раз для запроса верхнего уровня;
коррелированные – содержат условия, зависящие от значений полей в основном запросе; вычисляются для каждой строки запроса верхнего уровня.

Слайд 33

Пример БД: проектная организация

Departs – отделы, Project – проекты,
Emp – сотрудники, Job – участие

Пример БД: проектная организация Departs – отделы, Project – проекты, Emp –
в проектах.

Слайд 34

Данные таблицы Emp (сотрудники)

Данные таблицы Emp (сотрудники)

Слайд 35

Расположение подзапросов в командах DML

В команде INSERT:
Вместо VALUES, например, добавление данных из

Расположение подзапросов в командах DML В команде INSERT: Вместо VALUES, например, добавление
одной таблицы в другую:
insert into emp select * from new_emp;
В команде UPDATE:
в части WHERE для вычисления условий, например, повышение зарплаты на 10% всем участникам проектов:
update emp set salary = salary*1.1
where tabNo IN (select tabNo from job);
в части SET для вычисления значений полей, например, повышение зарплаты на 10% за каждое участие сотрудника в проекте:
update emp e set salary = salary*(1+(select count(*)/10 from job j
where j.tabNo = e.tabNo) );
В команде DELETE:
в части WHERE для вычисления условий, например, удаление сведений об участии в закончившихся проектах:
delete from job
where pro IN (select pro from project where dend < sysdate);

Слайд 36

Расположение подзапросов в команде select

Чаще всего подзапрос располагается в части WHERE.
Пример 1:
select

Расположение подзапросов в команде select Чаще всего подзапрос располагается в части WHERE.
* from emp
where salary > (select avg(salary) from emp);

Пример 2. :
select * from emp
where salary > ALL (select avg(salary) from emp group by depno);

Слайд 37

Примеры использования подзапросов в части WHERE

Выдать список сотрудников, имеющих детей:
а) с помощью

Примеры использования подзапросов в части WHERE Выдать список сотрудников, имеющих детей: а)
операции соединения таблиц:
SELECT e.*
FROM emp e, children c
WHERE e.tabno=c.tabno;
б) с помощью некоррелированного векторного подзапроса:
SELECT *
FROM emp
WHERE tabno IN (SELECT tabno FROM children);
в) с помощью коррелированного табличного подзапроса:
SELECT *
FROM emp e
WHERE EXISTS (SELECT * FROM children c
WHERE e.tabno=c.tabno);

Слайд 38

Расположение подзапросов в команде select

Подзапрос в части FROM.
Например,
select * from emp

Расположение подзапросов в команде select Подзапрос в части FROM. Например, select *
e
where salary > (select avg(salary) from emp m
where m.depno = e.depno);
Это работает долго, т.к. коррелированный подзапрос вычисляется для каждой
строки основного запроса. Можно ускорить выполнение данного запроса:
select *
from emp e,
(select depno, avg(salary) sal
from emp
group by depno) m -- подзапрос вычисляется 1 раз
where m.depno = e.depno
and salary > sal;

Слайд 39

Расположение подзапросов в команде select

Подзапрос в части HAVING.
Например,
select depno, avg(salary) sal

Расположение подзапросов в команде select Подзапрос в части HAVING. Например, select depno,

from emp
group by depno
having avg(salary) < (select avg(salary) from emp);
Подзапрос в части SELECT.
Например,
select depno, name,
(select count(*) from job j where j.tabno = e.tabno) cnt
from emp e;
Этот запрос выведет даже тех сотрудников, которые не участвуют в проектах
(для них cnt будет равен 0).

Слайд 40

Представления
Назначение представлений:
Хранение сложных запросов.
Представление данных в виде, удобном пользователю.
Сокрытие конфиденциальной информации.
Предоставление дифференцированного

Представления Назначение представлений: Хранение сложных запросов. Представление данных в виде, удобном пользователю.
доступа к данным.
Создание представления выполняется командой CREATE VIEW:
CREATE [ OR REPLACE ] VIEW <имя представления>
[ (<список имён столбцов>) ]
AS <запрос> [ WITH CHECK OPTION ];
Запрос (команда SELECT), на основании которого создаётся представление, называется определяющим запросом.

Представление (view, обзор) – это хранимый запрос, создаваемый на основе команды SELECT.

Слайд 41

Представления: пример

CREATE VIEW emp_child(depno, name, child, sex, born)
AS SELECT e.depno, e.name, c.name,

Представления: пример CREATE VIEW emp_child(depno, name, child, sex, born) AS SELECT e.depno,
c.sex, c.born
FROM emp e, children c
WHERE e.tabno = c.tabno;
SELECT * FROM emp_child;

Слайд 42

Представления: пример

CREATE VIEW emp2
AS SELECT *
FROM emp
WHERE depno = 2;
SELECT * FROM

Представления: пример CREATE VIEW emp2 AS SELECT * FROM emp WHERE depno
emp2;
Имя файла: Язык-запросов-SQL.pptx
Количество просмотров: 28
Количество скачиваний: 0