Курсовая работа (т): Структура языка SQL

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Учет кадровРасчет заработной платы

Табельный номерТабельный номер

Ф. И. О. СотрудникаФ. И. О. Сотрудника

Отдел№ Отдела

ДолжностьДолжностной оклад

Год рожденияГод рождения

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

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

1.3 Что такое база данных

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

В широком аспекте понятие истории баз данных обобщается до истории любых средств, с помощью которых человечество хранило и обрабатывало данные. В таком контексте упоминаются, например, средства учёта царской казны и налогов в древнем Шумере (4000 г. до н. э.). Узелковая письменность инков - кипу. Клинописи, содержащие документы Ассирийского царства и т. п. Следует помнить, что недостатком этого подхода является размывание понятия «база данных» и фактическое его слияние с понятиями «архив» и даже «письменность».

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

Оперативные сетевые базы данных появились в середине 1960-х. Операции над оперативными базами данных обрабатывались в интерактивном режиме с помощью терминалов. Простые индексно-последовательные организации записей быстро развились к более мощной модели записей, ориентированной на наборы. За руководство работой DBTG (Data Base Task Group), разработавшей стандартный язык определения данных и манипулирования данными, Чарльз Бахман получил Тьюринговскую премию.

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

Следующий важный этап связан с появлением в начале 1970-х реляционной модели данных, благодаря работам Эдгара Ф. Кодда. Работы Кодда открыли путь к тесной связи прикладной технологии баз данных с математикой и логикой. За свой вклад в теорию и практику Эдгар Ф. Кодд также получил премию Тьюринга.

Сам термин database (база данных) появился в начале 1960-х гг., и был введён в употребление на симпозиумах, организованных фирмой SDC (System Development Corporation) в 1964 и 1965 гг.

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

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

поддержание логически согласованного набора файлов;

обеспечение языка манипулирования данными;

восстановление информации после разного рода сбоев;

параллельная работа в режиме реального времени нескольких пользователей.

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

2. Структура языка SQL

Соответствие языка SQL последним стандартам SQL:2003, SQL:1999 (и даже SQL/92), дарует ему богатейшие возможности, ввиду этого он труден для понимания и осознания целиком. Ввиду этого язык разбивают на уровни, или слои, такие, что каждый уровень языка включает все конструкции, входящие в более низкие уровни, это обеспечивает лучшее понимание. В стандарте определяется несколько способов разбиения языка на уровни. В одной из классификаций, язык разбивается на несколько уровней: базовый (entry), промежуточный (intermediate), и полный (full). Эта классификация ориентирована, прежде всего, на производителей СУБД, в которых поддерживается SQL. Реализация базового уровня языка является обязательным условием хотя бы какого-то соответствия стандарту. Реализация промежуточного уровня желательна, и обычно именно такой уровень языка поддерживается ведущими компаниями-производителями SQL-ориентированных СУБД. Наконец, полный уровень языка является целью, к достижению которой следует стремиться. В данной классификации критерием отнесения той или иной возможности языка к некоторому уровню является оцениваемая создателями стандарта SQL (большая часть которых является сотрудниками ведущих компаний, производящих SQL-ориентированные СУБД) техническая сложность реализации этой возможности. Конечно, такая классификация важна и для программистов приложений баз данных, но только для того, чтобы оценить реальные возможности конкретной СУБД. Для понимания языка SQL это разбиение на уровни несущественно.

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

2.1 Идентификаторы языка SQL

Идентификаторы языка SQL предназначены для обозначения объектов в базе данных и являются именами таблиц, представлений и столбцов. Символы, которые могут использоваться в создаваемых пользователем идентификаторах языка SQL, должны быть определены как набор символов. Стандарт ISO задает набор символов, который должен использоваться по умолчанию; он включает строчные и прописные буквы латинского алфавита (A-Z, a-z), цифры (0-9) и символ подчеркивания (_). Допускается использование и альтернативного набора символов.

На формат идентификаторов накладываются следующие ограничения:

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

должен начинаться с буквы;

не может содержать пробелов

