Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по SQL.DOC
Скачиваний:
205
Добавлен:
01.05.2014
Размер:
1.16 Mб
Скачать

6.3. Обозначения в командах sql

В командах SQL используются ключевые слова, то есть слова, которые имеют специальное значение в SQL. Они могут быть командами, но не текстом и не именами объектов. Будем выделять ключевые слова печатая их ЗАГЛАВНЫМИ БУКВАМИ. Следует соблюдать осторожность, чтобы не путать ключевые слова с терминами.

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

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

Например, предложения “ FROM Salespeople “ и “ WHERE city = ‘London’ ”. Аргументы завершают или изменяют значение предложения. В примерах выше, Salespeople - аргумент, а FROM - ключевое слово предложения FROM. Аналогично, “ city = ‘London’ “ - агрумент предложения WHERE.

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

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

. Использование SQL для извлечения

информации из таблиц

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

Запросы обычно рассматриваются как часть языка DML (Языка Манипулирования Данными). Однако, так как запрос не меняет информацию в таблицах, а просто показывает ее пользователю, лучше рассматривать запросы как самостоятельную категорию среди команд DML, которые часто производят действие, а не просто показывают содержание базы данных.

Все запросы в SQL состоят из одиночной команды. Структура этой команды обманчиво проста, потому что обычно ее приходится расширять так, чтобы выполнить высоко сложные оценки и обработки данных. Эта команда называется SELECT(ВЫБОР).

..1. Команда SELECT

В самой простой форме команда SELECT просто инструктирует СУБД, чтобы извлечь информацию из таблицы. Например, можно

вывести таблицу Salespeople напечатав следующее:

SELECT snum, sname, sity, comm

FROM Salespeople;

Вывод для этого запроса:

======== SQL Execution Log ============

SELECT snum, sname, сity, comm snum

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 |

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

Здесь

snum - уникальный номер, назначенный каждому продавцу;

sname - имя продавца;

city - расположение продавца( город );

comm - комиссионные продавцов в десятичной форме.

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

Команда состоит из следующих частей:

SELECT Ключевое слово которое сообщает базе данных что

эта команда запрос. Все запросы начинаются этим

словом, сопровождаемым пробелом.

snum, sname,city,comm

Это - список столбцов из таблицы, которые выбираются

запросом. Любые столбцы, не перечисленные здесь, не

будут включены в вывод команды. Это, конечно, не значит

что они будут удалены или их информация будет стерта

из таблиц, потому что запрос не воздействует на

информацию в таблицах; он только показывает данные.

FROM Ключевое слово, подобное SELECT, которое должно

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

Salespeople

В данном случае это имя таблицы Salespeople.

; Точка с запятой используется во всех интерактивных

командах SQL, чтобы сообщать базе данных что команда

заполнена и готова выполниться.

В некоторых системах наклонная черта влево (\) в строке,

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

Естественно, строки выводятся в том порядке, в котором они найдены в таблице.

Использование клавиши ENTER является произвольным. Можно

составить запрос в несколько строк или в одну строку, например, следующим образом:

SELECT snum, sname, city, comm FROM Salespeople;

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

клавиши ENTER как пробел.

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

SELECT *

FROM Salespeople;

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

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

Можно ввести запрос и получить ответ:

===== SQL Execution Log ======

SELECT сity

FROM Salespeople;

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

| city |

|-------------------------|

| London |

| San Jose |

| London |

| Barcelona |

| New York |

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

Для получения списка без дубликатов следует ввести следующее:

===== SQL Execution Log ======

SELECT DISTINCT сity

FROM Salespeople;

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

| city |

|-------------------------|

| London |

| San Jose |

| Barcelona |

| New York |

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

Аргумент DISTINCT - полезный способ избежать избыточности данных, но не рекомендуется безоглядно использовать DISTINCT, потому что это может скрыть неточность в интерпретации данных. Например, можно предположить что имена всех Продавцов различны. Если другой пользователь помещает второго Axelrod’а в таблицу Salespeople,

а вы используете SELECT DISTINCT sname, вы не будете даже знать

о существовании двойника. Вы можете получить не того Axelrod’а и даже

не знать об этом. Так как вы не ожидаете избыточности, в этом случае вы не должны использовать DISTINCT.

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

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

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

Язык SQL дает возможность устанавливать критерии, чтобы

определить, какие строки будут выбраны для вывода.

Предложение WHERE - предложение команды SELECT, которое позволяет устанавливать предикаты, которые могут быть или истинными или неистинными для некоторой строки таблицы. Команда извлекает только те строки из таблицы, для которой такое утверждение верно. Например, предположим вы хотите видеть имена и комиссионные всех продавцов в Лондоне. Вы можете ввести такую команду:

SELECT sname, city

FROM Salespeople

WHERE city = ‘LONDON’;

Когда предложение WHERE представлено, СУБД просматривает всю таблицу по одной строке и исследует каждую строку, чтобы определить верно ли утверждение.

Следовательно, для записи Peel, программа рассмотрит текущее значение столбца city, определит что оно равно ‘London’, и включит эту строку в вывод. Запись для Serres не будет включена, и так далее.

Вывод для обсуждаемого запроса:

====== SQL Execution Log ============

SELECT sname, city

FROM Salespeople

WHERE city = ‘London’;

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

| sname city |

|------------------------------------------|

| Peel London |

| Motika London |

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

.2. Операторы отношений

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

Операторы отношения, которыми располагает язык SQL :

= Равный

> Больше чем

< Меньше чем

>= Больше чем или равно

<= Меньше чем или равно

<> Не равно

Эти операторы имеют стандартные значения для числовых значений. Для значения символа, их определение зависит от формата преобразования ASCII или EBCDIC. SQL сравнивает символьные значения в кодах, как определено в формате преобразования.

Можно использовать операторы отношения, чтобы установить алфавитный порядок, например, ‘a’ < ‘n’, где символ ‘a’ первый в алфавитном порядке.

Основные Булевы операторы также распознаются в SQL.

Булевы операторы связывают одно или более истинных/неистинных

значений и производят единственное истинное/неистинное значение.

Стандартными операторами Буля распознаваемыми в SQL являются:

AND, OR, и NOT.

Пример.

======== SQL Execution Log ============

SELECT *

FROM Salespeople

WHERE comm<=0.11;

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

| snum sname city comm |

| -------------------------------------------------- |

| 1004 Motika London 0.11 |

| 1003 Axelrod New York 0.10 |

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

увеличить их возможности. Например:

======== SQL Execution Log ============

SELECT *

FROM Salespeople

WHERE city=‘London’

AND comm<=0.11;

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

| snum sname city comm |

| -------------------------------------------------- |

| 1004 Motika London 0.11 |

Оператор NOT должен предшествовать предикату, и не должен

помещаться перед оператором отношения. Например, неправильно

AND comm NOT <=0.11;

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

..3. Специальные операторы

В дополнении к операторам отношения и булевским операторам язык SQL использует специальные операторы IN, BETWEEN, LIKE и IS NULL .

Соседние файлы в предмете Базы данных