Материал: Graber_Martin_-_SQL_dlya_prostykh_smertnykh_-_2014

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

Какработает SQL?

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

клонение от стандарта невозможно, однако полезные идеи, как правило, копируют­

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

не специфицированы ANSI. ANSI - это своего рода минимальный стандарт; мож­ но делать гораздо больше, чем в нем определено, но, выполняя стандартную зада­ чу, нужно обеспечить предусмотренные данным стандартом результаты.

Интерактивная версия встроенного SQL

Существуют два SQL: интерактивный и встроенный. В основном эти две формы SQL работают одинаково, но используются по-разному.

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

Встроенный SQL состоит из команд SQL, включенных в программы, которые в большинстве случаев написаны на каком-то другом языке программирования (напри­ мер, Cobol или Pascal). Такое включение может сделать программу более мощной и эффективной. Однако, несовместимость этих языков программирования со структу­ рой SQL и присущим ему стилем управления данными требует внесения ряда расши­ рений в интерактивный SQL. Выходные данные команд SQL во встроенном SQL

"заносятся" в переменные или параметры, используемые программой, в которую

включены предложения SQL.

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

ются в последней главе этой книги.

11

Глава 2. Введение в SQL

Подразделы SQL

Как в интерактивном, так и во встроенном SQL имеется множество секций или подразделов. В процессе освоения SQL придется придерживаться данной терминоло­

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

реализациях SQL. Им придается особое значение в ANSI, и они полезны на концепту­ альном уровне, но во многих SQL-продуктах они практически не выделены, и поэто­ му стали функциональными категориями SQL-команд.

Язык определения данных (Data Definition Language, DDL; в ANSI он называется также языком определения схемы (Schema Definition Language)) состоит из тех команд, которые создают объекты (таблицы, индексы, представления) в базе данных. Язык ма­ нипулирования данными (Data Manipulation Language, DML) - это множество команд, определяющих, какие данные представлены в таблицах в любой момент времени. Язык управления данными (Data Control Language, DCL) состоит из предложений, опреде­ ляющих, может ли пользователь выполнить отдельное действие. Согласно ANSI, DCL

является частью DDL. Важно не путать эти названия. Речь идет не о различных языках

как таковых, а о разделах команд SQL, сгруппированных в соответствии с их функцио­

нальным назначением.

Различные типы данных

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

В SQL каждому полю приписывается "тип данных" (data type), который определя­ ет, какого рода значения могут содержаться в поле. Все значения для данного поля должны быть одного типа. В таблице Customers, например, поля cname и city являются строками текста, тогда как поля rating, snum, cnum - числовые. Именно по этой при­ чине невозможно занести значения "Highest" или "None" в поле rating, имеющее чи­ словой тип. Это удачное ограничение, поскольку оно накладывает некоторую структуру на конкретные данные. Операцию сравнения, которая выполняется для од­

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

имеют смешанный тип данных.

Определение этих типов данных является той областью, в которой многие коммер­ ческие СУБД и официальный стандарт SQL имеют существенные различия. Стандарт ANSI SQL распознает только текстовый и числовой типы, тогда как многие коммерче­ ские СУБД используют и другие специальные типы данных. Заметим, что типы DATE (дата) и TIME (время) почти de-facto являются стандартными (хотя конкретные их форматы отличаются). Некоторые СУБД поддерживают такие типы данных как MONEY (деньги) и BINARY (двоичный). (BINARY - это специальное числовое

12

Различные типы данных

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

ANSI определяет несколько различных типов числовых значений. Типы данных ANSI полностью перечислены в приложении В. Сложность числовых типов ANSI объясняется, по крайне мере частично, попыткой поддержать совместимость вложен­ ного SQL с множеством других языков.

Два типа данных ANSI, INTEGER и DECIMAL (для которых можно использовать аббревиатуру INT и DEC соответственно}, адекватны и теоретическим целям, и мно­ жеству практических приложений в деловой жизни. INTEGER отличается от DECIMAL тем, что запрещает использовать цифры справа от десятичной точки, а так­

же саму десятичную точку.

Типом данных для текста является CHAR (CHARACTER), который относится к строке текста. Поле типа CHAR имеет фиксированную длину, равную максимальному числу букв, которые можно ввести в это поле. Большинство реализаций SQL имеет не­ стандартный тип, названный VARCHAR, - это текстовая строка любой длины вплоть до максимума, определяемого конкретной реализацией SQL. Значения CHAR и VARCHAR заключаются в одиночные кавычки, как, например, 'текст'. Различие между ними состоит в том, что для типа CHAR отводится участок памяти, достаточный для хранения строки максимальной длины, а для VARCHAR память выделяется по мере необходимости.

Символьные типы состоят из всех символов, которые можно ввести с клавиатуры,

в том числе и цифр. Однако, число 1 не есть то же самое, что символ '1 '. Символ '1' это

совсем другая часть печатного текста, которая не распознается компьютером как чи­

словое значение 1. 1+1=2, но '1' + '1' не равно '2'. Значения типа CHARACTER хра­

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

виде печатного текста. Преобразование выполняется в соответствии с форматом, оп­ ределяемым той системой, которой вы пользуетесь. Это может быть формат одного из двух стандартных типов (возможно, с расширениями), которые применяются в компь­ ютерных системах : ASCII (используется во всех персональных и большинстве малых компьютеров) и EBCDIC (используется для больших компьютеров). Определенные операции, такие как упорядочение значений поля по алфавиту, зависят от формата. Значения этих двух форматов будут рассмотрены в главе 4.

Тип DATE будет применяться в соответствии с требованиями рынка, а не ANSI. В реализациях SQL, не распознающих тип DATE, можно объявить дату символьным или числовым полем, но это затруднит выполнение множества операций. Следует оз­ накомиться с документацией по программному обеспечению SQL-системы, чтобы

точно определить, какие типы данных она поддерживает.

Кто такой "пользователь"?

SQL устанавливается, как правило, в компьютерных системах, имеющих не од­

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

13

Глава 2. Введение в SQL

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

ризации ID.

SQL придерживается этого правила. В большинстве SQL-систем действия припи­ сываются определенному ID, который обычно соответствует определенному пользо­ вателю. Таблица (или друтой объект) принадлежит тому пользователю, который имеет на нее (или на этот объект) полномочия. Пользователь может иметь или не иметь при­ вилегию работы с объектами, которые ему не принадлежат. В главе 22 специально об­ суждаются привилегии, пока же предположим, что любой пользователь имеет привилегию выполнять любые необходимые ему действия.

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

Соглашения и терминология

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

Команды (comma11ds) или сообщения (stateme11ts) - это инструкции, которые да­ ются базе данных SQL. Команды состоят из одной или более логически различных частей, называемых предложения.ми (фразами, c/auses). Предложения начинаются с ключевого слова, по которому они обычно и называются, и состоят из ключевых слов и аргументов. Примерами предложений являются: "FROM Salespeople" и "WHERE city = 'London"'. АргуА1енты заканчивают предложение или модифицируют его смысл. В приведенных примерах "Salespeople" является аргументом, а FROM - ключевым словом предложения FROM. Также "city = 'London'" является аргументом предложе­ ния WHERE. Объекть1 - это структуры в базе данных, которые имеют имена и хра­ нятся в памяти. Они включают базовые таб.1ицы, представления (то есть два вида таблиц) и индексы.

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

14

Итоги

любое число раз. Слова, заключенные в угловые скобки(<>), - специальные терми­ ны, которые объясняются по мере того, как вводятся.

Итоги

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

ния.

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

15

Источник: https://studfile.net/preview/16418473/