2.2 Типы данных

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

точные числовые типы (exact numerics);

приближенные числовые типы (approximate numerics);

типы символьных строк (character strings);

типы битовых строк (bit strings);

типы даты и времени (datetimes);

типы временных интервалов (intervals);

булевский тип (Booleans);

типы коллекций (collection types);

анонимные строчные типы (anonymous row types);

типы, определяемые пользователем (user-defined types);

ссылочные типы (reference types).

В столбцах таблиц, определенных на любых типах данных, наряду со значениями этих типов, допускается сохранение неопределенного значения, которое обозначается ключевым словом NULL. В языке определено, что результатом выражений вида x a_op NULL, NULL a_op x, NULL a_op NULL является NULL для всех арифметических операций a_op (+, - и т. д.), допустимых для типа данных выражения x (выражение NULL a_op NULL является допустимым для любой арифметической операции a_op). Также по определению полагается, что значением выражений x comp_op NULL, NULL comp_op x, NULL comp_op NULL для всех операций сравнения (=, , >, < и т. д.), определенных для типа выражения x, является третье логическое значение unknown (выражение NULL comp_op NULL является допустимым для любой операции сравнения comp_op).

Точные числовые типы

К категории точных числовых типов в SQL относятся те типы, значения которых точно представляют числа. Типы данных этой категории распадаются на две части: истинно целые типы (INTEGER и SMALLINT) и типы, допускающие наличие дробной части (NUMERIC и DECIMAL). Охарактеризуем эти типы данных более подробно.

Истинно целые типы

Тип INTEGER служит для представления целых чисел. Точность чисел (число сохраняемых бит) определяется в реализации. При определении столбца данного типа достаточно указать просто INTEGER.

Тип SMALLINT также служит для представления целых чисел. Точность определяется в реализации, но она не должна быть больше точности типа INTEGER. При определении столбца указывается просто SMALLINT.

Литералы типов целых чисел представляются в виде строк символов, изображающих десятичные числа; в начале строки могут присутствовать символы «+» или «-» (если символ знака отсутствует, подразумевается «+»). Примеры литералов типов INTEGER и SMALLINT: 1826545, 876.

Точные типы, допускающие наличие дробной части

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

Тип DECIMAL. Этот тип аналогичен типу NUMERIC. Отличие состоит в том, что если при определении столбца типа DECIMAL задается точность p, то на самом деле используется точность m, определяемая в реализации, такая, что m > p. Шкала всегда устанавливается такой, как явно или неявно (по умолчанию) задается. При указании типа столбца можно использовать спецификации DECIMAL, DECIMAL (p) и DECIMAL (p, s).

Литералы типов точных чисел, допускающих наличие дробной части, представляются в виде строк символов, изображающих десятичные числа, в начале которых могут присутствовать символы «+» или «-» (если символ знака отсутствует, подразумевается «+»), а внутри последовательности цифр может присутствовать символ «.». Примеры литералов типов NUMERIC и DECIMAL: 125, 26.36.

Приближенные числовые типы

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

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

Тип DOUBLE PRECISION. Точность значений этого типа определяется в реализации, но она должна быть больше точности типа REAL. Обычно приближенным числам SQL с двойной точностью соответствуют поддерживаемые аппаратурой числа с плавающей точкой двойной точности. При определении столбца указывается просто DOUBLE PRECISION.

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

Литералы приближенных числовых типов представляются в виде литерала точного числового типа, за которым могут следовать символ «E» и литерал целого числового типа. Примеры литералов приближенных числовых типов: 123, 123.12, 123E12, 123.12E12. Литеральное выражение xEy представляет значение x*(10y).

Типы символьных строк

В SQL определены три параметризуемых типа символьных строк: CHARACTER (или CHAR), CHARACTER VARYING (или CHAR VARYING, или VARCHAR) и CHARACTER LARGE OBJECT (или CLOB).

Тип CHARACTER. Значениями типа являются символьные строки. Конкретный набор допустимых символов определяется в реализации, но, как правило, включает набор символов ASCII. При определении столбца допускается использование спецификаций CHARACTER (x) и просто CHARACTER. Последний вариант эквивалентен заданию CHARACTER (1). После определения столбца типа CHARACTER (x) СУБД будет резервировать место для хранения x символов этого столбца во всех строках соответствующей таблицы. Если, например, определен столбец типа CHARACTER (8), и в некоторой строке таблицы в него заносится символьная строка длиной пять символов, то реально будут храниться восемь символов, последние три из которых будут пробелами79).

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

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

Операция конкатенации (обозначается в виде «||») возвращает символьную строку, произведенную путем соединения строк-операндов в том порядке, в каком они заданы.

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

Функция UPPER возвращает строку, в которой все строчные буквы строки-аргумента заменяются прописными. Функция LOWER, наоборот, заменяет в заданной строке все прописные буквы строчными.

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

Функция определения позиции (POSITION) определяет первую позицию в строке S, с которой в нее входит заданная строка S1 (если не входит, то возвращается значение нуль).

Тип CHARACTER LARGE OBJECT. Этот тип данных предназначен для определения столбцов, хранящих большие и разные по размеру группы символов. При определении столбца задается спецификация CLOB (z), где z задает максимальный размер соответствующей группы символов. Максимально возможное значение параметра z определяется в реализации, но, очевидно, что оно должно быть существенно больше максимально возможного значения параметра x, присутствующего в типах CHAR и CHAR VARYING.

Литералы типов символьных строк представляются в виде последовательностей символов, заключенных в одинарные или двойные кавычки. В первом случае среди набора символов литерала допускается наличие символов двойной кавычки, а во втором - символов одинарной кавычки. Примеры литералов символьных строк: ABCDEF, Ab"Ctd, "Fbcdef", "abcdtF".

Типы битовых строк

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

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

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

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

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

Функция определения длины (OCTET_LENGTH, BIT_LENGTH) возвращает длину заданной битовой строки в октетах или битах в зависимости от выбранной функции.

Функция определения позиции (POSITION) определяет первую позицию в битовой строке S, с которой в нее входит строка S1. Если строка S1 не входит в строку S, возвращается значение нуль.

Тип BINARY LARGE OBJECT. Этот тип данных предназначен для определения столбцов, хранящих большие и разные по размеру группы байтов. При определении столбца задается спецификация BLOB (z), где z задает максимальный размер соответствующей группы байтов. С технической точки зрения типы CLOB и BLOB очень похожи. Их разделение требуется для того, чтобы подчеркнуть, что значения типа CLOB состоят из символов (в частности, в них может осмысленно производиться текстовый поиск), а значения типа BLOB состоят из произвольных байтов, не обязательно кодирующих символы.

Литералы типов битовых строк представляются как заключенные в одинарные кавычки последовательности символов «0» и «1», предваряемые символом «B»; или предваряемые символом «X» последовательности символов, которые изображают шестнадцатеричные цифры (за цифрой «9» следуют «A», «B», «C», «D», «E» и «F»). Примеры литералов типов битовых строк: B0111001111000111111111, X78FBCD0012FFFFA.

Дата и время

Тип данных "дата/время" используется для определения моментов времени с некоторой установленной точностью. Примерами являются даты, отметки времени и время суток. Стандарт ISO разделяет тип данных "дата/время" на подтипы YEAR (Год), MONTH (Месяц), DAY (День), HOUR (Час), MINUTE (Минута), SECOND (Секунда), TIMEZONE_HOUR (Зональный час) и TIMEZONE_MINUTE (Зональная минута). Два последних типа определяют час и минуты сдвига зонального времени по отношению к всеобщему скоординированному времени (прежнее название - гринвичское время). Поддерживаются три типа полей даты/времени.

язык данные числовой информация

DATE

TIME [timePrecision] [WITH TIME 2ONS][timePrecision] [WITH TIME ZONE]

