Чем является SQL и чем он не является — КиберПедия 

Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой...

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

Чем является SQL и чем он не является

2020-06-02 166
Чем является SQL и чем он не является 0.00 из 5.00 0 оценок
Заказать работу

Первое, что надо уяснить насчет SQL, – этот язык не является процедурным, как FORTRAN, Basic, С, COBOL, Pascal и Java. Чтобы решить задачу с помощью одного из этих процедурных языков, приходится писать процедуру, которая выполняет одну за другой указанные операции, пока выполнение задачи не будет закончено. Процедура может быть линейной последовательностью или содержать ветвление, но в любом случае программист указывает порядок выполнения.

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

Хорошо. Только что я сказал, что SQL не является процедурным языком. В сущности, это правда. Однако миллионы программистов вокруг (и вы, возможно, один из них) привыкли решать задачи процедурным путем, поэтому в последние годы оказывалось немалое давление, чтобы дополнить SQL некоторыми процедурными возможностями. Поэтому теперь в составе новой версии спецификации SQL, SQL:2003, имеются такие средства процедурного языка, как блоки BEGIN, условные операторы IF, функции и процедуры. Благодаря этим новым средствам, можно хранить программы на сервере с тем, чтобы их могли повторно использовать многие пользователи.

Для иллюстрации того, что я имел в виду, когда говорил "сообщите системе, что именно вам нужно", предположим, что у вас имеется таблица EMPLOYEE с данными о служащих и вы хотите выбрать из нее все строки, соответствующие всем "старшим" работникам. Под "старшими" работниками можно подразумевать каждого, кто старше 40 лет или кто получает более 60000 долларов в год. Нужную вам выборку можно сделать с помощью следующего запроса:

SELECT * FROM EMPLOYEE WHERE AGE >40 OR SALARY >60000;

Этот оператор выбирает из таблицы EMPLOYEE все строки, в которых или значение столбца AGE (возраст) больше 40 или значение в столбце SALARY (зарплата) больше 60000. SQL сам знает, каким образом надо выбирать информацию. Ядро базы данных проверяет базу и принимает для себя решение, каким образом следует выполнять запрос. Все, что от вас требуется, – указать, какие данные вам нужны.

Помни:
Запрос – это вопрос, который вы задаете базе данных. Если какие-либо ее данные удовлетворяют условиям вашего запроса, то SQL передает их вам
.

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

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

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

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

· (Очень) Короткая история

· Язык SQL, как и теория реляционных баз данных, берет свое начало в одной из исследовательских лабораторий компании IBM. В начале 1970-х годов исследователи из IBM выполняли первые разработки реляционных систем СУБД (или РСУБД), и тогда они создали подъязык данных, предназначенный для работы в этих системах. Пробная версия этого подъязыка была названа SEQUEL (S tructured E nglish QUE ry L anguage – структурированный английский язык запросов). Однако, когда пришло время официально выпускать их язык запросов в качестве продукта, разработчики захотели сделать так, чтобы люди понимали, что выпущенный продукт отличается от пробной системы СУБД и превосходит ее. Поэтому они решили дать выпускаемому продукту имя, хотя и отличающееся от SEQUEL, но явно принадлежащее к тому же семейству. Так что они назвали его SQL.

· О работе, которая велась в IBM над реляционными базами данных и над языком SQL, в информационной отрасли хорошо знали, причем еще до того, как эта компания представила в 1981 году РСУБД SQL / DS. К этому времени компания Relational Software, Inc. (ныне Oracle Corporation) уже выпустила свою первую РСУБД. Эти первоначальные продукты тут же стали стандартом для нового класса систем, предназначенных для управления базами данных. В состав этих продуктов вошел SQL, который фактически стал стандартом для подъязыков данных. Производители других систем управления базами данных выпустили свои собственные версии SQL. В этих реализациях обычно имелись все основные возможности продуктов IBM, но, впрочем, не только они. Там также имелись расширения, введенные с целью дать преимущество сильным сторонам именно "своей" РСУБД. В результате, хотя почти все поставщики и использовали варианты одного языка SQL, платформенная совместимость была слабой.

· Помни:
Реализация – это конкретная СУБД, работающая на конкретной аппаратной платформе
.

· Вскоре началось движение за создание общепризнанного стандарта SQL, которого мог бы придерживаться каждый. В 1986 году организация ANSI выпустила официальный стандарт под названием SQL – 86. Этот стандарт был обновлен той же организацией в 1989 году и получил название SQL – 89, а затем, в 1992 году, был назван SQL – 92. Поставщики СУБД, выпуская новые версии своих продуктов, всегда старались приблизить свои реализации к стандарту. Эти усилия и привели к тому, что мечта о настоящей переносимости SQL стала намного ближе к реальности.

· Самой последней версией стандарта SQL является SQL:2003 (ISO / IEX 9075 X:2003). В этой книге описан язык SQL, который определяется стандартом SQL:2003. Конечно, любая конкретная реализация SQL в определенной степени отличается от стандарта. Так как полный стандарт SQL:2003 является слишком всеобъемлющим, то от современных реализаций, видимо, не стоит ждать полного ему соответствия. Однако поставщики систем СУБД сейчас работают над тем, чтобы эти системы все же соответствовали основной части стандартного SQL. Полные спецификации стандартов ISO / IEC доступны в Internet по адресу webstore.ansi.org.

· Команды SQL

· Язык SQL состоит из ограниченного числа команд, специально предназначенных для управления данными. Одни из этих команд служат для определения данных, другие – для их обработки, а остальные – для администрирования данных. О командах определения и обработки данных рассказывается в главах 4-12, а о командах администрирования данных – в главах 13 и 14.

