Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Введение в язык SQL

A DEVIDEBY B

A WHERE c

A TIMES B

А MINUS В

Декартовым произведением отношений A (A1,A2,…,An) и B (B1,B2,…,Bm) называется отношение, заголовок которого является сцеплением заголовков отношений:

(A1,A2,…,An,B1,B2,…,Bm),

а тело является сцеплением кортежей отношений:

(a1,a2,…,an,b1,b2,…,bm),

таких, что (a1,a2,…,an)  A и (b1,b2,…,bm)  B.

Операция записывается:

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

Операция выборки записывается:

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

Проекцией отношения А по атрибутам X,Y,…,Z, где каждый из атрибутов принадлежит отношению А, называется отношение с заголовком (X,Y,…,Z) и телом, содержащим множество кортежей вида (x,y,…,z), для которых в отношении А найдутся кортежи со значением атрибута X равным x, значением атрибута Y равным y, …, значением атрибута Z равным z.

Эта операция записывается:

A [ X,Y,…,Z ]

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

Соединением отношений А и В по условию с называется отношение

(A TIMES B) WHERE c,

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

Делением отношений A (X1,X2,…,Xn,Y1,Y2,…,Ym) и B (Y1,Y2,…,Ym), имеющих общие атрибуты, называется отношение с заголовком (X1,X2,…,Xn) и телом, содержащим множество кортежей (x1,x2,…,xn), таких, что для всех кортежей (y1,y2,…,ym)  B в отношении А найдется кортеж (x1,x2,…,xn,y1,y2,…,ym).

Операция записывается:

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

 

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

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

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

· операторы определения объектов базы данных – операторы DDL (Data Definition Language). Примерами таких операторов будут:

· CREATE_SCHEMA – создать схему базы данных;

· DROP_SCHEMA – удалить схему базы данных;

· CREATE_TABLE – создать таблицу;

· ALTER_TABLE – изменить таблицу;

· DROP_TABLE – удалить таблицу;

· CREATE_VIEW – создать представление;

· DROP_VIEW – удалить представление.

· операторы манипулирования данными – операторы DML (Data Manipulation Language), например,

· SELECT – выбрать строки из таблицы;

· INSERT – добавить строки в таблицу;

· UPDATE – изменить строки в таблице;

· DELETE – удалить строки из таблицы;

· COMMIT – зафиксировать изменения;

· ROLLBACK – отменить внесенные изменения.

· операторы защиты и управления доступом, такие как:

· CREATE_ASSERTION – создать ограничение;

· DROP_ASSERTION – отменить ограничение;

· GRANT – предоставить привилегии;

· REVOKE – отменить привилегии.

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

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

FROM Salespeople;

WHERE city = «London».

«FROM» является ключевым словом предложения FROM, а «Salespeople» аргументом предложения. Аналогично «city = «London» - аргумент предложения WHERE. Таким образом, приведенные выше операторы являются ключевыми словами и могут использоваться для построения предложений.

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

· предложения определения данных: определение баз данных, а также определение и уничтожение таблиц и индексов;

· запросы на выбор данных: предложение SELECT;

· предложения модификации данных: добавление, удаление и изменение;

· предложения управления данными: предоставление и отмена привилегий на доступ к данным, управление транзакциями и другие.

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

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

· упорядочение строк и (или) столбцов при выводе содержимого таблиц на печать или экран дисплея;

· создание представлений (виртуальных таблиц), позволяющих пользователям иметь свой взгляд на данные без увеличения их объема в базе данных;

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

· агрегирование данных: группирование данных и применение к этим группам таких операций, как среднее, сумма, максимум, минимум, число элементов и других.

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

· INTEGER - целое число (обычно до 10 значащих цифр и знак);

· SMALLINT - «короткое целое» (обычно до 5 значащих цифр и знак);

· DECIMAL(p,q) - десятичное число, имеющее p цифр (0 < p < 16) и знак. С помощью q задается число цифр справа от десятичной точки: q < p, если q = 0, оно может быть опущено;

· FLOAT - вещественное число с 15 значащими цифрами и целочисленным порядком, определяемым типом СУБД;

· CHAR(n) - символьная строка фиксированной длины из n символов (0 < n < 256);

· VARCHAR(n) - символьная строка переменной длины, не превышающей n символов (n > 0 и различное в разных СУБД, но не меньше 4096);