Тип данных DATE используется для хранения календарных дат, включающих поля YEAR, MONTH и DAY. Тип данных TIME используется для хранения отметок времени, включающих поля HOUR, MINUTE и SECOND. Тип данных TIMESTAMP служит для совместного хранения даты и времени. Параметр timePrecision задает количество дробных десятичных знаков, определяющих точность представления значений в поле SECOND. Если этот параметр опущен, по умолчанию его значение для столбцов типа TIME принимается равным нулю (т.е. сохраняется целое количество секунд), тогда как для полей типа TIMESTAMP он принимается равным 6 (т.е. отметки времени сохраняются с точностью до микросекунд). Наличие ключевого слова WITH TIME ZONE определяет использование полей TIMEZONE_HOUR и TIMEZONE_MINUTE. Например, столбец date таблицы Viewing, представляющий дату (день, месяц и год) осмотра клиентом сдаваемого в аренду объекта, может быть определен следующим образом: viewDate DATE.

Интервальный тип данных

Данные с интервальным типом используются для представления периодов времени. Любой интервальный тип данных состоит из набора полей: YEAR, MONTH, DAY, HOUR, MINUTE и SECOND. Существуют два класса данных с интервальным типом: интервалы год-месяц и интерналы сутки-время суток. В первом случае данные включают только два поля - YEAR и/или MONTH. Данные второго типа могут состоять из произвольной последовательности полей DAY, HOUR, MINUTE, SECOND.

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

INTERVAL -{{startField TQ.endField} singleDatetimeField}= YEAR MONTH | DAY j HOUR | MINUTE

[(intervaiLeadingFieldPrecisicm)]= YEAR | MONTH | DAY j HOUR | MINUTE | SECOND

[(fractionalSecondsPrecision)]= startPield |;SECONB

[(intervejlbeadingFie.IdPrecis.icm [,fractionalSecondsRrecision])]

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

Например: INTERVAL YEAR(2) ТО MONTH. Это объявление описывает интервал времени, значение которого может находиться между 0 годом, 0 месяцем и 99 годом, 11 месяцем. Еще один пример: INTERVAL HOUR TO SECOND(4). Это объявление описывает интервал времени, значение которого может изменяться от 0 часов, 0 минут, 0 секунд до 99 часов, 59 минут 59.9999 секунды. (Число дробных десятичных знаков для секунд установлено равным 4.)

.3 Структура запросов SQL

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

В синтаксических конструкциях для обращения к БД используются следующие обозначения:

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

)([]) - означают, что конструкции, заключенные в эти скобки, являются необязательными (т.е. могут быть опущены);

)({}) - означают, что конструкции, заключенные в эти скобки, должны рассматриваться как целые синтаксические единицы, т.е. они позволяют уточнить порядок разбора синтаксических конструкций, заменяя обычные скобки, используемые в синтаксисе SQL;

)(…) - указывает на то, что непосредственно предшествующая ему синтаксическая единица факультативно может повторяться один или более раз;

)(|) - означает наличие выбора из двух или более возможностей. Например, обозначение ASC|DESC указывает, можно выбрать один из терминов ASC или DESC; когда же один из элементов выбора заключен в квадратные скобки, то это означает, что он выбирается по умолчанию (так, [ASC]|DESC означает, что отсутствие всей этой конструкции будет восприниматься как выбор ASC);

)(;) - завершающий элемент предложений SQL;

)(,) - используется для разделения элементов списков;

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

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

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

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

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

Оператор SELECT осуществляет выборку из базы данных и имеет наиболее сложную структуру среди всех операторов языка SQL. Простейший оператор SELECT выглядит: SELECT * FROM Table1; Он осуществляет выборку всех записей из объекта БД табличного типа с именем Table1. При этом столбцы и строки результирующего набора не упорядочены. Чтобы упорядочить поля результирующего набора, их следует перечислить через запятую в нужном порядке после слова SELECT:

SELECT name, twoname, family, otdel, oklad, id Table1;

В таблице 1 приводится результат выполнения этого запроса.

Таблица 1 - Запрос SELECT

NametwonamefamilyotdelokladidIvanSidorovPetrov358001StepanStepanovStepanovich355002PetrIvanov Sidorovich532003StepanStepanovStepanovich554004StepanStepanovStepanovich558005FedorPetrovIgorevich568006

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