· Чтобы соответствовать стандарту SQL: 2003, в состав реализации должны входить все основные возможности. Кроме того, в ее состав могут входить и расширения этого основного набора (которые также описаны спецификацией SQL:2003). Расширения пока оставим, вернемся к основам. Ниже приведена таблица основных команд SQL:2003.

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

· Таблица 2.1. Основные команды SQL:2003.

ALTER DOMAIN CREATE CURSOR FREE LOCATOR
ALTER TABLE DECLARE TABLE GET DIAGNOSTICS
CALL DELETE GRANT
CLOSE DISCONNECT HOLD LOCATOR
COMMIT DROP ASSERTION INSERT
CONNECT DROP CHARACTER SET OPEN
CREATE ASSERTION DROP COLLATION RELEASE SAVEPOINT
CREATE CHARACTER SET DROP DOMAIN RETURN
CREATE COLLATION DROP ORDERING REVOKE
CREATE DOMAIN DROP ROLE ROLLBACK
CREATE FUNCTION DROP SCHEME SAVEPOINT
CREATE METHOD DROP SPECIFIC FUNCTION SELECT
CREATE ORDERING DROP SPECIFIC PROCEDURE SET CONNECTION
CREATE PROCEDURE DROP SPECIFIC ROUTINE SET CONSTRAINTS
CREATE ROLE DROP TABLE SET ROLE
CREATE SCHEMA DROP TRANSFORM SET SESSION AUTHORIZATION
CREATE TABLE DROP TRANSLATION SET SESSION CHARACTERISTICS
CREATE TRANSFORM DROP TRIGGER SET TIME ZONE
CREATE TRANSLATION DROP TYPE SET TRANSACTION
CREATE TRIGGER DROP VIEW START TRANSACTION
CREATE TYPE FETCH UPDATE
CREATE VIEW    

Зарезервированные слова

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

SELECT SELECT FROM SELECT WHERE SELECT = WHERE;

Полный список зарезервированных слов стандарта SQL:2003 приводится в приложении А.

Типы данных

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

· числовой;

· строковый;

· логический;

· даты-времени;

· интервальный.

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

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

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

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

· INTEGER

· SMALLINT

· BIGINT

· NUMERIC

· DECIMAL

Тип INTEGER

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

Помни:
Точностью числа является максимальное количество цифр, которое у него может быть
.

Тип SMALLINT

Тип SMALLINT (малый целый) также предназначен для целых значений, но его точность в конкретной реализации не может быть больше точности типа INTEGER, имеющейся в данной реализации. В реализациях, работающих на компьютерах IBM System /370, типы SMALLINT и INTEGER обычно представлены соответственно 16 – и 32-битовыми двоичными числами. Впрочем, во многих реализациях SMALLINT и INTEGER являются одним и тем же типом.

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

Тип BIGINT

Тип данных BIGINT (большой целый) – это новый тип данных, появившийся вместе с SQL:2003. Он также предназначен для целых значений и определяется как тип, точность которого может быть не намного больше, чем точность данных типа INTEGER, или сильно превышать ее. Предел точности данных типа BIGINT зависит от реализации.

Тип NUMERIC

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

Масштаб – это количество цифр после запятой. Масштаб не может быть отрицательным или превышать точность числа.

При определении типа NUMERIC необходимо указать требуемые значения точности и масштаба. В определении можно указать только NUMERIC и получить значения по умолчанию. А если вы укажете NUMERIC (p), то получите требуемую точность и значение масштаба по умолчанию. Выражение NUMERIC (p,s) позволяет непосредственно задать и точность, и масштаб. При определении данных вместо параметров p и s нужно ввести соответственно требуемые значения точности и масштаба.

Скажем, например, что в вашей реализации SQL точность по умолчанию для типа данных NUMERIC равна 12, а масштаб по умолчанию равен 6. Если вы укажете, что столбец базы данных имеет тип NUMERIC, то в этом столбце смогут находиться числа вплоть до 999999.999999. Если же, с другой стороны, вы для столбца указываете тип данных NUMERIC (10), то в столбце смогут находиться только числа с максимальным значением 9999.999999. Параметр (10) указывает максимально возможное для числа количество цифр. Когда для столбца будет указан тип данных NUMERIC (10.2), то в столбце могут находиться числа с максимальным значением – 99999999.99. В этом случае хотя и останется всего десять цифр, но справа от десятичной запятой будут находиться только две из них. (Имейте в виду, что синтаксис SQL требует использовать для разделения целой и дробной частей числа не запятую, а десятичную точку, как это принято в США и странах Европы.)

Тип данных NUMERIC предназначен для значений, таких как 595.72. Точность этого значения равна 5 (общее количество цифр), а масштаб – 2 (количество цифр справа от десятичной запятой). Для чисел, таких, как это, подходит тип данных NUMERIC (5.2).

Тип DECIMAL

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

В столбце, тип которого NUMERIC (5.2), нельзя поместить числа, большие 999.99. Если же тип столбца DECIMAL (5.2), в него всегда можно поместить значения до 999.99. Кроме того, если точность реализации позволяет, то СУБД сможет поместить в этот столбец и значения, большие, чем 999.99.

Если в ваших данных имеются дробные части, тогда применяйте тип NUMERIC или DECIMAL, а если ваши данные всегда состоят из целых чисел, то используйте тип INTEGER или SMALLINT. Когда нужно добиться максимальной переносимости, следует использовать тип NUMERIC, потому что поле, тип которого вы определите, например, как NUMERIC (5.2), будет во всех системах иметь один и тот же диапазон значений.


Поделиться с друзьями:

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

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...

История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.027 с.