· DATE - дата в формате, определяемом специальной командой (по умолчанию mm/dd/yy). Поля даты могут содержать только реальные даты, начинающиеся за несколько тысячелетий до н.э. и ограниченные пятым-десятым тысячелетием н.э.;

· TIME - время в формате, определяемом специальной командой (по умолчанию hh.mm.ss);

· DATETIME - комбинация даты и времени;

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

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

Базовые таблицы создаются с помощью предложения CREATE_TABLE, определяющее имя базовой таблицы, которая должна быть создана, имена ее столбцов и типы данных для этих столбцов, а также, возможно, некоторую дополнительную информацию. CREATE_TABLE - выполняемое предложение. Если его ввести с терминала, то система создаст пустую таблицу с заданным именем, которая будет содержать только строку заголовков столбцов, но не будет содержать никаких строк с данными. Вставка строк данных производится с помощью предложения INSERT.

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

Если пользователя достаточно часто интересует определенный набор данных, то для упрощения формирования запросов целесообразно создать представление. Представление - это пустая именованная таблица, определяемая перечнем тех столбцов таблиц и признаками тех их строк, которые хотелось бы в ней увидеть. Оно создается с помощью предложения CREATE VIEW.

Ещё одним видом виртуальных таблиц являются курсоры. Курсор, также как и представление, является пустой именованной таблицей, определяемой перечнем тех столбцов базовых таблиц и признаками тех их строк, которые должны быть в неё отображены. Отличие между курсором и представлением состоит в том, что курсоры созданы для процедурной работы с таблицей в прикладных программах. После объявления курсора (DECLARE) и его активизации (OPEN) будет создана временная таблица заданного содержимого и специальным указателем, определяющим в качестве текущей первую строку этой таблицы. С помощью предложения FETCH (выбрать), которое обычно исполняется в программном цикле, можно присвоить определенным переменным значения указанных столбцов этой строки. При этом курсор передвинется к следующей строке таблицы, подготавливая ввод следующих данных в прикладную программу.

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

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

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

· элемент WHERE - или HAVING-условия (сокращенный вариант предложения, называемый вложенный запрос);

· фраза выбора в командах CREAT VIEW, DECLARE CURSOR или INSERT;

· средство присвоения глобальным переменным значений из строк сформированной таблицы (INTO-фраза).

Рассмотрим синтаксис предложения SELECT. В синтаксических конструкциях используются следующие обозначения:

· знак звездочка «*» для обозначения «все» - употребляется в обычном для программирования смысле, то есть «все случаи, удовлетворяющие определению»;

· квадратные скобки «[]» означают, что заключенные в эти скобки конструкции, являются необязательными, то есть могут быть опущены;

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

· многоточие «...» – указывает на то, что непосредственно предшествующая ему синтаксическая единица может встречаться один или более раз;

· прямая черта «|» – означает наличие выбора из двух или более возможностей;

· точка с запятой «;» – завершающий элемент предложений SQL;

· запятая «,» – используется для разделения элементов списков;

· пробелы – могут вводиться для повышения наглядности между любыми синтаксическими конструкциями предложений SQL;

· прописные латинские буквы и символы – используются для написания конструкций языка SQL;

· строчные буквы – используются для написания конструкций, которые должны заменяться конкретными значениями, выбранными пользователем, причем для определенности отдельные слова этих конструкций связываются между собой символом подчеркивания «_»;

· термины «таблица», «столбец» и другие заменяют с целью сокращения текста синтаксических конструкций термины «имя_таблицы», «имя_столбца» и другие соответственно;

· термин «таблица» используется для обобщения таких видов таблиц, как базовая_таблица, представление или псевдоним. Здесь псевдоним служит для временного, на момент выполнения запроса, переименования и (или) создания рабочей копии базовой_таблицы (представления).

Предложение SELECT (выбрать) имеет следующий формат:

