Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Использование условий отбора



 

Для выбора отдельных строк по некоторому критерию используется ключевое слово WHERE

Получить список предприятий, расположенных в Москве:

SELECT firm_name as " Название предприятия"

FROM k_firm

WHERE firm_addr='Москва'

 

Для сравнения поля со значением NULL нельзя использовать операции = и! =, вместо них нужно использовать выражения IS NULL и IS NOT NULL.

Получить список постоянно работающих сотрудников, т.е., таких, у которых staff_termdate равно NULL:

SELECT staff_name FROM k_staff

WHERE staff_termdate IS NULL

Условия могут быть сложные, представляющие собой комбинацию нескольких операций сравнения. В них можно использовать логические связки AND и OR, а также отрицание NOT.

Получить список предприятий, расположенных в Москве или Казани:

SELECT firm_name as " Название предприятия"

FROM k_firm

WHERE firm_addr='Москва' OR firm_addr='Казань'

 

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

Получить список предприятий, расположенных в Москве или Казани:

SELECT firm_name as " Название предприятия"

FROM k_firm

WHERE firm_addr IN ('Москва', 'Казань')

 

Если условие заключается в сравнении поля с диапазоном значений, удобно использовать ключевое слово BETWEEN.

Получить список договоров, заключенных в ноябре 2011 г.:

SELECT * FROM k_contract

WHERE contract_date BETWEEN '2011-11-01' AND '2011-11-30'

 

Для полей строкового типа можно применять сравнение с подстрокой.

Получить список сотрудников, фамилия которых начинается на И:

SELECT staff_name FROM k_staff

WHERE staff_name LIKE 'И%'

Использование агрегирующих функций

 

Для подсчета итоговых значений служат функции SUM, COUNT, MAX, MIN, AVG. Если не используется группировка строк, запрос с применением итоговой функции вернет ровно одну строку.

Подсчитать, на какую сумму выставлены счета в декабре 2011 года.

SELECT SUM(bill_sum) FROM k_bill

WHERE bill_date

BETWEEN '2011-12-01' AND '2011-12-31'

 

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

Подсчитать количество сотрудников.

SELECT COUNT(*) FROM k_staff

А также эта функция позволяет подсчитать, сколько строк с не-NULL-значениями в определенном поле.

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

SELECT COUNT(staff_termdate) FROM k_staff

 


 


Сортировка

 

Для сортировки используется ключевое слово ORDER BY и имя поля или его номер в списке полей выборки.

Напечатать список сотрудников, отсортированный по алфавиту:

SELECT staff_name FROM k_staff ORDER BY 1

 

Можно сортировать строки даже по такому полю, которое не входит в список полей выборки.

Напечатать список сотрудников, отсортированный по дате поступления на работу:

SELECT staff_name FROM k_staff ORDER BY staff_hiredate

 

 

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

Напечатать информацию о 5 последних выписанных счетах в порядке убывания даты счета:

SELECT bill_num, bill_date

FROM k_bill ORDER BY bill_date DESC LIMIT 5

 

Подзапросы

 

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

Подзапрос всегда указывается в скобках.

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

Получить список договоров, по которым в декабре 2011 года выписаны счета:

SELECT contract_num, contract_date FROM k_contract

WHERE contract_num IN

    (SELECT k_contract_contract_num FROM k_bill

    WHERE bill_date

BETWEEN '2011-12-01' AND '2011-12-31')

 

 

Тот же самый запрос с использованием ключевого слова ANY:

SELECT contract_num, contract_date FROM k_contract

WHERE contract_num =ANY

(SELECT k_contract_contract_num FROM k_bill

WHERE bill_date

BETWEEN '2011-12-01' AND '2011-12-31')

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

Кроме того, в данном примере иллюстрируется использование ключевого слова EXISTS:

 

SELECT contract_num, contract_date FROM k_contract c

WHERE EXISTS

(SELECT * FROM k_bill b

WHERE bill_date   

BETWEEN '2011-12-01' AND '2011-12-31'

AND c.contract_num=b.k_contract_contract_num)

 

Пример использования ключевого слова ALL.

Напечатать информацию о товаре (товарах) с наименьшей ценой.

SELECT price_name, price_sum FROM k_price

WHERE price_sum < = ALL

    (SELECT price_sum FROM k_price)

Этот запрос можно сформулировать и по-другому. В этом примере мы можем использовать операцию сравнения =, т.к. подзапрос возвращает ровно одну строку и один столбец.

SELECT price_name, price_sum FROM k_price

WHERE price_sum = 

    (SELECT MIN(price_sum) FROM k_price)

А так, как в следующем примере, запрос формулировать нельзя. При запуске ошибок не будет, просто получится неверный результат:

SELECT price_name, MIN(price_sum) FROM k_price

 

Как видите, значение столбца price_name просто было взято из первой строки таблицы.

 

Группировка

 

Для подведения итога по группе данных используется комбинация ключевого слова GROUP BY и агрегирующих функций. Причем в списке полей для выборки обычно присутствуют только поля группировки и агрегирующие функции. При необходимости можно добавить дополнительные поля, которые функционально зависят от «ключа группировки».

Получить список договоров и общую сумму счетов по каждому договору:

SELECT contract_num, SUM(bill_sum) AS contract_sum

FROM k_bill

GROUP BY contract_num

 

В том случае, когда нужно выбрать не все группы, а только некоторые из них, используется ключевое слово HAVING:

Получить список договоров, имеющих 2 или более счетов, и общую сумму счетов по каждому договору:

SELECT k_contract_contract_num, SUM(bill_sum) AS contract_sum

FROM k_bill

GROUP BY k_contract_contract_num

HAVING COUNT(bill_num)> =2;

 


Поделиться:



Последнее изменение этой страницы: 2019-06-19; Просмотров: 306; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.028 с.)
Главная | Случайная страница | Обратная связь