
9_1 SQL.ppt
- Количество слайдов: 52
Structured Query Language
SQL (Structured Query Language) – структурированный язык запросов, предоставляющий средства создания и обработки данных в реляционных БД. Стандарт SQL определяется ANSI (Американским Национальным Институтом Стандартов) и в данное время также принимается ISO (Международной Организацией по Стандартизации).
Язык SQL предназначен для манипулирования данными в реляционных базах данных, определения структуры баз данных и для управления правами доступа к данным в многопользовательской среде. Состав языка SQL: · язык манипулирования данными DML (Data Manipulation Language) · язык определения данных DDL (Data Definition Language) · язык управления данными DCL (Data Control Language).
Язык манипулирования данными DML состоит из 4 основных команд: SELECT (выбрать) INSERT (вставить) UPDATE (обновить) DELETE(удалить).
Основные команды языка DDL: CREATE DATABASE (создать базу данных) CREATE TABLE (создать таблицу) CREATE VIEW (создать виртуальную таблицу) CREATE INDEX (создать индекс) CREATE TRIGGER (создать триггер) CREATE PROCEDURE (создать хранимую процедуру) ALTER DATABASE (модифицировать базу данных) ALTER TABLE (модифицировать таблицу)
ALTER VIEW (модифицировать виртуальную таблицу) ALTER INDEX (модифицировать индекс) ALTER TRIGGER (модифицировать триггер) ALTER PROCEDURE (модифицировать хранимую процедуру) DROP DATABASE (удалить базу данных) DROP TABLE (удалить таблицу) DROP VIEW (удалить виртуальную таблицу) DROP INDEX (удалить индекс) DROP TRIGGER (удалить триггер) DROP PROCEDURE (удалить хранимую процедуру).
Язык управления данными DCL состоит из двух основных команд: GRANT (дать права) REVOKE (забрать права).
С точки зрения прикладного интерфейса существуют две разновидности команд SQL: · интерактивный SQL · встроенный SQL. Интерактивный SQL используется в специальных утилитах (типа WISQL или DBD), позволяющих в интерактивном режиме вводить запросы с использованием команд SQL, посылать их для выполнения на сервер и получать результаты в предназначенном для этого окне. Встроенный SQL используется в прикладных программах, позволяя им посылать запросы к серверу и обрабатывать полученные результаты.
БД состоит из 4 таблиц: STUDENTS (СТУДЕНТЫ) – в ней содержаться пять полей с информацией о студентах: l SNUM – номер студенческого билета l SFAM – фамилия студента l SIMA – имя студента l SOTCH – отчество студента l STIP – размер получаемой студентом стипендии PREDMET (ПРЕДМЕТЫ) – в ней содержаться пять полей с информацией об учебных предметах: l PNUM – номер (код) учебного предмета l PNAME – наименование учебного предмета l TNUM - номер (код) преподавателя l HOURS – продолжительность учебной дисциплины в часах l COURS – курс, на котором ведется данный учебный предмет
TEACHERS (ПРЕПОДАВАТЕЛИ) - в ней содержится информация о преподавателях: l TNUM – код преподавателя l TFAM – фамилия преподавателя l TIMA – имя преподавателя l TOTCH – отчество преподавателя l TDATE – дата принятия преподавателя на работу USP (УСПЕВАЕМОСТЬ) – содержит информацию об успеваемости студентов по учебным дисциплинам: l UNUM – код факта сдачи учебной дисциплины l OCENKA – оценка, полученная студентом по учебному предмету l UDATE – дата сдачи l SNUM - номер студенческого билета l PNUM – код учебного предмета
Команда Select Оператор SELECT применяется для извлечения строк, выбранных из одной или нескольких таблиц. Кроме того, оператор SELECT можно использовать для извлечения строк, вычисленных без ссылки на какую-либо таблицу. Например: для вычисления произведения 2*2, нужно просто написать SELECT 2*2;
SELECT <список-полей> FROM <список-таблиц> WHERE <спецификация-отбора-строк> GROUP BY <спецификация группировки> HAVING <спецификация-отбора-групп> ORDER BY <спецификация-сортировки> ; Квадратные скобки [ ] означают, что использование находящегося в них оператора необязательно. После ключевого слова ORDER BY указывают имя столбца, число (целое беззнаковое) или формулу и способ упорядочения (по возрастанию – ASC, или по убыванию – DESC). По умолчанию используется упорядочение по возрастанию.
Команда Select Список выбираемых содержать следующее: ü имена полей ü * ü вычисления ü литералы ü функции элементов может
Все поля Запрос: SELECT * FROM students; Результат: Получаем список всех студентов со всей необходимой информацией SNAM SFAM SIMA 1 Гулый 2 Макарова Анна … SOTCH Степан Игоревич Петровна STIP 60000 45000
Список полей Пример 1 Запрос: SELECT sfam, sima, pname, ocenka FROM students, predmet, usp; Результат: Получаем список с фамилией, именем, названием предмета и оценкой по предмету всех студентов SFAM SIMA PNAME OCENKA Гулый Степан математика 6 Макарова Анна математика 6
Список полей в определённой последоватнльности Пример 2 Запрос: SELECT SFAM, PNAME, TFAM, OCENKA FROM STUDENTS, PREDMET, TEACHERS, USP; Результат: Получаем список с фамилией всех студентов, названием предмета, фамилией преподавателя и оценкой по предмету
Вычисления: SELECT SNUM, SFAM, SIMA, SOTCH, STIP*10 FROM STUDENTS;
Для получения результатов без дубликатов можно воспользоваться аргументом DISTINCT, который обеспечивает возможность устранять повторяющиеся значения из предложения SELECT: Например: Имеется таблица продаж за 2008 год - Например prodaji. Необходимо найти все фирмы, которые покупали у нас товар № Data 1 14. 05. 2008 2 05. 06. 2008 3 20. 06. 2008 … … nazvanie Omega Paradiz Omega … summa 1056000 890000 960000 …
Запрос 1 SELECT nazvanie FROM prodaji; Результат Выведутся все названия фирм Omega Paradiz Omega … Запрос 2 SELECT distinct nazvanie FROM prodaji; Результат Выведутся названия фирм и они не повторятся Omega Paradiz …
Литералы - это строковые константы, которые применяются наряду с наименованиями столбцов и, таким образом, выступают в роли “псевдостолбцов”. Строка символов, представляющая собой литерал, должна быть заключена в одинарные или двойные кавычки. SELECT SFAM, SIMA, “получает”, STIP, ’долларов’ FROM students;
WHERE – предложение команды SELECT, которое позволяет устанавливать предикаты, условие которых может быть или верным или неверным для любой записи таблицы. Команда извлекает только те записи из таблицы, для которой такое утверждение истинно.
Типы предикатов, используемых в предложении WHERE: сравнение с использованием реляционных операторов = равно > больше <> не равно < меньше != не равно >= больше или равно <= меньше или равно BETWEEN IN LIKE CONTAINING IS NULL EXIST ANY ALL
Запрос: SELECT SFAM, STIP FROM STUDENTS WHERE STIP=250; Результат: SFAM STIP ---------------Поляков 250 Нагорный 250
IN, BETWEEN, LIKE, IS NULL IN определяет набор значений, в которых данное значение должно быть включено. Запрос 1 SELECT * FROM STUDENTS WHERE SIMA = ‘Анатолий’ OR SIMA = ‘Владимир’;
Результат: SNUM SFAM SIMA SOTCH STIP ---------------------------------------25631 Поляков Анатолий Алексеевич 60000 14576 Гриценко Владимир Николаевич 120000 24511 Котенко Анатолий Николаевич 80000
Такой же результат можно получить и другим способом : Запрос 2 SELECT * FROM STUDENTS WHERE SIMA IN (‘Анатолий’, ‘Владимир’);
BETWEEN определяет диапазон значений, в который должны умещаться искомые значения, что и делает предикат верным. Запрос: SELECT SNUM, OCENCA FROM USP WHERE OCENCA BETWEEN 3 AND 5; Результат: SNUM OCENCA --------------15424 5 17451 4 25111 3 34160 4 34161 5
LIKE применим только к полям типа CHAR или VARCHAR, в которых он ищет подстроки, т. е. он ищет символы и проверяет, совпадают ли они с условием. Два типа групповых символов, используемые с LIKE: символ подчеркивания (заменяет любой одиночный символ) и знак процента (замещает последовательность любого числа символов).
Вывести необходимые данные о преподавателях, у которых фамилия начинается на «К» Запрос: SELECT TFAM, TIMA, TOTCH FROM TEACHERS WHERE TFAM LIKE ‘K%’; Результат запроса: TFAM TIMA TOTCH --------------------------------Костыркин Олег Владимирович Казанко Виталий Владимирович
Если требуется найти строку, которая содержит специальные символы (“%”, “_”) в качестве информационных символов. Для этого с помощью ключевого слова ESCAPE нужно определить так называемый escapeсимвол, который, будучи поставленным перед символом “%” или “_”, укажет, что этот символ является информационным. Escape-символ не может быть символом “” (обратная косая черта) и, вообще говоря, должен представлять собой символ, никогда не появляющийся в упоминаемом столбце как информационный символ. Часто для этих целей используются символы “@” и “~”.
Например: получить список сотрудников, в имени которых содержится “_” Запрос: SELECT first_name, last_name FROM employee WHERE first_name LIKE "%@_%" ESCAPE "@" ;
В SQL-запросах NULL означает, что значение столбца неизвестно. Предикат IS NULL принимает значение true только тогда, когда выражение слева от ключевых слов “IS NULL” имеет значение null (пусто, не определено). Разрешено также использовать конструкцию IS NOT NULL, которая означает “не пусто”, “имеет какое-либо значение”.
Запрос: SELECT * FROM USP WHERE OCENCA IS NULL; Данных в качестве результата этого запроса не будет, потому что в таблице отсутствуют значения NULL в поле OCENCA. Запрос: SELECT OCENCA FROM USP WHERE OCENCA IS NOT NULL; Данный запрос выведет все данные по столбцу OCENCA.
Использование квалификатора AS Для придания наглядности получаемым результатам наряду с литералами в списке выбираемых элементов можно использовать квалификатор AS. Данный квалификатор заменяет в результирующей таблице существующее название столбца на заданное. Это наиболее эффективный и простой способ создания заголовков
Запрос: подсчитать количество служащих SELECT count(*) AS number FROM employee; Результат запроса: NUMBER ====== 42
Функция Count Вычисляет количество записей, возвращённых запросом. Формат: Count (выражение) Прототип выражения представляет собой строковое выражение, определяющее поле с данными, которые необходимо оценить, или выражение, по которому производится вычисление. Операндом в выражении может быть имя таблицы или функция (встроенная или определяемая пользователем, но не статическая функция SQL). Оценить можно любые данные, в том числе и текст.
Функцию Count можно использовать для вычисления количества записей в базовом запросе. Функция Count не учитывает при подсчете записи, имеющие значения Null, если вместо выражения не используется подстановочный знак звёздочка (*).
Запрос: получить список всех сотрудников SELECT "сотрудник " || first_name || " " || last_name AS сотрудники FROM employee; Результат запроса: СОТРУДНИКИ ============ сотрудник Robert Nelson сотрудник Bruce Young сотрудник Kim Lambert сотрудник Leslie Johnson
Работа с датами В разных системах имеется различное число встроенных функций, упрощающих работу с датами, строками и другими типами данных. Внешне дата может быть представлена строками различных форматов, например: “October 27, 1995” “ 27 -OCT-1994” “ 10 -27 -95” “ 10/27/95” “ 27. 10. 95”
Кроме абсолютных дат, в SQL-выражениях можно также пользоваться относительным заданием дат: “yesterday” вчера “today” сегодня “now” сейчас (включая время) “tomorrow” завтра
Дата может неявно конвертироваться в строку (из строки), если: • строка, представляющая дату, имеет один из вышеперечисленных форматов; • выражение не содержит неоднозначностей в толковании типов столбцов.
Запрос: получить список сотрудников, принятых на работу после 1 января 1994 года SELECT first_name, last_name, hire_date FROM employee WHERE hire_date > '1 -1 -94'; Результат запроса: FIRST_NAME LAST_NAME HIRE_DATE =================== Pierre Osborne 3 -JAN-1994 John Montgomery 30 -MAR-1994 Mark Guckenheimer 2 -MAY-1994
Значения дат можно сравнивать друг с другом, сравнивать с относительными датами, вычитать одну дату из другой. Запрос: получить список служащих, проработавших на предприятии к настоящему времени более 7 лет SELECT first_name, last_name, hire_date FROM employee WHERE 'today' - hire_date > 365 * 7 + 1; FIRST_NAME LAST_NAME HIRE_DATE =================== Robert Nelson 28 -DEC-1988 Bruce Young 28 -DEC-1988
CONTAINING Предикат CONTAINING аналогичен предикату LIKE, за исключением того, что он не чувствителен к регистру букв. Разрешено также использовать конструкцию NOT CONTAINING Запрос: получить список сотрудников, фамилии которых содержат буквы “ne”, “NE”, “n. E” SELECT first_name, last_name FROM employee WHERE last_name CONTAINING "ne ";
Результат запроса: FIRST_NAME LAST_NAME ================== Robert Nelson Ann Bennet Pierre Osborne
Функции SQL Стандартные: • And • Or • Not • Max • Min • Sum • Count – подсчёт количества строк • Avg – поиск среднего значения
GROUP BY Осуществляет группировку данных; испоьлуется вместе с функциями, группируя данные по определённым полям. Запрос: вывести названия компаний и общую сумму сделок каждой компании SELECT NFirm, SUM (сумма_сделки) FROM Prodaji GROUP BY NFirm;
HAVING Проверяет значения, получаемые в результате действия функций на какое-либо условие. Запрос: вывести названия компаний и общую сумму сделок каждой компании, при условии, что сумма больше 10 тыс. SELECT NFirm, SUM FROM Prodaji GROUP BY NFirm HAVING SUM >10000;
INSERT Осуществляет вставку данных в таблицу 1 Вставка всех данных в таблицу Insert into <имя таблицы> values (значение 1, значение 2, …); 2 Вставка отдельных данных в таблицу Insert into <имя таблицы>(поле 1, поле 4, …, полеn) values (значение 1, значение 2, …);
Например: 1 Добавить в таблицу Student данные о новом студенте Insert into Student values (20356, ‘Сидоров’, ‘Виктор’, ‘Петрович’, 85000); 2 Добавить в таблицу Student имя и отчество студента Insert into <имя таблицы>(SIMA, SOTCH) values (‘Виктор’, ‘Петрович’);
DELETE Осуществляет удаление данных из таблицы Delete from <имя таблицы> Where <условие>; Например: удалить все записи из таблицы Student, где встречается фамилия Иванов Delete from Student Where Sfam=‘Иванов’;
UPDATE Осуществляет обновление данных в таблице Update <имя таблицы> Where <условие>;