Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
GOSY / 1 блок-все.doc
Скачиваний:
123
Добавлен:
09.05.2015
Размер:
1.38 Mб
Скачать

30.Язык sql. Оператор выборки данных Select и примеры его использования.

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

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

SQL (Structured Query Language) – это структурированный язык запросов к реляционным базам данных (БД). SQL является декларативным языком, основанным на операциях реляционной алгебры. Язык работы с базами данных должен предоставлять пользователям следующие возможности:создавать базу данных и таблицы с полным описанием их структуры; выполнять основные операции манипулирования данными (добавление, изменение, удаление данных); выполнять запросы, осуществляющие преобразование данных в необходимую информацию.

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

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

SELECT snum, sname, sity, comm

FROM Salespeople;

SELECT – ключевое слово, которое сообщает базе данных, что эта команда - запрос. Все запросы начинаются этим словом, сопровождаемым пробелом.

snum, sname - это список столбцов из таблицы, которые выбираются запросом. Любые столбцы, не перечисленные здесь, не будут включены в вывод команды. Это, конечно, не значит, что они будут удалены или их информация будет стерта из таблиц, потому что запрос не воздействует на информацию в таблицах; он только показывает данные.

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

Salespeople В данном случае - это таблица Продавцов(Salespeople).

(;) Точка с запятой используется во всех интерактивных командах SQL, чтобы сообщать базе данных, что команда заполнена и готова выполниться. В некоторых системах наклонная черта влево (\) в строке, является индикатором конца команды.

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

SELECT *

FROM Salespeople;

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

УДАЛЕНИЕ ИЗБЫТОЧНЫХ ДАННЫХ

DISTINCT (ОТЛИЧИЕ) – аргумент, который обеспечивает возможность устранять двойные значения из предложения SELECT.

SELECT DISTINCT snum

FROM Orders;

Данное предложение покажет все возможные значения поля snum (только по одному разу).

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

Например, предположим, вы хотите видеть имена и комиссионные всех продавцов в Лондоне. Вы можете ввести такую команду:

SELECT sname, city

FROM Salespeople;

WHERE city = "LONDON";

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

БУЛЕВЫ ОПЕРАТОРЫ

AND берет два Буля (в форме A AND B) как аргументы и оценивает их по отношению к истине, верны ли они оба.

OR берет два Буля (в форме A OR B) как аргументы и оценивает на правильность, верен ли один из них.

NOT берет одиночный Булев (в форме NOT A) как аргументы и заменяет его значение с неверного на верное или верное на неверное. NOT может использоваться для инвертирования значений Буля.

IN определяет набор значений, в которое данное значение может или не может быть включено.

SELECT *

FROM Salespeople

WHERE city IN ( 'Barcelona', 'London' );

Оператор BETWEEN похож на оператор IN. В отличии от определения по номерам из набора, как это делает IN, BETWEEN определяет диапазон, значения которого должны уменьшаться что делает предикат верным. Вы должны ввести ключевое слово BETWEEN с начальным значением, ключевое AND и конечное значение. В отличие от IN, BETWEEN чувствителен к порядку, и первое значение в предложении должно быть первым по алфавитному или числовому порядку.

SELECT *

FROM Salespeople

WHERE comm BETWEEN .10 AND .12;

LIKE применим только к полям типа CHAR или VARCHAR, с которыми он используется, чтобы находить подстроки. Т.е. он ищет поле символа, чтобы видеть, совпадает ли с условием часть его строки. В качестве условия он использует групповые символы (wildkards) - специальные символы которые могут соответствовать чему-нибудь.

Имеются два типа групповых символов используемых с LIKE:

1) символ подчеркивания ( _ ) замещает любой одиночный символ. Например, 'b_t' будет соответствовать словам 'bat' или 'bit', но не будет соответствовать 'brat'.

2) знак процента (%) замещает последовательность любого числа символов (включая символы нуля). Например '%p%t' будет соответствовать словам 'put', 'posit', или 'opt', но не 'spite'.

IS [NOT] NULL:

field IS [NOT] NULL

– определяет, установлено ли значение поля. Все другие предикаты и операторы сравнения возвращают неопределённый результат (null), если хотя бы один из операндов имеет значение null.

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

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

Найдем все записи в таблице Заказчиков с NULL значениями в city столбце:

SELECT *

FROM Customers

WHERE city IS NULL;

АГРЕГАТНЫЕ ФУНКЦИИ

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

Команда SELECT

SELECT возвращает данные из таблицы, вида или сохраненной процедуры. Различные инструкции SELECT выполняют следующие действия:

Любая инструкция SELECT содержит два обязательных параметра (SELECT, FROM) и возможно другие параметры (WHERE, GROUP BY, HAVING, UNION, PLAN, ORDER BY). Параметры SELECT и FROM обязательны и для sigleton, и для multi-row SELECT; все другие параметры перечисленные ниже факультативны. Следующая таблица объясняет назначение каждого параметра:

SELECT Список столбцов, которые возвращаются.

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

