<? include 'head.php' ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head>
<link rel="stylesheet" href="css.css" type="text/css">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<meta http-equiv="Content-Language" content="ru">
<title>Глава 2.</title></head>
<body>
<h1>Глава 2. SQL. ОБЗОР.</h1>
<hr width="50%">
<p>Эта глава знакомит вас со структурой языка SQL, а также с некоторыми общими 
понятиями, такими как типы данных, которые поля могут содержать, и 
некоторыми неоднозначностями, которые существуют в SQL. Она должна обеспечить 
связь с более конкретной информацией в последующих главах. Вы не должны 
запоминать каждую подробность, упомянутую в этой главе.</p>
<p>Здесь дан лишь краткий обзор; многие подробности даны, чтобы впоследствии 
обращаться к ним по мере овладения языком. Мы поместили всё это в начало книги, 
чтобы ориентировать вас на мир SQL без упрощенного подхода к его проблемам и, в 
тоже время, дать вам повторяющиеся в дальнейшем места для ссылки на них, когда у 
вас появятся вопросы. Этот материал может стать более понятным, когда мы 
перейдём к описанию конкретных команд SQL в <a href="ch3.php">Главе 3</a>.</p>
<h3><a name="2.1">К</a>АК РАБОТАЕТ SQL?</h3>
<p>SQL это язык, ориентированный специально на реляционные базы данных (РБД). Он 
выполняет большую работу, которую вы должны были бы  делать, если бы использовали 
универсальный язык программирования, например C. Чтобы сформировать РБД на C, 
вам необходимо было бы начать с нуля. Вы должны были бы определить 
объект, называемый таблицей, которая могла бы увеличиваться, чтобы иметь любое 
число строк, а затем создавать постепенно процедуры для вставки и извлечения 
значений.<br>
Если бы вы захотели найти некоторые конкретные строки, вам 
необходимо было бы выполнить по шагам процедуру, подобную следующей:</p>
<ol><li>Рассмотреть строку таблицы.</li><li>Выполнить проверку: является ли эта строка одной из строк, которая вам нужна.</li>
<li>Если это так, сохранить её где-нибудь, пока вся таблица не будет проверена.</li><li>Проверить, имеются ли другие строки в таблице.</li>
<li>Если имеются, возвратиться на шаг 1.</li><li>Если строк больше нет, вывести все значения, сохранённые в шаге 3.</li></ol>
<p>(Конечно, это не фактический набор C-команд, а только логика шагов, которые 
должны были бы быть включены в реальную программу.) SQL сделает всё это за вас. 
Команды в SQL могут работать со всеми группами таблиц как с единым объектом и 
могут обрабатывать любое количество информации, извлечённой или полученной из них в виде единого модуля.</p>
<h3><a name="2.2">Ч</a>ТО ДЕЛАЕТ ANSI?</h3>
<p>Как мы уже  сказали во Введении, стандарт SQL определяется с помощью кода ANSI 
(Американский Национальный Институт Стандартов). SQL не изобретался ANSI. Это, 
по существу, изобретение IBM. Но другие компании подхватили SQL сразу же. По 
крайней мере одна компания (Oracle) отвоевала у IBM право на рыночную продажу SQL-продуктов.<br>
После того как появился ряд конкурирующих программ SQL на рынке, 
ANSI определил стандарт, к которому они должны быть приведены. (Определение таких 
стандартов и является функцией ANSI). Однако после этого появились некоторые 
проблемы. Возникли они, в результате стандартизации ANSI, в виде некоторых 
ограничений. Так как не всегда ANSI определяет то, что является наиболее 
полезным, то программы пытаются соответствовать стандарту ANSI, не позволяя ему 
ограничивать их слишком сильно. Это, в свою очередь, ведет к случайным 
несогласованностям. Программы Баз Данных обычно придают ANSI SQL дополнительные 
особенности и часто ослабляют многие ограничения. 
Поэтому распространённые разновидности ANSI будут также рассмотрены. Хотя мы, 
очевидно, не сможем рассмотреть каждое исключение или разновидность, удачные 
идеи имеют тенденцию к внедрению и использованию в различных программах, даже 
когда они не определены стандартом ANSI. ANSI  это вид минимального стандарта, 
и вы можете делать больше, чем он позволяет, хотя и должны выполнять его 
указания при выполнении задач, которые он определяет.</p>
<h3><a name="2.3">И</a>НТЕРАКТИВНЫЙ И ВЛОЖЕННЫЙ SQL</h3>
<p>Имеются два SQL: Интерактивный и Вложенный. Большей частью обе формы работают 
одинаково, но используются различно. Интерактивный SQL используется для 
функционирования непосредственно в базе данных, чтобы производить вывод для 
использования его заказчиком. В этом SQL - когда вы введёте команду, она 
сейчас же выполнится, и вы сможете сразу увидеть вывод (если он вообще получится).</p>
<p>Вложенный SQL состоит из команд SQL, помещённых внутри программ, 
которые обычно написаны на  другом языке (типа КОБОЛа или ПАСКАЛя). Это 
делает такие программы более мощными и эффективным.</p>
<p>Однако, допуская эти языки, приходится иметь дело со структурой SQL и стилем управления данных, который 
требует некоторых расширений интерактивного SQL. Передача SQL-команд во 
вложенный SQL является пропускаемой (&quot;passed off&quot;) для переменных или 
параметров, используемых программой, в которую они были вложены.</p>
<p>В этой книге мы будем представлять SQL в интерактивной форме. Это даст нам возможность обсуждать 
команды и их действия, не заботясь о том, как они связаны с помощью интерфейса с 
другими языками. Интерактивный SQL это форма, наиболее полезная для 
непрограммистов. Всё, что вы узнаете относительно интерактивного SQL, в основном 
применимо и к вложенной форме. Изменения, необходимые для использования 
вложенной формы, будут рассмотрены в последней главе этой книги.</p>
<h3><a name="2.4">ПОДРАЗДЕЛЫ </a>SQL</h3>
<p>И в интерактивной, и во вложенной формах SQL имеются многочисленные части, 
или подразделы. Так как вы, вероятно, столкнетесь с этой терминологией при 
чтении SQL, мы дадим некоторые пояснения. К сожалению, эти термины не 
используются повсеместно во всех реализациях. Они указаны ANSI и полезны 
на концептуальном уровне, но большинство SQL-программ практически не 
обрабатывают их отдельно, так что они, по существу, становятся функциональными категориями команд SQL.</p>
<p>DDL (Язык Определения Данных) - так называемый Язык Описания Схемы в ANSI - состоит из команд, которые создают объекты (таблицы, 
индексы, просмотры и так далее) в базе данных.</p>
<p>DML (Язык Манипулирования Данными) это набор команд, которые определяют, какие значения представлены в 
таблицах в любой момент времени.</p>
<p>DCD (Язык Управления Данными) состоит из средств, которые определяют, разрешить ли пользователю выполнять определённые 
действия, или нет. Они являются составными частями DDL в ANSI.</p>
<p>Не забывайте эти названия. Это не различные языки, а разделы команд SQL, сгруппированные по их функциям.</p>
<h3><a name="2.5">Р</a>АЗЛИЧНЫЕ ТИПЫ ДАННЫХ</h3>
<p>Не все типы значений, которые могут находиться в полях таблицы, логически 
одинаковы. Наиболее очевидное различие - между числами и текстом. Вы не можете 
помещать числа в алфавитном порядке или вычитать одно имя из другого.<br>
Так как системы с РБД базируются на связях между фрагментами 
информации, различные типы данных должны отличаться друга от друга так, чтобы 
соответствующие процессы и сравнения могли быть в них выполнены. В SQL это 
делается с помощью назначения каждому полю типа данных, указывающего тип 
значения, которое это поле может содержать. Все значения в данном поле должны 
иметь одинаковый тип. В таблице Заказчиков, например, cname и city содержат 
строки текста для оценки, а snum и cnum это числа. По этой причине вы не 
можете ввести значение Highest (Наивысший) или значение None (Никакой) в поле 
rating, которое имеет числовой тип данных. Это ограничение удачно, так как оно 
налагает некоторую структурность на ваши данные. Вы часто будете сравнивать 
некоторые или все значения в данном поле, поэтому вы можете выполнять действие 
только на определенных строках, а не на всех. Вы не могли бы сделать этого, если бы значения полей имели смешанный тип данных.</p>
<p>К сожалению, определение этих типов данных является основной областью, в которой большинство коммерческих 
программ БД и официальный стандарт SQL не всегда совпадают. ANSI SQL-стандарт 
распознаёт только text и number, в то время как большинство коммерческих 
программ используют другие специальные типы. Такие как DATA (ДАТА) и TIME 
(ВРЕМЯ) - фактически, почти стандартные типы (хотя точный формат их меняется). 
Некоторые пакеты также поддерживают такие типы как, например, MONEY (ДЕНЬГИ) и 
BINARY (ДВОИЧНЫЙ). (MONEY это специальная &quot;валютная&quot; система исчисления, используемая компьютерами.)</p>
<p>Вся информация в компьютере передается двоичными числами, а затем 
преобразовывается в другие системы, чтобы мы могли легко использовать их и понимать.</p>
<p>ANSI определяет несколько числовых типов, различия между которыми довольно тонки, и иногда их путают. Разрешённые ANSI-типы 
данных перечислены в Приложении B. Сложность числовых типов ANSI можно, по 
крайней мере частично, объяснить усилием сделать вложенный SQL совместимым с 
рядом других языков. Два типа чисел ANSI - INTEGER (ЦЕЛОЕ ЧИСЛО) и DECIMAL 
(ДЕСЯТЕРИЧНОЕ ЧИСЛО) (которые можно сокращать как INT и DEC, соответственно), 
будут адекватны для наших целей, так же как и для целей большинства практических 
деловых прикладных программ. Естественно, что тип ЦЕЛОЕ можно представить как 
ДЕСЯТЕРИЧНОЕ ЧИСЛО, которое не содержит никаких цифр справа от десятичной точки.</p>
<p>Тип для текста - CHAR (или СИМВОЛ), относящийся к строке текста. Поле типа 
CHAR имеет длину, определяемую максимальным числом 
символов, которые могут быть введены в это поле. Большая часть реализаций также 
имеют нестандартный тип, называемый VARCHAR (ПЕРЕМЕННОЕ ЧИСЛО СИМВОЛОВ), который 
является текстовой строкой и может иметь любую длину до определённого 
реализацией максимума (обычно 254 символа). Значения CHARACTER и VARCHAR 
включаются в одиночные кавычки как 'текст'. Различие между CHAR и VARCHAR в том, 
что CHAR должен резервировать достаточное количество памяти для максимальной 
длины строки, а VARCHAR распределяет память по мере необходимости.<br>
Символьные типы состоят из всех печатных символов, включая числа. Однако число 1 это не то 
же, что символ &quot;1&quot;. Символ &quot;1&quot; - только печатный фрагмент текста, не 
определяемый системой как числовое значение 1. Например 1 + 1 = 2, но 
&quot;1&quot; + &quot;1&quot; не равно &quot;2&quot;. Символьные значения сохраняются в компьютере как 
двоичные значения, но показываются пользователю как печатный текст.</p>
<p>Преобразование выполняется по формату, определяемому системой, которую вы 
используете. Этот формат преобразования будет одним из двух стандартных типов 
(возможно, с расширениями), используемых в компьютерных системах: ASCII-код 
(используемый во всех персональных и малых компьютерах) и EBCDIC-код 
(Расширенном Двоично-Десятеричном Код Обмена Информации) (используемый в 
больших компьютерах). Определенные операции, такие как упорядочивание в 
алфавитном порядке значений поля, будет изменяться вместе с форматом. Применение 
этих двух форматов будет обсуждаться в <a href="ch4.php">Главе 4</a>.</p>
<p>Мы должны следить за рынком, а не за ANSI, в использовании типа DATE (ДАТА). 
(В системе, которая не распознает тип ДАТА, вы, конечно, можете объявить дату 
как символьное или числовое поле, но это сделает большинство операций более трудоёмкими.)</p>
<p>Вы должны просмотреть свою документацию по пакету программ, 
который вы будете использовать, чтобы выяснить точно, какие типы данных он поддерживает.</p>
<h3><a name="2.6">S</a>QL. НЕСОГЛАСОВАННОСТИ.</h3>
<p>Вы можете понять из предшествующего обсуждения, что имеются самостоятельные 
отдельные несоответствия между продуктами мира SQL. SQL появился из 
коммерческого мира БД как инструмент и был позже превращён в стандарт ANSI. К 
сожалению, ANSI не всегда определяет наиболее полезное, поэтому программы 
пытаются соответствовать стандарту ANSI, не позволяя ему ограничивать их слишком 
сильно. ANSI - вид минимального стандарта - вы можете делать, больше чем он это 
позволяет, но вы должны быть способны получить те же самые результаты при выполнении той же самой задачи.</p>
<h3><a name="2.7">Ч</a>ТО ТАКОЕ &quot;ПОЛЬЗОВАТЕЛЬ&quot;?</h3>
<p>SQL обычно находится в компьютерных системах, которые имеют больше чем одного 
пользователя и, следовательно, должен различать их (ваше семейство PC может 
иметь любое число пользователей, но оно обычно не имеет способов, чтобы отличать 
одного пользователя от другого).<br>
Обычно в такой системе каждый пользователь имеет некий вид 
кода проверки прав, который идентифицирует его или её (терминология изменяется). 
В начале сеанса с компьютером пользователь входит в систему (регистрируется), 
сообщая компьютеру, кто этот пользователь, идентифицируясь с помощью 
определенного ID (Идентификатора). Любое количество людей, использующих  ID доступа, являются отдельными пользователями; и, аналогично, один человек 
может представлять большое количество пользователей (в разное время), используя 
различные идентификаторы доступа к SQL. Действия в большинстве сред SQL 
приведены к специальному Идентификатору доступа, который точно соответствует 
определённому пользователю. Таблица или другой объект принадлежит пользователю, 
который имеет над ним полную власть. Пользователь может или может не иметь 
привилегии на выполнение действия над объектом. Для наших целей мы договоримся, 
что любой пользователь имеет необходимые привилегии для выполнения любого 
действия, пока мы не возвратимся специально к обсуждению привилегий в
<a href="ch22.php%22">Главе 22</a>. Специальное значение USER (ПОЛЬЗОВАТЕЛЬ) 
может использоваться как аргумент в команде. Оно указывает на доступный 
Идентификатор пользователя, выдавшего команду.</p>
<h3><a name="2.8">У</a>СЛОВНЫЕ ОБОЗНАЧЕНИЯ И ТЕРМИНОЛОГИЯ</h3>
<p>Ключевые слова это слова, которые имеют специальное значение в SQL. Они могут 
быть командами, но не текстом и не именами объектов. Мы будем выделять ключевые 
слова, печатая их ЗАГЛАВНЫМИ БУКВАМИ. Вы должны быть внимательны, чтобы не путать ключевые слова с терминами.</p>
<p>В SQL есть определённые специальные термины, 
которые используются для его описания. Среди них такие слова как &quot;запрос&quot;, 
&quot;предложение&quot; и &quot;предикат&quot;, которые являются важнейшими в описании и понимании 
языка, но не означают что-нибудь самостоятельное для SQL.</p>
<p>Команды или предложения являются инструкциями, с помощью которых вы обращаетесь к БД SQL.</p>
<p>Команды состоят из одной или более отдельных логических частей, называемых предложениями.</p>
<p>Предложения начинаются ключевым словом и состоят из ключевых слов 
и аргументов. Например, предложения, с которыми вы можете сталкиваться, это 
&quot;FROM Salespeope&quot; и &quot;WHERE city = &quot;London&quot;&quot;. Аргументы завершают или изменяют 
значение предложения. В примерах выше, Salespeople - аргумент, а FROM - ключевое 
слово предложения FROM. Аналогично &quot;city = &quot;London&quot;&quot; - аргумент предложения WHERE.</p>
<p>Объекты это структуры БД, которым даны имена и которые сохраняются в 
памяти. Сюда относятся базовые таблицы, представления  и индексы.</p>
<p>Чтобы показать вам, как формируются команды, мы будем делать это на 
примерах. Имеется, однако, более формальный метод описания команд, использующий 
стандартизированные условные обозначения. Мы будем использовать его в 
последующих главах для удобства, чтобы понимать эти условные обозначения в случае, 
если вы столкнетесь с ними в других SQL-документах.<br>
Квадратные скобки ( [ ] ) будут указывать части, которые могут не использоваться, а многоточия ( ... ) 
указывают, что всё, предшествующее им, может повторяться любое число раз. Слова в 
угловых скобках (&lt; &gt;) - специальные термины, которые объясняют, что они собой 
представляют. Мы значительно упростили стандартную терминологию SQL, но без ухудшения его понимания.</p>
<h3><a name="2.9">Р</a>ЕЗЮМЕ</h3>
<p>Мы кратко рассмотрели в этой главе основы. Но нашим намерением и было - бегло рассмотреть основы SQL так, чтобы вы смогли охватить весь объём 
информации. Когда мы возвратимся к основам в <a href="ch3.php">следующей главе</a>, некоторые вещи будут конкретизированы.</p>
<p>Теперь вы знаете кое-что относительно 
SQL: какова его структура, как он используется, как он представляет данные и как 
они определяются (и некоторые несогласованности, появляющиеся при этом), 
некоторые условные обозначения и термины, используемые для их описания. Всё это 
- слишком большой объём информации для одной главы; мы не ожидаем, что вы 
запомнили все эти подробности, но вы сможете вернуться к ним позже, если понадобится.</p>
<p> <a href="ch3.php">Главе 3</a> мы будем работать, показывая 
конкретно, как формируются команды и что они делают. Мы представим вам команду 
SQL, используемую для извлечения информации из таблиц, которая является наиболее 
часто используемой командой SQL. К концу главы вы будете способны извлекать 
конкретную информацию из вашей БД с высокой степенью точности.</p>
<h3><a name="2.10">Р</a>АБОТА СО SQL</h3>
<ol><li><pre>Какое наибольшее основное различие между типами данных в SQL?</pre></li>
<li><pre>Распознает ANSI тип данных DATA?</pre></li>
<li><pre>Какой подраздел SQL используется, чтобы помещать значения в таблицы?</pre></li>
<li><pre>Что такое - ключевое слово?</pre></li></ol>
<pre>(См. ответы в<a href="a.php#2"> Приложении A</a>.)</pre></body></html>
<? include 'foot.php' ?>