Выборка данных
Для выборки данных в SQL используется инструкция SELECT. Она состоит из следующих основных частей. Части пишутся в определенном порядке.
1. Список выборки. Здесь указываются столбцы, которые включаются в результат запроса. Столбцы возвращаются в порядке их перечисления в списке выборки. Чтобы список выборки содержал все столбцы таблицы, можно использовать символ *.
2. Раздел FROM. Определяет источник (или источники) данных для выборки (таблицы или представления).
SELECT * FROM Readers; – выводит все данные из таблицы «Readers».
SELECT ReaderName, ReaderSurname FROM Readers; - выборка ФИО.
Имена объектов БД можно уточнить. Уточненное имя записывается в форме:
ИмяСервера. ИмяБазы. ИмяВладельца. ИмяТаблицы (для таблицы)
ИмяСервера. ИмяБазы. ИмяВладельца. ИмяТаблицы. ИмяСтолбца (для столбца)
Уточнение имени полезно, например, при выборке данных из нескольких таблиц, если таблицы содержат одноимённые столбцы.
Для того чтобы сократить размеры запроса, для громоздких имен объектов в разделе FROM можно задать псевдонимы. После объявления псевдонима нельзя обращаться к объекту по имени в текущем запросе. Служебное слово AS можно опустить.
SELECT R.ReaderName, R.ReaderSurname FROM Readers AS R; - псевдоним для таблицы.
SELECT (RTRIM(R.ReaderName) + ' ' + R.ReaderSurname) AS Name FROM Readers R; - псевдоним для столбца или функции.
RTRIM – команда, которая обрезает все пробелы справа от содержимого поля. LTRIM – слева.
Запрос, возвращающий список формата «книга (серийный номер)»:
SELECT BookName + '(серийный номер' + SerialNum + ')' as book
FROM Books;
Для исключения повторяющихся значений из результата выборки используется параметр DISTINCT.
SELECT DISTINCT BookName FROM Books; – выборка названий книг без повторений.
|
DISTINCT применяется ко всем столбцам, используемым в предложении SELECT. Альтернатива DISTINCT – параметр ALL (повторяющиеся записи сохраняются). ALL применяется по умолчанию.
Если требуется вывести на экран определенное число записей, используется параметр TOP. Аргумент TOP – либо точно количество записей, либо процент записей от общего числа. В этом случае используется служебное слово PERCENT (округление в большую сторону).
SELECT TOP 50 PERCENT BookNAme FROM Books; – выборка половины списка книг (по порядку хранения в БД
SELECT TOP 2 BookNAme FROM Books ORDER BY BookName; – выборка первых двух книг (по алфавиту)
3. Раздел WHERE. Определяет критерий отбора записей. В разделе можно задавать предикаты – условные выражения, которые могут иметь результат TRUE, FALSE или UNKNOWN для каждой строки таблицы. В результат запроса включаются только те строки, для которых предикат имеет значение TRUE. В предикатах используются операторы отношения (больше, меньше, равно и т.д.) и логические операторы (AND, OR, NOT).
SELECT BookName
FROM Books
WHERE PublHouse = 'Эксмо' or PageNum > 100;
Сравниваемые объекты не обязаны присутствовать в списке выборки.
Если необходимо выбрать все строки, в которых какое-то поле не содержит значения, используется конструкция IS NULL. Например, выборка всех книг, для которых не указано издательство:
SELECT BookName
FROM Books
WHERE PublHouse IS NULL;
Запрос, выводящий книги издательств Эксмо или Аст-Пресс, содержащие менее 1000 страниц:
SELECT BookName FROM Books
WHERE ((PublHouse = 'Эксмо') or (PublHouse = 'Аст-Пресс')) and PageNum < 1000;
Выбрать все жанры и их описание, кроме жанров «Детектив» и «Роман»:
|
SELECT GenreName, GenreHistory FROM Genres
WHERE (GenreName <> 'Роман') and (GenreName <> 'Детектив');
SELECT GenreName, GenreHistory FROM Genres
WHERE NOT((GenreName = 'Роман') or (GenreName = 'Детектив'));
4. Раздел GROUP BY. Предназначен для группировки записей и вычисления для них агрегатных (статистических) функций. Группировка происходит по одному или нескольким полям, объединяются записи с одинаковым значением полей. Кроме полей для группировки выделяются поля, для которых будет вычислена агрегатная функция.
Агрегатные функции выполняют вычисление на наборе значений и возвращают одиночное значение. Все они, за исключением COUNT, не учитывают значение NULL. В T-SQL используются следующие основные функции:
AVG – среднее арифметическое группы значений;
SUM – сумма значений;
MIN – минимальное значение;
MAX – максимальное значение;
COUNT – количество элементов в выборке.
Агрегатные функции могут использоваться без раздела GROUP BY. Например, можно посчитать, сколько в библиотеке читателей:
SELECT COUNT(ReaderID)
FROM Readers;
Если нужно узнать более подробную информацию, например, сколько в библиотеке читателей из каждого города, значения придется сгруппировать по коду города. Поля, по которым происходит группировка, не обязаны присутствовать в списке выборки (в разделе SELECT поле CityID можно не использовать).
SELECT CityID, COUNT(ReaderID) as Rcount
FROM Readers
GROUP BY CityID;
Подсчитать среднее количество страниц в детективах библиотеки и количество книг этого жанра: