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


Содержание

Язык структурированных запросов (SQL)

Язык структурированных запросов — это стандартный язык базы данных, который используется для создания, обслуживания и извлечения реляционной базы данных.

Что такое реляционная база данных?

Реляционная база данных означает, что данные хранятся, а также извлекаются в виде отношений (таблиц). Таблица 1 показывает , реляционную базу данных только один соотношения называется СТУДЕНТОМ , которая хранит ROLL_NO, имя, адрес, телефон и возраст студентов.

УЧЕНИК

ROLL_NO НАЗВАНИЕ АДРЕС ТЕЛЕФОН ВОЗРАСТ
1 баран ДЕЛИ 9455123451 18
2 RAMESH GURGAON 9652431543 18
3 Sujit Rohtak 9156253131 20
4 Суреш ДЕЛИ 9156768971 18

ТАБЛИЦА 1

Это некоторые важные термины, которые используются в терминах отношений.

Атрибут: Атрибуты — это свойства, которые определяют отношение. например; ROLL_NO , NAME и т. Д.

Кортеж: каждый ряд в связи известен как кортеж. Вышеуказанное отношение содержит 4 кортежа, один из которых показан как:

1 баран ДЕЛИ 9455123451 18

Степень: количество атрибутов в отношении известно как степень отношения. Отношение СТУДЕНТА, определенное выше, имеет степень 5.

Количество элементов : количество кортежей в отношении известно как количество элементов. Отношение СТУДЕНТА, определенное выше, имеет мощность 4.

Столбец: Столбец представляет набор значений для определенного атрибута. Столбец ROLL_NO извлекается из отношения STUDENT.

ROLL_NO
1
2
3
4

Запросы для работы с реляционной базой данных могут быть следующими категориями:

Язык определения данных: используется для определения структуры базы данных. например; СОЗДАЙТЕ ТАБЛИЦУ, ДОБАВЬТЕ КОЛОННУ, УДАЛИТЕ КОЛОННУ и так далее.

Язык манипулирования данными : используется для манипулирования данными в отношениях. например; ВСТАВИТЬ, УДАЛИТЬ, ОБНОВИТЬ и так далее.

Data Query Language: используется для извлечения данных из отношений. например; ВЫБРАТЬ

Итак, сначала мы рассмотрим язык запросов данных. Общий запрос для извлечения из реляционной базы данных:

  1. ВЫБЕРИТЕ [ DISTINCT ] Attribute_List FROM R1, R2… .RM
  2. [ ГДЕ состояние]
  3. [ GROUP BY (Атрибуты) [ HAVING условие]]
  4. [ ORDER BY (Атрибуты) [ DESC ]];

Часть запроса, представленная оператором 1, является обязательной, если вы хотите получить ее из реляционной базы данных. Операторы, написанные внутри [], являются необязательными. Мы рассмотрим возможную комбинацию запросов по отношению, показанную в таблице 1.

Случай 1: если мы хотим получить атрибуты ROLL_NO и NAME всех студентов, запрос будет:

ROLL_NO НАЗВАНИЕ
1 баран
2 RAMESH
3 Sujit
4 Суреш

Случай 2: если мы хотим получить ROLL_NO и NAME из Для студентов, чей ROLL_NO больше 2, запрос будет:

ROLL_NO НАЗВАНИЕ
3 Sujit
4 Суреш

СЛУЧАЙ 3: Если мы хотим получить все атрибуты учащихся, мы можем написать * вместо записи всех атрибутов как:

ROLL_NO НАЗВАНИЕ АДРЕС ТЕЛЕФОН ВОЗРАСТ
3 Sujit Rohtak 9156253131 20
4 Суреш ДЕЛИ 9156768971 18

СЛУЧАЙ 4: Если мы хотим представить отношение в возрастающем порядке по AGE , мы можем использовать предложение ORDER BY как:

ROLL_NO НАЗВАНИЕ АДРЕС ТЕЛЕФОН ВОЗРАСТ
1 баран ДЕЛИ 9455123451 18
2 RAMESH GURGAON 9652431543 18
4 Суреш ДЕЛИ 9156768971 18
3 Sujit Rohtak 9156253131 20

Примечание: ORDER BY AGE эквивалентно ORDER BY AGE . Если мы хотим получить результаты в порядке убывания AGE , мы можем использовать ORDER BY AGE DESC.

СЛУЧАЙ 5: Если мы хотим получить различные значения атрибута или группы атрибутов, DISTINCT используется как в:

АДРЕС
ДЕЛИ
GURGAON
Rohtak

Если DISTINCT не используется, DELHI будет повторяться дважды в наборе результатов. Прежде чем понимать GROUP BY и HAVING, нам нужно понять функции агрегирования в SQL.

ФУНКЦИИ АГРЕГАЦИИ: Функции агрегации используются для выполнения математических операций над значениями данных отношения. Некоторые из общих функций агрегирования, используемых в SQL:

  • COUNT: функция Count используется для подсчета количества строк в отношении. например;
COUNT (ТЕЛЕФОН)
4
  • SUM: функция SUM используется для добавления значений атрибута в отношение. например;

ВЫБЕРИТЕ СУММУ (ВОЗРАСТ) ОТ СТУДЕНТА;

СУММА (AGE)
74

Таким же образом можно использовать MIN, MAX и AVG. Как мы видели выше, все функции агрегации возвращают только 1 строку.

GROUP BY: Group by используется для группировки кортежей отношения на основе атрибута или группы атрибутов. Он всегда сочетается с функцией агрегирования, которая вычисляется по группе. например;

В этом запросе SUM ( AGE ) будет вычисляться, но не для всей таблицы, а для каждого адреса. то есть; сумма AGE для адреса DELHI (18 + 18 = 36) и аналогично для другого адреса. Выход:

АДРЕС СУММА (AGE)
ДЕЛИ 36
GURGAON 18
Rohtak 20

Если мы попытаемся выполнить запрос, приведенный ниже, это приведет к ошибке, потому что мы вычислили SUM (AGE) для каждого адреса, и для каждого адреса может быть более одного студента. Так что это не может быть отображено в наборе результатов.

ПРИМЕЧАНИЕ. Атрибут, который не является частью предложения GROUP BY, нельзя использовать для выбора. Любой атрибут, который является частью GROUP BY CLAUSE, может быть использован для выбора, но это не обязательно.
Викторина по SQL

Статья предоставлена Sonal Tuteja. Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

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

SQL (обычно произносимый как «СИКВЭЛ» или «ЭСКЮЭЛЬ») символизирует собой Структурированный Язык Запросов. Это — язык, который дает Вам возможность создавать и работать в реляционных базах данных, являющихся наборами связанной информации, сохраняемой в таблицах.

Информационное пространство становится более унифицированным. Это привело к необходимости создания стандартного языка, который мог бы использоваться в большом количестве различных видов компьютерных сред. Стандартный язык позволит пользователям, знающим один набор команд, использовать их для создания, нахождения, изменения и передачи информации — независимо от того, работают ли они на персональном компьютере, сетевой рабочей станции, или на универсальной ЭВМ.

В нашем все более и более взаимосвязанном компьютерном мире, пользователь снабженый таким языком, имеет огромное преимущество в использовании и обобщении информации из ряда источников с помощью большого количества способов.

Элегантность и независимость от специфики компьютерных технологий, а также его поддержка лидерами промышленности в области технологии реляционных баз данных, сделало SQL (и, вероятно, в течение обозримого будущего оставит его) основным стандартным языком. По этой причине, любой, кто хочет работать с базами данных 90-х годов, должен знать SQL.

Стандарт SQL определяется ANSI (Американским Национальным Институтом Стандартов) и в данное время также принимается ISO (Международной Организацией по Стандартизации). Однако, большинство коммерческих программ баз данных расширяют SQL без уведомления ANSI, добавляя различные особенности в этот язык, которые, как они считают, будут весьма полезны. Иногда они несколько нарушают стандарт языка, хотя хорошие идеи имеют тенденцию развиваться и вскоре становиться стандартами «рынка» сами по себе в силу полезности своих качеств.

На данном уроке мы будем, в основном, следовать стандарту ANSI, но одновременно иногда будет показывать и некоторые наиболее общие отклонения от его стандарта.

Точное описание особенностей языка приводится в документации на СУБД, которую Вы используете. SQL системы InterBase 4.0 соответствует стандарту ANSI-92 и частично стандарту ANSI-III.

Состав языка SQL

Язык SQL предназначен для манипулирования данными в реляционных базах данных, определения структуры баз данных и для управления правами доступа к данным в многопользовательской среде.

Поэтому, в язык SQL в качестве составных частей входят:

  • язык манипулирования данными (Data Manipulation Language, DML)
  • язык определения данных (Data Definition Language, DDL)
  • язык управления данными (Data Control Language, DCL).

Подчеркнем, что это не отдельные языки, а различные команды одного языка. Такое деление проведено только лишь с точки зрения различного функционального назначения этих команд.

Язык манипулирования данными используется, как это следует из его названия, для манипулирования данными в таблицах баз данных. Он состоит из 4 основных команд:

SELECT (выбрать)
INSERT (вставить)
UPDATE (обновить)
DELETE (удалить)

Язык определения данных используется для создания и изменения структуры базы данных и ее составных частей — таблиц, индексов, представлений (виртуальных таблиц), а также триггеров и сохраненных процедур. Основными его командами являются:

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 (удалить сохраненную процедуру)

Язык управления данными используется для управления правами доступа к данным и выполнением процедур в многопользовательской среде. Более точно его можно назвать «язык управления доступом». Он состоит из двух основных команд:

GRANT (дать права)
REVOKE (забрать права)

С точки зрения прикладного интерфейса существуют две разновидности команд SQL:

  • интерактивный SQL
  • встроенный SQL.

Интерактивный SQL используется в специальных утилитах (типа WISQL или DBD), позволяющих в интерактивном режиме вводить запросы с использованием команд SQL, посылать их для выполнения на сервер и получать результаты в предназначенном для этого окне. Встроенный SQL используется в прикладных программах, позволяя им посылать запросы к серверу и обрабатывать полученные результаты, в том числе комбинируя set-ориентированный и record-ориентированный подходы.

Мы не будем приводить точный синтаксис команд SQL, вместо этого мы рассмотрим их на многочисленных примерах, что намного более важно для понимания SQL, чем точный синтаксис, который можно посмотреть в документации на Вашу СУБД.

Итак, начнем с рассмотрения команд языка манипулирования данными.

Реляционные операции. Команды языка манипулирования данными

Наиболее важной командой языка манипулирования данными является команда SELECT. За кажущейся простотой ее синтаксиса скрывается огромное богатство возможностей. Нам важно научиться использовать это богатство!

На данном уроке предполагается, если не оговорено противное, что все команды языка SQL вводятся интерактивным способом. В качестве информационной основы для примеров мы будем использовать базу данных «Служащие предприятия» (employee.gdb), входящую в поставку Delphi и находящуюся (по умолчанию) в поддиректории \IBLOCAL\EXAMPLES.

Рис. 1: Структура базы данных EMPLOYEE

На рис.1 приведена схема базы данных EMPLOYEE для Local InterBase, нарисованная с помощью CASE-средства S-Designor (см. доп. урок). На схеме показаны таблицы базы данных и взаимосвязи, а также обозначены первичные ключи и их связи с внешними ключами. Многие из примеров, особенно в конце урока, являются весьма сложными. Однако, не следует на этом основании делать вывод, что так сложен сам язык SQL. Дело, скорее, в том, что обычные (стандартные) операции настолько просты в SQL, что примеры таких операций оказываются довольно неинтересными и не иллюстрируют полной мощности этого языка. Но в целях системности мы пройдем по всем возможностям SQL: от самых простых — до чрезвычайно сложных.

Начнем с базовых операций реляционных баз данных. Таковыми являются:

  • выборка(Restriction)
  • проекция(Projection)
  • соединение(Join)
  • объединение(Union)

Операция выборки позволяет получить все строки (записи) либо часть строк одной таблицы.

Получить все строки таблицы Country

COUNTRY CURRENCY
USA Dollar
England Pound
Canada CdnDlr
Switzerland SFranc
Japan Yen
Italy Lira
France FFranc
Germany D-Mark
Australia ADollar
Hong Kong HKDollar
Netherlands Guilder
Belgium BFranc
Austria Schilling
Fiji FDollar

В этом примере и далее — для большей наглядности — все зарезервированные слова языка SQL будем писать большими буквами. Красным цветом будем записывать предложения SQL, а светло-синим — результаты выполнения запросов.

Получить подмножество строк таблицы Country,удовлетворяющее условию Currency = «Dollar»

Результат последней операции выглядит следующим образом:

Операция проекции позволяет выделить подмножество столбцов таблицы. Например:

Получить списокденежных единиц

На практике очень часто требуется получить некое подмножество столбцов и строк таблицы, т.е. выполнить комбинацию Restriction и Projection. Для этого достаточно перечислить столбцы таблицы и наложить ограничения на строки. SELECT currency FROM country WHERE country = «Japan».

Найти денежную единицу Японии

Получить фамилии работников, которых зовут «Roger»

FIRST_NAME LAST_NAME
Roger De Souza
Roger Reeves

Эти примеры иллюстрируют общую форму команды SELECT в языке SQL (для одной таблицы):

SELECT (выбрать) специфицированные поля
FROM (из) специфицированной таблицы
WHERE (где) некоторое специфицированное условие является истинны

Операция соединения позволяет соединять строки из более чем одной таблицы (по некоторому условию) для образования новых строк данных.

Получить список руководителей проектов

FIRST_NAME LAST_NAME PROJ_NAME
Ashok Ramanathan Video Database
Pete Fisher DigiPizza
Chris Papadopoulos AutoMap
Bruce Young MapBrowser port
Mary S. MacDonald Marketing project 3

Операция объединения позволяет объединять результаты отдельных запросов по нескольким таблицам в единую результирующую таблицу. Таким образом, предложение UNION объединяет вывод двух или более SQL-запросов в единый набор строк и столбцов.

Получить список работников и заказчиков, проживающих во Франции

FIRST_NAME LAST_NAME JOB_COUNTRY
Jacques Glon France
Michelle Roche France

Для справки, приведем общую форму команды SELECT, учитывающую возможность соединения нескольких таблиц и объединения результатов:

SELECT [DISTINCT] список_выбираемых_элементов (полей)
FROM список_таблиц (или представлений)
[WHERE предикат]
[GROUP BY поле (или поля) [HAVING предикат]]
[UNION другое_выражение_Select]
[ORDER BY поле (или поля) или номер (номера)];

Рис. 2: Общий формат команды SELECT

Отметим, что под предикатом понимается некоторое специфицированное условие (отбора), значение которого имеет булевский тип. Квадратные скобки означают необязательность использования дополнительных конструкций команды. Точка с запятой является стандартным терминатором команды. Отметим, что в WISQL и в компоненте TQuery ставить конечный терминатор не обязательно. При этом там, где допустим один пробел между элементами, разрешено ставить любое количество пробелов и пустых строк — выполняя желаемое форматирование для большей наглядности.

Гибкость и мощь языка SQL состоит в том, что он позволяет объединить все операции реляционной алгебры в одной конструкции, «вытаскивая» таким образом любую требуемую информацию, что очень часто и происходит на практике.

Команда SELECT

Простейшие конструкции команды SELECT

Итак, начнем с рассмотрения простейших конструкций языка SQL. После такого рассмотрения мы научимся:

  • назначать поля, которые должны быть выбраны
  • назначать к выборке «все поля»
  • управлять «вертикальным» и «горизонтальным» порядком выбираемых полей
  • подставлять собственные заголовки полей в результирующей таблице
  • производить вычисления в списке выбираемых элементов
  • использовать литералы в списке выбираемых элементов
  • ограничивать число возвращаемых строк
  • формировать сложные условия поиска, используя реляционные и логические операторы
  • устранять одинаковые строки из результата.

Список выбираемых элементов может содержать следующее:

  • имена полей
  • *
  • вычисления
  • литералы
  • функции
  • агрегирующие конструкции

Список полей

получить список имен, фамилий и служебных телефонов всех работников предприятия

FIRST_NAME LAST_NAME PHONE_NO
Terri Lee (408) 555-1234
Oliver H. Bender (408) 555-1234
Mary S. MacDonald (415) 555-1234
Michael Yanowski (415) 555-1234
Robert Nelson (408) 555-1234
Kelly Brown (408) 555-1234
Stewart Hall (408) 555-1234
.

Отметим, что PHONE_LIST — это виртуальная таблица (представление), созданная в InterBase и основанная на информации из двух таблиц — EMPLOYEE и DEPARTMENT. Она не показана на рис.1, однако, как мы уже указывали в общей структуре команды SELECT, к ней можно обращаться так же, как и к «настоящей» таблице.

получить список служебных телефонов всех работников предприятия со всей необходимой информацией

EMP_NO FIRST_NAME LAST_NAME PHONE_EXT LOCATION PHONE_NO
12 Terri Lee 256 Monterey (408) 555-1234
105 Oliver H. Bender 255 Monterey (408) 555-1234
85 Mary S. MacDonald 477 San Francisco (415) 555-1234
127 Michael Yanowski 492 San Francisco (415) 555-1234
2 Robert Nelson 250 Monterey (408) 555-1234
109 Kelly Brown 202 Monterey (408) 555-1234
14 Stewart Hall 227 Monterey (408) 555-1234
.

Все поля в произвольном порядке

получить список служебных телефонов всех работников предприятия со всей необходимой информацией, расположив их в требуемом порядке

FIRST_NAME LAST_NAME PHONE_NO LOCATION PHONE_EXT EMP_NO
Terri Lee (408) 555-1234 Monterey 256 12
Oliver H. Bender (408) 555-1234 Monterey 255 105
Mary S. MacDonald (415) 555-1234 San Francisco 477 85
Michael Yanowski (415) 555-1234 San Francisco 492 127
Robert Nelson (408) 555-1234 Monterey 250 2
Kelly Brown (408) 555-1234 Monterey 202 109
Stewart Hall (408) 555-1234 Monterey 227 14
.

Получение информации о BLOb выглядит совершенно аналогично обычным полям. Полученные значения можно отображать с использованием data-aware компонент Delphi, например, TDBMemo или TDBGrid. Однако, в последнем случае придется самому прорисовывать содержимое блоба (например, через OnDrawDataCell). Подробнее об этом см. на уроке, посвященном работе с полями.

получить список должностных требований к кандидатам на работу

получить список номеров служащих и их зарплату, в том числе увеличенную на 15%

EMP_NO SALARY
2 105900.00 121785
4 97500.00 112125
5 102750.00 118162.5
8 64635.00 74330.25
9 75060.00 86319
11 86292.94 99236.87812499999
12 53793.00 61861.95
14 69482.62 79905.01874999999
.

Порядок вычисления выражений подчиняется общепринятым правилам: сначала выполняется умножение и деление, а затем — сложение и вычитание. Операции одного уровня выполняются слева направо. Разрешено применять скобки для изменения порядка вычислений.

Например, в выражении col1 + col2 * col3 сначала находится произведение значений столбцов col2 и col3, а затем результат этого умножения складывается со значением столбца col1. А в выражении (col1 + col2) * col3 сначала выполняется сложение значений столбцов col1 и col2, и только после этого результат умножается на значение столбца col3.

Для придания большей наглядности получаемому результату можно использовать литералы. Литералы — это строковые константы, которые применяются наряду с наименованиями столбцов и, таким образом, выступают в роли «псевдостолбцов». Строка символов, представляющая собой литерал, должна быть заключена в одинарные или двойные скобки.

получить список сотрудников и их зарплату

FIRST_NAME SALARY
Robert получает 105900.00 долларов в год
Bruce получает 97500.00 долларов в год
Kim получает 102750.00 долларов в год
Leslie получает 64635.00 долларов в год
Phil получает 75060.00 долларов в год
K. J. получает 86292.94 долларов в год
Terri получает 53793.00 долларов в год

Имеется возможность соединять два или более столбца, имеющие строковый тип, друг с другом, а также соединять их с литералами. Для этого используется операция конкатенации (||).

получить список всех сотрудников Использование квалификатора AS

Для придания наглядности получаемым результатам наряду с литералами в списке выбираемых элементов можно использовать квалификатор AS. Данный квалификатор заменяет в результирующей таблице существующее название столбца на заданное. Это наиболее эффективный и простой способ создания заголовков (к сожалению, InterBase, как уже отмечалось, не поддерживает использование русских букв в наименовании столбцов).

подсчитать количество служащих


получить список всех сотрудников Работа с датами

Мы уже рассказывали о типах данных, имеющихся в различных СУБД, в том числе и в InterBase. В разных системах имеется различное число встроенных функций, упрощающих работу с датами, строками и другими типами данных. InterBase, к сожалению, обладает достаточно ограниченным набором таких функций. Однако, поскольку язык SQL, реализованный в InterBase, соответствует стандарту, то в нем имеются возможности конвертации дат в строки и гибкой работы с датами. Внутренне дата в InterBase содержит значения даты и времени. Внешне дата может быть представлена строками различных форматов, например:

  • «October 27, 1995»
  • «27-OCT-1994»
  • «10-27-95»
  • «10/27/95»
  • «27.10.95»

Кроме абсолютных дат, в SQL-выражениях можно также пользоваться относительным заданием дат:

  • «yesterday» — вчера
  • «today» — сегодня
  • «now» — сейчас (включая время)
  • «tomorrow» — завтра

Дата может неявно конвертироваться в строку (из строки), если:

  • строка, представляющая дату, имеет один из вышеперечисленных форматов;
  • выражение не содержит неоднозначностей в толковании типов столбцов.

получить список сотрудников, принятых на работу после 1 января 1994 года

FIRST_NAME LAST_NAME HIRE_DATE
Pierre Osborne 3-JAN-1994
John Montgomery 30-MAR-1994
Mark Guckenheimer 2-MAY-1994

Значения дат можно сравнивать друг с другом, сравнивать с относительными датами, вычитать одну дату из другой.

получить список служащих, проработавших на предприятии к настоящему времени более 7 лет

FIRST_NAME LAST_NAME HIRE_DATE
Robert Nelson 28-DEC-1988
Bruce Young 28-DEC-1988

К агрегирующим функциям относятся функции вычисления суммы (SUM), максимального (MAX) и минимального (MIN) значений столбцов, арифметического среднего (AVG), а также количества строк, удовлетворяющих заданному условию (COUNT).

вычислить: количество отделов, являющихся подразделениями отдела 100 (Маркетинг и продажи), их суммарный, средний, мини- мальный и максимальный бюджеты

COUNT SUM AVG MIN MAX
5 3800000.00 760000.00 500000.00 1500000.00

Предложение FROM команды SELECT

В предложении FROM перечисляются все объекты (один или несколько), из которых производится выборка данных (рис.2). Каждая таблица или представление, о которых упоминается в запросе, должны быть перечислены в предложении FROM.

Ограничения на число выводимых строк