подзапрос [ UNION [ALL] подзапрос]...[ ORDER BY {[таблица.]столбец | номер_элемента_SELECT} [[ASC] | DESC][,{[таблица.]столбец | номер_элемента_SELECT} [[ASC] | DESC]]...;

и позволяет объединить (UNION) а затем упорядочить (ORDER BY) результаты выбора данных, полученных с помощью нескольких подзапросов. При этом упорядочение можно производить в порядке возрастания - ASC (ASCending) или убывания DESC (DESCending).

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

· SELECT - выбрать данные из указанных столбцов и (если необходимо) выполнить перед выводом их преобразование в соответствии с указанными выражениями и (или) функциями;

· FROM - из перечисленных таблиц, в которых расположены эти столбцы;

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

· GROUP BY - группируя по указанному перечню столбцов с тем, чтобы получить для каждой группы единственное агрегированное значение, используя в предложении SELECT SQL-функции SUM (сумма), COUNT (количество), MIN (минимальное значение), MAX (максимальное значение) или AVG (среднее значение);

· HAVING - имея в результате лишь те группы, которые удовлетворяют указанному перечню условий отбора групп.

Подзапрос имеет формат:

SELECT [[ALL] | DISTINCT ]{ * | элемент_SELECT [,элемент_SELECT]...} FROM {базовая_таблица | представление} [псевдоним] [,{базовая_таблица | представление} [псевдоним]]...[ WHERE фраза] [ GROUP BY фраза [ HAVING фраза]];

" Элемент_SELECT " - это одна из следующих конструкций:

[таблица.]* | значение | SQL_функция | системная_переменная,

где " значение " – это:

[таблица.]столбец | (выражение) | константа | переменная.

Синтаксис " выражений " имеет вид:

({[ [+] | - ] {значение | функция_СУБД} [ + | - | * | ** ]}...),

а синтаксис " SQL_функций " – одна из следующих конструкций:

{ SUM | AVG | MIN | MAX | COUNT } ([[ALL]| DISTINCT ][таблица.]столбец){ SUM | AVG | MIN | MAX | COUNT } ([ALL] выражение) COUNT (*)

Предложение WHERE включает набор условий для отбора строк:

WHERE [ NOT ] WHERE_условие [[ AND | OR ][ NOT ] WHERE_условие]...

где " WHERE_условие " – одна из следующих конструкций:

значение { = | <> | < | <= | > | >= } { значение | (подзапрос) }значение_1 [ NOT ] BETWEEN значение_2 AND значение_3значение [ NOT ] IN { (константа [,константа]...) | (подзапрос) }значение IS [ NOT ] NULL [таблица.]столбец [ NOT ] LIKE 'строка_символов' [ESCAPE 'символ'] EXISTS (подзапрос)

Кроме традиционных операторов сравнения (= | <> | < | <= | > | >=) в WHERE предложении могут использоваться условия BETWEEN, LIKE, IN, IS NULL и EXISTS, которые могут предваряться оператором NOT. Критерий отбора строк формируется из одного или нескольких условий, соединенных логическими операторами:

· AND - когда должны удовлетворяться оба условия;

· OR - когда должно удовлетворяться одно из условий;

· AND NOT - когда должно удовлетворяться первое условие и не должно удовлетворяться второе;

· OR NOT - когда или должно удовлетворяться первое условие или не должно удовлетворяться второе.

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

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

Синтаксис предложения GROUP BY имеет вид:

GROUP BY [таблица.]столбец [,[таблица.]столбец]... [ HAVING фраза]

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

С помощью фразы HAVING, синтаксис которой почти не отличается от синтаксиса фразы WHERE,

HAVING [ NOT ] HAVING_условие [[ AND | OR ][ NOT ] HAVING_условие]...

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

Ключевое слово DISTINCT используется в SELECT предложении для исключения из результата запроса дубликатов значений.

Из синтаксиса предложения SELECT видно, что в нем может содержаться не только перечень столбцов таблицы или символ *, но и арифметические выражения, а также числовые и текстовые константы.

С помощью BETWEEN... AND... - находится в интервале от... до..., можно отобрать строки, в которых значения столбцов находятся в заданном диапазоне, а с помощью NOT BETWEEN отобрать строки, значения столбцов в которых не принадлежат указанному диапазону.

Обычная форма использования ключевого слова LIKE – «имя_столбца LIKE текстовая_константа» для столбца текстового типа позволяет отыскать все значения указанного столбца, соответствующие образцу, заданному «текстовой_константой». Символы константы интерпретируются следующим образом:

· символ «_» подчеркивание заменяет любой одиночный символ;

· символ «%» процент заменяет любую последовательность из N символов;

· все другие символы означают сами себя.

<== предыдущая лекция | следующая лекция ==>
А intersect В. Элементы реляционной алгебры | Этапы разработки баз данных
Поделиться с друзьями:


Дата добавления: 2014-01-04; Просмотров: 1189; Нарушение авторских прав?; Мы поможем в написании вашей работы!


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



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.051 сек.