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

     Введение 

     Цель  данной курсовой работы заключается  в том, что нужно попытаться подробно рассмотреть структуру языка  SQL.

     Достижение  таковой цели возможно при выполнении следующих задач:

     - изучить нужные материалы данной  темы,

     - понять и расписать структуру  языка SQL,

     - рассмотреть операторы языка SQL,

     - сделать соответствующие выводы.

     Стремительный рост популярности SQL является одной из самых важных тенденций в современной компьютерной промышленности. За несколько последних лет SQL стал единственным языком баз данных. На сегодняшний день SQL поддерживают свыше ста СУБД, работающих как на персональных компьютерах, так и на больших ЭВМ. Был принят, а затем дополнен официальный международный стандарт на SQL. Язык SQL является важным звеном в архитектуре систем управления базами данных, выпускаемых всеми ведущими поставщиками программных продуктов, и служит стратегическим направлением разработок компании Microsoft в области баз данных. Зародившись в результате выполнения второстепенного исследовательского проекта компании IBM, SQL сегодня широко известен и в качестве мощного рыночного фактора.

     Формат  записи операторов SQL свободный. Можно  писать все подряд на одной строке, один оператор  на  нескольких  строках,  слова операторов  можно разделять произвольным количеством пробелов и комментариев. Никакими значками (типа ;) операторы разделять не нужно. Окончание операторов определяется по контексту.

     Примечание:  если вы записываете предписания SQL не в программе 4GL а в среде INFORMIX-SQL, то  разделять  операторы  точкой  с запятой (;) необходимо.

     Весь  набор  ключевых  слов языка SQL зарезервирован, их нельзя занимать для других целей (на имена объектов и переменных SQL и 4GL).

     Компилятору  языка безразлично, большими или  маленькими буквами пишутся операторы. Он их не различает. 
 
 
 
 
 
 
 
 
 
 
 
 
 

  1. Язык  SQL
 

     SQL является инструментом, предназначенным для обработки и чтения данных, содержащихся в компьютерной базе данных. SQL - это сокращенное название структурированного языка запросов (Structured Query Language). Как следует из названия, SQL является языком программирования, который применяется для организации взаимодействия пользователя с базой данных. На самом деле SQL работает только с базами данных одного определенного типа, называемых реляционными. В Приложении 1 изображена схема работы SQL. Согласно этой схеме, в вычислительной системе имеется база данных, в которой хранится важная информация. Если вычислительная система относится к сфере бизнеса, то в базе данных может храниться информация о материальных ценностях, выпускаемой продукции, объемах продаж и зарплате. В базе данных на персональном компьютере может храниться информация о выписанных чеках, телефонах и адресах или информация, извлеченная из более крупной вычислительной системы. Компьютерная программа, которая управляет базой данных, называется системой управления базой данных, или СУБД.

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

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

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

     - Чтение данных. SQL дает пользователю или приложению возможность читать из базы данных содержащиеся в ней данные и пользоваться ими.

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

     - Управление доступом. С помощью SQL можно ограничить возможности пользователя по чтению и изменению данных и защитить их от несанкционированного доступа.

     - Совместное использование данных. SQL координирует совместное использование данных пользователями, работающими параллельно, чтобы они не мешали друг другу.

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

     Таким образом, SQL является достаточно мощным языком для взаимодействия с СУБД.

     Во-вторых, SQL — это не полноценный компьютерный язык типа COBOL, FORTRAN или С. В SQL нет оператора IF для проверки условий, нет оператора GOTO для организации переходов и нет операторов DO или FOR для создания циклов. SQL является подъязыком баз данных, в который входит около тридцати операторов, предназначенных для управления базами данных. Операторы SQL встраиваются в базовый язык, например COBOL, FORTRAN или С, и дают возможность получать доступ к базам данных. Кроме того, из такого языка, как С, операторы SQL можно посылать СУБД в явном виде, используя интерфейс вызовов функций.

     Наконец, SQL — это слабо структурированный язык, особенно по сравнению с такими сильно структурированными языками, как С или Pascal. Операторы SQL напоминают английские предложения и содержат "слова-пустышки", не влияющие на смысл оператора, но облегчающие его чтение. В SQL почти нет нелогичностей, к тому же имеется ряд специальных правил, предотвращающих создание операторов SQL, которые выглядят как абсолютно правильные, но не имеют смысла.

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

    1.   Роль SQL

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

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

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

     - SQL — язык программирования баз данных. Чтобы получить доступ к базе данных, программисты вставляют в свои программы команды SQL. Эта методика используется как в программах, написанных пользователями, так и в служебных программах баз данных (таких как генераторы отчетов и инструменты ввода данных).

     - SQL — язык администрирования баз данных. Администратор базы данных, находящейся на мини-компьютере или на большой ЭВМ, использует SQL для определения структуры базы данных и управления доступом к данным.

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

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

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

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

    1. Достоинства SQL

     SQL — это легкий для понимания язык и в то же время универсальное программное средство управления данными.

     Успех языку SQL принесли следующие его особенности:

- независимость от конкретных СУБД;

- переносимость с одной вычислительной системы на другую;

- наличие стандартов;

- одобрение компанией IBM (СУБД DB2);

- поддержка со стороны компании Microsoft (протокол ODBC);

- реляционная основа;

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

- возможность выполнения специальных интерактивных запросов:

- обеспечение программного доступа к базам данных;

- возможность различного представления данных;

- полноценность как языка, предназначенного для работы с базами данных;

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

- поддержка архитектуры клиент/сервер.

     Все перечисленные выше факторы явились причиной того, что SQL стал стандартным инструментом для управления данными на персональных компьютерах, мини-компьютерах и больших ЭВМ. Ниже эти факторы рассмотрены более подробно. 

      1. Независимость от конкретных СУБД

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

      1. Переносимость с одной вычислительной системы на другие

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

      1. Стандарты языка SQL

     Официальный стандарт языка SQL был опубликован Американским институтом национальных стандартов (American National Standards Institute — ANSI) и Международной организацией по стандартам (International Standards Organization — ISO) в 1986 году и значительно расширен в 1992 году. Кроме того, SQL является федеральным стандартом США по обработке информации (FIPS — Federal Information Processing Standard) и, следовательно, соответствие ему является одним из основных требований, содержащихся в больших правительственных контрактах, относящихся к области вычислительной техники. В Европе стандарт X/OPEN для переносимой среды программирования на основе операционной системы UNIX включает в себя SQL в качестве стандарта для доступа к базам данных. SQL Access Group — консорциум поставщиков компьютерного оборудования и баз данных — определил для SQL стандартный интерфейс вызовов функций, который является основой протокола ODBC компании Microsoft и входит также в стандарт X/OPEN. Эти стандарты служат как бы официальной печатью, одобряющей SQL, и они ускорили завоевание им рынка. 

      1. Одобрение SQL компанией IBM (СУБД DB2)

     SQL был придуман научными сотрудниками компании IBM и широко используется ею во множестве пакетов программного обеспечения. Подтверждением этому служит флагманская СУБД DB2 компании IBM. Все основные семейства компьютеров компании IBM поддерживают SQL: система PS/2 для персональных компьютеров, система среднего уровня AS/400. система RS/6000 на базе UNIX, а также операционные системы MVS и VM больших ЭВМ. Широкая поддержка SQL фирмой IBM ускорила его признание и еще в самом начале возникновения и развития рынка баз данных явилась своего рода недвусмысленным указанием для других поставщиков баз данных и программных систем, в каком направлении необходимо двигаться. 

      1. Протокол  ODBC и компания Microsoft

     Компания  Microsoft рассматривает доступ к базам данных как важную часть своей операционной системы Windows. Стандартом этой компании по обеспечению доступа к базам данных является ODBC (Open Database Connectivity — взаимодействие с открытыми базами данных) — программный интерфейс, основанный на SQL. Протокол ODBC поддерживается наиболее распространенными приложениями Windows (электронными таблицами, текстовыми процессорами, базами данных и т.п.), разработанными как самой компанией Microsoft, так и другими ведущими поставщиками. Поддержка ODBC обеспечивается всеми ведущими реляционными базами данных. Кроме того, ODBC опирается на стандарты, одобренные консорциумом поставщиков SQL Access Group, что делает ODBC как стандартом де-факто компании Microsoft, так и стандартом, независимым от конкретных СУБД. 

      1. Реляционная основа

     SQL является языком реляционных баз данных, поэтому он стал популярным тогда, когда популярной стала реляционная модель представления данных. Табличная структура реляционной базы данных интуитивно понятна пользователям, поэтому язык SQL является простым и легким для изучения. Реляционная модель имеет солидный теоретический фундамент, на котором были основаны эволюция и реализация реляционных баз данных. На волне популярности, вызванной успехом реляционной модели, SQL стал единственным языком для реляционных баз данных. 

      1. Высокоуровневая структура, напоминающая английский язык

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

      1. Интерактивные запросы

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

      1. Программный доступ к базе данных

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

      1. Различные представления данных

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

      1. Полноценный язык для работы с  базами данных

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

      1. Динамическое  определение данных

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

      1. Архитектура клиент/сервер

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

  1. Структуры языка SQL
 
    1. Идентификаторы INFORMIX

     Идентификатор  (имя объекта)  -  это  слово, состоящее из букв, цифр, и знаков подчеркивания (_), начинающееся с буквы  или знака (_). В INFORMIX-4GL не различаются  маленькие и большие  буквы. Поэтому i_Un1023Tt и I_UN1023TT - одно и тоже имя.

     Имя базы данных не длиннее 10.

     Имена прочих объектов SQL - таблиц, столбцов, view (псевдотаблиц), синонимов - не длиннее 18. 

    1. Группы  операторы языка SQL

        SQL содержит 4 группы операторов:

      - Операторы описания данных: CREATE, DROP, ALTER и др.

      - Операторы манипуляции данными: INSERT, DELETE, SELECT, UPDATE и др.

      - Операторы задания прав доступа  в базе данных: GRANT / REVOKE ,  LOCK / UNLOCK ,  SET LOCK MODE

      - Операторы защиты, восстановления  данных и прочие операторы.

     Их  обзором мы сейчас и займемся, по порядку. 

    1. Операторы описания данных

     Операторы описания данных предназначены  для  описания  (создания),  изменения  описания  и уничтожения объектов базы данных.

     В SQL различаются  следующие виды объектов:

     - база данных (database);

     - таблица (table);

     - столбец (column);

     - индекс (index);

     - снимок (view);

     - синоним (synonym).

     Каждый  объект  имеет  собственное  имя - идентификатор. Каждый объект имеет владельца - т.е. того  пользователя,  который  его создал. Имя объекта можно уточнять с помощью имени его владельца (owner-name) в такой форме: moshkow.table1

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

     Создание  базы данных.

     CREATE DATABASE zawod

     В любой момент времени вы можете иметь  доступ к объектами только  одной  - ТЕКУЩЕЙ (CURRENT) - базы данных. Оператор DATABASE делает новую базу текущей, закрывая при этом доступ к  объектам предыдущей  текущей базы. Оператор CLOSE DATABASE просто закрывает текущую базу данных.

     DATABASE zawod  . . .                # текущей является база zawod

     DATABASE stanciq  . . .                # текущей является база stanciq

     CLOSE DATABASE . . .                # текущей базы нет 

     Создаются таблицы kadry и ceh, содержащие столбцы  разных типов.

     CREATE TABLE  kadry    (

      nomerceh  INT,

      tabnom    SERIAL ,

      fio       CHAR(20) UNIQUE,

      zarplata  MONEY(16,2),

      datarovd  DATE,

      pribytie  DATETIME year TO minute )

     CREATE TABLE ceh ( nomerceh int, nameceh char(20) )

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

     ALTER TABLE kadry ADD  (dolvnostx  CHAR(20)  BEFORE  zarplata),

     DROP(pribytie),  ADD CONSTRAINT UNIQUE(tabnom, fio) CONSTRAINT

     tabnomfio

     ALTER TABLE items MODIFY (manu_code char(4))

     Изменение структуры таблицы приводит к физическому преобразованию  данных  в  ней.  Если изменен тип столбца, то данные в нем преобразуются к новому типу, и если это невозможно осуществить, то оператор ALTER "валится" с кодом ошибки, а  таблица остается в неизмененном состоянии.

     View  - "псевдо" таблица, базируется на существующих таблицах.

     CREATE VIEW poor AS SELECT tabnom, fio, datarovd FROM kadry

        WHERE zarplata < 120

     # создано  view  - "псевдотаблица"  из трех столбцов  содержащая

     # строки из таблицы kadry, в которых  zarplata меньше 120 рублей. 

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

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

     CREATE  UNIQUE INDEX indkdtb ON kadry (tabnom)

     #  создан  индекс  для  столбца  tabnom из таблицы kadry. Индекс

     #  уникальный,  значит  в столбце  не могут появиться одинаковые

     #  значения.

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

     ALTER INDEX indkdtb TO  CLUSTER

     Имена  столбцов в разных таблицах могут  совпадать. Если в каком либо операторе SQL упоминаются два столбца с одинаковыми названиями, то их нужно уточнять именами таблиц, их содержащих.  Перед именем любого объекта можно (а иногда и необходимо) указать имя  его владельца (owner-name) - входное имя пользователя, ко торый создал (CREATE) этот объект.

     kadry.nomerceh     #    столбец nomerceh из таблицы kadry

     ceh.nomerceh          #    столбец nomerceh из таблицы ceh

     iwanow.table1.c1   #    столбец c1 из таблицы table1,  владельцем которой является iwanow

     moshkow.table1.c1 #    столбец c1 из другой (!) таблицы - таблицы table1, владельцем которой  является moshkow

     Синоним для имени таблицы используется для сокращения записи.

     CREATE SYNONYM t1 FOR petrow.sostoqnie_postow

     Теперь  повсюду можно  (хотя  и  не  обязательно)  вместо  имени

     petrow.sostoqnie_postow использовать имя t1. 

     База данных может иметь системный журнал транзакций (logfile).

     START  DATABASE zawod  WITH LOG IN "/udd/moshkow/logfile/zawod"

     Если  нет журнала  транзакций  для  всей базы данных, то для отдельных  таблиц в базе с той же целью  можно создать audit trail.