Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lect4.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
173.06 Кб
Скачать

22

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

SQL- структурированный язык запросов - предназначен для обработки реляционных БД. Многие конструкторы и операторы языка SQL связаны с операциями реляционной алгебры. Существует два типа языка SQL:

  • интерактивный - используется для выполнения действий непосредственно над БД в оперативном режиме. Как правило, интерактивному SQL сопутствует некоторая программа-сервер SQL. Наиболее популярны MS-SQL Server, Inter Base и некоторые другие.

  • встроенный - состоит из команд SQL, включенных непосредственно в программы, которые написаны на другом языке программирования. Например, Delphi, C++ Builder, Access.

В языке SQL существует множество команд, которые относятся к тем или иным выполняемым действиям. Таким образом можно разделить SQL на определенные подмножества:

  • DQL- язык запросов - команды предназначены для извлечения данных из таблиц.

  • DML- манипуляция данными.

  • TPL- язык обработки транзакций (*). Команды позволяют объединить команды языка DHL в группы транзакций. Если одна из команд DHL не может быть выполнена, то отменяются все предыдущие команды из той же транзакции.

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

  • CCL- язык управления курсором -позволяет выбрать для обработки одну строку из результирующего множества запросов.

  • DCL- язык управления данными - содержит инструкции выполняющие присваивание прав доступа к БД, множеству таблиц или представлений.

Типы данных SQL

Типы данных распознаваемые с помощью ANSI, состоят из символов и различных типов чисел, которые могут классифицироваться как точные числа и приблизительные числа. Точные числовые типы - это номера, с десятичной точкой или без десятичной точки. Приблизительные числовые типы - это номера в показательной ( экспоненциальной по основанию - 10 ) записи. Для все прочих типов, отличи слишком малы, чтобы их как-то классифицировать.

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

Ниже представлены типы данных ANSI ( имена в круглых скобках - это синонимы ):

TEXT

ТЕКСТ

CHAR(или CHARACTER)

Строка текста в реализационно-определенном формате. Размер аргумента здесь это единственное неотрицательное целое число которое ссылается к максимальной длине строки. Значения этого типа, должны быть заключены в одиночные кавычки, например 'text'. Две рядом стоящие одиночные кавычки ('') внутри строки будет пониматься как одна одиночна кавычка (').

ПРИМЕЧАНИЕ: Здесь и далее, фраза Реализационно-Определенный или Реализационно-Зависимый, указывает, что этот аргумент или формат зависит от конкретной программы в которой реализуются данные.

EXACT NUMERIC

ТОЧНОЕ ЧИСЛО

DEC (или DECIMAL)

Десятичное число; то есть, число которое мoжет иметь десятичную точку. Здесь аргумент размера имеет две части: точность и масштаб.Масштаб не может превышать точность. Cначала указывается точность, разделительная запятая и далее аргумент масштаба. Точность указывает сколько значащих цифр имеет число. Максимальное десятичное число составляющее номер - реализационно-определенное значение, равное или большее чем этот номер. Масштаб указывает максимальное число цифр справа от десятичной точки. Масштаб = нулю делает поле эквивалентом целого числа.

NUMERIC

Такое же как DECIMAL за исключением того, что максимальное десятичное не может превышать аргумента точности.

INT( или INTEGER)

Число без десятичной точки. Эквивалентно DECIMAL, но без цифр справа от десятичной точки, то есть с масштабом равным 0. Аргумент размера не используется (он автоматически устанавливается в реализационно-зависимое значение).

SMALLINT

Такое же как INTEGER, за исключением того, что, в зависимости от реализации, размер по умолчанию может ( или не может ) быть меньшее чем INTEGER.

APPROXIMATE NUMERIC

ПРИБЛИЗИТЕЛЬНОЕ ЧИСЛО

FLOAT

Число с плавающей запятой на основе 10 показательной функции. Аргумент размера состоит из одного числа определяющего минимальную точность.

REAL

Такое же как FLOAT, за исключением того, что никакого аргумента размера не используется. Точность установлена реализационно-зависимую по умолчанию.

DOUBLE PRECISION ( или DOUBLE )

Такое же как REAL, за исключением того, что реализационно-определяемая точность для DOUBLE PRECISION должна превышать реализационно-определяемую точность REAL.

(*) - Транзакция - некоторая совокупность действий, которая не может быть выполнена не полностью, от первого действия до последнего. (Если запись имеет довольно много полей, а Вам необходимо ее скопировать полностью, в случае сбоя во время копирования, Вы рискуете получить только часть полей заполненными, а остальные поля пустыми. Данная ситуация приведет к ошибке. Чтобы ее избежать Вам необходимо объявить копирование транзакцией. Теперь, если какая-то из команд входящих в транзакцию не может быть выполнена, производится откат транзакции - все уже произведенные действия отменяются, и таким образом целостность данных сохраняется.)

Оператор выбора SELECT

Язык запросов ( Data Query Language ) в SQL состоит из единственного оператора SELECT . Этот единственный оператор поиска реализует все операции реляционной алгебры. Как просто, всего один оператор. Однако писать запросы на языке SQL (грамотные запросы) сначала совсем не просто. Один и тот же запрос может быть реализован несколькими способами, и, будучи все правильными, они, тем не менее, могут существенно отличаться но времени исполнения, и это особенно важ­но для больших баз данных.

Синтаксис оператора SELECT:

SELECT [ALL | DISTINCT] < список столбцов > |*

[INTO имя_новой таблицы]

FROM < список таблиц-источников >

[ WHERE < предикат - условие выборки или соединения >]

[GROUP ВУ [ALL] выражение группирования [,... n]

[ HAVING < предикат - условие поиска для группы >]

[ORDER ВУ имена столбцов, по которым упорядочивается вывод

[ASC | DESC] [,... n]]

[UNION < выражение с оператором SELECT>]

Здесь:

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

  • Ключевое слово DISTINCT означает, что в результирующий набор включаются только раз­ личные строки, то есть дубликаты строк результата не включаются в набор.

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

  • В разделе FROM задается перечень исходных отношений (таблиц) запроса.

  • В разделе WHERE задаются условия отбора строк результата или условия соединения кортежей исходных таблиц, подобно операции условного соединения в реляционной алгебре.

  • В разделе GROUP BY задается список полей группировки.

  • В разделе HAVING задаются предикаты-условия, накладываемые на каждую группу.

  • В части ORDER BY задается список полей упорядочения результата, то есть список полей, который определяет порядок сортировки в результирующем отношении.

  • Директива UNION используется для объединения выходных данных двух или более SQL-запросов в единое множество строк и столбцов.

В самой простой форме, команда SELECT просто инструктирует базу данных, чтобы извлечь информацию из таблицы. Например, выведем таблицу Продавцов:

SELECT snum, sname, sity, comm

FROM Salespeople;

==============================================

snum sname city comm

------ ---------- ----------- -------

1001 Peel London 0.12

1002 Serres San Jose 0.13

1004 Motika London 0.11

1007 Rifkin Barcelona 0.15

1003 Axelrod New York 0.10

==============================================

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

SELECT *

FROM Salespeople;

Это приведет к тому же результату что и предыдущая команда.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]