1 БАЗЫ ДАННЫХ Использование SQL для построения запросов. ЗАНЯТИЕ 6 ПУГАЧЁВ Ю.В. Учитель информатики Харьковская общеобразовательная школа І-ІІІ ступеней 60 Харьковского городского совета Харьковской области
2 Цель: Содержание: Ознакомится со структурированным языком запросов SQL и научиться использовать простые предикаты для обращения с запросами к базам данных. Стандарт ANSI языка SQL. Терминология. Создание запроса. Команда SELECT. Параметр WHERE. Реляционные операторы и булевые операторы.
3 Язык запросов SQL SQL 1989 SQL 1989 SQL SQL SQL SQL Стандарт SQL определен ANSI (Американским национальным институтом стандартов) и ISO (Международной организацией по стандартизации)
4 Схема взаимодействия пользователя с БД в ранних СУБД ПользовательПрограммист База данных Информационные потребности Написание и запуск программ обработки
5 Схема взаимодействия пользователя с БД через язык баз данных Пользователь Информационные потребности Интерпретация на язык машинных кодов База данных Машина вывода Язык базы данных
6 SQL DML Язык манипулирования данными Select, Insert, Update, Delete … DDL Язык определения данных Create/drop table, create/drop index, create/drop view… DCL Язык управления данными Grant, Revoke … Разделы языка SQL
7 Data, Time; Data, Time; Integer (Int) - целое; Integer (Int) - целое; Decimal (Dec) – десятичное; Decimal (Dec) – десятичное; Char(кол-во символов),Varchar(мах кол-во символов). Char(кол-во символов),Varchar(мах кол-во символов). Типы данных стандарта SQL Типы данных в СУБД Access Типы данных в СУБД Paradox
ЗАПРОС – команда, которая адресуется к Базе Данных для вывода требуемой информации из таблиц 8 SELECT перечень требуемой информации FROM имя таблицы ; SELECT City FROM S; Команда SELECT
9 Синтаксис команды SELECT SELECT * | [DISTINCT | ALL].,.. FROM { [ ].,.. [ WHERE ]} [ GROUP BY { | }.,..] [ HAVING ] [ ORDER BY { | }.,.. [ASC | DESC]] [ UNION [ALL] SELECT...]
10 SELECT SNum, SName, City, Comm FROM S; SELECT SNum, SName, City, Age, Comm FROM S; SELECT * FROM S; Запрос 1: вывести выборочно поля таблицы. Результат: Запрос 2: вывести всю информацию о служащих. Оператор * заменяет список всех полей таблицы. Вывод полей таблицы в запросе
11 SELECT DISTINCT City FROM S; SELECT * FROM S WHERE City=Харьков; Запрос 3: вывести города, в которых проживают служащие. Результат: Запрос 4: вывести всю информацию о служащих, проживающих в городе Харьков. Аргумент DISTINCT - удаляет избыточные данные. Предложение WHERE - накладывает ограничение на выборку. Результат: Аргумент DISTINCT
12 SELECT SName FROM S WHERE Comm>0.12; SELECT * FROM S WHERE NOT City=Москва AND Comm>=0.14; Запрос 5: вывести имена служащих, комиссионные которых выше 12%. Результат: Запрос 6: вывести информацию о служащих, которые не живут в городе «Москва», но имеют комиссионные не ниже 14%. Использование в предложении WHERE: реляционных операторов (=, >, =, ); булевых операторов (AND, OR, NOT). Результат: Предложение WHERE
13 SELECT SName FROM S WHERE City=Киев OR City=Москва; Запрос 7: вывести имена служащих, проживающих в Киеве или в Москве. Результат: Запрос 8: вывести всю информацию о служащих с номерами 102, 107, 111 и оператор IN (определяет набор значений для поля, которые могут попасть в результат вывода); SELECT SName FROM S WHERE City IN (Киев,Москва); SELECT * FROM S WHERE SNum IN (102, 107, 111, 112); Использование специальных операторов в WHERE
14 Запрос 9: вывести информацию о служащих с комиссионными больше 10%, но меньше 14%. Результат: оператор BETWEEN (определяет диапазон для значений поля); SELECT * FROM S WHERE Comm BETWEEN 0.12 AND 0.14; SELECT * FROM S WHERE (Comm BETWEEN 0.12 AND 0.14) AND NOT Comm IN (0.12, 0.14); SELECT * FROM S WHERE Comm>=0.12 AND Comm
15 Запрос 10: вывести информацию о служащих, проживающих в городах, начинающихся на букву М. Результат: оператор LIKE (накладывает маску на значения поля); / _ – заменяет один символ; % – 0 или несколько символов/ SELECT * FROM S WHERE City LIKE М%; Запрос 11: вывести информацию о служащих, в именах которых встречается бувка «р». SELECT * FROM S WHERE SName LIKE Р_% OR SName LIKE _%р%; оператор NULL (указывает на отсутствие значения ) Запрос 12: вывести информацию о служащих, для которых не известен возраст. SELECT * FROM S WHERE Age IS NULL; Операторы LIKE и NULL
16 SELECT Sname, City, Comm*100 FROM S; SELECT Служащий, Sname, проживает в городе, City FROM S; Запрос 13: вывести имена служащих, города их проживания и комиссионные. Результат: Запрос 14: вывести информацию о служащих с пояснениями. использование скалярных выражений использование текста в выводе Результат: Формирование вывода запроса
17 SELECT * FROM S ORDER BY Comm ASC; Запрос 15: вывести информацию о служащих, упорядочив ее по возрастанию комиссионных. Результат: Запрос 16: вывести информацию о служащих города Киев в порядке убывания возраста. - ASC – по возрастанию (используется по умолчанию); - DESC – по убыванию. SELECT * FROM S ORDER BY Comm; SELECT * FROM S WHERE City=Киев ORDER BY Age DESC; SELECT * FROM S WHERE City=Киев ORDER BY 4 DESC; Упорядочивание результатов вывода /ORDER BY/
18 - COUNT – считает количество строк или не-NULL значений поля; SUM – выдает арифметическую сумму всех выбранных значений поля; AVG – производит усреднение всех выбранных значений поля; MAX – выводит наибольшее из значений поля; MIN – выводит наименьшее значение из поля. Агрегатные функции Агрегатная функция (групповая операция) выдает одиночное значение для группы записей таблицы. SELECT агрегатная функция(наименование поля) FROM имя таблицы;
19 SELECT COUNT (SNum) FROM S; Запрос 17: посчитать количество служащих в таблице. Результат: Оператор * позволяет посчитать количество строк в таблице. SELECT COUNT (DISTINCT City) FROM S; Запрос 18: посчитать количество городов, в которых проживают служащие. Результат: Запрос 19: посчитать количество клиентов в таблице. SELECT COUNT (*) FROM С; Функция COUNT
20 SELECT AVG (Comm) FROM S; Запрос 20: посчитать средний размер комиссионных служащих. SELECT MAX (Age) FROM S; Запрос 21: найти максимальный возраст служащих. Результат: Запрос 22: вывести имя первого по алфавиту служащего. SELECT MIN (SName) FROM S; Результат: Функции AVG, MAX и MIN
21 SELECT City, AVG (Comm) FROM S GROUP BY City; Запрос 23: по каждому городу посчитать средний размер комиссионных служащих. Предложение GROUP BY (позволяет выделить группу записей для проведения групповой операции): Результат: Предложение GROUP BY
22 SELECT Age, COUNT (SNum) FROM S GROUP BY Age; Запрос 24: по каждой возрастной группе посчитать количество служащих, относящейся к ней. Результат: Запрос 25: вывести статистику о группах служащих с одинаковыми размерами комиссионных по городах. SELECT City, Comm, COUNT(SNum) FROM S GROUP BY City, Comm; Результат: Запросы с GROUP BY
23 Запрос 28: вывести информацию по городам и количестве служащих в них, если это количество больше одного. Предложение HAVING (накладывает ограничения на вывод групповых записей) Результат: Запрос 29: вывести информацию о городах, средние комиссионные в которых не ниже 13%. Результат: SELECT City, COUNT(SNum) FROM S GROUP BY City HAVING COUNT(SNum)>1 ; SELECT City, AVG(Comm) FROM S GROUP BY City HAVING AVG(Comm)>0.13 ;