Число возвращаемых в результате запроса строк может быть ограничено путем использования предложения WHERE, содержащего условия отбора (предикат, рис.2). Условие отбора для отдельных строк может принимать значения true, false или unnown. При этом запрос возвращает в качестве результата только те строки (записи), для которых предикат имеет значение true.

Типы предикатов, используемых в предложении WHERE:

  • сравнение с использованием реляционных операторов
    • = равно
    • <> не равно
    • != не равно
    • > больше
    • = больше или равно Software Products Div. Software Development Field Office: Singapore

    Предикаты EXIST, ANY, ALL, SOME, SINGULAR мы рассмотрим в разделе, рассказывающем о подзапросах.

    К логическим операторам относятся известные операторы AND, OR, NOT, позволяющие выполнять различные логические действия: логическое умножение (AND, «пересечение условий»), логическое сложение (OR, «объединение условий»), логическое отрицание (NOT, «отрицание условий»). В наших примерах мы уже применяли оператор AND. Использование этих операторов позволяет гибко «настроить» условия отбора записей.

    Оператор AND означает, что общий предикат будет истинным только тогда, когда условия, связанные по «AND», будут истинны.

    Оператор OR означает, что общий предикат будет истинным, когда хотя бы одно из условий, связанных по «OR», будет истинным.

    Оператор NOT означает, что общий предикат будет истинным, когда условие, перед которым стоит этот оператор, будет ложным.

    В одном предикате логические операторы выполняются в следующем порядке: сначала выполняется оператор NOT, затем — AND и только после этого — оператор OR. Для изменения порядка выполнения операторов разрешается использовать скобки.

    получить список служащих, занятых в отделе 622 или на должности «инженер» с зарплатой не выше 40000

    FIRST_NAME LAST_NAME DEPT_NO JOB_CODE SALARY
    Jennifer M. Burbank 622 Eng 53167.50
    Phil Forest 622 Mngr 75060.00
    T.J. Green 621 Eng 36000.00
    Mark Guckenheimer 622 Eng 32000.00
    John Montgomery 672 Eng 35000.00
    Bill Parker 623 Eng 35000.00
    Willie Stansbury 120 Eng 39224.06

    получить список служащих, занятых в отделе 622 или на должности «инженер», зарплата которых не выше 40000

    FIRST_NAME LAST_NAME DEPT_NO JOB_CODE SALARY
    T.J. Green 621 Eng 36000.00
    Mark Guckenheimer 622 Eng 32000.00
    John Montgomery 672 Eng 35000.00
    Bill Parker 623 Eng 35000.00
    Willie Stansbury 120 Eng 39224.06

    Преобразование типов (CAST)

    В SQL имеется возможность преобразовать значение столбца или функции к другому типу для более гибкого использования операций сравнения. Для этого используется функция CAST.

    Типы данных могут быть конвертированы в соответствии со следующей таблицей:

    Из типа данных В тип данных
    NUMERIC CHAR, VARCHAR, DATE
    CHAR, VARCHAR NUMERIC, DATE
    DATE CHAR, VARCHAR, DATE

    получить список сотрудников, занятых в отделах, номера которых содержат «00»

    FIRST_NAME LAST_NAME DEPT_NO
    Robert Nelson 600
    Terri Lee 000
    Stewart Hall 900
    Walter Steadman 900
    Mary S. MacDonald 100
    Oliver H. Bender 000
    Kelly Brown 600
    Michael Yanowski 100

    Изменение порядка выводимых строк (ORDER BY)

    Порядок выводимых строк может быть изменен с помощью опционального (дополнительного) предложения ORDER BY в конце SQL-запроса. Это предложение имеет вид:

    Порядок строк может задаваться одним из двух способов:

    • именами столбцов
    • номерами столбцов.

    Способ упорядочивания определяется дополнительными зарезервированными словами ASC и DESC. Способом по умолчанию — если ничего не указано — является упорядочивание «по возрастанию» (ASC). Если же указано слово «DESC», то упорядочивание будет производиться «по убыванию».

    Подчеркнем еще раз, что предложение ORDER BY должно указываться в самом конце запроса.

    Упорядочивание с использованием имен столбцов

    получить список сотрудников, упорядоченный по фамилиям в алфавитном порядке

    FIRST_NAME LAST_NAME DEPT_NO JOB_CODE SALARY
    Janet Baldwin 110 Sales 61637.81
    Oliver H. Bender 000 CEO 212850.00
    Ann Bennet 120 Admin 22935.00
    Dana Bishop 621 Eng 62550.00
    Kelly Brown 600 Admin 27000.00
    Jennifer M. Burbank 622 Eng 53167.50
    Kevin Cook 670 Dir 111262.50
    Roger De Souza 623 Eng 69482.62
    Roberto Ferrari 125 SRep 99000000.00

    получить список сотрудников, упорядоченный по фамилиям в порядке, обратном алфавитному

    FIRST_NAME LAST_NAME DEPT_NO JOB_CODE SALARY
    Katherine Young 623 Mngr 67241.25
    Bruce Young 621 Eng 97500.00
    Michael Yanowski 100 SRep 44000.00
    Takashi Yamamoto 115 SRep 7480000.00
    Randy Williams 672 Mngr 56295.00
    K. J. Weston 130 SRep 86292.94
    Claudia Sutherland 140 SRep 100914.00
    Walter Steadman 900 CFO 116100.00
    Willie Stansbury 120 Eng 39224.06
    Roger Reeves 120 Sales 33620.62

    Столбец, определяющий порядок вывода строк, не обязательно дожен присутствовать в списке выбираемых элементов (столбцов):

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

    FIRST_NAME LAST_NAME DEPT_NO JOB_CODE
    Ann Bennet 120 Admin
    Kelly Brown 600 Admin
    Sue Anne O’Brien 670 Admin
    Mark Guckenheimer 622 Eng
    Roger Reeves 120 Sales
    Bill Parker 623 Eng

    Упорядочивание с использованием номеров столбцов

    получить список сотрудников, упорядоченный по их зарплате с 10% надбавкой

    FIRST_NAME LAST_NAME DEPT_NO JOB_CODE
    Ann Bennet 120 Admin 25228.5
    Kelly Brown 600 Admin 29700
    Sue Anne O’Brien 670 Admin 34402.5
    Mark Guckenheimer 622 Eng 35200
    Roger Reeves 120 Sales 36982.6875
    Bill Parker 623 Eng 38500

    Допускается использование нескольких уровней вложенности при упорядочивании выводимой информации по столбцам; при этом разрешается смешивать оба способа.

    получить список сотрудников, упорядоченный сначала по номерам отделов, в отделах — по убыванию их зарплаты (с 10%), а в пределах одной зарплаты — по фамилиям

    FIRST_NAME LAST_NAME DEPT_NO JOB_CODE
    Oliver H. Bender 000 CEO 234135
    Terri Lee 000 Admin 59172.3
    Mary S. MacDonald 100 VP 122388.75
    Michael Yanowski 100 SRep 48400.000000001
    Luke Leung 110 SRep 75685.5
    Janet Baldwin 110 Sales 67801.59375
    Takashi Yamamoto 115 SRep 8228000.0000001
    Yuki Ichida 115 Eng 6600000.0000001

    Устранение дублирования (модификатор DISTINCT)

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

    Иногда (в зависимости от задачи) бывает необходимо устранить все повторы строк из результирующего набора. Этой цели служит модификатор DISTINCT. Данный модификатор может быть указан только один раз в списке выбираемых элементов и действует на весь список.

    получить список должностей сотрудников

    Данный пример некорректно решает задачу «получения» списка должностей сотрудников предприятия, так как в нем имеются многочисленные повторы, затрудняющие восприятие информации. Тот же запрос, включающий модификатор DISTINCT, устраняющий дублирование, дает верный результат.

    получить список должностей сотрудников

    Два следующих примера показывают, что модификатор DISTINCT действует на всю строку сразу.

    получить список служащих, имена которых — Roger

    FIRST_NAME LAST_NAME
    Roger De Souza
    Roger Reeves

    получить список служащих, имена которых — Roger

    FIRST_NAME LAST_NAME
    Roger De Souza
    Roger Reeves

    Соединение (JOIN)

    Операция соединения используется в языке SQL для вывода связанной информации, хранящейся в нескольких таблицах, в одном запросе. В этом проявляется одна из наиболее важных особенностей запросов SQL — способность определять связи между многочисленными таблицами и выводить информацию из них в рамках этих связей. Именно эта операция придает гибкость и легкость языку SQL.

    После изучения этого раздела мы будем способны:

    • соединять данные из нескольких таблиц в единую результирующую таблицу;
    • задавать имена столбцов двумя способами;
    • записывать внешние соединения;
    • создавать соединения таблицы с собой.

    Операции соединения подразделяются на два вида — внутренние и внешние. Оба вида соединений задаются в предложении WHERE запроса SELECT с помощью специального условия соединения. Внешние соединения (о которых мы поговорим позднее) поддерживаются стандартом ANSI-92 и содержат зарезервированное слово «JOIN», в то время как внутренние соединения (или просто соединения) могут задаваться как без использования такого слова (в стандарте ANSI-89), так и с использованием слова «JOIN» (в стандарте ANSI-92).

    Связывание производится, как правило, по первичному ключу одной таблицы и внешнему ключу другой таблицы — для каждой пары таблиц. При этом очень важно учитывать все поля внешнего ключа, иначе результат будет искажен. Соединяемые поля могут (но не обязаны!) присутствовать в списке выбираемых элементов. Предложение WHERE может содержать множественные условия соединений. Условие соединения может также комбинироваться с другими предикатами в предложении WHERE.

    Внутреннее соединение возвращает только те строки, для которых условие соединения принимает значение true.

    получить список сотрудников, состоящих в должности «вице-президент», а также названия их отделов

    FIRST_NAME LAST_NAME DEPARTMENT
    Robert Nelson Corporate Headquarters
    Mary S. MacDonald Corporate Headquarters
    Robert Nelson Sales and Marketing
    Mary S. MacDonald Sales and Marketing
    Robert Nelson Engineering
    Mary S. MacDonald Engineering
    Robert Nelson Finance
    Mary S. MacDonald Finance

    Этот запрос («без соединения») возвращает неверный результат, так как имеющиеся между таблицами связи не задействованы. Отсюда и появляется дублирование информации в результирующей таблице. Правильный результат дает запрос с использованием операции соединения:

    получить список сотрудников, состоящих в должности «вице-президент», а также названия их отделов

    FIRST_NAME LAST_NAME DEPARTMENT
    Robert Nelson Engineering
    Mary S. MacDonald Sales and Marketing

    В вышеприведенном запросе использовался способ непосредственного указания таблиц с помощью их имен. Возможен (а иногда и просто необходим) также способ указания таблиц с помощью алиасов (псевдонимов). При этом алиасы определяются в предложении FROM запроса SELECT и представляют собой любой допустимый идентификатор, написание которого подчиняется таким же правилам, что и написание имен таблиц. Потребность в алиасах таблиц возникает тогда, когда названия столбцов, используемых в условиях соединения двух (или более) таблиц, совпадают, а названия таблиц слишком длинны.

    Замечание 1: в одном запросе нельзя смешивать использование написания имен таблиц и их алиасов.

    Замечание 2: алиасы таблиц могут совпадать с их именами.

    получить список сотрудников, состоящих в должности «вице-президент», а также названия их отделов

    FIRST_NAME LAST_NAME DEPARTMENT
    Robert Nelson Engineering
    Mary S. MacDonald Sales and Marketing

    А вот пример запроса, соединяющего сразу три таблицы:

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

    FIRST_NAME LAST_NAME JOB_TITLE DEPARTMENT
    Robert Nelson Vice President Engineering
    Phil Forest Manager Quality Assurance
    K. J. Weston Sales Representative Field Office: East Coast
    Katherine Young Manager Customer Support
    Chris Papadopoulos Manager Research and Development
    Janet Baldwin Sales Co-ordinator Pacific Rim Headquarters
    Roger Reeves Sales Co-ordinator European Headquarters
    Walter Steadman Chief Financial Officer Finance

    В данном примере последние три условия необходимы в силу того, что первичный ключ в таблице JOB состоит из трех полей — см. рис.1.

    Мы рассмотрели внутренние соединения с использованием стандарта ANSI-89. Теперь опишем новый (ANSI-92) стандарт:

    • условия соединения записываются в предложении FROM, в котором слева и справа от зарезервированного слова «JOIN» указываются соединяемые таблицы;
    • условия поиска, основанные на правой таблице, помещаются в предложение ON;
    • условия поиска, основанные на левой таблице, помещаются в предложение WHERE.

    получить список служащих (а заодно и название отдела), являющихся сотрудниками отдела «Customer Support», фамилии которых начинаются с буквы «P»

    FIRST_NAME LAST_NAME DEPARTMENT
    Leslie Phong Customer Support
    Bill Parker Customer Support

    В некоторых задачах необходимо получить информацию, выбранную особым образом только из одной таблицы. Для этого используются так называемые самосоединения, или рефлексивные соединения. Это не отдельный вид соединения, а просто соединение таблицы с собой с помощью алиасов. Самосоединения полезны в случаях, когда нужно получить пары аналогичных элементов из одной и той же таблицы.

    получить пары фамилий сотрудников, которые приняты на работу в один и тот же день

    LAST_NAME LAST_NAME HIRE_DATE
    Nelson Young 28-DEC-1988
    Reeves Stansbury 25-APR-1991
    Bishop MacDonald 1-JUN-1992
    Brown Ichida 4-FEB-1993

    получить список пар отделов с одинаковыми годовыми бюджетами

    DEPARTMENT DEPARTMENT BUDGET
    Software Development Finance 400000.00
    Field Office: East Coast Field Office: Canada 500000.00
    Field Office: Japan Field Office: East Coast 500000.00
    Field Office: Japan Field Office: Canada 500000.00
    Field Office: Japan Field Office: Switzerland 500000.00
    Field Office: Singapore Quality Assurance 300000.00
    Field Office: Switzerland Field Office: East Coast 500000.00

    Внешние соединения

    Напомним, что внутреннее соединение возвращает только те строки, для которых условие соединения принимает значение true. Иногда требуется включить в результирующий набор большее количество строк.

    Вспомним, запрос вида

    возвращает только те строки, для которых условие соединения (e.dept_no = d.dept_no) принимает значение true.

    Внешнее соединение возвращает все строки из одной таблицы и только те строки из другой таблицы, для которых условие соединения принимает значение true. Строки второй таблицы, не удовлетворяющие условию соединения (т.е. имеющие значение false), получают значение null в результирующем наборе.

    Существует два вида внешнего соединения: LEFT JOIN и RIGHT JOIN.

    В левом соединении (LEFT JOIN) запрос возвращает все строки из левой таблицы (т.е. таблицы, стоящей слева от зарезервированного словосочетания «LEFT JOIN») и только те из правой таблицы, которые удовлетворяют условию соединения. Если же в правой таблице не найдется строк, удовлетворяющих заданному условию, то в результате они замещаются значениями null.

    Для правого соединения — все наоборот.

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

    FIRST_NAME LAST_NAME DEPARTMENT
    Robert Nelson Engineering
    Bruce Young Software Development

    В результирующий набор входит и отдел «Software Products Div.» (а также отдел «Field Office: Singapore», не представленный здесь), в котором еще нет ни одного сотрудника.

    Универсальность: несмотря на существование разных диалектов языка, в большой степени SQL не зависит от СУБД, на которой он используется

    Изначально SQL разрабатывался как язык, максимально приближенный по виду к английскому, однако со временем развился в достаточно сложный инструмент, малопонятный для среднего пользователя

    Стандарты: будучи высоко развитым языком с более чем двадцатилетней историей, SQL имеет стандарты, которые сохраняют устойчивость языка в контексте новых разработок

    Некоторые особенности языка SQL создают возможность для ошибок при работе с реляционными БД: SQL разрешает повторяющиеся строки в таблицах, неопределенные значения записей (NULL), колонки таблиц пронумерованы, разрешены пустые и повторяющиеся имена полей

    Декларативность: при отправлении SQL-запроса, пользователь не должен определять технически, каким образом будут получены данные из БД — система управления базой данных самостоятельно переведет операторы SQL на технический язык более низкого уровня

    В некоторых случаях отступления от стандарта все же становятся достаточно сильными, что мешает при разработке решения для разных систем

    Преимущества и недостатки

    Представление данных в виде древовидной структуры. Входом является корень дерева — первый файл, к которому привязаны остальные

    Значительно сокращаются затрачиваемые ресурсы памяти и быстродействия; реализация сложна в техническом плане; необходимо подробное знание структуры БД

    Данные представлены в виде сетевой структуры (развитие иерархической модели: у дочерних объектов может быть любое количество предков)

    Реализация сетевой модели не требует больших ресурсов памяти и времени, однако сложность реализации очень высока

    Основной компонент, отличающий реляционную от других моделей — отношение. Реляционная БД представляет собой набор таких отношений, на практическом уровне называемых таблицами

    Реляционные базы данных более понятны для пользователя, чем иерархические и сетевые; физическая и логическая независимость таких БД очень высока (без изменения программы можно редактировать организацию данных); однако создание связей между таблицами вызывает избыточность по полям

    Хостинг в Европе для новичков (от 25 руб/мес) и VIP-хостинг для профессионалов (от 1000 руб/мес)

    Скидка 25% на все тарифы хостинга по промокоду STDCITF

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

    Читайте также:

    1. Алгоритмы планирования запросов к жесткому диску
    2. Базовые технологии обработки запросов в архитектурах файл-сервера и клиент-сервера
    3. Брокер (посредник) объектных запросов ORB (Object Request Broker)
    4. Введение в язык запросов QBE
    5. Визуальные средства создания запросов.
    6. Внесение сведений в базу данных запросов КУГИ
    7. Выполнение запросов Whois в системах UNIX
    8. Выполнение запросов Whois в системах Windows
    9. Интерактивное выполнение SQL-запросов
    10. Использование подзапросов.
    11. Использование эхо-запросов и эхо-ответов в утилите PING
    12. Конструктор запросов.

    Oracle

    Microsoft Access

    MS SQL – Server

    Visual FoxPro

    Этот язык программирования представляет собой дальнейшее развитие одного из популярных языков разработки баз данных – FoxPro. Принципиальным отличием Visual FoxPro от его «прародителя» FoxPro является возможность «визуального» — объектно – ориентированного программирования практически всех компонентов СУБД. Интерфейс Visual FoxPro полностью соответствует графической оболочке операционных систем Windows, что делает работу по созданию СУБД достаточно понятной для тех, кто имеет на своих компьютерах данные операционные системы.

    Возможности Visual FoxPro предполагают разработку локальных или многопользовательских баз данных в пределах одного предприятия.

    Данная программная система в основном предназначена не для разработки пользовательских приложений, а для управления многопользовательскими базами данных, разработанными по архитектуре клиент – сервер. Эта система позволяет управлять базами данных, взаимодействуя с клиентскими компьютерами, имеющими различные по техническим характеристикам аппаратные средства. SQL – Server предназначен для обработки значительных объемов информации, но как правило, не более терабайт, что вполне достаточно для отдельных предприятий.

    Это одна из самых популярных прикладных программных систем для разработки баз данных.

    Это программная среда, предназначена для создания систем управления реляционными базами данных с достаточно большими объемами информации. Система предоставляет пользователю все необходимые средства для автоматизации создания и обработки данных, а также для управления данными при работе.

    Основным достоинством является ее ориентация не на программиста, а на конечного пользователя.

    Последние версии позволяют применять систему для создания многопользовательских баз данных. В этом случае таблицы баз данных могут быть переданы на сервер, а пользовательский интерфейс сохранен на компьютере клиента. В этом случае представляется возможным сочетать простоту разработки всех компонентов СУБД с применением Microsoft Access, а задами управления многопользовательскими базами данных возложить на MS SQL – Server.

    Эта система предназначена для разработки корпоративных реляционных баз данных, объемы информации в которых превышают терабайты. Основу системы составляет язык SQL. Система отличается возможностью высокой степени защиты данных.

    Структурированный язык запросов является обычным языком программирования, состоящим из операторов и правил грамматики. Запрос к таблице базы данных на языке SQL представляет собой инструкцию SELECT, которую можно описать следующим образом.

    SELECT [ALL|] (список полей таблицы или запроса)

    FROM (список таблиц или запросов. На основе которых формируется запрос)

    [WHERE (условия отбора данных) ]

    [GROUP BY (список полей, по которым упорядочивается вывод данных в запросе) ]

    [HAVING (условие для группировки данных в запросе)]

    [ORDER BY (список полей, по которым упорядочивается вывод данных в запросе) ]

    В рассмотренной структуре SELECT ALL – ключевое слово которое означает, что в результирующий набор записей включаются все записи таблицы или запроса, которые удовлетворяют условиям запроса.

    Ключевые слова могут отсутствовать в запросе.

    В зависимости от характера выполняемых действий операторы SQL можно разделить на следующие группы:

    — операторы определения данных

    — операторы манипулирования данными

    — операторы управления действиями

    — операторы администрирования данными


    В таблицах представлены соответствующие группы операторов языка SQL и выполняемые ими действия.

    Операторы определения данных

    Оператор Действие
    CREATE TABLE Создает новую таблицу БД
    DROP TABLE Удаляет таблицу из БД
    ALTER TABLE Изменяет структуру существующей таблицы или ограничения целостности, задаваемые для данной таблицы
    CREATE VIEW Создает виртуальную таблицу, соответствующую некоторому SQL – запросу
    ALTER VIEW Изменяет ранее созданное представление
    DROP VIEW Удаляет ранее созданное представление
    CREATE INDEX Создает индекс для некоторой таблицы для обеспечения быстрого доступа по атрибутам, входящим в индекс
    DROP INDEX Удаляет ранее созданный индекс

    Операторы манипулирования данными

    Оператор Действие
    DELETE Удаляет одну или несколько строк, соответствующих условиям фильтрации, из базовой таблицы. Применение оператора согласуется с принципами поддержки целостности, поэтому это оператор не всегда может быть выполнен корректно, даже если синтаксически он записан правильно
    INSERT Вставляет одну строку в базовую таблицу. Допустимы модификации оператора, при которых сразу несколько строк могут быть перенесены из одной таблицы или запроса в базовую таблицу
    UPDATE Обновляет значения одного или нескольких столбцов в одной или нескольких строках, соответствующих условиям фильтрации
    SELECT Оператор, заменяющий все операторы реляционной алгебры и позволяющий сформировать результирующее отношение, соответствующее запросу

    Операторы управления действиями (транзакциями)

    Оператор Действие
    CCOMMIT Завершает комплексную, взаимосвязанную обработку информации, объединенную в транзакцию
    ROLLBACK Отменяет изменения, проведенные в ходе выполнения транзакции
    SAVEPOINT Сохраняет промежуточное состояние БД, помечает его для того, чтобы можно было в дальнейшем к нему вернуться

    Операторы администрирования данными

    Оператор Действие
    ALTER DATABASE Изменяет набор основных объектов в базе данных, ограничений, касающихся всей базы данных
    ALTER DBAREA Изменяет ранее созданную область хранения
    ALTER PASSWORD Изменяет пароль для всей базы данных
    CREATE DATABASE Создает новую базу данных
    CREATE DBAREA Создает новую область хранения базы данных
    DROP DATABASE Удаляет базу данных
    DROP DBAREA Удаляет область хранения базы данных
    GRANT Предоставляет права доступа к базе данных или отдельным ее элементам
    REVOKE Лишает права доступа к базе данных или отдельным ее элементам

    Операторы управления курсором

    Оператор Действие
    DECLARE Определяет курсор для запроса. Задает имя и определяет связанный с ним запрос к БД
    OPEN Открывает курсор. Открывает объект базы данных
    FETH Устанавливает курсор на определенную запись и считывает ее
    CLOSE Закрывает курсор. Закрывает объект базы данных
    PREPARE Генерирует план выполнения запроса в соответствии с инструкцией SELECT
    EXECUTE Выполняет сгенерированный ранее запрос

    Дата добавления: 2014-01-07 ; Просмотров: 410 ; Нарушение авторских прав? ;

    Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет

    Национальная библиотека им. Н. Э. Баумана
    Bauman National Library

    Персональные инструменты

    SQL (Structured Query Language)

    SQL
    Парадигма Мультипарадигмальный
    Спроектировано Дональд Чемберлин
    Рэймонд Бойс
    Разработчики ISO/IEC
    Первый появившийся 1974
    Стабильная версия SQL:2008 / 2008
    Печать дисциплины Статическая, строгая
    OS Кроссплатформенный
    Расширение файла .sql
    Главная реализация
    Много
    Диалект
    SQL-86, SQL-89, SQL-92, SQL:1999, SQL:2003, SQL:2008
    Под влиянием
    Datalog
    Влияние
    Agena, CQL, LINQ, Windows PowerShell [1]
    SQL (Structured Query Language)
    Разработчик ISO/IEC
    Начальная версия 1986
    Последний релиз
    Тип формата Базы данных
    Стандарт ISO/IEC 9075
    Открытый формат? Да

    SQL — (Structured Query Language, произносится ˈstrʌkʧəd ˈkwɪəri ˈlæŋgwɪʤ) — язык программирования специального назначения, разработанный для управления данными в реляционных СУБД. В круг ответственности SQL входит добавлене данных, извлечение по запросу, обновление и их удаление, а также создание и изменение схемы реляционной БД, контроль прав доступа к данным. Несмотря на то, что в основном SQL описывают как декларативный язык, в него включены и процедурные элементы. Все крупнейшие реляционные СУБД поддерживают SQL в той или иной форме. В дополнение к этому, все программы, написанные на SQL, портируются между всеми реализациями SQL, подчиняющимися стандарту, либо с изменениями на любые другие реализации.

    Содержание

    История

    Первые разработки

    В начале 1970-х годов в одной из исследовательских лабораторий компании IBM была разработана экспериментальная реляционная СУБД IBM System R, для которой затем был создан специальный язык SEQUEL, позволявший относительно просто управлять данными в этой СУБД. Аббревиатура SEQUEL расшифровывалась как Structured English QUEry Language — «структурированный английский язык запросов». Позже по юридическим соображениям [2] язык SEQUEL был переименован в SQL. Когда в 1986 году первый стандарт языка SQL был принят ANSI, официальным произношением стало [,es kju:’ el] — эс-кью-эл. Несмотря на это, даже англоязычные специалисты зачастую продолжают читать SQL как сиквел (по-русски часто говорят «эс-ку-эль»).

    C одной стороны, SQL был ориентирован на удобную и понятную пользователям формулировку запросов к реляционным БД. С другой стороны, практически с самого начала он был так называемым «полным языком БД». Это означает, что SQL включал:

    • средства определения и манипулирования схемой БД;
    • средства определения ограничений целостности и триггеров;
    • средства определения представлений БД;
    • средства определения структур физического уровня, поддерживающих эффективное выполнение запросов;
    • средства авторизации доступа к отношениям и их полям;
    • средства определения точек сохранения транзакции и выполнения фиксации и откатов транзакций.

    Целью разработки было создание простого непроцедурного языка, которым мог воспользоваться любой пользователь, даже не имеющий навыков программирования. Собственно разработкой языка запросов занимались Дональд Чэмбэрлин и Рэй Бойс (|Ray Boyce). Пэт Селинджер (Pat Selinger) занималась разработкой стоимостного оптимизатора (Шаблон:Lang-en2), Рэймонд Лори (Raymond Lorie) занимался компилятором запросов.

    Стоит отметить, что SEQUEL был не единственным языком подобного назначения. В Калифорнийском Университете Беркли была разработана некоммерческая СУБД Ingres (являвшаяся, между прочим, дальним прародителем популярной сейчас некоммерческой СУБД PostgreSQL), которая являлась реляционной СУБД, но использовала свой собственный язык QUEL, который, однако, не выдержал конкуренции по количеству поддерживающих его СУБД по сравнению с языком SQL.

    Первыми СУБД, поддерживающими новый язык, стали в 1979 году Oracle V2 для машин VAX от компании Relational Software Inc. (впоследствии ставшей компанией Oracle) и System/38 от IBM, основанная на System/R.

    Стандартизация

    Поскольку к началу 1980-х годов существовало несколько вариантов СУБД от разных производителей, причём каждый из них обладал собственной реализацией языка запросов, было принято решение разработать стандарт языка, который будет гарантировать переносимость ПО с одной СУБД на другую (при условии, что они будут поддерживать этот стандарт).

    В 1983 году Международная организация по стандартизации (ISO) и Американский национальный институт стандартов (ANSI) приступили к разработке стандарта языка SQL. По прошествии множества консультаций и отклонения нескольких предварительных вариантов, в 1986 году ANSI представил свою первую версию стандарта, описанную в документе ANSI X3.135-1986 под названием «Database Language SQL» (Язык баз данных SQL). Неофициально этот стандарт SQL-86 получил название SQL1. Год спустя была завершена работа над версией стандарта ISO 9075-1987 под тем же названием. Разработка этого стандарта велась под патронажем Технического Комитета TC97 (Technical Committee TC97), областью деятельности которого являлись процессы вычисления и обработки информации (Computing and Information Processing). Именно его подразделение, именуемое как Подкомитет SC21 (Subcommittee SC21), курировало разработку стандарта, что стало залогом идентичности стандартов ISO и ANSI для SQL1 (SQL-86).

    Стандарт SQL1 разделялся на два уровня. Первый уровень представлял собой подмножество второго уровня, описывавшего весь документ в целом. То есть, такая структура предусматривала, что не все спецификации стандарта SQL1 будут относиться к Уровню 1. Тем самым поставщик, заявлявший о поддержке данного стандарта, должен был заявлять об уровне, которому соответствует его реализация языка SQL. Это значительно облегчило принятие и поддержку стандарта, поскольку производители могли реализовывать его поддержку в два этапа.

    Со временем к стандарту накопилось несколько замечаний и пожеланий, особенно с точки зрения обеспечения целостности и корректности данных, в результате чего в 1989 году данный стандарт был расширен, получив название SQL89. В частности, в него была добавлена концепция первичного и внешнего ключей. ISO-версия документа получила название ISO 9075:1989 «Database Language SQL with Integrity Enhancements» (Язык баз данных SQL с добавлением контроля целостности). Параллельно была закончена и ANSI-версия.

    Сразу после завершения работы над стандартом SQL1 в 1987 году была начата работа над новой версией стандарта, который должен был заменить стандарт SQL89, получив название SQL2, поскольку дата принятия документа на тот момент была неизвестна. Таким образом, фактически SQL89 и SQL2 разрабатывались параллельно. Новая версия стандарта была принята в 1992 году, заменив стандарт SQL89. Новый стандарт, озаглавленный как SQL92, представлял собой по сути расширение стандарта SQL1, включив в себя множество дополнений, имевшихся в предыдущих версиях инструкций.

    Как и SQL1, SQL92 также был разделён на несколько уровней, однако, во-первых, число уровней было увеличено с двух до трёх, а во-вторых, они получили названия вместо порядковых цифр: начальный (entry), средний (intermediate), полный (full). Уровень «полный», как и Уровень 2 в SQL1 подразумевал весь стандарт целиком. Уровень «начальный» представлял собой подмножество уровня «средний», в свою очередь, представлявшего собой подмножество уровня «полный». Уровень «начальный» был сравним с Уровнем 2 стандарта SQL1, но спецификации этого уровня были несколько расширены. Таким образом, цепочка включений уровней стандартов выглядела примерно следующим образом: SQL1 Уровень 1 → SQL1 Уровень 2 → SQL92 «Начальный» → SQL92 «Средний» → SQL92 «Полный».

    После принятия стандарта SQL92 к нему были добавлены ещё несколько документов, расширявших функциональность языка. Так, в 1995 году был принят стандарт SQL/CLI (Call Level Interface, интерфейс уровня вызовов), впоследствии переименованный в CLI95. На следующий год был принят стандарт SQL/PSM (Persistent Stored Modules, постоянно хранимые модули), получивший название PSM-96. [3]

    Следующим стандартом стал SQL:1999 (SQL3). В настоящее время действует стандарт, принятый в 2003 году (SQL:2003) с небольшими модификациями, внесёнными позже (SQL:2008). История версий стандарта:

    Год Название Иное название Изменения
    1986 SQL-86 SQL-87 Первый вариант стандарта, принятый институтом ANSI и одобренный ISO в 1987 году.
    1989 SQL-89 FIPS 127-1 Немного доработанный вариант предыдущего стандарта.
    1992 SQL-92 SQL2, FIPS 127-2 Значительные изменения (ISO 9075); уровень Entry Level стандарта SQL-92 был принят как стандарт FIPS 127-2.
    1999 SQL:1999 SQL3 Добавлена поддержка регулярных выражений, рекурсивных запросов, поддержка триггеров, базовые процедурные расширения, нескалярные типы данных и некоторые объектно-ориентированные возможности.
    2003 SQL:2003 Введены расширения для работы с XML-данными, оконные функции (применяемые для работы с OLAP-базами данных), генераторы последовательностей и основанные на них типы данных.
    2006 SQL:2006 Функциональность работы с XML-данными значительно расширена. Появилась возможность совместно использовать в запросах SQL и XQuery.
    2008 SQL:2008 Улучшены возможности оконных функций, устранены некоторые неоднозначности стандарта SQL:2003 [4]

    Для поставщиков СУБД стандарт — это путеводная звезда, которая гарантирует правильное направление работ. А вот эффективность реализации стандарта — это гарантия успеха. SQL нельзя в полной мере отнести к традиционным языкам программирования, он не содержит традиционные операторы, управляющие ходом выполнения программы, операторы описания типов и многое другое, он содержит только набор стандартных операторов доступа к данным, хранящимся в базе данных. Операторы SQL встраиваются в базовый язык программирования, которым может быть любой стандартный язык типа C++, PL, COBOL и т. д. Кроме того, операторы SQL могут выполняться непосредственно в интерактивном режиме.

    Альтернатива

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

    • .QL: Объектно-ориентированный Datalog
    • 4D Query Language (4D QL)
    • BQL: Надмножество, которое сводится к SQL
    • Datalog: Критики предполагают, что Datalog имеет два преимущества перед SQL: он имеет более понятную семантику, что облегчает понимание и обслуживание программ, и это более выразительно, в частности, для рекурсивных запросов.
    • HTSQL: Метод запросов на основе URL
    • IBM Business System 12 (IBM BS12): Одна из первых полностью реляционных систем управления базами данных, введенная в 1982 году
    • ISBL
    • jOOQ: SQL, реализованный на Java как внутренний язык, специфичный для домена
    • Java Persistence Query Language (JPQL): Язык запросов, используемый API Java Persistence и библиотеку персистентности вспящем режиме
    • LINQ: Запускает операторы SQL, написанные как языковые конструкции, для запроса коллекций непосредственно изнутри кода .Net.
    • Object Query Language
    • QBE (Query By Example), созданный Moshè Zloof, IBM в 1977
    • Quel Введенный в 1974 U.C. Berkeley.
    • Tutorial D
    • XQuery

    Структура

    SQL отошёл от своего теоретического основания, реляционной модели и исчисления кортежей. В SQL таблица — не набор кортежей, а список строк: в таблице возможны строки-дубликаты, неопределённые значения, порядок колонок определён и нумеруем, а сами колонки могут иметь одинаковые имена или не иметь имён вовсе. SQL — язык специального назначения, его цель — предоставить интерфейс к реляционной БД, а SQL программа — не что иное, как инструкция для СУБД.

    SQL включает в себя выражения, решающие широкий круг задач:

    • Запросы к БД.
    • Вставка, обновление, удаление строк из таблиц.
    • Создание, замена, изменение и удаление таблиц и других объектов.
    • Управление доступом пользователей к объектам и услугам СУБД.
    • Средства гарантии целостности реляционной БД.

    Команды языка SQL чатсо разделяют на наиболее крупные сегменты:

    • Data Definition Language — синтаксис объявления схем реляционных баз данных.
    • Data Manipulation Language — синтаксис запросов, команд добавления, изменения и удаления.
    • Data Control Language — команды управления доступом к данным и операциям над ними различных учётных записей.

    Синтаксис

    Структура программы

    Программа на языке SQL — набор запросов и высказываний. Запросы в декларативной форме извлекают из базы данных необходимую информацию. Высказывания обычно имеют долгосрочный эффект на данные или на саму схему БД, а также управляют осуществлением транзакций, сессиями, диагностикой, соединением.

    Data definition language

    Data Definition Language используется для модификации схемы реляционной базы данных. Этот раздел языка состоит из четырёх типов утверждений: CREATE, ALTER, DROP, RENAME.

    Create

    Команда CREATE используется для создания новой базы данных, таблицы, индекса или хранимой процедуры.

    ALTER

    Команда ALTER используется для модификации уже существующего в БД объекта.

    Команда DROP уничтожает существующий объект (будь то база данных, таблица или иной объект).

    RENAME

    Команда RENAME используется для переименования таблицы.

    Data manipulation language

    Data Manipulation Language используется для составления запросов к СУБД или модификации её содержимого. Раздел языка состоит из четырёх типов утверждений: SELECT, INSERT, UPDATE и DELETE.

    SELECT

    SELECT извлекает 0 или более строк из различных таблиц или отображений.

    Декларативное утверждение SELECT формулирует запрос с помощью условий FROM, JOIN, WHERE, GROUP BY, HAVING, ORDER_BY, DISTINCT и др. Возможны вложенные запросы, хотя их производительность обычно уступает классическому подходу с применением JOIN. Вложенный запрос также называют подзапросом.

    INSERT

    INSERT используется для добавления новых строк в таблицу.

    UPDATE

    UPDATE используется для модификации уже существующей строки.

    DELETE

    DELETE удаляет заданный условием набор строк.

    MERGE

    MERGE объединяет элементы нескольких таблиц.

    Data control language

    Синтаксис Data Control Language используется для ограничения прав пользователей базы данных. Содержит два основных утверждения: GRANT и REVOKE.

    GRANT

    GRANT предоставляет привилегии пользователю. Все команды SQL выполняются от имени определённого пользователя.

    REVOKE

    REVOKE снимает привилегии с пользователя. Для полного снятия привилегии необходимо её снятие с понижаемого в полномочиях пользователя всеми пользователями, её давшими.

    Управление транзакциями

    START TRANSACTION, COMMIT, SAVE TRANSACTION, ROLLBACK — набор команд, использующихся для организации транзакций и обеспечивающих надёжность и целостность реляционной БД.

    Преимущества и недостатки

    Преимущества

    Несмотря на наличие диалектов и различий в синтаксисе, в большинстве своём тексты SQL-запросов, содержащие DDL и DML, могут быть достаточно легко перенесены из одной СУБД в другую. Существуют системы, разработчики которых изначально ориентировались на применение по меньшей мере нескольких СУБД (например: система электронного документооборота Documentum может работать как с Oracle Database, так и с Microsoft SQL Server и DB2). Естественно, что при применении некоторых специфичных для реализации возможностей такой переносимости добиться уже очень трудно.

    Наличие стандартов и набора тестов для выявления совместимости и соответствия конкретной реализации SQL общепринятому стандарту только способствует «стабилизации» языка. Правда, стоит обратить внимание, что сам по себе стандарт местами чересчур формализован и раздут в размерах (например, базовая часть стандарта SQL:2003 состоит из более чем 1300 страниц текста).

    С помощью SQL программист описывает только то, какие данные нужно извлечь или модифицировать. То, каким образом это сделать, решает СУБД непосредственно при обработке SQL-запроса. Однако не стоит думать, что это полностью универсальный принцип — программист описывает набор данных для выборки или модификации, однако ему при этом полезно представлять, как СУБД будет разбирать текст его запроса. Чем сложнее сконструирован запрос, тем больше он допускает вариантов написания, различных по скорости выполнения, но одинаковых по итоговому набору данных.

    Недостатки

    Создатели реляционной модели данных Эдгар Кодд, Кристофер Дейт и их сторонники указывают на то, что SQL не является истинно реляционным языком. В частности, они указывают на следующие дефекты SQL с точки зрения реляционной теории [5] :

    • SQL разрешает в таблицах строки-дубликаты, что в рамках реляционной модели данных невозможно и недопустимо;
    • SQL поддерживает неопределённые значения (NULL) и многозначную логику;
    • SQL использует порядок колонок и ссылки на колонки по номерам;
    • SQL разрешает колонки без имени и дублирующиеся имена колонок.

    В опубликованном Кристофером Дейтом и Хью Дарвеном Третьем манифесте [6] они излагают принципы СУБД следующего поколения и предлагают язык Tutorial D, который является подлинно реляционным.

    Хотя SQL и задумывался как средство работы конечного пользователя, в конце концов он стал настолько сложным, что превратился в инструмент программиста.

    Отступления от стандартов

    Несмотря на наличие международного стандарта ANSI SQL-92, многие разработчики СУБД вносят изменения в язык SQL, применяемый в разрабатываемой СУБД, тем самым отступая от стандарта. Таким образом появляются специфичные для каждой конкретной СУБД диалекты языка SQL.

    Сложность работы с иерархическими структурами

    Ранее диалекты SQL большинства СУБД не предлагали способа манипуляции древовидными структурами. Некоторые поставщики СУБД предлагали свои решения (например, в Oracle Database используется выражение CONNECT BY). В настоящее время в ANSI стандартизована рекурсивная конструкция WITH из диалекта SQL DB2. В Microsoft SQL Server рекурсивные запросы (Recursive Common Table Expressions) появились лишь в версии 2005.

    Распределенная обработка SQL

    Архитектура распределенной реляционной базы данных (DRDA) была разработана рабочей группой в IBM в период с 1988 по 1994 год. DRDA позволяет связанным с сетью реляционным базам данных взаимодействовать для выполнения запросов SQL. Интерактивный пользователь или программа может выдавать SQL-запросы локальному RDB и получать таблицы данных и индикаторы состояния в ответ от удаленных RDB. Операторы SQL также могут быть скомпилированы и сохранены в удаленных RDB как пакеты, а затем вызваны именем этого пакета. Это важно для эффективной работы прикладных программ, которые вызывают сложные высокочастотные запросы. Это особенно важно, когда доступ к таблицам находится в удаленных системах. Сообщения, протоколы и структурные компоненты DRDA определяются архитектурой распределенного управления данными.

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

    Все языки манипулирования данными, созданные до появления реляционных баз данных и разработанные для многих систем управления базами данных персональных компьютеров, были ориентированы на операции с данными, представленными в виде логических записей файлов. Это требовало от пользователей детального знания организации хранения данных и достаточных усилий для указания не только того, какие данные нужны, но и того, где они размещены и как шаг за шагом получить их. Рассматриваемый непроцедурный язык SQL (Structured Query Language — структуризованный язык запросов) ориентирован на операции с данными, представленными в виде логически взаимосвязанных совокупностей таблиц. Особенность предложений этого языка состоит в том, что они ориентированы в большей степени на конечный результат обработки данных, чем на процедуру этой обработки. SQL сам определяет, где находятся данные, какие индексы и даже наиболее эффективные последовательности операций следует использовать для их получения: не надо указывать эти детали в запросе к базе данных.

    Непроцедурность языка означает, что на нем можно указать, что нужно сделать с базой данных, но нельзя описать алгоритм этого процесса. Все алгоритмы обработки SQL-запросов генерируются самой СУБД и не зависят от пользователя. Язык SQL состоит из набора операторов, которые можно разделить на несколько категорий:

    — Data Definition Language (DDL) — язык определения данных, позволяющий создавать, удалять и изменять объекты в базах данных;

    — Data Manipulation Language (DML) — язык управления данными, позволяющий модифицировать, добавлять и удалять данные в имеющихся объектах базы данных;

    — Data Control Languages (DCL) — язык, используемый для управления пользовательскими привилегиями;

    — Transaction Control Language (TCL) — язык для управления изменениями, сделанными группами операторов;

    — Cursor Control Language (CCL) — операторы для определения курсора, подготовки операторов SQL к выполнению и некоторых других операций.

    В начале 80-х годов SQL и стал фактическим стандартом таких языков для профессиональных реляционных СУБД. В 1987 году он стал международным стандартом языка баз данных и начал внедряться во все распространенные СУБД персональных компьютеров.

    Объекты базы данных

    14.2.1 Таблицы SQL

    Понятие «таблица», как правило, связывается с реальной таблицей (создается с помощью предложения CREATE TABLE), т.е. c таблицей, для каждой строки которой в действительности имеется некоторый двойник, хранящийся в физической памяти машины. Таблицы поддерживаются всеми реляционными СУБД, и в их полях могут храниться данные разных типов. Однако SQL использует и создает ряд виртуальных (как будто существующих) таблиц: представлений, курсоров и неименованных рабочих таблиц, в которых формируются результаты запросов на получение данных из базовых таблиц и, возможно, представлений. Это таблицы, которые не существуют в базе данных, но как бы существуют с точки зрения пользователя.

    Представление представляет собой виртуальную таблицу, предоставляющую данные из одной или нескольких реальных таблиц. Реально оно не содержит никаких данных, а только описывает их источник. Нередко такие объекты создаются для хранения в базах данных сложных запросов. Фактически представление — это хранимый запрос. Создание представлений в большинстве современных СУБД осуществляется специальными визуальными средствами. Они позволяют отображать на экране необходимые таблицы, устанавливать связи между ними, выбирать отображаемые поля, вводить ограничения на записи и др. Нередко эти объекты используются для обеспечения безопасности данных, например, путем разрешения просмотра данных с их помощью без предоставления доступа непосредственно к таблицам. Помимо этого некоторые представления объектов могут возвращать разные данные в зависимости, например, от имени пользователя, что позволяет ему получать только интересующие его данные.

    При создании таблиц важным является определение первичных ключей. Очень часто первичные ключи генерируются самой СУБД. Это более удобно, чем их генерация в клиентском приложении, так как при многопользовательской работе генерация ключей с помощью СУБД — это единственный способ избежать дублирования ключей и получать их последовательные значения. В разных СУБД для генерации ключей используются разные объекты. Некоторые из таких объектов хранят целое число и правила, по которым генерируется следующее за ним значение, —обычно это выполняется с помощью триггеров. Некоторые СУБД поддерживают специальные типы полей для первичных ключей. При добавлении записей такие поля заполняются автоматически последовательными значениями (обычно целыми). В случае Microsoft Access и Microsoft SQL Server такие поля называются Identity fields.


    В большинстве реляционных СУБД ключи реализуются с помощью объектов, называемых индексами, которые можно определить как список номеров записей, указывающий, в каком порядке их предоставлять..

    Большинство современных серверных СУБД содержат специальные объекты, называемые ограничениями. Эти объекты содержат сведения об ограничениях, накладываемых на возможные значения полей. Например, с помощью такого объекта можно установить максимальное или минимальное значение для данного поля, и после этого СУБД не позволит сохранить в базе данных запись, не удовлетворяющую данному условию. Помимо ограничений, связанных с установкой диапазона изменения данных, существуют также ссылочные ограничения. Не все СУБД поддерживают ограничения. В этом случае для реализации аналогичной функциональности правил можно либо использовать другие объекты (например, триггеры), либо хранить эти правила в клиентских приложениях, работающих с этой базой данных.

    14.2.3 Запросы к базам данных

    Модификация и выбор данных, изменение метаданных и некоторые другие операции осуществляются с помощью запросов.

    Большинство современных СУБД (и некоторые средства разработки приложений) содержат средства для генерации таких запросов. Один из способов манипуляции данными называется «queries by example» (QBE) — запрос по образцу. QBE представляет собой средство для визуального связывания таблиц и выбора полей, которые следует отобразить в результате запроса. Можно также написать запрос непосредственно на языке SQL.

    В отличие от реляционной таблицы в результатах запроса строки упорядочены, и их порядок определяется исходным запросом (и иногда — наличием индексов). Поэтому можно определить текущую строку в таком наборе и указатель на нее, который называется курсором.

    Транзакция — это группа операций над данными, которые либо выполняются все вместе, либо все вместе отменяются. Завершение транзакции означает, что все операции, входящие в состав транзакции, успешно завершены, и результат их работы сохранен в базе данных. Откат транзакции означает, что все уже выполненные операции, входящие в состав транзакции, отменяются и все объекты базы данных, затронутые этими операциями, возвращены в исходное состояние. Для реализации возможности отката транзакций многие СУБД поддерживают запись в log-файлы, позволяющие восстановить исходные данные при откате. Транзакция может состоять из нескольких вложенных транзакций.

    14.2.5 Пользователи и роли

    Предотвращение несанкционированного доступа к данным является серьезной проблемой, которая решается разными способами. Самый простой — это парольная защита либо всей таблицы, либо некоторых ее полей. В настоящее время более популярен другой способ защиты данных — создание списка пользователей с именами (user names) и паролями (passwords). Некоторые СУБД, в основном серверные, поддерживают не только список пользователей, но и роли. Роль — это набор привилегий. Если конкретный пользователь получает одну или несколько ролей, то вместе с ними — и все привилегии, определенные для данной роли.

    14.2.6 Системный каталог

    Любая реляционная СУБД, поддерживающая списки пользователей и ролей, должна их где-то хранить. В дополнение к этим спискам многие СУБД хранят списки таблиц, индексов, триггеров, процедур и др., а также сведения о том, кто ими владеет. Эти списки называются системными таблицами, а соответствующая часть базы данных называется системным каталогом. Отметим, что не все СУБД поддерживают системные каталоги. Вся информация об используемых структурах данных, логической организации данных, правах доступа пользователей и, наконец, физическом расположении данныхявляется базой метаданных (БМД). Для управления БМД существует специальное программное обеспечение администрирования баз данных, которое предназначено для корректного использования единого информационного пространства многими пользователями.

    14.2.7 Триггеры и хранимые процедуры

    Триггеры и хранимые процедуры, поддерживаемые в большинстве современных серверных СУБД, используются для хранения исполняемого кода.

    Хранимая процедура — это специальный вид процедуры, который выполняется сервером баз данных. Хранимые процедуры пишутся на процедурном языке, который зависит от конкретной СУБД. Они могут вызывать друг друга, читать и изменять данные в таблицах, и их можно вызвать из клиентского приложения, работающего с базой данных. Хранимые процедуры обычно используются при выполнении часто встречающихся задач.

    Триггерами называется специальный класс хранимых процедур, автоматически запускаемых при добавлении, изменении и удалении данных из таблицы. Триггер срабатывает при модификации данных и запускает хранимую процедуру, выполняющую определенные действия. Триггеры также содержат исполняемый код, но их, в отличие от процедур, нельзя вызвать из клиентского приложения или хранимой процедуры. Триггер всегда связан с конкретной таблицей и выполняется тогда, когда при редактировании этой таблицы наступает событие, с которым он связан (например, вставка, удаление или обновление записи).

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

    Языки баз данных

    Основные элементы языка SQL

    Инструкции и имена

    SQLпредставлен множеством инструкций, каждая предписывает выполнять определенные действия. Инструкция начинается с команды – ключевого слова, описывающего выполняемое действие.

    Команды: CREAT (создать), INSERT (добавит), SELECT(выбрать), DELETE (удалить).

    Далее следует предложение, описывающее данные для инструкции или действие, выполняемое инструкцией. Предложения делятся на обязательные и необязательные.

    Каждое предложение начинается с ключевого слова, например, WHERE (где), FROM(откуда), INTO(куда). Многие предложения в качестве параметров содержат имена таблиц или столбцов, а также могут содержать дополнительные ключевые слова, константы и выражения.

    У каждого объекта в базе есть уникальное имя. Имена используются в инструкциях и указывают над каким объектом базы данных инструкция должна выполнить действие. Имена могут содержать от 1 до 128 символов, начинаться с буквы, не содержать пробелов или символов пунктуации. На практике в разных СУБД поддержка имен может быть реализована по-разному.

    В инструкциях SQL используются имена объектов БД, они могут быть как полные, так и короткие. Полное имя таблицы содержит имя пользователя и имя таблицы, разделенные точкой: .

    Полное имя столбца . .

    Короткое имя столбца .

    В одной таблице не может быть двух столбцов с одинаковыми именами, но в разных таблицах это возможно. В инструкциях используется полное именование одинаковых столбцов, если они принадлежат разным таблицам.

    Типы данных

    В столбцах могут храниться следующие типы данных.

    Целые числа: INT, SMALLINT — хранят данные о количестве, возрасте, идентификаторы.

    Десятичные числа: NUMERIC, DECIMAL — дробные числа с фиксированным количеством знаков после запятой (например, курсы валют)

    Числа с плавающей запятой: REAL, FLOAT – больший диапазон действительных чисел

    Строки символов постоянной длины: CHAR – хранят фамилии, имена, адреса, географические названия.

    Строки символов переменной длины: VARCHAR – стоки символов изменяющихся в заданном диапазоне.

    Денежные величины: MONEY, SMALLMONEY

    Дата и время: DATETIME, SMALLDATETIME

    Булевы величины: BIT — для хранения логических значений TRUE (1), FALSE (0)

    Длинный текст: TEXT – для хранения документов до 64КБ

    Неструктурированные потоки данных: BINARY, VARBINARY, IMAGE – хранят графические и видеоизображения, исполняемые файлы и др.

    Выражения

    В выражениях можно использовать 4 арифметические операции: сложение (X+Y), вычитание (X-Y), умножение (X*Y) и деление (X/Y). Для формирования сложных выражений используются круглые скобки.

    Значения NULL

    При заполнении таблиц отдельные элементы могут в ней отсутствовать, но строка должна быть введена в таблицу и участвовать в запросах на выдачу информации. Такое значение в SQL обозначается величиной NULL.Этозначение показывает, что в конкретной строке элемент данных отсутствует. При этом NULL не является значением данных и в связи с этим не имеет определенного типа. Это признак, показывающий, что значение элемента данных не задано.

    Операции с таблицами

    При помощи языка SQL можно создавать, удалять, изменять таблицы и столбцы в имеющихся таблицах, вносить и удалять данные.

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

    Для создания таблицы используется оператор CREATE TABLE, определяет новую таблицу и подготавливает к приему данных, относится к языку определения данных DDL и имеет в стандарте SQL92 следующее формальное описание:

    CREATE TABLE имя таблицы

    (определение поля [,определение поля, … n],

    ограничение на таблицу [,…n]);

    Где: имя таблицы – имя создаваемой таблицы

    Определение поля имеет вид: имя поля тип [(размер)] [ограничение на поле]

    Существуют следующие ограничения, накладываемые на поле: NULL, NOT NULL, PRIMARY KEY, FOREIGN KEY, UNIQUE, DEFAULT

    NULL –может содержать неопределенные значения

    NOT NULL –столбец не может содержать неопределенные значения

    PRIMARY KEY –задает первичный ключ отношения

    UNIQUE –задается уникальность значений в столбце, такому столбцу автоматически устанавливаетсяNOT NULL

    FOREIGN KEY– внешний ключ

    DEFAULT –ограничение по умолчанию

    Допустимые имена в Access: названия таблиц, полей, включающих пробелы, а также символы национальных кодировок, заключаются в прямоугольные скобки. Допустимые имена имеют длину до 64 символов, не содержат «.», «!», символы «[]», и не начинаются с пробелов.

    Ограничения для таблицы (table constraint) и ограничения для столбца (column constraint), называемые также ограничениями целостности, накладывают определенные условия на вводимые в таблицу данные.

    Ограничения для столбца указываются непосредственно после описания столбца, а ограничения для таблицы — через запятую после описания любого столбца.

    Первичный ключ таблицы – столбец (или столбцы), который уникально идентифицирует каждую строку в таблице. Кроме того первичный ключ обеспечивает ссылочную целостность данных в нескольких таблицах при наличии внешних ключей.

    Можно создать первичный ключ с помощью отдельного предложения – это ограничение на таблицу

    Примеры 1

    AА COUNTER NOT NULL,

    ВА CHAR(1) UNIQUE,

    СА CHAR(20) UNIQUE,

    PRIMARY KEY (AA));

    Еслипервичный ключ строится по столбцу, то столбцу приписывается атрибут PRIMARY KEY.

    Примеры 2

    CREATE TABLE T1(

    A1 COUNTER NOT NULL PRIMARY KEY,

    A2 CHAR(1) UNIQUE,

    A3 CHAR(20) UNIQUE);

    Таблица Т1 с полями А1,А2,А3, поле А1 – поле с первичным ключом.

    Т1
    А1 А2 А3
    A
    B
    C
    D

    Внешний ключ

    Ссылочную целостность-в реляционной базе данных – это согласованность между связанными таблицами. Ссылочная целостность обычно поддерживается путем комбинирования первичного ключа и внешнего ключа. Для соблюдения ссылочной целостности требуется, чтобы любое поле в таблице, объявленное внешним ключом, могло содержать только значения из поля первичного ключа родительской таблицы …» Следует отметить, что типы данных столбцов, используемых в этом ограничении, должны совпадать, а типы таблиц (постоянная базовая таблица, глобальная временная таблица, локальная временная таблица) родительского и внешнего ключа — соответствовать друг другу

    FOREIGN KEY (имя поля внешнего ключа) REFERENCTS имя родительской таблицы

    REFERENCES table (fields list) — ограничение требует совпадения значений столбцов данной таблицы с указанными столбцами родительской таблицы (Пример 3).

    FOREIGN KEY (fields list) — это ограничение по внешнему ключу аналогично ограничению REFERENCES для столбцов и гарантирует, что все значения, указанные во внешнем ключе, будут соответствовать значениям родительского ключа, обеспечивая ссылочную целостность.

    Пример 3

    Рассмотрим создание в таблице внешних ключей.

    T2
    C1 C2 A1 C3
    ff
    gg
    hh
    ii

    CREATE TABLE T2 (

    C1 COUNTER NOT NULL PRIMARY KEY,

    C2 CHAR(3) UNIQUE,

    A1 INT NOT NULL

    FOREIGN KEY (A1) REFERENCES T1,

    C3 CHAR(2) NOT NULL);

    В этой таблице поле А1 является внешним ключом и связывается с помощью предложения REFERENCES с одноименным полем таблицы Т1, которое является первичным ключом.

    Изменение структуры таблицы

    Для изменения таблицы предназначена команда ALTER TABLE имя таблицы (

    [,ADD, MODIFY, DROP> имя поля [тип] [NOT NULL]]…)

    Изменение структуры таблицы может состоять в добавлении (ADD), изменении (MODIFY), и удалении (DROP) одного или нескольких столбцов таблицы. Правила записи такие же, как для создания

    Пример 4

    В созданной ранее таблице Т1 необходимо добавит еще одно поле.

    ALTER TABLE T1 ADD A4 int;

    Для изменения типа данных поля используется команда ALTER COLUMN

    ALTER TABLE имя таблицы

    ALTER COLUMN имя поля тип

    Пример 5

    ALTER COLUMN A4 char(5)

    При удалении столбца из таблицы удаляются все данные, при этом столбец не должен быть единственным в таблице.

    ALTER TABLE имя таблицы

    DROP [COLUMN] имя поля

    Пример 6

    Пример 7

    Ключевое поле не может быть удалено.

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

    Команда DROP TABLE имя-таблицы

    При удалении таблицы существуют ограничения – операцию нельзя выполнить, если на таблицу с помощью ограничений целостности FOREIGN KEY ссылаются другие таблицы. Для выполнения операции такие ограничения целостности необходимо предварительно удалить.

    Создание SQL-запросов

    SQL-запрос – это структурированный язык выбора данных из одной или нескольких таблиц.

    Команда SELECT


    Для формирования запроса используется командаSELECT.

    SELECT [DISTINCT] Список Выбираемых Полей

    FROM Список Таблиц

    [WHERE Условие Выборки]

    [GROUP BY Условие Группировки]

    [HAVING Условие ограничения, накладываемое на группу]

    [ORDER BY Условие Упорядочивания]

    Обозначения: Необязательные опции заключаются в квадратные скобки. Вертикальная черта обозначает, что может быть выбрана одна из опций, которые стоят слева и справа от черты, но не обе сразу.

    По умолчанию в выборку включаются все строки, опция DISTINCT (отличный от других) отображает только неповторяющиеся строки. Применяется в команде SELECTтолько один раз ко всему списку выбора.

    Команда INTO направляет запрос в новую таблицу.

    В списке выбираемых полей необходимо перечислить поля разделять запятой. В конце запроса ставится точка с запятой. При выборке всех полей ставится *.

    Таблица «Pokup» (Покупатели), с полями:

    Код товара Nkod

    Вид оплаты Cvid

    Стоимость товара Ntov

    Стоимость доставки Ndos

    Дата поступления заявки Dpos

    Дата и время выполнения Tvip

    Cfam Nkod Cvid Ntov Ndos Dpos Tvip
    Гребенев А. Н. безналичный 389.00 12.00 12/04/98 13/04/98 10:40:00
    Гребенев А. Н. безналичный 500.00 56.00 12/04/98 12/04/98 03:10:00
    Акимченко В. Г. безналичный 560.00 20.00 13/04/98 15/04/98 02:50:00
    Звягинцев Р. Т. безналичный 125.00 23.00 15/04/98 15/04/98 09:30:00
    Скрынников Е. В. безналичный 498.00 19.00 12/04/98 13/04/98 10:25:00
    Степанова Е. Д. наличный 124.00 8.00 11/04/98 13/04/98 09:15:00
    Шараева Е. Н. наличный 875.00 100.00 10/04/98 12/04/98 10:10:00
    Денисов А. В. наличный 1200.00 267.00 14/04/98 15/04/98 09:30:00

    Таблица «Tovary» (Товары):

    Код товара Nkod

    Наименование товара Cnaim

    Nkod Cnaim Nzena Nsort
    Лак паркетный 38.90
    Кафель отделочный 124.00
    Обои 23.00
    Зеркало 560.00
    Краска
    Натяжной потолок
    Клеенка

    Импортировать заданные таблицы в новую базу данных.

    Создать запросы к таблицам Pokup и Tovary, используя командуSELECT

    1.Выбрать поля «Фамилия» и «Дата поступления заявки» из таблицы «Pokup».

    SELECT Cfam, Dpos

    FROM Pokup;

    2.Выбрать все поля таблицы «Pokup».

    SELECT Pokup.*

    FROM Pokup;

    Итоговые запросы

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

    В качестве агрегатных функций можно использовать:

    SUM() вычисляет сумму всех значений, содержащихся в столбце;

    MIN() Минимальное значение;

    MAX() Максимальное значение;

    AVG() Среднее значение;

    COUNT() подсчитывает количество значений, содержащихся в столбце;

    COUNT(*) подсчитывает количество строк в таблице результатов запроса.

    Новому полю, являющемуся выражением от других полей присваивается имя:

    ASимя поля.КлючевоесловоASможно использовать для присваиванияпсевдонимов столбцам.

    3.Выбрать поля «Фамилия», «КодТовара», рассчитать сумму стоимости товара и доставки, название поля СуммарнаяЦена.

    SELECT Pokup.Cfam, Pokup.Nkod, Ntov+Ndos AS s_m

    FROM Pokup;

    3_1. Выбрать поля «Cnaim», «Nzena» из 2 таб, вывести новую цену , увеличенную в 3 раза, название поля «НоваяЦена».

    SELECT tovary.Cnaim, tovary.Nzena, nzena*3 AS НоваяЦена

    FROM tovary;

    4.Рассчитать, используя агрегатные функции общее количество покупателей, среднюю стоимость товара, максимальную, минимальную стоимость и суммарную стоимость товара.

    SELECT COUNT(cfam) AS kol_vo, AVG(ntov) AS sred, max(ntov) AS m_x, min(ndos) AS m_n

    FROM Pokup;

    Применение ключевого слова DISTINCT, записанного перед аргументом агрегатной функции к столбцу, приводит к удалению из него повторяющихся значений.

    SELECT cfam, nkod, ntov

    FROM Pokup

    WHERE nkod>400;

    Условие может строиться с использованием логической операции AND (И), OR(ИЛИ), NOT (НЕ), включать в себя операции сравнения: , >=, =.

    6.Выберем из таблицы «Pokup» поля «Фамилия покупателя», «Код товара» и «Стоимость товара» для всех товаров с кодом больше 400, но меньше 700.

    SELECT cfam, nkod, ntov

    FROM Pokup

    WHERE nkod>400 And nkod 500 , использоватьHAVING.

    SELECT Pokup.Cvid, Sum(Ntov+Ndos) AS Цена, Nkod

    FROM Pokup

    GROUP BY Pokup.Cvid, Nkod

    HAVING (Sum([Ntov]+[Ndos])>500);

    FROM Tovary

    ORDER BY nzena;

    10_1. Выбрать все поля из таблицы «Tovary» в порядке убывания сорта.

    SELECT *

    FROM Tovary

    ORDER BY nsort DESC;

    10_2. и 10_3.Выбрать 5 первых строк из таблицы Tovary

    SELECT TOP 5 *

    FROM Tovary;

    Отсортировать по убыванию Nkod и выбрать опять 5 первых строк.

    SELECT TOP 5 *

    FROM Tovary

    ORDER BY Nkod;

    Внесение изменений в БД

    FROM Pokup

    WHERE ntov>500;

    FROM Pokup, Tovary

    WHERE Tovary.nkod=Pokup.nkod;

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

    FROM Pokup A, Tovary B

    WHERE B.nkod=A.nkod;

    FROM pokup LEFT JOIN tovary

    ON Pokup.nkod = Tovary.nkod

    3.Правое соединение строится при помощи опции RIGHT JOIN…ON.

    Действует аналогично предыдущему запросу, только таблицы меняются местами.

    Вложенные запросы

    Вложенный запрос (подзпрос) – запрос позволяющий использовать результат одного запроса в качестве составной части другого запроса.

    1. Вывести список товаров, имеющих цену меньше средней.

    SELECT Cnaim FROM Tovary

    Языки баз данных

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

    Хранимые в базе данные необходимо обрабатывать. Для повышения эффективности работы с БД применяю запросы, позволяющие производить множественную обработку данных, вводить, редактировать, удалять множество данных, а также выбирать данные из таблиц.

    Запрос – специальным образом описанное требование, определяющее состав производимых над БД операций по выборке, удалению или модификации данных.

    Для подготовки запросов применяются два основных языка описания запросов:

    — Язык QBE (Query By Example) – язык запросов по образцу;

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

    Основное отличие между ними в способе формирования запросов:

    QBE – ручное или визуальное формирование запросов;

    SQL – программирование запроса.

    Наглядным примером применения QBE являются запросные формы в MS Access. В диалоговом окне находятся связанные таблицы, и информация о запросе по каждому из полей, т.е. создается образец запроса.

    Структурированный язык запросов SQL предназначен для обработки и чтения информации, хранящейся в БД, является непроцедурным языком программирования и не содержит операторов управления, организации подпрограмм, ввода-вывода и т.д. В связи с этим SQL автономно не используется, обычно он погружен в среду встроенного языка программирования СУБД.

    Язык SQL появился в 1970-е годы. Его прототип был разработан фирмой IBM и известен под названием SEQUEL (Structured English Query Language). SQL вобрал в себя достоинства реляционной модели, в частности достоинства лежащего в ее основе математического аппарата реляционной алгебры и реляционного исчисления, используя при этом сравнительно небольшое число операторов и относительно простой синтаксис. Благодаря своим качествам язык SQL стал официально утвержденным в качестве стандарта языком работы с реляционными базами данных. Этот стандарт поддерживается всеми ведущими мировыми фирмами, действующими в сфере технологий баз данных. Использование выразительного и эффективного стандартного языка позволило обеспечить независимость разрабатываемых прикладных программных систем от конкретного типа используемой СУБД.

    Говоря о стандарте языка SQL, следует заметить, что большинство его коммерческих реализаций имеют некоторые отличия от стандарта. Это, конечно, ухудшает совместимость систем, использующих различные «диалекты» SQL. Но, с другой стороны, полезные расширения реализаций языка обеспечивают его развитие и со временем включаются в новые редакции стандарта. Учитывая место, занимаемое SQL в современных информационных технологиях, его знание необходимо любому специалисту, работающему в этой области.

    Язык работы с данными, который способна воспринимать СУБД, состоит из двух частей: язык определения данных (DDL) и язык манипулирования данными (DML).

    DDL используется для определения схемы БД, а язык DML — для чтения и обновления данных, хранимых в базе. Эти языки называются подъязыками данных, т.к. в них нет конструкций для выполнения вычислительных операций, условных операторов и операторов цикла.

    Во многих СУБД предусмотрена возможность включения операторов подъязыка данных в программы, написанные на языках программирования высокого уровня. Кроме того предусмотрены средства интерактивного выполнения операторов, вводимых пользователем непосредственно с компьютера.

    Унификация полных языков современных профессиональных СУБД достигается за счет внедрения объектно-ориентированного языка четвертого поколения 4GL, последний позволяет организовывать циклы, условные предложения, меню, экранные формы и сложные запросы к базам данных.

    Непроцедурный язык SQL ориентирован на операции с данными, представленными в виде логически взаимосвязанных совокупностей таблиц, является компактным языком с небольшим (менее 30) набором предложений.

    В нем существуют:

    • предложения определения данных (определение баз данных, а также определение и уничтожение таблиц и индексов);
    • запросы на выбор данных (предложение SELECT);
    • предложения модификации данных (добавление, удаление и изменение данных);
    • предложения управления данными (предоставление и отмена привилегий на доступ к данным, управление транзакциями и другие).

    Кроме того, он предоставляет возможность выполнять в этих предложениях:


    • арифметические вычисления (включая разнообразные функциональные преобразования), обработку текстовых строк и выполнение операций сравнения значений арифметических выражений и текстов;
    • упорядочение строк и (или) столбцов при выводе содержимого таблиц на печать или экран дисплея;
    • создание представлений (виртуальных таблиц), позволяющих пользователям иметь свой взгляд на данные без увеличения их объема в базе данных;
    • запоминание выводимого по запросу содержимого таблицы, нескольких таблиц или представления в другой таблице (реляционная операция присваивания).
    • агрегатирование данных: группирование данных и применение к этим группам таких операций, как среднее, сумма, максимум, минимум, число элементов и т.п.

    Основные элементы языка SQL

    Инструкции и имена

    SQLпредставлен множеством инструкций, каждая предписывает выполнять определенные действия. Инструкция начинается с команды – ключевого слова, описывающего выполняемое действие.

    Команды: CREAT (создать), INSERT (добавит), SELECT(выбрать), DELETE (удалить).

    Далее следует предложение, описывающее данные для инструкции или действие, выполняемое инструкцией. Предложения делятся на обязательные и необязательные.

    Каждое предложение начинается с ключевого слова, например, WHERE (где), FROM(откуда), INTO(куда). Многие предложения в качестве параметров содержат имена таблиц или столбцов, а также могут содержать дополнительные ключевые слова, константы и выражения.

    У каждого объекта в базе есть уникальное имя. Имена используются в инструкциях и указывают над каким объектом базы данных инструкция должна выполнить действие. Имена могут содержать от 1 до 128 символов, начинаться с буквы, не содержать пробелов или символов пунктуации. На практике в разных СУБД поддержка имен может быть реализована по-разному.

    В инструкциях SQL используются имена объектов БД, они могут быть как полные, так и короткие. Полное имя таблицы содержит имя пользователя и имя таблицы, разделенные точкой: .

    Полное имя столбца . .

    Короткое имя столбца .

    В одной таблице не может быть двух столбцов с одинаковыми именами, но в разных таблицах это возможно. В инструкциях используется полное именование одинаковых столбцов, если они принадлежат разным таблицам.

    Типы данных

    В столбцах могут храниться следующие типы данных.

    Целые числа: INT, SMALLINT — хранят данные о количестве, возрасте, идентификаторы.

    Десятичные числа: NUMERIC, DECIMAL — дробные числа с фиксированным количеством знаков после запятой (например, курсы валют)

    Числа с плавающей запятой: REAL, FLOAT – больший диапазон действительных чисел

    Строки символов постоянной длины: CHAR – хранят фамилии, имена, адреса, географические названия.

    Строки символов переменной длины: VARCHAR – стоки символов изменяющихся в заданном диапазоне.

    Денежные величины: MONEY, SMALLMONEY

    Дата и время: DATETIME, SMALLDATETIME

    Булевы величины: BIT — для хранения логических значений TRUE (1), FALSE (0)

    Длинный текст: TEXT – для хранения документов до 64КБ

    Неструктурированные потоки данных: BINARY, VARBINARY, IMAGE – хранят графические и видеоизображения, исполняемые файлы и др.

    Выражения

    В выражениях можно использовать 4 арифметические операции: сложение (X+Y), вычитание (X-Y), умножение (X*Y) и деление (X/Y). Для формирования сложных выражений используются круглые скобки.

    Значения NULL

    При заполнении таблиц отдельные элементы могут в ней отсутствовать, но строка должна быть введена в таблицу и участвовать в запросах на выдачу информации. Такое значение в SQL обозначается величиной NULL.Этозначение показывает, что в конкретной строке элемент данных отсутствует. При этом NULL не является значением данных и в связи с этим не имеет определенного типа. Это признак, показывающий, что значение элемента данных не задано.

    Операции с таблицами

    При помощи языка SQL можно создавать, удалять, изменять таблицы и столбцы в имеющихся таблицах, вносить и удалять данные.

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

    Для создания таблицы используется оператор CREATE TABLE, определяет новую таблицу и подготавливает к приему данных, относится к языку определения данных DDL и имеет в стандарте SQL92 следующее формальное описание:

    CREATE TABLE имя таблицы

    (определение поля [,определение поля, … n],

    ограничение на таблицу [,…n]);

    Где: имя таблицы – имя создаваемой таблицы

    Определение поля имеет вид: имя поля тип [(размер)] [ограничение на поле]

    Существуют следующие ограничения, накладываемые на поле: NULL, NOT NULL, PRIMARY KEY, FOREIGN KEY, UNIQUE, DEFAULT

    NULL –может содержать неопределенные значения

    NOT NULL –столбец не может содержать неопределенные значения

    PRIMARY KEY –задает первичный ключ отношения

    UNIQUE –задается уникальность значений в столбце, такому столбцу автоматически устанавливаетсяNOT NULL

    FOREIGN KEY– внешний ключ

    DEFAULT –ограничение по умолчанию

    Допустимые имена в Access: названия таблиц, полей, включающих пробелы, а также символы национальных кодировок, заключаются в прямоугольные скобки. Допустимые имена имеют длину до 64 символов, не содержат «.», «!», символы «[]», и не начинаются с пробелов.

    Ограничения для таблицы (table constraint) и ограничения для столбца (column constraint), называемые также ограничениями целостности, накладывают определенные условия на вводимые в таблицу данные.

    Ограничения для столбца указываются непосредственно после описания столбца, а ограничения для таблицы — через запятую после описания любого столбца.

    Первичный ключ таблицы – столбец (или столбцы), который уникально идентифицирует каждую строку в таблице. Кроме того первичный ключ обеспечивает ссылочную целостность данных в нескольких таблицах при наличии внешних ключей.

    Можно создать первичный ключ с помощью отдельного предложения – это ограничение на таблицу

    Примеры 1

    AА COUNTER NOT NULL,

    ВА CHAR(1) UNIQUE,

    СА CHAR(20) UNIQUE,

    PRIMARY KEY (AA));

    Еслипервичный ключ строится по столбцу, то столбцу приписывается атрибут PRIMARY KEY.

    Примеры 2

    CREATE TABLE T1(

    A1 COUNTER NOT NULL PRIMARY KEY,

    A2 CHAR(1) UNIQUE,

    A3 CHAR(20) UNIQUE);

    Таблица Т1 с полями А1,А2,А3, поле А1 – поле с первичным ключом.

    Т1
    А1 А2 А3
    A
    B
    C
    D

    Внешний ключ

    Ссылочную целостность-в реляционной базе данных – это согласованность между связанными таблицами. Ссылочная целостность обычно поддерживается путем комбинирования первичного ключа и внешнего ключа. Для соблюдения ссылочной целостности требуется, чтобы любое поле в таблице, объявленное внешним ключом, могло содержать только значения из поля первичного ключа родительской таблицы …» Следует отметить, что типы данных столбцов, используемых в этом ограничении, должны совпадать, а типы таблиц (постоянная базовая таблица, глобальная временная таблица, локальная временная таблица) родительского и внешнего ключа — соответствовать друг другу

    FOREIGN KEY (имя поля внешнего ключа) REFERENCTS имя родительской таблицы

    REFERENCES table (fields list) — ограничение требует совпадения значений столбцов данной таблицы с указанными столбцами родительской таблицы (Пример 3).

    FOREIGN KEY (fields list) — это ограничение по внешнему ключу аналогично ограничению REFERENCES для столбцов и гарантирует, что все значения, указанные во внешнем ключе, будут соответствовать значениям родительского ключа, обеспечивая ссылочную целостность.

    Пример 3

    Рассмотрим создание в таблице внешних ключей.

    T2
    C1 C2 A1 C3
    ff
    gg
    hh
    ii

    CREATE TABLE T2 (

    C1 COUNTER NOT NULL PRIMARY KEY,

    C2 CHAR(3) UNIQUE,

    A1 INT NOT NULL

    FOREIGN KEY (A1) REFERENCES T1,

    C3 CHAR(2) NOT NULL);

    В этой таблице поле А1 является внешним ключом и связывается с помощью предложения REFERENCES с одноименным полем таблицы Т1, которое является первичным ключом.

    Изменение структуры таблицы

    Для изменения таблицы предназначена команда ALTER TABLE имя таблицы (

    [,ADD, MODIFY, DROP> имя поля [тип] [NOT NULL]]…)

    Изменение структуры таблицы может состоять в добавлении (ADD), изменении (MODIFY), и удалении (DROP) одного или нескольких столбцов таблицы. Правила записи такие же, как для создания

    Пример 4

    В созданной ранее таблице Т1 необходимо добавит еще одно поле.

    ALTER TABLE T1 ADD A4 int;

    Для изменения типа данных поля используется команда ALTER COLUMN

    ALTER TABLE имя таблицы

    ALTER COLUMN имя поля тип

    Пример 5

    ALTER COLUMN A4 char(5)

    При удалении столбца из таблицы удаляются все данные, при этом столбец не должен быть единственным в таблице.

    ALTER TABLE имя таблицы

    DROP [COLUMN] имя поля

    Пример 6

    Пример 7

    Ключевое поле не может быть удалено.

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

    Команда DROP TABLE имя-таблицы

    При удалении таблицы существуют ограничения – операцию нельзя выполнить, если на таблицу с помощью ограничений целостности FOREIGN KEY ссылаются другие таблицы. Для выполнения операции такие ограничения целостности необходимо предварительно удалить.

    Создание SQL-запросов

    SQL-запрос – это структурированный язык выбора данных из одной или нескольких таблиц.

    Команда SELECT

    Для формирования запроса используется командаSELECT.

    SELECT [DISTINCT] Список Выбираемых Полей

    FROM Список Таблиц

    [WHERE Условие Выборки]

    [GROUP BY Условие Группировки]

    [HAVING Условие ограничения, накладываемое на группу]

    [ORDER BY Условие Упорядочивания]

    Обозначения: Необязательные опции заключаются в квадратные скобки. Вертикальная черта обозначает, что может быть выбрана одна из опций, которые стоят слева и справа от черты, но не обе сразу.

    По умолчанию в выборку включаются все строки, опция DISTINCT (отличный от других) отображает только неповторяющиеся строки. Применяется в команде SELECTтолько один раз ко всему списку выбора.

    Команда INTO направляет запрос в новую таблицу.

    В списке выбираемых полей необходимо перечислить поля разделять запятой. В конце запроса ставится точка с запятой. При выборке всех полей ставится *.

    Таблица «Pokup» (Покупатели), с полями:

    Код товара Nkod

    Вид оплаты Cvid


    Стоимость товара Ntov

    Стоимость доставки Ndos

    Дата поступления заявки Dpos

    Последнее изменение этой страницы: 2020-01-25; Нарушение авторского права страницы

    Основы языка SQL

    Федорук В.Г.

    АННОТАЦИЯ


    Содержание


    Краткие сведения из теории

    Язык SQL был разработан фирмой IBM в конце 70-х годов. Первый международный стандарт языка был принят международной стандартизирующей организацией ISO в 1989 г. [2], а новый (более полный) — в 1992 г. [3]. В настоящее время все производители реляционных СУБД поддерживают с различной степенью соответствия стандарт SQL92.

    Единственной структурой представления данных (как прикладных, так и системных) в реляционной базе данных (БД) является двумерная таблица. Любая таблица может рассматриваться как одна из форм представления теоретико-множественного понятия отношение (relation), отсюда название модели данных — ?реляционная?.
    В реляционной модели данных таблица обладает следующими основными свойствами:

    1. идентифицуруется уникальным именем;
    2. имеет конечное (как правило, постоянное) ненулевое количество столбцов;
    3. имеет конечное (возможно, нулевое) число строк;
    4. столбцы таблицы идентифицируются своими уникальными именами и номерами;
    5. содержимое всех ячеек столбца принадлежит одному типу данных (т.е. столбцы однородны), содержимым ячейки столбца не может быть таблица;
    6. строки таблицы не имеют какой-либо упорядоченности и идентифицируются только своим содержимым (т.е. понятие ?номер строки? не определено);
    7. в общем случае ячейки таблицы могут оставаться ?пустыми? (т.е. не содержать какого-либо значения), такое их состояние обозначается как NULL.

    Примечание . Необходимо иметь в виду, что видимая пользователям СУБД логическая организация данных (в нашем случае с помощью реляционной модели) может очень слабо коррелироваться с их физической организацией в памяти ЭВМ.

    На содержимое таблиц допустимо накладывать ограничения в виде:

    1. требования уникальности содержимого каждой ячейки какого-либо столбца и/или совокупности ячеек в строке, относящихся к нескольким столбцам;
    2. запрета для какого-либо столбца (столбцов) иметь ?пустые? (NULL) ячейки.

    Ограничение в виде требования уникальности тесно связано с понятием ключа таблицы. Ключом таблицы называется столбец или комбинация столбцов, содержимое ячеек которого(ых) используется для прямого доступа (?быстрого? определения местоположения) к строкам таблицы. Различают ключи первичный (он может быть только единственным для каждой таблицы) и вторичные. Первичный ключ уникален и однозначно идентифицирует строку таблицы. Столбец строки, определенный в качестве первичного ключа, не может содержать ?пустое? (NULL) значение в какой-либо своей ячейке. Вторичный ключ определяет местоположение, в общем случае, не одной строки таблицы, а нескольких ?подобных? (в любом случае ускоряя доступ к ним, хотя не в такой степени как ключ первичный).
    Ключи используются внутренними механизмами СУБД для оптимизации затрат на доступ к строкам таблиц (путем, например, их физического упорядочения по значениям ключей или построения двоичного дерева поиска).

    Основными операциями над таблицами являются следующие.

    1. Проекция — построение новой таблицы из исходной путем включения в нее избранных столбцов исходной таблицы.
    2. Ограничение — построение новой таблицы из исходной путем включения в нее тех строк исходной таблицы, которые отвечают некоторому критерию в виде логического условия (ограничения).
    3. Объединение — построение новой таблицы из 2-ух или более исходных путем включения в нее всех строк исходных таблиц (при условии, конечно, что они подобны).
    4. Декартово произведение — построение новой таблицы из 2-ух или более исходных путем включения в нее строк, образованных всеми возможными вариантами конкатенации (слияния) строк исходных таблиц. Количество строк новой таблицы определяется как произведение количеств строк всех исходных таблиц.

    Пречисленные выше 4 операции создают базис, на основе которого может быть построено большинство (но не все) практически полезных запросов на извлечение информации из реляционной БД.
    Примечание . Набор операций будет полным, если дополнить его операциями пересечения и вычитания. Однако в данном пособии реализация этих операций в языке SQL не рассматривается.

    Кроме перечисленных выше в языке SQL реализованы операции модификации содержимого строк таблицы и пополнения таблицы новыми строками (что теоретически может рассматриваться как операция объединения), а также операции управления таблицами.
    Рассмотренные выше операции над таблицами реляционной БД обладая функциональной полнотой, будучи реализованы на практике в своем ?чистом? каноническом виде, как правило, крайне неэкономичны (в первую очередь это относится к комбинации операций ограничения и декартового произведения). Разработчики реальных реляционных СУБД прибегают ко всевозможным приемам и ?ухищрениям? для минизации вычислительных затрат (в первую очередь, машинного времени) при выполнении этих операций. Общим способом, нашедшим отражение в языке SQL, повышения эффективности выполнения запросов в реляционных СУБД являются импользование ключей индексов.

    Индексом называется скрытая от пользователя вспомогательная управляющая структура, обеспечивающая прямой (или ?квази?-прямой) метод доступа к строкам таблицы, позволяющий исключить последовательный просмотр всех строк таблицы для обнаружения отвечающих некоторому критерию поиска. Индексы неявным образом (скрытно от пользователя) автоматически создаются для всех ключей таблицы.

    В настоящее время наибольшее распространение получили реляционные SQL СУБД двух групп:

    1. мощные крупные коммерческие СУБД, ориентированные на хранение огромных объемов информации (от гигабайт);
    2. мобильные компактные свободно распространяемые (в том числе и в исходных кодах) СУБД, использование которых оправдано и для БД объемом всего лишь в десятки килобайт.

    Наиболее известными СУБД первой группы являются:

    • Sybase SQLserver фирмы Sybase, Inc.;
    • Oracle фирмы Oracle Corporation;
    • Ingres фирмы Computer Associates International;
    • Informix фирмы Informix Corporation.

    К наиболее популярным СУБД второй группы относятся:

    • PostgreSQL организации PostgreSQL;
    • microSQL фирмы Hughes Technologies Pty. Ltd.;
    • mySQL фирмы T.C.X DataKonsult AB.

    В данном учебном пособии практические упражнения, которые может выполнить обучающийся после изучения основ языка SQL, реализуются средствами СУБД mySQL.

    Все перечисленные выше СУБД построены по принципу ?клиент-сервер?, как это показано на рисунке ниже. SQL-сервер реализует собственно хранение данных и манипулирование ими. Он принимает запросы на языке SQL от своих клиентов, выполняет их и возвращает результаты (чаще всего в виде вновь построенных таблиц) клиентам. Для общения с клиентами используется специальный протокол (как правило, реализованный в виде протокола прикладного уровня стека сетевых протоколов TCP/IP).
    Клиентскую часть СУБД составляют клиенты трех основных типов.

    • Интерактивные клиенты, обеспечивающие пользователю-человеку возможность общения с SQL-сервером непосредственно с помощью языка SQL.
    • ИПП-клиенты, обеспечивающие интерфейс прикладного программирования (ИПП) прикладным программам, использующим средства SQL-сервера. Такой ИПП может быть средством общения прикладной программы с SQL-сервером на языке SQL или набором стандартных функций доступа к реляционной SQL БД без формирования символьных строк запросов (например, стандартный интерфейс ODBC).
    • WWW-клиенты, встраиваемые в World Wide Web-сервера и обеспечивающие доступ к информационным возможностям SQL-сервера пользователям сети Internet по протоколу HTTP (протоколу передачи гипертекстовых документов).

    Именно WWW-клиент СУБД mySQL используется в учебном пособии для выполнения практических упражнений.

    Основы синтаксиса языка SQL


    Учебная база данных

    Метод конечных элементов (МКЭ) — универсальный метод решения краевых задач (систем дифференциальных уравнений в частных производных с краевыми условиями), к которым относится и задача анализа (моделирования) напряженно-деформированного состояния плоских механических объектов. Одним из основных этапов метода является этап разбиения ?тела? моделируемого объекта на элементарные участки, называемые конечными элементами (КЭ). Для плоских объектов чаще всего такие КЭ представляют собой треугольники. Пример покрытия объекта (типа рычага) сеткой конечных элементов представлен ниже. В дальнейшем МКЭ обеспечивает нахождение численных значений фазовых переменных , характеризующих состояние объекта (в нашем случае напряжений поля сил и деформаций), в вершинах таких треугольников, называемых узлами (nodes).

    Для идентификации узлов и КЭ их помечают номерами (числами из натурального ряда 1. ). Задача ручного разбиения двумерного (а тем более трехмерного) объекта на КЭ является трудоемкой и нетривиальной, поэтому в реальных промышленных системах анализа, реализующих МКЭ, существует, как правило, несколько автоматических процедур покрытия исследуемой области сеткой КЭ. Однако сгенерированная любым способом (автоматически/вручную/комбинированно) сетка КЭ нуждается в проверке некоторым набором правил ее корректности, обеспечивающих минимальность вычислительных затрат и точность получаемых результатов.

    Требуется, например, чтобы форма треугольных КЭ как можно теснее приближалась к равносторонней (это влияет на точность получаемого решения). Для уменьшения вычислительных затрат желательно иметь минимальную разность идентификаторов вершин для каждого КЭ.

    В задачах исследования поведения механических объектов под воздействием внешних факторов с каждым КЭ связан набор свойств материала, покрываемого КЭ, в состав которого входят, например, плотность (density) среды, модуль Юнга (elastic module), коэффициент Пуассона (Poisson’s coefficient), прочность (strength) и др.

    Задачей МКЭ является исследование поведения объектов (в нашем примере механических) при различных граничных условиях (воздействиях внешней среды), в состав которых входят:

    • произвольно направленная сила;
    • произвольно направленный момент сил;
    • ?заделка?, жестко фиксирующая положение узла сетки по линейным координатам и углу вращения;
    • шарнир, позволяющий узлу свободно ?вращаться? относительно его фиксируемого положения по линейным координатам;
    • ?каток?, дающий узлу возможность свободно перемещаться по оси x или y.

    Описанная выше информация является предметом хранения и манипулирования в учебной БД, используемой в данном пособии. Основу БД составляют четыре таблицы:

    1. таблица ?nodes?, содержащая информацию об узлах КЭ-сетки (идентификатор, x- и y-координаты);
    2. таблица ?elements?, содержащая информацию обо всех КЭ, составляющих сетку (номер КЭ, идентификаторы трех вершин, наименование материала);
    3. таблица ?materials?, содержащая информацию о свойствах различных конструкционных материалов (наименование, плотность, модуль Юнга, коэффициент Пуассона, прочность);
    4. таблица ?loadings?, содержащая информацию о граничных условиях решаемой задачи (вид условия, его ?направление?, номер узла приложения, числовое значение).

    Типы данных языка SQL

    Отличие типов данных CHAR и VARCHAR заключается в том, что для хранения в таблице строк символов типа CHAR используется точно size байт (хотя содержание хранимых строк может быть значительно короче), в то время как для строк типа VARCHAR незанятые символами строк (?пустые?) байты в таблице не хранятся.
    Подчеркнем, что величины len и dec (в отличие от size ) не влияют на размер хранения данных в таблице, а только форматируют вывод данных из таблицы.

    Примечание. Тип данных BLOB поддерживается непосредственно не всеми СУБД, однако каждая из них предлагает его аналог (например, BINARY или IMAGE).

    Рекомендация. Разрабатывая мобильное приложение (рассчитанное на работу в среде различных СУБД), старайтесь без необходимости избегать использования необязательных возможностей в описании типов данных.

    Манипулирование таблицами


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


    Примеры


    Модификация таблицы


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


    Добавление строк в таблицу

    Пример
    Добавление информации о новом КЭ в таблицу elements: В результате в таблице elements появится новая строка, содержащая в поле props значение ?steel?, как умолчательное значение, определенное при создании таблицы.

    Пример
    Включение в таблицу materials сведений о новом материале: Пример
    Добавление в таблицу граничных условий loadings информации об ориентированном горизонтально ?катке? в узле 2:

    Выборка данных из таблиц


    Описание столбцов результирующей таблицы


    1. Специальным (и часто используемым) видом в_выражение является символ ?*?, имеющий смысл ?все столбцы таблиц из списка FROM?.
    Пример
    Вывод всего содержимого таблицы materials. 2. Простым (и также часто используемым) случаем в_выражение является полное имя столбца одной из таблиц списка FROM.
    Пример
    Пусть необходимо определить идентификаторы всех узлов КЭ-сетки, к которым приложено какое-либо граничное условие, при этом необходимо знать тип приложенного условия. Эта задача может быть решена с помощью следующего оператора: Полученная результирующая таблица содержит дублирующие строки для узла 27. Избежать этого можно, добавив в оператор ключевое слово DISTINCT, запрещающее включение в итоговую таблицу одинаковых строк. 3. В общем случае в_выражение может представлять собой сложное скобочное выражение над содержимым столбцов таблицы, использующее арифметические, строковые, логические операции и функции. Наиболее часто используемые функции описаны ниже в таблицах 1, 2, 3.
    Пример
    Используемая нами таблица свойств материалов materials содержит в своих столбцах density и elastics значащие разряды чисел, выражающих, соответственно, плотность и модуль Юнга каждого материала. Для получения реальных значений этих свойств в системе единиц измерения СИ (кг/м 3 и Па) необходимо домножить их на масштабные коэффициенты, что реализуется следующим оператором Таблица 1. Арифметические функции

    СинтаксисВозвращаемое значение
    ABS( x )абсолютное значение x
    SQRT( x )квадратный корень от x
    MAX( x , y , . )значение наибольшего элемента из списка x, y , .
    MIN( x,y , . )значение наименьшего элемента из списка x, y , .
    Примечание. x, y — числа или выражения, имеющие числовой результат.
    Таблица 2. Строковые функции
    СинтаксисВозвращаемое значение
    LEFT( s,n )первые n символов строки s
    RIGHT( s.n )последние n символов строки s
    SUBSTRING( s, m, n )строка, получаемая копированием n символов из строки s , начиная с m -ого символа строки s
    LCASE( s )строка, полученная из s преобразованием всех букв в строчные
    UCASE( s )строка, полученная из s преобразованием всех букв в прописные
    CONCAT( s1, s2 , . )строка, полученная конкатенацией (слиянием) строк s1, s2 , .
    LENGTH( s )длина строки s
    Примечание. s, s1,s2 — строки или выражения, имеющие результат в виде строки. n, m — числа или выражения, имеющие числовой результат.
    Таблица 3. Операторы и функции, возвращающие логическое значение (1 — ?истина?, 0 — ?ложь?)
    СинтаксисВозвращаемое значение
    x = y
    x ?? y
    x ? y
    x ? y
    x ?= y
    x ?= y
    1 (?истина?) или 0 (?ложь?) в зависимости от результата операции сравнения (соответственно, ?равно?, ?не равно?, ?больше?, ?меньше?, ?не больше?, ?не меньше?)
    NOT l1, если l= 0
    0, если l =1
    l1 AND l2результат логической операции ?И? над l1 и l2
    l1 OR l2результат логической операции ?ИЛИ? над l1 и l2
    BETWEEN ( x, y z )результат выполнения логического выражения ( x ?= y AND x ?= z )
    ISNULL ( v )1, если v имеет значение ?пусто? (NULL)
    0, в противном случае
    IFNULL ( v1, v2 )v1 , если v1 не ?пусто?
    v2 , в противном случае
    s LIKE образец1, при удачном сопоставлении строки s с образец
    0, в противном случае
    s NOT LIKE образец0, при удачном сопоставлении строки s с образец
    1, в противном случае
    Примечание. x, y, z — числа или выражения, имеющие числовой результат. l, l1, l2 — логические константы (1 или 0) или логические выражения. s — строка или выражение, имеющее результат в виде строки. v, v1, v2 — переменные или выражения.
    образец — константа в виде строки символов, возможно, содержащая метасимволы ?%? и ?_?. В образец метасимвол ?_? сопоставим с любым одиночным символом строки s , метасимвол ?%? — с любой цепочкой символов любой ( в том числе нулевой) длины.

    Пример
    Пусть необходимо при выводе информации о плотности материалов из таблицы materials идентифицировать материалы, имеющие в своем составе алюминий (правильнее, имеющие в своем названии упоминание об алюминии). Эта задача может быть решена с помощью следующего оператора. Пример
    Пусть необходимо для каждого конечного элемента определить наибольшее значение разности идентификаторов узлов, являющихся вершинами этого конечного элемента. Данная задача может быть решена следующим оператором 4. В общем случае в_выражение допускает использование агрегативных (называемых также групповыми) функций, принимающих в качестве своего единственного аргумента значения всех ячеек указанного столбца результирующей таблицы. Основные такие функции представлены в таблице 4. Таблица 4. Агрегативные функции

    Синтаксис Возвращаемое значение
    SUM( x ) сумма значений столбца x результирующей таблицы
    MAX( x ) наибольшее значение из всех значений ячеек столбца x
    MIN( x ) наименьшее значение из всех значений ячеек столбца x
    AVG( x ) среднее значение для всех значений ячеек столбца x
    COUNT( x ) общее количество ячеек в столбце x
    Примечание . Функции MAX(. ) и MIN(. ) с одним аргументом являются агрегативными функциями, они же с двумя и более аргументами — обычные функции (см. таблицу 1).

    Пример
    Для отыскания наибольшего значения модуля Юнга для материалов, имеющихся в таблице materials, можно использовать следующий оператор Пример
    Следующий оператор SELECT позволяет определить общее количество конечных элементов в КЭ-сетке из нашего примера.

    Описание критерия выборки содержимого строк результирующей матрицы

    Примечание . Обратите внимание, что синтаксис сложн_условие существенно ?беднее? синтаксиса в_выражение . Дело в том, что сложн_условие используется (в том числе и на физическом уровне организации БД) на этапе выборки из исходной (возможно, очень большой) таблицы (таблиц) необходимых строк в результирующую. Для сокращения времени прямого доступа к строкам таблиц они (таблицы) снабжаются ключами и индексами. Реальный эффект от использования ключей и индексов может быть достигнут только при условии, что запросы на поиск в таблицах используют в качестве критерия поиска только значения ячеек столбцов в ?чистом? виде, а не в виде их комбинации в сложном выражении.
    Конструкция же в_выражение применяется, по сути дела, к значениям столбцов уже результирующей таблицы, поэтому сложность в_выражение на эффективность выполнения запроса практически никакого влияния не оказывает.

    Пример
    Для определения координат местоположения узла 11 может использоваться следующий оператор: Пример
    Пусть необходимо определить идентификаторы всех конечных элементов, имеющих в качестве одной из своих вершин узел 20. Эта задача может быть решена следующим оператором SELECT Пример
    Для определения идентификаторов узлов КЭ-сетки, расположенных в первом квадранте системы координат можно использовать следующий оператор Пример
    Следующий оператор SELECT может быть использован для определения граничных условий, имеющих в качестве одной из своих характеристик численное значение величины

    Упорядочивание и группирование строк результирующей таблицы

    Пример
    Для вывода информации об узлах КЭ-сетки в убывающем порядке их (узлов) идентификаторов может быть использован следующий оператор: Пример
    Пусть необходимо вывести информацию о конечных элементах, упорядочив ее;

    • в первую очередь по идентификаторам узлов, являющихся первой вершиной конечного элемента;
    • во вторую очередь по идентификаторам узлов, являющихся второй вершиной конечного элемента;

    Для решения этой задачи можно использовать следующий оператор
  • Оператор SELECT может обеспечить вычисление агрегативных функций для групп строк результирующей таблицы. Для этого используется список полных имен столбцов в конструкции GROUP BY. Первое полное имя столбца в списке GROUP BY используется для разбиения строк результирующей таблицы на первичные группы, первичные группы разделяются на ?подгруппы? вторым в списке полным именем столбца и так далее.

    Оператор SELECT выводит значения агрегативных функций для самых ?малых? подгрупп.

    Пример
    Пусть необходимо определить количество узлов КЭ-сетки, охватываемых каждым видом граничных условий. Для этого может быть использован следующий оператор Примечание . Конструкция HAVING сложн_условие , как необязательная составная часть предложения GROUP BY, позволяет определять дополнительный (к WHERE сложн_условие ) критерий выборки строк в группы. Этот дополнительный критерий применяется в режиме постпроцессорной обработки к таблице, полученной в результате использования критерия из конструкции WHERE.

    Выборка из нескольких таблиц


    Манипулирование строками таблиц


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


    Модификация строк


    Литература


    1. Дж. Мартин. Организация баз данных в вычислительных системах. — М.;Мир,1980. — 662с.
    2. С.Д. Кузнецов. Стандарты языка реляционных баз данных SQL: краткий обзор. //СУБД, 1996, N2, сс. 6-36.
    3. С.Д. Некузнецов
    4. Зенкевич О., Морган К. Конечные элементы и аппроксимации. — М.:Мир, 1979. — 318с.

    Упражнения

    Ниже приведены задания, которые необходимо выполнить, используя оператор SELECT выборки информации из учебной базы данных. Выполнение некоторых заданий значительно упростится, если учесть приведенные ниже рекомендации.

    1. Определить наилучший материал по показателю ?прочность/плотность?.
    2. Получить таблицу, содержащую значения наибольших разностей идентификаторов узлов — вершин для каждого конечного элемента.Таблица должна быть упорядочена по убыванию значений разностей.
    3. Определить максимальное значение в таблице из предыдущего задания.
    4. Определить протяженность механического объекта вдоль оси x.
    5. Определить расстояние каждого узла КЭ-сетки до начала системы координат.
    6. Определить расстояние каждого узла КЭ-сетки до узла, в котором приложено граничное условие в виде горизонтальной силы (подчеркнем, не до узла с заданным идентификатором, а до узла с заданным типом граничного условия).
    7. Найти наибольшее расстояние между узлами КЭ-сетки.
    8. Получить таблицу длин сторон всех элементов КЭ-сетки в виде ?идентификатор элемента — длина стороны 1 — длина стороны 2 — длина стороны 3?.
    9. Получить таблицу расстояний между узлами КЭ-сетки, соединенных сторонами конечных элементов, в виде ?идентификатор узла 1 — идентификатор узла 2 — длина?.
    10. Получить таблицу площадей всех конечных элементов. Напомним, для вычисления площади треугольника можно использовать формулу где a, b, c — длины сторон треугольника, а p — его полупериметр.
    11. Определить общую массу механического объекта при условии, что его толщина (в направлении z) равна 5 мм.
    12. Получить таблицу значений отношения maxL/minL для каждого конечного элемента с указанием тех элементов, для которых это отношение превышает величину 1,4 (здесь maxL — наибольшая длина стороны конечного элемента, minL — наименьшая длина стороны конечного элемента).
    13. Получить таблицу ?степеней? узлов КЭ-сетки. Степенью узла в теории графов называется количество ребер, соединяющих данный узел с соседними.
    14. Определить для каждого узла КЭ-сетки количество ?подключенных? к нему конечных элементов.
    15. Получить список идентификаторов ?угловых? узлов КЭ-сетки (назовем унловыми узлы, являющиеся вершиной только одного элемента).
    16. Получить список идентификаторов конечных элементов, одна или более сторон которых образуют границу области.
    17. Предложить способ определения факта расположения узла КЭ-сетки на границе области. Выдать список всех таких узлов.


    Рекомендация. В СУБД mySQL синтаксис оператора SELECT выглядит следующим образом: где син_столбца — имя, назначаемое столбцу результирующей таблицы. Это имя используется при выводе результирующей таблицы (в ее ?шапке?) вместо текста в_выражение . Однако, более полезно то, что син_столбца можно использовать в в_выражение , расположенном правее в списке оператора SELECT. Это в ряде случаев позволяет существенно уменьшить сложность конструкции в_выражение . Необходимо также отметить, что аналогичные средства именования (введения синонимов) столбцов результирующей таблицы предлагают все СУБД, поддерживающие язык SQL.

  • 1.3 Таблицы SQL.

    До сих пор понятие «таблица», как правило, связывалось с реальной или базовой таблицей, т.е. c таблицей, для каждой строки которой в действительности имеется некоторый двойник, хранящийся в физической памяти машины (рис.1.2). Однако SQL использует и создает ряд виртуальных (как будто существующих) таблиц: представлений, курсоров и неименованных рабочих таблиц, в которых формируются результаты запросов на получение данных из базовых таблиц и, возможно, представлений. Это таблицы, которые не существуют в базе данных, но как бы существуют с точки зрения пользователя.

    Базовые таблицы создаются с помощью предложения CREATE TABLE (создать таблицу), подробное описание которого приведено в главе 5. Здесь же приведем пример предложения для создания описания таблицы Блюда:

    Рис. 1.2. База данных в восприятии пользователя

    CREATE TABLE Блюда
    (БЛ SMALLINT,
    Блюдо CHAR (70),
    В CHAR (1),
    Основа CHAR (10),
    Выход FLOAT,
    Труд SMALLINT);

    Предложение CREAT TABLE специфицирует имя базовой таблицы, которая должна быть создана, имена ее столбцов и типы данных для этих столбцов (а также, возможно, некоторую дополнительную информацию, не иллюстрируемую данным примером). CREAT TABLE — выполняемое предложение. Если его ввести с терминала, система тотчас построит таблицу Блюда, которая сначала будет пустой: она будет содержать только строку заголовков столбцов, но не будет еще содержать никаких строк с данными. Однако можно немедленно приступить к вставке таких строк данных, возможно, с помощью предложения INSERT и создать таблицу, аналогичную таблице Блюда рис.1.1.

    Если теперь потребовалось узнать какие овощные блюда может приготовить повар пансионата, то можно набрать на терминале следующий текст запроса:

    SELECT БЛ,Блюдо
    FROM Блюда
    WHERE Основа = ‘Овощи’;

    и мгновенно получить на экране следующий результат его реализации:

    БЛ Блюдо
    1 Салат летний
    3 Салат витаминный
    17 Морковь с рисом
    23 Помидоры с луком

    Для выполнения этого предложения SELECT (выбрать), подробное описание которого будет дано в главах 2 и 3, СУБД должна сначала сформировать пустую рабочую таблицу, состоящую из столбцов БЛ и Блюдо, тип данных которых должен совпадать с типом данных аналогичных столбцов базовой таблицы Блюда. Затем она должна выбрать из таблицы Блюда все строки, у которых в столбце Основа хранится слово Овощи, выделить из этих строк столбцы БЛ и Блюдо и загрузить укороченные строки в рабочую таблицу. Наконец, СУБД должна выполнить процедуры по организации вывода содержимого рабочей таблицы на экран терминала (при этом если в рабочей таблице содержится более 20-24 строк, она должна использовать процедуры постраничного вывода и т.п.). После выполнения запроса СУБД должна уничтожить рабочую таблицу.

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

    SELECT Продукт, Белки, Жиры, Углев,
    ((Белки+Углев)*4.1+Жиры*9.3)
    FROM Продукты
    WHERE Продукт IN (‘Морковь’,’Лук’,’Помидоры’,’Зелень’);

    и получить на экране следующий результат его реализации:

    Продукт Белки Жиры Углев ((Белки+Углев)*4.1+Жиры*9.3)
    Морковь 13. 1. 70. 349.6
    Лук 17. 0. 95. 459.2
    Помидоры 6. 0. 42. 196.8
    Зелень 9. 0. 20. 118.9

    В последнем столбце этой рабочей таблицы приведены данные о калорийности продуктов, отсутствующие в явном виде в базовой таблице Продукты. Эти данные вычислены по хранимым значениям основных питательных веществ продуктов, помещены в рабочую таблицу и будут существовать до момента смены изображения на экране. Однако если необходимо сохранить эти данные в какой-либо базовой таблице, то существует предложение (INSERT), позволяющее переписать содержимое рабочей таблицы в указанные столбцы базовой таблицы (реляционная операция присваивания).

    Часто пользователя не устраивает как способ описания нужного набора выводимых строк, так и результат выполнения запроса, сформированного из данных одной таблицы. Ему хотелось бы уточнить выводимые (запрашиваемые) данные сведениями из других таблиц.

    Например, в запросе на получение состава овощных блюд

    SELECT БЛ,ПР,Вес
    FROM Состав
    WHERE БЛ IN (1,3,17,23);

    пришлось перечислять номера этих блюд, так как в таблице Состав нет данных об основных продуктах блюда (они есть в таблице Блюда). Полученный состав овощных блюд (рис.1.3,а) оказался «слепым»: в нем и блюда и продукты представлены номерами, а не именами. Удобнее и нагляднее (рис.1.3,б)

    а)
    БЛ ПР Вес Блюдо
    1 11 100 Салат летний
    1 15 80 Салат летний
    1 12 5 Салат летний
    1 4 15 Салат летний
    3 11 55 Салат витаминный
    3 15 55 Салат витаминный
    3 6 50 Салат витаминный
    3 12 20 Салат витаминный
    3 10 15 Салат витаминный
    3 16 5 Салат витаминный
    17 9 150 Морковь с рисом
    17 7 50 Морковь с рисом
    17 13 25 Морковь с рисом
    17 3 20 Морковь с рисом
    17 12 10 Морковь с рисом
    17 14 5 Морковь с рисом
    23 11 250 Помидоры с луком
    23 10 65 Помидоры с луком
    23 3 20 Помидоры с луком
    б)
    Продукт Вес
    Помидоры 100
    Яблоки 80
    Зелень 5
    Майонез 15
    Помидоры 55
    Яблоки 55
    Сметана 50
    Зелень 20
    Лук 15
    Сахар 5
    Морковь 150
    Молоко 50
    Рис 25
    Масло 20
    Зелень 10
    Мука 5
    Помидоры 250
    Лук 65
    Масло 20

    Рис. 1.3. Состав овощных блюд базы данных ПАНСИОН

    запрос сформированный по трем таблицам:

    SELECT Блюдо, Продукт, Вес
    FROM Состав,Б люда, Продукты
    WHERE Состав.БЛ = Блюда.БЛ
    AND Состав.ПР = Продукты.ПР
    AND Основа = ‘Овощи’;

    В нем для получения рабочей таблицы выполняется естественное соединение [2] таблиц Блюда, Продукты и Состав (условие соединения — равенство значений номеров блюд и значений номеров продуктов). Затем выделяются строки, у которых в столбце Основа хранится слово Овощи, и из этих строк — столбцы Блюдо, Продукт и Вес.

    Если пользователи достаточно часто интересуются составом различных блюд, то для упрощения формирования запросов целесообразно создать представление.

    Представление — это пустая именованная таблица, определяемая перечнем тех столбцов таблиц и признаками тех их строк, которые хотелось бы в ней увидеть. Представление является как бы «окном» в одну или несколько базовых таблиц. Оно создается с помощью предложения CREATE VIEW (создать представление), подробное описание которого приведено в главе 5. Здесь же приведем пример предложения для создания представления Состав_блюд:

    CREATE VIEW Состав_блюд
    AS SELECT Блюдо, Продукт, Вес
    FROM Состав,Блюда,Продукты
    WHERE Состав.БЛ = Блюда.БЛ
    AND Состав.ПР = Продукты.ПР;

    Оно описывает пустую таблицу, в которую при реализации запроса будут загружаться данные из столбцов Блюдо, Продукт и Вес таблиц Блюда, Продукты и Состав, соответственно. Теперь для получения состава овощных блюд можно дать запрос

    SELECT Блюдо,Продукт,Вес
    FROM Состав_блюд
    WHERE Основа = ‘Овощи’;

    и получить на экране терминала данные, которые представлены на рис. 1.3,б. А для получения состава супа Харчо можно дать запрос

    SELECT Блюдо, Продукт, Вес
    FROM Состав_блюд
    WHERE Блюдо = ‘Суп харчо’;

    О целесообразности создания представлений будет рассказано ниже, а здесь лишь отметим, что они позволяют повысить уровень логической независимости данных, упростить их восприятие и «скрыть» от некоторых пользователей те или иные данные, например, данные о новых ценах на продукты первой необходимости или из какой рыбы приготавливается «Судак по-польски».

    Наконец, еще об одних виртуальных таблицах — курсорах. Курсор — это пустая именованная таблица, определяемая перечнем тех столбцов базовых таблиц и признаками тех их строк, которые хотелось бы в ней увидеть. В чем же различие между курсором и представлением?

    Для пользователя представления почти не отличаются от базовых таблиц (есть лишь некоторые ограничения при выполнении различных операций манипулирования данными). Они могут использоваться как в интерактивном режиме, так и в прикладных программах. Курсоры же созданы для процедурной работы с таблицей в прикладных программах. Например, после объявления курсора

    DECLARE Блюд_состав CURSOR FOR
    SELECT Блюдо,Продукт,Вес
    FROM Состав,Блюда,Продукты
    WHERE Состав.БЛ = Блюда.БЛ
    AND Состав.ПР = Продукты.ПР
    AND Блюдо = ‘Суп харчо’;

    и его активизации (OPEN Блюд_состав) будет создана временная таблица с составом блюда «Суп харчо» и специальным указателем, определяющим в качестве текущей первую строку этой таблицы. С помощью предложения FETCH (выбрать), которое обычно исполняется в программном цикле, можно присвоить определенным переменным значения указанных столбцов этой строки. Одновременно курсор будет передвинут к следующей строке таблицы. После обработки в программе полученных значений переменных выполняется следующее предложение FETCH и т.д. до окончания перебора всех продуктов Харчо.

    Язык структурированных запросов SQL

    Язык структурированных запросов SQL


    SQL (Structure Query Language) – является общепринятом языком написания запросов к реляционной базе данных. Не является языком программирования и СУБД, т. к. не содержит команд создания интерфейса, а имеет только команды обработки данных.

    SQL запрос — команды, написанные на языке SQL

    Способы применения SQL в прикладных программах:

    1. Встроенные – SQL запрос записываются в тексте программы. Компиляция приложения специальным перепроцессором SQL преобразует исходный текст в исполняемую программу. SQL встроен почти во все СУБД и языки программирования, способные работать с базой данных (Delphi, FoxPro, Access и т. д.).

    2. Интерактивный – имеются специальные оболочки мгновенного создания и выполнения SQL запроса. Прикладная программа, передает SQL запрос и при помощи специальных функций SQL получает результат запроса без применения перепроцесора.

    Этапы выполнения операторов SQL

    Пример: запрос для поиска списка отличников

    Содержимое таблицы базы данных stud (см. таблицу)

    Текст SQL запроса:

    Select fam, grupа From stud Where mark=5;

    Синтаксический анализ проверяет корректность текста SQL команды на соответствие правилам, выполняется очень быстро, т. к. нет обращения к серверу базы (в примере проверяется правильность слов Select, From, Where и их расположение в тексте).

    Проверка параметров анализирует корректность параметров SQL-запроса (имена полей, таблицы, права пользователя и т. д.). Находятся семантические ошибки. Выполняется медленно, т. к. необходимы обращения к системным константам базы данных. (в примере проверяется правильность имени таблицы stud, нахождение в ней полей fam, grupа, mark, а так же целый тип данных поля mark).

    Оптимизация оператора разбивает целостный запрос на элементарные операции и производится составление наилучшей последовательности их выполнений. Выполняется очень медленно, т. к. требуется работа не только со словарем данных, но и использовать спастическую информацию о базе, характеризующую текущее состояние связи, расположение данных на терминалах и т. д. (в примере с начала фильтруются записи, для которых поле mark имеет значение 5, а затем формируется виртуальная таблица из двух поле и в нее записываются значения из полей таблицы fam, grupа)

    При Генерации плана выполнения создается двоичный код (на внутреннем машинном языке) созданного оптимального плана. Выполняется очень быстро.

    Исполнение плана запроса – реализуется выполнение закодированного плана и получается результат запроса. (для примера получается виртуальная (временная) таблица

    Структура языка SQL (типы команд):

    1. Язык определения данных (DDL – Data Definition Language) – команды создания (удаление, изменение структуры) объектов базы данных (таблицы, триггеры и т. д.) Create, Drop, Alter

    2. Язык изменения данных (DML – Data Manipulition Language) – команды для обработки записей (т. е. метаданных). Insert, Delete, UpDate, Select, Commit, RollBack,

    3. Команды администрирования базы данных – команды по разграничению прав и архивированию данных GRAND, Revoke

    Типы данных используемых в SQL

    · Smallint короткое целое число размером 2 байта с диапазоном — 3200 + 3200;

    · Integer – целые числа размером 4 байта — 2. +2.;

    · Float – число с плавающей точкой;

    · Date – формат дата/время размер 4 – 6 байт;

    · Char (N)– текстовое значение, где N – максимально допустимое количество символов

    Язык структурированных запросов SQL. Использование SQL в прикладном программировании

    Изучение особенностей языка структурированных запросов при использовании его в прикладном программировании. Сравнение реализации связи между SQL и языками программирования высокого уровня. Проектирование базы данных и системы управления базами данных.

    Рубрика Программирование, компьютеры и кибернетика
    Вид курсовая работа
    Язык русский
    Дата добавления 25.01.2020
    Размер файла 1,5 M

    Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

    Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

    Размещено на http://www.allbest.ru/

      Введение
    • 1. Базы данных и системы управления базами данных
    • 1.1 Основные определения и свойства баз данных
    • 1.2 Системы управления базами данных
    • 1.3 Реляционные БД: отношения, реляционные операции, ключи
    • 1.4 Проектирование базы данных. Язык UML
    • 2. Структурированный язык запросов SQL
    • 2.1 Введение в SQL. Основные понятия
    • 2.2 Создание и управление базой данных
    • 2.3 Создание и управление таблицами. Основные запросы SQL
    • 2.4 Работа с SQL в различных СУБД (MySQL, MS Access, Firebird)
    • 3. Использование SQL в прикладном программировании
    • 3.1 Возможность интеграции SQL в программный код. Потенциальные преимущества от его использования
    • 3.2 Использование SQL в Pascal (на примере Pascal Lazarus)
    • 3.3 Использование SQL в C++ (на примере MS Visual Studio)
    • 3.4 Использование SQL в ABAP (на примере SAP GUI)
    • 3.5 Сравнение результатов использования SQL в различных языках программирования
    • Заключение
    • Список использованной литературы
    • Приложения
    • ВВЕДЕНИЕ
    • Актуальность темы курсовой работы заключается в том, что использование баз данных и, как следствие, систем управления базами данных в рамках различных информационных систем и сервисов было и остается повсеместным. Более того, на момент написания работы сформировалась тенденция к увеличению роли баз данных — в особенности, удаленных от конечного пользователя (веб-приложения, «облачные» сервисы), — что повышает важность изучения всего, с базами данных связанного. Кроме того, еще одна тенденция вынуждает информационную науку искать возможности объединять и делать доступными для использования в рамках друг друга различные технологии и стандарты. Это тенденция к интеграции, универсализации как информационных систем в целом, так и компонента front-end (доступного конечному пользователю), так и различных сред разработки. Современное приложение среднего или крупного масштаба не может существовать в границах одной технологии, стандарта или языка, и для того чтобы связать между собой различные компоненты, необходимо глубокое знание как теоретической части предмета, так и прикладных решений.
    • Одним из наиболее популярных средств обращения к реляционным базам данных является язык структурированных запросов SQL (Structured Query Language). На его основе было создано множество СУБД (систем управления базами данных), в том числе масштабные решения от Microsoft и Oracle. Именно язык SQL выполняет роль связки между программной частью системы, использующей базу данных, и СУБД, написанной для этого языка запросов. В силу высокого уровня развития SQL, большого количества СУБД, использующих его, и обширных возможностей использования SQL внутри современных языков программирования высокого уровня, изучение не только семантики языка как такового, но и возможностей использования его в рамках внешних технологий является критичным для любого специалиста информационных технологий. Язык SQL является сформированным стандартом обращения к базам данных, потому знание его сильно упрощает разработку и поддержку систем, написанных на любом языке программирования, в рамках которого используется SQL. Кроме того, все чаще крупные проекты формируются из нескольких компонентов, одним из которых является СУБД. В таком случае, разные части системы, способные составлять обращения на SQL, формируют своего рода кластер, а язык структурированных запросов становится связкой между ними. Это повышает универсальность системы в целом, увеличивает ее эффективность в контексте ресурсов, требуемых на создание и поддержание системы, а также в определенной мере повышает гибкость проекта.
    • Объектом исследования курсовой работы являются «Базы данных», а предметом исследования — «Использование SQL в прикладном программировании».
    • Целью курсовой работы является изучение особенностей языка структурированных запросов при использовании его в прикладном программировании, сравнение реализации связи между SQL и языками программирования высокого уровня, практические выводы.
    • В ходе работы для достижения поставленной цели будут выполнены следующие задачи:
    • 1) дать определения баз данных и СУБД, перечислить и раскрыть важнейшие их особенности; составить классификацию баз данных и, соответственно, систем управления базами данных по различным признакам;
    • 2) описать различные модели данных, перечислить характеристики БД (базы данных) и СУБД (отношения, операции, ключи и так далее). Дать краткое описание языка UML (Unified Modeling Language), использующегося для проектирования реляционной БД, а также описать процесс проектирования базы данных;
    • 3) дать характеристику языку SQL; перечислить его особенности в рамках теории; затем перейти к прикладной части: дать поэтапное описание (с примерами) создания базы данных и таблицы, перечислить основные операторы языка; указать особенности использования SQL в различных СУБД;
    • 4) изучить теоретическую возможность использования SQL в прикладном программировании; перечислить достоинства и недостатки такой концепции;
    • 5) более подробно описать практическое использование SQL в различных языках программирования, продемонстрировать примеры, дать сравнительную характеристику.
    • При написании курсовой работы использовались научные труды следующих авторов: Баженова И.Ю [2], Баканов В.М. [3], Бураков П.В. [4], Гудов А.М [5], Дьяков И.А [6], Зиборов В.В. [7], Кетков Ю.Л. [8], Копейкин М.В. [9], и другие.
    • 1. БАЗЫ ДАННЫХ И СИСТЕМЫ УПРАВЛЕНИЯ БАЗАМИ ДАННЫХ
    • 1.1 Основные определения и свойства баз данных
    • Прежде чем давать определение базе данных и описывать характеристики данной сущности, необходимо указать значимость баз данных в современной информационной науке, пояснить разницу между базами данных и файловыми системами и в целом объяснить концепцию БД.
    • До появления повсеместно используемых стандартов баз данных и систем управления БД пользователи всякой информационной системы, содержащей в себе большое количество связанных данных (это могли быть данные предприятия, информация о клиентах, адресах, товарах — любых объектах, которые можно абстрагировать до некоего множества, связанного по признаку), вынуждены были обрабатывать эти данные без удобной модели общего доступа и связей между различными кластерами данных. Происходило это по той причине, что единственным компонентом информационных систем, способным хранить, упорядочивать и предоставлять доступ к большим объемам структурированных данных, являлись файловые системы. Всякое сложное действие, которое необходимо было выполнить с данными — в особенности, если данные хранились одновременно в разных частях системы, либо если были связаны с другим множеством данных по некоему полю, — приходилось дублировать для успешной синхронизации и стабильной работы системы. Кроме того, за неимением универсального, абстрагированного средства обработки данных такая обработка должна была быть реализована в рамках общего кода системы — как правило, процедурально, что не только замедляло работу системы, но и вносило излишнюю комплексность в код.
    • По причине этих недостатков при работе с файловыми системами была разработана концепция баз данных — систем данных, существенно облегчающих работу с большим объемом информации в рамках некоей информационной системы. На данный момент абсолютное большинство информационных продуктов используют базы данных в явном или скрытом виде. Примером явного для конечного пользователя обращения к базе данных является работа с неким электронным справочником. Скрытое обращение к базе данных — это, например, использование имени пользователя и пароля для входа на веб-страницу. Таким образом актуальность использования баз данных только растет вместе с их развитием.
    • Итак, говоря общими словами, концепция баз данных представляет собой развитие идеи файловой системы, только в случае БД возможности обработки данных, особенно массовой, облегчение доступа к данным, ускорение работы с ними существенно возрастают. На уровне теории это обеспечивается так называемыми моделями данных, о которых будет сказано ниже. На уровне практики облегчение работы с данными достигается реализацией модели данных, а также множеством средств, реализованных для данного типа БД и СУБД — системы управления базами данных.
    • Также немаловажной особенностью, которая отличает базы данных от более примитивных объектов для работы с данными, является возможность удаленного и параллельного доступа к данным нескольких пользователей. Кроме этого базы данных могут быть распределенными — в таком случае данные размещаются на нескольких физических хранителях, находящихся в разных локациях (технически, одна база данных может быть распределена по всему Земному шару, если подобное распределение оправдано). Данная особенность БД существенно облегчает создание информационных систем, работа с которыми должна вестись многими пользователями одновременно.
    • Перейдем к строгому определению понятия «База данных». Современные стандарты и научные работы в этой области выделяют несколько похожих определений:
    • «База данных — совокупность данных, хранимых в соответствии со схемой данных, манипулирование которыми выполняют в соответствии с правилами средств моделирования данных» [1, c. 3].
    • «База данных (БД) — именованная совокупность данных, отражающая состояние объектов и их отношений в рассматриваемой предметной области» [4, с. 6]
    • «База данных — набор сведений, хранящихся некоторым упорядоченным способом» [24].
    • Как можно заметить, определения, данные в разных источниках, отличаются друг от друга строгостью, полнотой и некоторыми признаками, которые должны содержаться в БД по одному определению, но не должны по другому. Из всех определений, однако, можно вывести общую и самую важную часть, которая является минимальным условием принадлежности некоей информационной сущности к базам данных: база данных всегда является набором данных, либо сведений, либо информации. Некоторые источники, посвященные изучению БД, опускают важность определения данных, однако в большинстве случаев база данных, конечно, должна содержать данные, а не просто «информацию».
    • «Данные — зарегистрированная информация; представление фактов, понятий или инструкций в форме, приемлемой для общения, интерпретации, или обработки человеком или с помощью автоматических средств» [25].
    • Исходя из этого определения, можно увидеть, что в сравнении с информацией данные являются более узким понятием; тогда как информация может быть беспорядочным набором сведений, данные всегда должны быть представлены в понятном, доступном для дальнейшей обработки виде.
    • Вернемся к понятию базы данных. Так как, исходя из большинства определений, БД содержит в себе данные, отдельный акцент следует сделать на то, что база данных — это именно структурированная, построенная по определенным правилам (модели) сущность.
    • Тем не менее, всякое определение базы данных обречено быть размытым и неполным, так как концепция баз данных является достаточно гибкой, а значит — способной к развитию. Можно также отметить, что наиболее важное определение базы данных неявно содержится в цели, с которой создается каждая БД: хранить в себе некое множество данных, схожих по определенным признакам, давая возможность пользователям получать, обрабатывать, добавлять и удалять данные, а также давать гарантию на то, что данные не будут потеряны.
    • Перейдем к более подробному описанию конкретных характеристик баз данных.
    • Основополагающей характеристикой БД, от которой зависит, в том числе, перечень СУБД, способных с ней работать, а также сам принцип связей между данными, является модель данных. За время развития науки о базах данных было построено несколько успешных моделей данных, из которых одна заняла главенствующую позицию в контексте применения на практике. Основные модели данных и их особенности представлены в таблице 1:
    • Таблица 1 — Основные модели данных
    • Менее распространенными моделями данных являются объектные, объектно-ориентированные и функциональные, однако в силу предмета данной курсовой работы нет смысла останавливаться на них подробно. Из вышеописанных моделей наибольшее развитие и масштаб применения получила реляционная модель данных. Основное преимущество данной модели — простоту использования и понимания организационной структуры — с лихвой компенсирует главный недостаток — избыточность полей. Современный уровень развития устройств долговременного хранения данных сводит на нет все возможные проблемы с нехваткой места на данные базы.
    • Другой характеристикой баз данных является содержимое БД. Хотя первые БД содержали в себе исключительно текстовую информацию, со временем возможности электронно-вычислительной техники расширились, и теперь существуют следующие виды баз данных (рисунок 1):

    Размещено на http://www.allbest.ru/

    • Рисунок 1 — классификация баз данных по содержанию и хранимой информации
    • Следующая характеристика баз данных — это степень распределенности. Централизованными базами данных называют такие, все данные которых хранятся в памяти одной вычислительной системы. Распределенные базы данных состоят из нескольких частей, хранимых в памяти разных ЭВМ вычислительной сети [10, с. 6]. Распределенные, в свою очередь, подразделяются на однородные (БД управляется одной СУБД), неоднородные (используются разные СУБД), фрагментированные (распределение достигается путем секционирования) и тиражированные (распределение достигается путем реплицирования).
    • Перечислив основные характеристики баз данных, а также моделей данных, на которых они основываются, обратимся к предмету управления базами данных — СУБД.
    • 1.2 Системы управления базами данных
    • Нередко допускаются грубые ошибки в различии между базами данных как таковыми и их системами управления. Чтобы строго разграничить два понятия, следует сразу отметить, что база данных является только набором данных и схемой их организации (а в более широком смысле — еще и набором правил работы с данными), тогда как система управления базами данных (СУБД) — это набор языковых и программных средств, предназначенных для работы с БД (создание, редактирование, удаление) [6, с. 5]. Другими словами, в более узком и очевидном смысле, система управления базами данных — это программа, включающая в себя возможности работы с определенными БД [4, с. 11].
    • За время развития баз данных и систем их управления было создано множество различных СУБД. Многие из них уже устарели технически и были заменены новыми продуктами. Тем не менее, можно разделить все СУБД на две глобальные категории: СУБД общего назначения и специализированные системы. Как исходит из названия, при разработке СУБД общего назначения не делается акцент на какой-либо стороне работы СУБД, так же как программа не создается только для некоего узкого круга баз данных. СУБД общего назначения являются многофункциональными продуктами, которые уже в ходе создания либо эксплуатации БД могут быть модифицированы (кастомизированы) под нужды пользователя либо администратора системы. В связи с широкими возможностями СУБД общего назначения, часто это коммерческие продукты, поставляемые пользователям, которые в дальнейшем могут использовать в полной мере те специфические особенности данной СУБД, которые им нужны [10, с. 18]. К группе СУБД общего назначения относится большинство известных продуктов (MS Access, MySQL, Oracle и так далее). В редких случаях, когда по некоторым причинам использование СУБД общего назначения невозможно или не оправдано, создаются специализированные системы, выполняющие лишь некоторые функции поддержки базы данных. Например, такое возможно в условиях нехватки вычислительных ресурсов у вычислительной техники, использующей СУБД (портативные ЭВМ, специализированная техника с элементами ЭВМ). Возможности современных СУБД (в первую очередь, общего назначения) включают, но не ограничиваются следующими:
    • 1) Выполнение основных функций как с БД, так и с содержащимися в ней данными: создание, редактирование архитектуры, удаление БД; добавление отношений, заполнение отношений данными, удаление данных, считка, редакция.
    • 2) Вышеописанные функции, в зависимости от СУБД, могут быть выполнены пользователем либо посредством графического интерфейса, поддерживаемого большинством СУБД, либо прямым заданием сценариев на языке определения данных (например, SQL). Соответственно, СУБД поддерживает один из таких языков.
    • 3) Все крупные СУБД имеют версии для ЭВМ с разной архитектурой и для разных операционных систем. Это позволяет использовать один продукт в работе с БД, даже если компьютеры в системе значительно отличаются программно и архитектурно. К примеру, имея сервер с ОС семейства Unix и несколько пользовательских компьютеров с Windows, можно использовать одну и ту же СУБД на всех узлах системы.
    • 4) Так как в большинстве случаев доступ к базе данных имеют несколько узлов системы, СУБД имеют широкие возможности в контроле доступа к данным (система защиты данных через проверку привилегий пользователя и так далее; контроль параллельного доступа к БД для упорядочивания редакции данных; системы восстановления утерянных данных) [4, с. 12]
    • Все вышеописанные возможности исходят из функций, возможность выполнения которых требуется от полноценной СУБД:
    • l Поддержка языков баз данных. Всякая СУБД должна поддерживать один (как правило) язык управления базами данных.
    • l Управление данными БД. Одна из основополагающих функций СУБД — добавление, изменение и удаление данных из БД. Данная функция расширяется управлением транзакциями, которые могут содержать в себе более одного действия над данными БД (например, сначала отсортировать данные отношения по признаку, затем удалить первое из них, затем добавить новую запись)
    • l Восстановление БД. Как и всякий программный продукт, СУБД должны иметь в себе средства минимизации рисков при работе с ними. Основной риск при работе с БД — это потеря данных. Дабы иметь возможность восстановить максимум потерянных данных, независимо от причины, СУБД должны иметь соответствующие средства: ведение журнала изменений, дублирование БД в фоновом режиме, создание версий, ведение распределенной БД.
    • l Управление параллельным доступом. В случае доступа к БД сразу нескольких пользователей, СУБД должна иметь средства для отсекания вероятности ошибок на этапе доступа к данным и перезаписи. Считывание данных в таком случае реализуется без блокировки оригинальной записи, а перезапись, как правило, делается либо через копии, возвращаемые от пользователя и накладываемые друг на друга в порядке их поступления, либо через блокировку изменяемых данных на время редакции.
    • l Управление буферами в оперативной памяти.
    • l Контроль доступа к БД.
    • l Наличие словаря данных — так называемого системного каталога. Данный каталог содержит в себе данные о схемах, приложениях, пользователях и является частью концепции трехуровневых СУБД.
    • Трехуровневая концепция систем управления базами данных является частью архитектуры большинства СУБД и состоит из трех уровней, изображенный на рисунке 2.

    Размещено на http://www.allbest.ru/

    • Рисунок 2: Три уровня архитектуры СУБД
    • Как видно из схемы на рисунке 2, СУБД включает в себя все три уровня архитектуры: внешний, отвечающий за пользовательские представления (ПП1, ПП2 и так далее на рисунке), внутренний уровень работает напрямую с банком данных, то есть, с данными БД, а концептуальный уровень реализует трансляцию запросов, полученных с внешнего уровня, на внутренний и преобразует данные, возвращаемые с внутреннего уровня, в такой вид, который затем внешним уровнем может быть представлен в понятном для пользователя формате [4, с. 16].
    • Наиболее распространенные СУБД (работающие с реляционными базами данных) включают: MS Access, MySQL, SQLite, Firebird и другие. На рисунках 3-5 приведен внешний вид основного окна некоторых из этих СУБД.

    Размещено на http://www.allbest.ru/

    • Рисунок 3: Основное окно MS Access 2013 (с открытой базой данных)

    Размещено на http://www.allbest.ru/

    • Рисунок 4: главное окно FlameRobin — популярного графического интерфейса СУБД Firebird

    Размещено на http://www.allbest.ru/

    • Рисунок 5: Главное окно MySQL Workbench — средства работы с MySQL
    • В дальнейшем будет рассматриваться только реляционная модель данных и СУБД, работающие с ней, так как язык SQL создан именно для работы с реляционными БД.
    • 1.3 Реляционные БД: отношения, реляционные операции, ключи
    • Главным элементом реляционных БД, вынесенным, собственно, в название, является отношение (англ. relation). Математически отношение — это подмножество декартова произведения. Следует отметить, что глубокая связь с теорией множеств у реляционных БД на этом не исчерпывается — сама реляционная алгебра черпает многие свои элементы именно из теории множеств.
    • Однако на практике термин «отношение» почти не используется и заменяется на «таблицу». Однако в случае реляционных БД различие несущественно, и по сути отношение можно принять за таблицу в контексте практики: некое количество m комбинаций n различных признаков образует отношение. В таком случае n признаков будут столбцами таблицы, а m комбинаций — ее строками [11, с. 32].
    • Таблицы в реляционных БД содержат различные данные. То, что наглядно нам представляется столбцами, именуется полями, а то, что представляется строками таблицы, — записями. Поля представляют отдельные признаки, а записи — отдельные экземпляры, состоящие из множества элементов данных, каждый из которых соответствует одному и только одному полю.
    • Данные в таблицах должны удовлетворять следующим условиям:
    • l Каждое значение, лежащее на пересечении строки и столбца, должно являться атомарным (не разбиваемым на несколько значений).
    • l Все значения в одной колонке должны принадлежать к одному типу данных.
    • l Каждая запись в таблице должна быть уникальна.
    • l Название каждого поля должно быть уникально.
    • Вернемся теперь к реляционной алгебре — имея некоторые отношения внутри базы данных, для корректной и полноценной ее работы между отношениями должны быть выстроены связи, а из каждого отношения, так же как из их связок, должна быть возможность сделать выборку (получить некоторые записи, соответствующие интересующим нас признакам).
    • Все реляционные операции (операторы) являются аналогами операций в теории множеств:
    • 1) Объединение отношений — выражается формулой R = R1?R2, где R1 и R2 — два отношения, а R — результирующее отношение, содержащее все записи, которые есть в R1 и в R2.
    • 2) Пересечение отношение — выражается формулой R = R1?R2, где R1 и R2 — два отношения, а R — результирующее отношение, содержащее только те записи, которые есть и в R1, и в R2 одновременно.
    • 3) Разность отношений — выражается формулой R = R1|R2, где R1 и R2 — два отношения, а R — результирующее отношение, содержащее только те записи, которые есть в R1, но отсутствуют в R2.
    • 4) Произведение отношений — выражается формулой R = R1ЧR2, где R1 и R2 — два отношения, а R — результирующее отношение, содержащее все возможные комбинации записей из первого отношения и второго отношения. Порядок полей при этом не играет роли.
    • 5) Проекция отношения на компоненты — это операция, заключающаяся в выборке определенных столбцов из отношения R1 и построения из них нового отношения R со столбцами в указанном порядке.
    • 6) Выборка или селекция из отношения — это удаление некоторых записей из отношения на основании определенного условия. Условие строится как логическое выражение (посредством логических операторов и арифметических операторов сравнения) [11, с. 35] Кроме основных понятий реляционных БД и реляционных операций следует иметь представление о других важных характеристиках таких баз данных:
    • Первичный ключ является сочетанием столбцов отношения (в вырожденном и наиболее частом случае это лишь один столбец), которые уникальным образом определяют каждую запись отношения. То есть значения первичного ключа должны быть разными во всех строках. Нередко для первичного ключа создают отдельное поле — некий абстрактный номер записи. Наличие первичного ключа является необходимым условием любого отношения в корректно построенной реляционной БД..
    • Кроме первичного ключа у отношений, добавленных в БД с более чем одной таблицей, может также быть внешний (вторичный) ключ. Этим ключом является поле или комбинация полей отношения, значения которых соответствуют значениям тех же столбцов другого отношения в БД. Внешний ключ необходим для связывания двух и более отношений.
    • Кроме ключей, у отношения могут существовать индексы. Индекс — это элемент реляционных БД, существующий в рамках отношения и предоставляющий быстрый доступ к записям. Процесс индексирования представляет собой составление списка строк отношения и того, какое значение в них принимает тот или иной столбец (индексирование делается для одного столбца).
    • Изучив основные понятия баз данных в целом, реляционных баз данных и систем управления базами данных, можно переходить к основному предмету работы — языку SQL и возможностям использования его в программировании, но перед этим следует сделать отступление, дабы получить представление о теоретической части проектирования реляционной БД.
    • 1.4 Проектирование базы данных. Язык UML
    • прикладной программирование язык база
    • Перед тем как приступать к созданию реальной базы данных, всегда проводится концептуальное проектирование. Кроме того, что проектирование БД упорядочивает знания о ней и уменьшает вероятность ошибки на этапе построения фактической БД, также процесс концептуального проектирования помогает разработчику найти пути эргономизации и ускорения работы базы данных, еще до того как база создана.
    • Главной задачей на этапе проектирования является наиболее точное отражение реалий тех объектов, которые будут отражены в базе данных. Для этого используются так называемые «семантические модели». Одной из популярных семантических моделей является «сущность — связь». Главными элементами такой модели являются сущности, их атрибуты и типы связей. Модель «сущность — связь» оказалась чрезвычайно эффективным инструментом трансляции абстрагированных объектов реального мира, которые должны быть перенесены в базу данных, на уровень концепции, дабы затем концептуальную модель трансформировать в реальную БД. Эффективность этого подхода заключается в том, что элементы его подробно отражают как фактическую, так и логическую суть нужных объектов.
    • Сущность в таком случае выступает образом некоего объекта реального мира, который можно мысленно представить как единое целое, но, тем не менее, разделяемое на свойства (в модели это атрибуты сущности).
    • При наличии более двух сущностей в нашей системе, между ними может и, скорее всего, возникнет связь, которая также проецируется на концептуальную модель. Затем модель совершенствуется, и на этапе перевода концепции в фактическую базу данных сущности становятся отношениями, атрибуты — полями отношений, а связи — такими же связями, но уже между таблицами.
    • При построении графической модели сущность указывается как прямоугольник, атрибут сущности — как прямоугольник со скругленными краями, а связь — как ромб. При этом атрибуты и связи соединены с сущностями прямыми линиями (рисунок 6) [4, с.36].

    Размещено на http://www.allbest.ru/

    • Рисунок 6: Графическое представление концептуальной модели «сущность — связь»
    • В концепции «сущность — связь» используются следующие важные параметры:
    • Мощность связи — это максимальное количество экземпляров сущности, связанных с одним экземпляром другой сущности. Иногда максимальное количество таких экземпляров не установлено строго и заменяется символом *. Также иногда указывается минимальное количество таких экземпляров.
    • Показатель кардинальности — это количество возможных связей для каждого экземпляра, который участвует в связи сущности. Показатель кардинальности может принимать следующие значения: один к одному (1:1), один ко многим (1:N), многие к одному (N:1), многие ко многим (M:N) [4, с. 37].
    • Для проектирования реляционных баз данных с помощью концептуальной модели «сущность — связь» было создано множество инструментов, которые часто бывают интегрированы с СУБД, однако остановимся на еще одном, схожем с этим, способе концептуального проектирования. Он заключается в использовании семантики UML. UML (унифицированный язык моделирования) — это язык графического описания для объектного моделирования во множестве областей проектирования информационных систем. В том числе, этот язык подходит для проектирования БД и, по сути, такое проектирование мало чем отличается от концепции «сущность — связь».
    • Для проектирования реляционных БД UML предлагает классовые диаграммы, которые содержат в себе классы (аналог сущности), атрибуты этих классов (аналог атрибута сущности) и связи между классами. Пример простейшей концептуальной модели, созданной на языке UML (программа Violet UML Editor), представлен на рисунке 7:

    Размещено на http://www.allbest.ru/

    • Рисунок 7: Простейшая концептуальная модель реляционной БД на языке UML
    • 2. СТРУКТУРИРОВАННЫЙ ЯЗЫК ЗАПРОСОВ SQL
    • 2.1 Введение в SQL. Основные понятия
    • Говоря о реляционных базах данных, невозможно не уделить внимание языку структурированных запросов SQL, который являет одним из наиболее популярных, многофункциональных и удобных инструментов обращения к реляционным БД.
    • Хотя SQL называется и является языком, важно понимать, что это не привычный язык программирования, а язык обращения к данным. В структуре SQL нет средств написания программ, составления форм и отчетов, также там нет функций управления выполнением программы (ветвление, циклы).
    • В чистом виде SQL представляет только инструменты для работы с кортежами (записями) отношений реляционной базы данных, однако за время развития языка и СУБД, использующих его, появились как диалекты SQL, добавляющие в него операторы, часто отличающиеся от всего, что есть в этом языке, так и функции самих СУБД, которые позволяют приблизить составление запросов SQL к более удобному виду с возможностью пользоваться некоторыми стандартными средствами языков программирования [9, с. 30].
    • Говоря о диалектах SQL, следует отметить, что многие крупные компании, занимающиеся разработкой СУБД, создали свои диалекты для спецификации языка SQL под свой продукт. Среди наиболее известных диалектов можно выделить:
    • l PL/SQL — используется в СУБД Oracle
    • l Transact-SQL — используется в СУБД Microsoft SQL
    • l Jet SQL — используется Microsoft Access
    • Популярная бесплатная СУБД Firebird имеет несколько диалектов SQL, которые можно использовать для разных БД под ее управлением.
    • Словарь SQL состоит, в основном, из операторов запросов, однако данные, с которыми работают эти запросы, необходимо хранить в понятном системе виде, поэтому всякая СУБД имеет собственный набор типов данных (язык описания схем — DDL), которые содержат в себе такие типы как INTEGER, CHAR и так далее. Набор типов, как правило, совпадает у разных СУБД на большую часть, а также соответствует некоторым типам данных в тех языках прикладного программирования, которые могут использоваться с данной СУБД. Это закладывает основу использования SQL в программировании на других языках, что немаловажно в современных условиях интеграции различных технологий [9, с. 31].
    • Как уже было сказано, основным компонентом SQL являются операторы, из которых составляются запросы к базе данных. Однако, прежде чем выполнить запрос, любая СУБД выполняет несколько проверок:
    • 1) Имеется ли у пользователя разрешение на то, чтобы выполнить запрос?
    • 2) Имеется ли у пользователя доступ к необходимым данным?
    • 3) Верен ли синтаксис введенного запроса? [18, с. 41]
    • Очевидно, что такие проверки выполняются в целях обеспечения безопасности базы данных. SQL и СУБД, использующие его, содержат в себе множество средств повышения безопасности данных. Это и другие достоинства, а также недостатки языка SQL перечислены в таблице 2 [27].
    • Таблица 2: Достоинства и недостатки языка SQL
    • Несмотря на недостатки, SQL остается мощным средством работы с реляционными БД. С помощью этого языка можно выполнять множество действий с базой данных на всех этапах ее существования — от создания до удаления. Очевидно, что основной задачей SQL при этом является работа с уже существующими таблицами. В следующих подразделах рассмотрено создание базы данных посредством языка SQL, а также основные запросы к созданной БД.
    • 2.2 Создание и управление базой данных
    • Прежде чем переходить к практическим аспектам работы с языком SQL, следует отметить главные особенности его синтаксиса.
    • Каждый запрос в SQL завершается символом «точка с запятой» — «;». Без этого символа обработчик команд не сможет определить выражение. Различные параметры запроса, как правило, разделяются запятой. Регистр, в котором записаны операторы, не имеет значения, но принято служебные слова записывать в верхнем регистре, а значения параметров — в нижнем.
    • Для создания и заполнения базы данных в большинстве диалектов SQL используются одинаковые операторы, поэтому непринципиальна СУБД, в рамках которой будет рассмотрен этот этап работы с языком (хотя необходимо отметить, что в большинстве случаев развитые графические оболочки СУБД имеют большой инструментарий для создания базы данных без ручного введения запросов SQL). В данном случае будет использована графическая оболочка MySQL Workbench, подключенная к СУБД MySQL с запущенным локальным сервером (инструмент SQL Editor).
    • В СУБД MySQL основным SQL-оператором создания новой базы данных является CREATE DATABASE. Общий вид этого оператора такой:

    CREATE DATABASE [CHARACTER SET ] [COLLATE ];

    Технически, обязательной частью оператора являются только первые два слова и название БД. Если кодировка и порядок сортировки не введены, будут использованы значения по умолчанию [18].

    При создании БД система не выбирает эту базу данных автоматически. В каждой СУБД необходимо выбрать созданную базу данных посредством соответствующего оператора — только после этого можно работать с ней. В MySQL этим оператором является USE (вид: USE ). Для проверки (и открытия в графической оболочке) выбранной БД можно использовать функцию SELECT DATABASE().

    При введении трех запросов, описанных выше, в том же порядке, как они перечислены, и запуске получившегося скрипта, MySQL Workbench отобразит следующий результат (рисунок 8):

    Размещено на http://www.allbest.ru/

    Рисунок 8: Окно программы MySQL Workbench с созданной БД Test_SQL_1

    Для получения полного списка баз данных, находящихся на сервере, к которому в данный момент подключена СУБД MySQL, можно использовать команду SHOW DATABASES. Для получения списка таблиц в выбранной на данный момент БД можно воспользоваться командой SHOW TABLES.

    Для удаления базы данных используется команда DROP DATABASE . Для выполнения этой команды необходимо иметь привилегию DROP в MySQL (включена в привилегии администратора). Данный запрос необходимо использовать с предельной осторожностью, так как он очищает и удаляет все таблицы из базы данных и удаляет саму БД [28].

    Создав базу данных, можно переходить к созданию таблиц, заполнению их данными и обработке этих данных.

    2.3 Создание и управление таблицами. Основные запросы SQL

    Подключившись к базе данных и обладая необходимыми привилегиями (в случае подключения в качестве администратора все такие привилегии даны), можно создавать таблицы. Для создания таблиц в MySQL используется стандартное выражение CREATE TABLE следующего вида:

    [CONSTRAINT PRIMARY KEY ( )]

    Выражения, представленные в квадратных скобках, не являются обязательными. Оператором DEFAULT можно задать значение по умолчанию для всех записей соответствующего столбца. Оператором CONSTRAINT можно задать ограничение по столбцу, либо по таблице (например, задать первичный ключ, как указано в примере) [5, с. 67].

    В случае, если необходимо поменять тип какого-то из полей таблицы, можно воспользоваться оператором ALTER [18, с. 31]:

    При успешном создании таблицы в нее можно добавлять данные в соответствии с типами заданных полей. Для этого используется команда INSERT:

    Листинг SQL-запросов, в результате выполнения которых MySQL создаст тестовую базу данных с таблицами «person», «favorite_food» и несколькими записями, приведен в приложении А.

    Имея базу данных с одной или несколькими таблицами, в которых есть некоторые записи, можно перейти к изучению одного из наиболее основных запросов в SQL — SELECT. На этапе создания БД его можно было использовать, чтобы узнать, какая база данных выбрана системой управления БД на данный момент, но чаще всего этот оператор используется в контексте таблиц. По сути, команда SELECT просто выводит некоторые данные из необходимого отношения, которые актуальны на данный момент. Технически, само служебное слово SELECT инструктирует базу данных о том, что после него будет идти тело запроса [9, с. 71].

    В наиболее простом случае с помощью данной команды можно вывести все записи таблицы (вывод будет произведен в зависимости от используемой программной оболочки). Для того чтобы вывести все записи таблицы, необходимо составить выражение следующего вида:

    Служебный символ «*» может быть заменен одним или несколькими полями таблицы, перечисленными через запятую. В таком случае выведенные данные будут содержать лишь те столбцы, которые были указаны в запросе. Кроме этого запрос с оператором SELECT можно обогатить множеством уточняющих служебных слов: AND, OR; перед каждым выражением также может стоять отрицание NOT.

    WHERE — ограничивает выборку только теми записями, значения которых в поле соответствуют требуемому выражению. Выражений может быть несколько, между ними должна стоять одна из логических операций.

    Также с оператором WHERE могут использоваться служебные слова IN, BETWEEN, LIKE. IN ( ,…, ) указывает на то, что значение результата должно быть в множестве значений, заключенных в скобки. BETWEEN AND указывает на то, что результирующее значение должно быть больше или равно и меньше либо равно . Служебное слово LIKE (используется только с полями CHAR или VARCHAR) сообщает базе данных, что в результирующей выборке должны быть только те записи, значение необходимого поля которых соответствует маске, указанной после оператора LIKE.

    ORDER BY ,…, DESC/ASC — сортирует результат выборки по указанным полям и по убыванию, либо возрастанию

    DISTINCT — данное ключевое слово сообщает базе данных, что выборка не должна содержать повторяющиеся данные. Ставится сразу после SELECT [9, с. 77].

    Кроме этих служебных слов существуют и другие, однако перечислять их все в рамках данной работы не представляется оправданным. Важно, однако, отметить возможность выборки из нескольких таблиц (объединение или join) в том случае, если эти таблицы связаны.

    Как можно видеть, оператор SELECT является мощным средством для выборки необходимых данных из таблицы. Тот факт, что любой запрос подобного вида можно составить автоматически (как простую текстовую строку, используя, например, программу с графической оболочкой, написанную специально для этого), подтверждает разнообразие возможностей, которые предоставляет SQL в рамках прикладного программирования. Листинг некоторых выборок из созданной ранее базы данных указан в приложении А. Более полный список основных операторов и служебных слов SQL можно найти в приложении Б.

    2.4 Работа с SQL в различных СУБД (MySQL, MS Access, Firebird)

    Как уже было отмечено, основные реляционные СУБД, использующие язык SQL, имеют между собой немалые отличия. Более того, сам SQL, используемый такими СУБД, может отличаться от стандартов. Особенности некоторых СУБД будут продемонстрированы на трех примерах: MySQL (программная оболочка MySQL Workbench); MS Access и Firebird (программная оболочка FlameRobin).

    1) MySQL является сильно развитым продуктом с большим сообществом разработчиков и пользователей. Частично эта популярность вызвана тем, что данное решение распространяется по свободной лицензии (программа бесплатна), однако нельзя не отметить большое удобство пользования, высокую мощность и разнообразие дополнительных утилит в рамках MySQL, наличие сервера, поставляемого сразу с СУБД, и многих других преимуществ перед конкурентами. Также MySQL портирована на большинство существующих платформ.

    Диалект SQL, используемый в MySQL, является надмножеством диалекта СУБД mSQL. Если говорить об особенностях этого диалекта, то он слабо отличается от стандарта SQL.

    Графическая оболочка MySQL Workbench позволяет быстро выполнять многие действия, на выполнение которых посредством составления SQL-запросов ушло бы гораздо больше времени. Это создание и редакция баз данных и таблиц, настройка базы данных, настройка соединения с сервером, создание и редактирование пользователей, мониторинг системных переменных и так далее.

    Кроме того, в современных версиях MySQL добавлены широкие возможности оптимизации: использование кэша запросов (наиболее частые запросы кэшируются, и их вызов происходит быстрее), хранение части кода на сервере MySQL (процедур, функций), использование подготовленных команд, пользовательские функции и так далее [14, с. 261].

    Особенности работы с SQL в MySQL заключаются в наличии удобного редактора кода, автоматизации многих функций, возможности сохранять запросы и так далее. В новых версиях также была добавлена возможность объединять SQL-запросы в транзакции, создавать события, триггеры и хранимые процедуры[19].

    2) Microsoft Access, являясь частью пакета офисных приложений MS Office, предназначена, в первую очередь, для пользователей и продвинутых пользователей. Большинство функций реализовано посредством «мастеров» — графических утилит внутри основной программы, которые за несколько шагов выполняют создание определенной сущности с заданными параметрами. Использование SQL минимизировано — отсюда легкость в использовании данной СУБД. При этом текстовый редактор SQL-запросов содержит минимум полезных функций, что делает ручное написание запросов затруднительным

    Диалект SQL, с которым работает MS Access, — JetSQL — был создан фирмой Microsoft специально для своих программных решений.

    Также для полноценной работы с MS Access необходимо знание языка VBA — Visual Basic for Applications. Многие функции можно реализовать только через прямое редактирование кода, однако плюсом является некоторая интеграция JetSQL в этот язык [15].

    3) Firebird, в силу полной бесплатности продукта и относительной новизны, является наименее развитой из приведенных примеров СУБД. Без установки дополнительного программного обеспечения (графической оболочки) единственной возможностью управлять СУБД является командная строка Firebird. Однако существующие графические оболочки предоставляют некоторые полезные функции. Тем не менее, большая часть действий с базами данных должна быть выполнена посредством ручного написания SQL-запросов (в утилите ISQL либо в редакторе графической оболочки), что сильно замедляет работу.

    Все дальнейшие действия в рамках практической части этой работы будут произведены с использованием базы данных, построенной в MySQL в силу широты возможностей и простоты использования данной СУБД.

    3. Использование SQL в прикладном программировании

    3.1 Возможность интеграции SQL в программный код. Потенциальные преимущества от его использования

    Теоретически, имея программу, разработанную на любом современном (или даже устаревшем) языке прикладного программирования высокого уровня, разработчик имеет возможность использовать язык SQL внутри своего продукта для обращения к внешней базе данных. Для интеграции SQL в свой продукт необязательно даже иметь специальное расширение языка, которое подключает «официальную» поддержку SQL в рамках продукта. Причина этого заключается в том, что все запросы SQL представляют собой простые текстовые строки или таких строк наборы, с которыми может работать любой применяемый на практике язык программирования высокого уровня.

    Тем не менее, если среда разработки не поддерживает облегченные средства обращения к базе данных (через подключение к определенной СУБД), реализация отправки SQL-запросов может представиться сложным, если вообще выполнимым заданием.

    Дело в том, что программа должна отправлять каждый запрос к СУБД по определенному подключению, а создать такое подключение можно, лишь имея специфические знания в области.

    Для того чтобы облегчить задачу программистам, было создано множество расширений для различных СУБД и языков программирования высокого уровня. В случае языков программирования такие расширения обычно представляют собой библиотеки (классов либо методов), с помощью которых, введя одну стандартную функцию в тело программы, разработчик может подключиться к СУБД [16, с. 219].

    В практических примерах будут рассмотрены именно языки с уже готовыми расширениями (для СУБД MySQL), так как подключение к СУБД вручную, во-первых, может занять большое количество времени, во-вторых, если используется на практике, то лишь в исключительных случаях — например, при работе с самописным языком.

    Потенциальные преимущества при работе с SQL исходят из самой природы этого языка структурированных запросов — будучи универсальным средством обращения к реляционным БД под управлением большинства СУБД, этот язык позволяет значительно сократить ресурсные и временные затраты на обращение к внешней базе данных из тела программы, написанной на каком-либо языке программирования. То, что можно реализовать технически без SQL, например, в рамках C++, уже реализовано в стандарте SQL и может быть выполнено посредством добавления нескольких стандартных функций и запросов в тело программы.

    Также большим преимуществом является возможность интегрировать SQL сразу в несколько компонентов одной системы, написанной с использованием разных языков программирования — например, WEB-компонент системы, написанный на Javascript, и внутренняя, инкапсулированная от пользователей часть на C++, могут использовать SQL в равной степени, создавать запросы, подключаться в БД по мере необходимости и так далее. Эта возможность еще сильнее повышает универсальность системы. В трех следующих подразделах будут представлены практические примеры использования SQL в рамках трех языков: Pascal (выбран как наиболее хорошо демонстрирующий возможности программирования для начинающих специалистов), C++ (выбран как язык с чрезвычайно широкими возможностями, использующийся повсеместно и породивший множество родственных языков), Object ABAP (данный специфический пример позволит увидеть, каким образом SQL можно интегрировать в язык напрямую, без использования расширений).

    3.2 Использование SQL в Pascal (на примере Pascal Lazarus)

    Pascal, не являясь популярным языком разработки коммерческих приложений, тем не менее, очень распространен в учебных заведениях по причине наглядности многих его аспектов. Поэтому первым языком, в рамках которого будет рассмотрено использование SQL, выбран именно Pascal.

    Технически, однако, в данном примере будет показан не Pascal в чистом виде, а его объектная версия, используемая в графической среде разработки Lazarus. Lazarus является бесплатным аналогом популярного инструмента Delphi, потому работа с ним может также дать представление об устройстве этого продукта.

    Для подробного разбора механики соединения с базой данных MySQL посредством языка Pascal все операторы необходимо прописывать вручную (подключение к хосту и так далее). Однако Lazarus существенно облегчает задачу программиста посредством множества готовых классов, объекты которых можно разместить на форме программы по аналогу с Delphi и получить в свое распоряжение мощные инструменты для подключения к базам данных различных СУБД и для других задач.

    На рисунке 9 показаны строки с объектами, предназначенными для подключения к различным СУБД в программе Lazarus и для управления данными, полученными из баз данных:

    Илон Маск рекомендует:  Все про Microsoft ActiveX
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL