Язык запросов SQL

Автор работы: Пользователь скрыл имя, 31 Октября 2011 в 19:51, реферат

Краткое описание

SQL ( Structured Query Language - «язык структурированных запросов») - универсальный компьютерный язык, применяемый для создания, модификации и управления данными в реляционных базах данных. Реляционная база данных - база данных, основанная на реляционной модели данных. Реляционная модель данных (РМД) - логическая модель данных, прикладная теория построения баз данных, которая является приложением к задачам обработки данных таких разделов математики как теории множеств и логика первого порядка.

Содержимое работы - 1 файл

Язык запросов SQL.docx

— 97.11 Кб (Скачать файл)

     Каждая  таблица описывается в виде перечисления своих полей (столбцов таблицы) с  указанием:

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

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

  • вставка новой строки;
  • изменение значений полей строки или набора строк;
  • удаление строки или набора строк.

     Самый главный вид запроса - это запрос, возвращающий (пользователю) некоторый набор строк, с которым можно осуществить одну из трёх операций:

  • просмотреть полученный набор;
  • изменить все записи набора;
  • удалить все записи набора.

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

     Описание.

Язык SQL представляет собой совокупность

  • операторов;
  • инструкций;
  • и вычисляемых функций.

     Операторы.

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

Операторы SQL делятся  на:

  • операторы определения данных (Data Definition Language, DDL)
    • CREATE создает объект БД (саму базу, таблицу, представление, пользователя и т. д.)
    • ALTER изменяет объект
    • DROP удаляет объект
  • операторы манипуляции данными (Data Manipulation Language, DML)
    • SELECT считывает данные, удовлетворяющие заданным условиям
    • INSERT добавляет новые данные
    • UPDATE изменяет существующие данные
    • DELETE удаляет данные
  • операторы определения доступа к данным (Data Control Language, DCL)
    • GRANT предоставляет пользователю (группе) разрешения на определенные операции с объектом
    • REVOKE отзывает ранее выданные разрешения
    • DENY задает запрет, имеющий приоритет над разрешением
  • операторы управления транзакциями (Transaction Control Language, TCL)
    • COMMIT применяет транзакцию.
    • ROLLBACK откатывает все изменения, сделанные в контексте текущей транзакции.
    • SAVEPOINT делит транзакцию на более мелкие участки.

     Преимущества  и недостатки.

     Преимущества.

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

     Несмотря  на наличие диалектов и различий в синтаксисе, в большинстве своём тексты SQL-запросов, содержащие DDL и DML, могут быть достаточно легко перенесены из одной СУБД в другую. Существуют системы, разработчики которых изначально ориентировались на применение по меньшей мере нескольких СУБД (например: система электронного документооборота Documentum может работать как с Oracle, так и с Microsoft SQL Server и IBM DB2). Естественно, что при применении некоторых специфичных для реализации возможностей такой переносимости добиться уже очень трудно. 

     Наличие стандартов.

     Наличие стандартов и набора тестов для выявления  совместимости и соответствия конкретной реализации SQL общепринятому стандарту  только способствует «стабилизации» языка. Правда, стоит обратить внимание, что  сам по себе стандарт местами чересчур формализован и раздут в размерах (например, Core-часть стандарта SQL:2003 представляет собой более 1300 страниц  текста).

     Декларативность.

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

     Недостатки.

     Несоответствие  реляционной модели данных.

     Создатели реляционной модели данных Эдгар Кодд, Кристофер Дейт и их сторонники указывают на то, что SQL не является истинно реляционным языком. В частности, они указывают на следующие проблемы SQL:

  • Повторяющиеся строки
  • Неопределённые значения (nulls)
  • Явное указание порядка колонок слева направо
  • Колонки без имени и дублирующиеся имена колонок
  • Отсутствие поддержки свойства «=»
  • Использование указателей
  • Высокая избыточность

     В опубликованном Кристофером Дейтом и Хью Дарвеном Третьем Манифесте они излагают принципы СУБД следующего поколения и предлагают язык Tutorial D, который является подлинно реляционным.

     Сложность.

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

     Отступления от стандартов.

     Несмотря  на наличие международного стандарта ANSI SQL-92, многие компании, занимающиеся разработкой СУБД (например, Oracle, Sybase, Microsoft, MySQL AB), вносят изменения в язык SQL, применяемый в разрабатываемой СУБД, тем самым отступая от стандарта. Таким образом, появляются специфичные для каждой конкретной СУБД диалекты языка SQL.

     Сложность работы с иерархическими структурами.

     Ранее диалекты SQL большинства СУБД не предлагали способа манипуляции древовидными структурами. Некоторые поставщики СУБД предлагали свои решения (например, Oracle использует выражение CONNECT BY). В настоящее время в ANSI стандартизована рекурсивная конструкция WITH из диалекта SQL DB2. В MS SQL Server рекурсивные запросы появились лишь в версии MS SQL Server 2005. 

     Типы  данных.

     В SQL используются следующие основные типы данных, форматы которых могут  несколько различаться для разных СУБД:

     INTEGER - целое число (обычно до 10 значащих цифр и знак);

     SMALLINT - "короткое целое" (обычно до 5 значащих цифр и знак);

     DECIMAL(p,q) - десятичное число, имеющее p цифр (0 < p < 16) и знак; с помощью q задается число цифр справа от десятичной точки (q < p, если q = 0, оно может быть опущено);

     FLOAT - вещественное число с 15 значащими цифрами и целочисленным порядком, определяемым типом СУБД;

     CHAR(n) - символьная строка фиксированной длины из n символов (0 < n < 256);

     VARCHAR(n) - символьная строка переменной длины, не превышающей n символов (n > 0 и разное в разных СУБД, но не меньше 4096);

     DATE - дата в формате, определяемом специальной командой (по умолчанию mm/dd/yy); поля даты могут содержать только реальные даты, начинающиеся за несколько тысячелетий до н.э. и ограниченные пятым-десятым тысячелетием н.э.;

     TIME - время в формате, определяемом специальной командой, (по умолчанию hh.mm.ss);

     DATETIME - комбинация даты и времени;

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

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

     SQL-функции.

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

     COUNT - число значений в столбце,

     SUM - сумма значений в столбце,

     AVG - среднее значение в столбце,

     MAX - самое большое значение в столбце,

     MIN - самое малое значение в столбце.

     Для функций SUM и AVG рассматриваемый столбец  должен содержать числовые значения.

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

     Аргументу всех функций, кроме COUNT(*), может предшествовать ключевое слово DISTINCT (различный), указывающее, что избыточные дублирующие значения должны быть исключены перед тем, как будет применяться функция. Специальная же функция COUNT(*) служит для подсчета всех без исключения строк в таблице (включая дубликаты). 

     Возможности SQL.

     В начале 70-х годов SQL являлся лишь языком запросов (ЯЗ). Он, по сути, содержал только предложение SELECT, которое позволяло  формулировать запросы для выборки  данных из базы. Затем язык был дополнен двумя другими компонентами, необходимыми для работы с базами данных. Первый из них — средства для определения  структуры базы данных, которые в  терминологии теории баз данных называются языком определения данных (ЯОД). Второй — средства, позволяющие заполнять  базу данными, изменять их и удалять. Этот компонент в теории баз данных называется языком манипулирования  данными (ЯМД). Также было принято  решение, что весь интерфейс с  базами данных должен обеспечиваться одним языком, вследствие чего SQL оброс  множеством функций, необходимых для  управления базами данных. Приведем некоторые  из них:

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

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

     SQL-технологии.

     Язык.

     Общение с сервером СУБД происходит на языке  структурированных запросов SQL (Structured Query Language). Базовый набор языка стандартизован ANSI. Действующая редакция ANSI SQL92. Это непроцедурный язык. Он предназначен именно для построения запросов и манипуляции данными и структурами данных. У него нет ни переменных, ни меток, ни циклов, ни всего прочего, с чем привык работать нормальный программист. Надо четко представлять себе, что SQL оговаривает способ передачи данных в клиентскую программу, но никак не оговаривает то, как эти данные должны в клиентской программе обрабатываться и представляться пользователю.

Информация о работе Язык запросов SQL