
- •Язык запросов sql
- •Просмотр только определенного столбца таблицы
- •Переупорядочение столбца
- •Удаление избыточных данных
- •Квалифицированный выбор при использовании предложений
- •Использование специальных операторов в условиях.
- •In и between используются также, как и реляционные операторы, чтобы сравнивать значения, которые берутся либо из набора ( для in ) либо из диапазона ( для between ).
- •Работа с нулевыми( null ) значениями
- •Использование not со специальными операторами
- •Обобщение данных с помощью агрегатных функций
- •Включение дубликатов в агрегатные функции
- •Агрегаты построенные на скалярном выражении
- •Предложение group by
- •Предложение having
- •Формирование выводов запросов
- •Упорядочение вывода по номеру столбца
- •Упорядочение с помощью опретора null
Язык запросов 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;
Это приведет к тому же результату что и предыдущая команда.