DISTINCT

FROM Определяет таблицы в которых ищутся значения.

WHERE Определенное условие поиска, которое используется, чтобы выбрать необходимые стоки из множества всех строк. Предложение WHERE может содержать инструкцию SELECT, которая упоминается, как подзапрос

IS NULL Этот предикат всегда принимает значения true или false. При этом значение "x IS NULL" равно true тогда и только тогда, когда значение x не определено. Значение предиката "x NOT IS NULL" равно значению "NOT x IS NULL".

BEETWENAND оператор BETWEEN похож на оператор IN. Но, в отличие от определения по числам из набора, как это делает IN, BETWEEN определяет диапазон, значения которого должны уменьшаться, что делает предикат верным. Вы должны ввести ключевое слово BETWEEN с начальным значением, ключевое AND и конечное значение. В отличие от IN, BETWEEN чувствителен к порядку, и первое значение в предложении должно быть последним по алфавитному или числовому порядку.

IN Оператор IN определяет набор значений, в который данное значение может или может не быть включено. В соответствии с нашей учебной базой данных, на которой вы обучаетесь по настоящее время, если вы хотите найти всех продавцов, которые находятся в Barcelona или в London, вы должны использовать следующий запрос (вывод показан на Рисунке 5.1):

SELECT *

FROM Salespeople

WHERE city = 'Barcelona'

OR city = 'London';

Имеется и более простой способ получить ту же информацию:

SELECT *

FROM Salespeople

WHERE city IN ('Barcelona', 'London'); LIKE

EXISTS Значением этого предиката всегда является true или false, и это значение равно true тогда и только тогда, когда результат вычисления подзапроса не пуст

UNIQUE

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

NOT Операнды могут непосредственно предшествовать булеву NOT.

Это противоположно реляционным операциям, когда оператор NOT должен идти перед вводимым выражением. Например, если мы хотим устранить NULL из нашего вывода, мы будем использовать NOT, чтобы изменить на противоположное значение предиката:

SELECT *

FROM Customers

WHERE city NOT NULL;

При отсутствии значений NULL (как в нашем случае), будет выведена вся таблица Заказчиков. Аналогично можно ввести следующее

SELECT *

FROM Customers

WHERE NOT city IS NULL;

что также приемлемо. Мы можем также использовать NOT с IN:

SELECT *

FROM Salespeople

WHERE city NOT IN ('London', 'San Jose');

А вот другой способ подобного же выражения:

SELECT *

FROM Salespeople

WHERE NOT city IN ('London', ' San Jose');

AND

OR

ORDER BY позволяет упорядочивать выводимые записи в соответствии со значениями одного или нескольких выбранных столбцов.

ASC задает возрастающую (ASC) или убывающую (DESC) последовательность сортировки для каждого из столбцов. По умолчанию принята возрастающая последовательность сортировки.

AS

COUNT считает количество строк, которые вернул запрос

Функция COUNT отличается от других агрегатных функций тем, что она не выполняет математических действий над значением столбца. Она считает число значений в данном столбце, или число строк в таблице. Если необходимо подсчитать количество различных значений некоторого поля в таблице, функцию COUNT надо использовать с DISTINCT.

SUM суммирует значения данного поля;

MIN Находит минимальное значение поля.

MAX находит максимальное значение поля;

AVG находит среднее значение поля;

GROUP BY Разделяет результаты запроса в группы содержащие все строки с одинаковыми значениями, основанными на списке столбцов. (Группирует возвращенные строки основываясь на общих значениях столбцов). Используется совместно с HAVING

HAVING Используется совместно с GROUP BY. Определяет условия, которые ограничивают группировку возвращаемых строк.

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

ORDER BY Определяет порядок сортировки строк возвращенных SELECT, по умолчанию в возрастающем порядке (ASC), или в убывающем порядке (DESC).

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

Примеры Чтобы найти сумму всех покупок в таблице «Заказы», мы можем ввести следующий запрос:

Функция COUNT отличается от других агрегатных функций тем, что она не выполняет математических действий над значением столбца. Она считает число значений в данном столбце, или число строк в таблице. Если необходимо подсчитать количество различных значений некоторого поля в таблице, функцию COUNT надо использовать с DISTINCT. Например, чтобы подсчитать количество продавцов в настоящее время описанных в таблице заказов, мы можем использовать следующий запрос:

SELECT COUNT ( DISTINCT snum ) FROM Orders;

Результат его выполнения – число 5.

Иногда возникает необходимость решить обратную задачу – подсчитать количество значений поля вместе с повторениями. Для этого существует описатель ALL (он подразумевается по умолчанию). Например, запрос:

SELECT COUNT ( ALL rating ) FROM Customers;

подсчитает количествозначений поля rating с повторениями.

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

SELECT COUNT (*) FROM Customers;

Результат его выполнения – число 7.

Внимание! Только COUNT (*) может подсчитывать значения NULL. Все остальные функции игнорируют неопределенные значения

29

Соседние файлы в папке GOSY