SELECT name, otdel FROM Table1;

который вернет следующие данные:

Таблица 2 - Запрос SELECT name

nameotdelIvan3Petr5Stepan3Stepan5Stepan5Fedor5

Следует отметить, что вертикальная выборка может содержать дубликаты строк в том случае, если она не содержит потенциального ключа, однозначно определяющего запись. В таблице Table1 потенциальным ключом является поле id, которое выбрано в качестве первичного ключа таблицы. Поскольку это поле отсутствует в запросе, в приведенном выше результирующем наборе имеются дубликаты строк (например, строки 1 и 3). Если требуется получить уникальные строки (скажем, нас интересуют только различные комбинации скорости процессора и объема памяти, а не характеристики всех имеющихся компьютеров), то можно использовать ключевое слово DISTINCT:

SELECT DISTINCT name, otdel FROM Table1;

что даст такой результат:

Таблица 3 - 1-й результат запроса SELECT DISTINCT name

nameotdelFedor5Ivan3Petr5Stepan3Stepan5

Помимо DISTINCT может применяться также ключевое слово ALL (все строки), которое принимается по умолчанию.

Чтобы упорядочить строки результирующего набора, можно выполнить сортировку по любому количеству полей, указанных в предложении SELECT. Для этого используется предложение ORDER BY , являющееся всегда последним предложением в операторе SELECT. При этом в списке полей могут указываться как имена полей, так и их порядковые позиции в списке предложения SELECT. Так если требуется упорядочить результирующий набор по объему оперативной памяти в порядке убывания, можно записать:

SELECT DISTINCT name, otdelTable1BY otdel DESC

илиDISTINCT name, otdel Table1

ORDER BY 2 DESC

Результат, приведенный ниже, будет одним и тем же.

Таблица 4 - 2-й результат запроса SELECT DISTINCT name

nameotdelPetr5Stepan5Fedor5Ivan3Stepan3

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

DISTINCT speed, ramPcBY ram DESC, speed DESC

даст следующий результат:

Таблица 5 - 3-й результат запроса SELECT DISTINCT name

nameotdelFedor5Petr5Stepan5Ivan3Stepan3

Горизонтальную выборку реализует предложение WHERE , которое записывается после предложения FROM. При этом в результирующий набор попадут только те строки из источника записей, для каждой из которых значение предиката равно TRUE. То есть предикат проверяется для каждой записи. Предикаты представляют собой выражения, принимающие истинностное значение. Они могут представлять собой как одно выражение, так и любую комбинацию из неограниченного количества выражений, построенную с помощью булевых операторов AND, OR или NOT. Кроме того, в этих комбинациях может использоваться SQL-оператор IS, а также круглые скобки для конкретизации порядка выполнения операций [3, с.209]. Предикат в языке SQL может принимать одно из трех значений TRUE (истина), FALSE (ложь) или UNKNOWN (неизвестно). Исключение составляют следующие предикаты: NULL (отсутствие значения), EXISTS (существование), UNIQUE (уникальность) и MATCH (совпадение), которые не могут принимать значение UNKNOWN. Правила комбинирования всех трех истинностных значений легче запомнить, обозначив TRUE как 1, FALSE как 0 и UNKNOWN как 1/2 (где то между истинным и ложным). AND с двумя истинностными значениями дает минимум этих значений. Например, TRUE AND UNKNOWN будет равно UNKNOWN. OR с двумя истинностными значениями дает максимум этих значений. Например, FALSE OR UNKNOWN будет равно UNKNOWN.

Отрицание истинностного значения равно 1 минус данное истинностное значение. Например, NOT UNKNOWN будет равно UNKNOWN. Помимо этого используются предикаты сравнения. Предикат сравнения представляет собой два выражения, соединяемых оператором сравнения. Имеется шесть традиционных операторов сравнения: =, >, <, >=, <=, <>.

Данные типа NUMERIC (числа) сравниваются в соответствии с их алгебраическим значением.

