sql

Оператор SELECT в Transact SQL

В этой статье рассмотрим основные запросы к БД с помощью оператора SELECT в T-SQL.

Фильтрация по столбцам

Допустим, есть готовая БД с книгами. Получим весь список книг:

SELECT * FROM titles

Теперь отфильтруем по столбцам (название и цена):

SELECT title,price FROM titles

Можно на основе существующих столбцов создавать новые. Например, есть цена книги. Нам нужны цены с НДС (создадим новую колонку с учетом НДС). Внимание, новый созданный столбец создается без имени, поэтому каждый раз надо прописывать ему имя:

SELECT price, price*(1+0.18) AS price2 FROM titles

Можно создавать новый столбцы, суммируя предыдущие. Например, надо создать визитки для авторов книг:

SELECT author_fname+' '+ author_lname AS author_fname FROM authors

Можно выбрать адреса авторов и создавать столбцы, куда отправлять письма для них:

SELECT zip AS [index],
       state+','+city+','+adress AS kuda
       author_fname+' '+author_lname AS komu
FROM authors

Фильтрация по строкам

Есть готовая БД с книгами, где каждая строка — это 1 книга.

Сложность фильтрации по строкам состоит в том, что у них нет номера. И фильтрация делается при помощи слова WHERE (где).

Выберем все книги, для которых выполняется условие — цена от 500 до 1000:

SELECT *
FROM titles
WHERE price>500 AND price>1000

Выберем все книги, содержащие в названии ‘php’:

SELECT *
FROM titles
WHERE title LIKE '%php%'

Выберем все дешевые книги по истории:

SELECT *
FROM titles
WHERE type='history' AND price<100

Работа с датами

Для работы с датами используются функции Year (год), Month (месяц), Day (день).

Например, выберем все книги, которые были проданы 11 ноября 2012г. (order_date — столбец с датой продажи):

SELECT *
FROM titles
WHERE Year(order_date)=2012, Month(order_date)=11, Day(order_fate)=11

Выбрать все книги, проданные весной 2012г. Внимание, в первом примере месяца заключены в скобки, т.к. по скобки придают больший приоритет, чем AND:

SELECT *
FROM titles
WHERE Year(order_date)=2012
   AND (Month(order_date)=3
   OR Month(order_date)=4
   OR Month(order_date)=5)
//тот же запрос покороче:
SELECT *
FROM titles
WHERE Year(order_data)=2012 AND Month(order_date) BETWEEN 3 AND 5
//можно так:
SELECT *
FROM titles
WHERE Year(order_data)=2012 AND Month(order_date) IN (3,4,5)

При работе с реляционными БД постоянно встречается проблема пустых ячеек. Т.е. если, например, в ячейке price пусто (значение null), то выбрать эту книгу с помощью SELECT с условием по цене не получится, он ее пропустит. В итоге — неточная выборка. Поэтому в запросе надо набрать:

SELECT *
FROM titles
WHERE price IS NOT NULL
//или так
WHERE price IS NULL

Сортировка результатов выборки — ORDER BY

Для сортировки используется ORDER BY. По умолчанию сортировка по возрастанию, от меньшего к большему. Если надо сортировать в обратном порядке — DESC (по убыванию). Сортировать можно по любым полям.

Сортировка срабатывает после всех инструкций в запросе, т.к. по сути сортируем уже готовый результат запроса.

SELECT *
FROM titles
ORDER BY price DESC

При сортировке могут встречаться значения NULL в ячейке price. Для решения проблемы надо заменить неизвестные значения на известные на время сортировки, применив функцию IsNull:

SELECT tile,price, IsNull(price,0)
FROM titles
ORDER BY IsNull (price,0)*(1+0.18)

Для этой же цели используется функция Coalesce. В этой функции передаются параметры, если один параметр неизвестен, функция переходит ко второму и выводит его. Если 2-й параметр неизвестен, то переходит к третьему и выводит его:

SELECT Coalesce(title,price,order_date)
FROM titles

Выберем топ(10) — первые десять дорогих книг:

SELECT TOP(10)
FROM titles
ORDER BY price DESC

Агрегатные функции

Сначала рассмотрим функции: Min, Max, Avg, Sum. Вычислим среднюю цену книги. Для этого используем функцию Avg. Также можно вычислить максимальную и минимальную цену (Max, Min). Также посчитаем сумму всех книг (Sum). Для всех этих функций анализируется целый столбец, а количество параметром неизвестно. Примеры:

SELECT Avg(price), Max(price), Min(price), Sum(price)
FROM titles

Функция Count — считает количество строк (например, сколько книг или цен):

SELECT Count(*), Count(price)
FROM titles

Но здесь есть некоторые тонкости, т.к. могут попасть значения null.




Добавить комментарий

Ваш e-mail не будет опубликован.