Данные типа DATETIME (дата/время) сравниваются в хронологическом порядке.

Данные типа INTERVAL (временной интервал) преобразуются в соответствующие типы, а затем сравниваются как обычные числовые значения типа NUMERIC.

Пример. Получить информацию о компьютерах, имеющих частоту процессора не менее 500 Мгц и цену ниже $800:

SELECT * FROM Pcotdel = 5 AND oklad < 3000;

Запрос возвращает следующие данные:

Таблица 6 - Пример информационного запроса

codemodelspeedramhdcdprice1123250064512x600.03123350064512x600.071232500321012x400.0101260500321012x350.0

Существуют так же и другие предикаты, например BETWEEN, IN, LIKE … Имена столбцов, указанные в предложении SELECT, можно переименовать. Это делает результаты более читабельными, поскольку имена полей в таблицах часто сокращают с целью упрощения набора. Ключевое слово AS, используемое для переименования, согласно стандарту можно и опустить, т.к. оно неявно подразумевается.

Например, запрос:ram AS Mb, hd GbPccd = '24x';

переименует столбец ram в Mb (мегабайты), а столбец hd в Gb (гигабайты). Этот запрос возвратит объемы оперативной памяти и жесткого диска для тех компьютеров, которые имеют 24-скоростной CD-ROM:

Таблица 7 - Пример запроса SELECT AS

MbGb6483210

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

Таблица 8 - Описание (агрегатных) функции

ФункцияОписаниеCOUNT(*)Возвращает количество строк источника записей.COUNT()Возвращает количество значений в указанном столбце.SUM()Возвращает сумму значений в указанном столбце.AVG()Возвращает среднее значение в указанном столбце.MIN()Возвращает минимальное значение в указанном столбце.MAX()Возвращает максимальное значение в указанном столбце.

Все эти функции возвращают единственное значение. При этом функции COUNT, MIN и MAX применимы к любым типам данных, в то время как SUM и AVG используются только для числовых полей. Разница между функцией COUNT(*) и COUNT() состоит в том, что вторая при подсчете не учитывает NULL-значения.

Пример. Найти минимальную и максимальную цену на персональные компьютеры:

SELECT MIN(price) AS Min_price, MAX(price) AS Max_price PC;

Результатом будет единственная строка, содержащая агрегатные значения:

Таблица 8 - Строка содержащая (агрегатные) значения

Min_priceMax_price350.0980.0

Для просмотра данных наиболее удобно использовать совместно значения оператора COUNT - счетчик (позволяет узнать количество записей в запросе), и оператора CURSOR - позволяет принимать не все записи сразу а по одной (указанной пользователем).

Заключение

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

Глоссарий

№ п/пПонятиеОпределение1Реляционная алгебраформальная система манипулирования отношениями, основными операциями которой являются: проекция, соединение, пересечение и объединение.2Информационная системасистема, реализующая автоматизированный сбор, обработку и манипулирование данными и включающая технические средства обработки данных, программное обеспечение и соответствующий персонал3База данных (БД)поименованная совокупность данных, отражающая состояние объектов и их отношений в рассматриваемой предметной области4Объектэлемент предметной области, информацию о котором мы сохраняем5Полеэлементарная единица логической организации данных, которая соответствует неделимой единице информации - реквизиту6Записьсовокупность логически связанных полей7Файл (таблица)совокупность экземпляров записей одной структуры8Модель данныхсовокупность структур данных и операций их обработки9Реляционная модель данныхсовокупность взаимосвязанных двумерных таблиц - объектов модели10Атрибутпоименованная характеристика объекта. Атрибут показывает, какая информация должна быть собрана об объекте11Связисоответствия, отношения, возникающие между объектами предметной области12Сущностьосновное содержание объекта предметной области, о котором собирают информацию. В качестве сущности могут выступать место, вещь, личность, явление13Интерфейссовокупность средств, методов и правил взаимодействия между элементами системы.14Стандартобразец, эталон, модель, принимаемые за исходные для сопоставления с ними др. подобных объектов.15Бит (англ. binary digit; также игра слов: англ. bit - немного) (один двоичный разряд в двоичной системе счисления)одна из самых известных единиц измерения информации.16Байт (англ. byte)единица хранения и обработки цифровой информации. В настольных вычислительных системах байт считается равным восьми битам, в этом случае он может принимать одно из 256 (28) различных значений.Список использованных источников

1Атре Ш. Структурный подход к организации баз данных. - М.: Финансы и статистика, 1983.

Кириллов В.В. Структуризованный язык запросов (SQL). - СПб.: ИТМО, 1994.

Мейер М. Теория реляционных баз данных. - М.: Мир, 1987.

Материалы сайта Сервер информационных технологий. WEB: www.citforum.ru.

5Материалы сайта MySQL WEB: www.mysql.ru <http://www.mysql.ru>

Райордан Р.М. Основы реляционных баз данных. - М.: Русская редакция, 2001.

Спирли Э. Корпоративные хранилища данных. Планирование, разработка, реализация. - М.: АСТ, 2001.

Материалы сайта Codenet WEB: www.codenet.ru <http://www.codenet.ru>

Дейт К.Дж. Введение в системы баз данных. 6-е изд. - М.: Вильямс. 2000. - 317 с.

Конноли Т., Бегг Л., Страчан А. Базы данных. Проектирование, реализация и сопровождение. Теория и практика. 3-е издание. Вильямс 2003. - Таблицы, картинки. Леонтьев В.П. ПК: универсальный справочник пользователя - М.: 2003. - 251 с.

Дейт К. Введение в системы баз данных. 6-е изд. - М.: Вильямс, 2000.

В.В. Фаронов Основы программирования в SQL. - М.: Издатель Молгачева С.В., 2002. - 329 с.

Самоучитель по языку SQL (SQL DML) [Электронный ресурс] - Режим доступа <http://www.sql-ex.ru/help>

Коннолли Т., Бегг К., Страчан А. Базы данных. Проектирование, реализация и сопровождение. Теория и практика. 2-е изд. - С-Пб.: Вильямс, 2000. - 1120 с.

Корнеев В.В., Гареев А.Ф., Васютин С.В., Райх В.В. Базы данных. Интеллектуальная обработка информации. 2-е изд. - М.: Изд. Молгачева С.В., 2001. - 494 с.

Мамаев Е. Microsoft SQL Server 2000 - СПБ.: БХВ-Петербург, 2002.

Когаловский М.Р. Энциклопедия технологий баз данных. - М.: Финансы и статистика, 2002.

Толковый словарь по вычислительной технике. - М.: Издательский отдел Русская редакция ТОО Channel trading Ltd, 1995.

Ульман Дж. Базы данных на Паскале. - М.: Машиностроение, 1990.

Хаббард Дж. Автоматизированное проектирование баз данных. - М.: Мир, 1984.

Цикритизис Д., Лоховски Ф. Модели данных. - М.: Финансы и статистика, 1985.

Хомоненко А. Базы данных: Учеб. для вузов. - 2-е изд. - СПб., 2000.

Глушаков С.В., Ломотько. Базы данных (2001 год издания). - М.: АСТ, 2001.

Федоров А., Елманова Н. Базы данных для всех. - М.: Компьютер-пресс, 2001.

Ульман Дж., Уидом Дж. Введение в системы баз данных. - М.: Лори, 2000.

Спирли Э. Корпоративные хранилища данных. Планирование, разработка, реализация. - М.: АСТ, 2001.

Ролланд Фред Основные концепции баз данных. - Вильямс, 2002.

Райордан Р.М. Основы реляционных баз данных. - М.: Русская редакция, 2001.

Харрингтон. Проектирование реляционных баз данных просто и доступно. - М.: Лори, 2000.

Когаловский М.Р. Энциклопедия технологий баз данных. - М.: Финансы и статистика, 2002.

Материалы сайта ВикипедиЯ WEB: ru.wikipedia.org

Источник: https://www.bibliofond.ru/detail.aspx?id=725043