
- •Занятие 3 Инструкция select Простая выборка
- •Выборка с условием (фильтрация)
- •Фильтрация по одному полю
- •Расширенные условия отбора
- •Сортировка
- •Вычисляемые поля
- •Математические операции между столбцами.
- •Функция round
- •Текстовые операции. Сцепление столбцов. Функции len, left
- •Функции Даты
- •Условный оператор iif
- •Занятие 7 Статистические функции в sql
- •Группировка данных
- •Группировка по одному столбцу
- •Группировка по нескольким столбцам
- •Фильтрация групп
- •Сортировка групп
- •Примеры:
- •Фамилия бажанова коваленко лапина
- •Занятие 8 Подзапросы
- •Использование подзапросов возвращающих одно значение
- •Использование подзапросов возвращающих несколько значений
- •Примеры с подзапросами
- •Соединение таблиц
- •Инструкции на изменение данных Инструкция: delete
- •Инструкция update
- •Инструкция: insert into
- •Insert into ИмяТаблицы
- •Комбинированные запросы
Расширенные условия отбора
Под расширенным условием отбора будем понимать фильтрацию не по одному, а по нескольким полям.
Для фильтрации по нескольким столбцам применяются ключевые слова AND и OR. Эти слова можно применять как по отдельности, так и вместе.
Фильтрация с использованием ключевого слова AND и OR
Ключевое слово AND требует выполнения ВСЕХ проверяемых условий.
Ключевое слово OR требует выполнения хотя бы одного из проверяемых условий.
С
Пример:
К таблице "Студенты" применены
различные варианты, запросов с
расширенными условиями отбора AND
и OR.
Фамилия
Год
Пол
Группа
Воронова
1984
ж
103
Борисов
1987
м
102
Васильев
1985
м
102
Антонова
1983
ж
106
Романова
1984
ж
104
Винтин
1987
м
103
Булычев
1984
м
102
Голубева
1987
ж
104
Жданов
1985
м
107
Результаты представлены ниже:
SELECT
Фамилия, Год,
Пол
FROM
Студенты
WHERE
Пол = "ж"
AND
Год = 1984
Фамилия
Год
Пол
Воронова
1984
ж
Романова
1984
ж
SELECT
Фамилия, Год,
Пол
FROM
Студенты
WHERE
Пол = "м"
AND
Год <= 1985
Фамилия
Год
Пол
Васильев
1985
м
Булычев
1984
м
Жданов
1985
м
Фамилия
Год
Пол
Воронова
1984
ж
Борисов
1987
м
Антонова
1983
ж
Романова
1984
ж
Винтин
1987
м
Голубева
1987
ж
SELECT
Фамилия, Год,
Пол
FROM
Студенты
WHERE
Пол = "ж"
OR
Год = 1987
SELECT
Фамилия, Год,
Пол
FROM
Студенты
WHERE
Год = 1983 OR
Год = 1984
Фамилия
Год
Пол
Воронова
1984
ж
Антонова
1983
ж
Романова
1984
ж
Булычев
1984
м
Совместная фильтрация с использованием ключевого слова AND и OR, порядок обработки.
Комбинируя ключевыми словами AND
и
OR,
можно формировать запросы различной
сложности. Но, при этом следует внимательно
следить за последовательностью
выполнения логических операторов.
Неправильная группировка может привести
к неверному результату.
Пример:
Из таблицы "Ведомость",
необходимо отобрать, студентов 1-й или
2-й группы, имеющих оценку не ниже 4.
Фамилия
Группа
Оценка
КОНУШИН
1
2
КОЧЕИХИН
2
2
КУЗЬМИН
2
3
КУРЧИН
1
4
ЛЕБЕДЕВ
4
3
ЛЕВШИН
3
4
ЛИСИЦЫН
4
5
ЛУНЕВ
5
4
ЛЮБИН
2
5
МИНАЕВ
1
5
МИТРОФАНОВ
4
4
МОСКВИН
5
5
НЕСТЕРОВ
1
3
ОНИЩУК
2
4
Рассмотрим запрос следующего вида.
Группа
Оценка
1
2
1
4
2
5
1
5
1
3
2
4
SELECT
*
FROM
Ведомость
WHERE
Группа = 1 OR
Группа = 2 AND
Оценка >=4
Результат оказался неверным из-за
приоритета в выполнении логических
операторов:
В первую очередь выполнился оператор
Группа = 2 AND
Оценка >=4,
а потом, к его результатам добавилась
вся первая группа, Группа = 1
независимо от оценки.
Для правильного решения задачи необходимо использовать скобки, определяющие логическую группировку и последовательность выполнения операторов.
Правильная запись запроса
SELECT
*
FROM
Ведомость
WHERE
(Группа = 1 OR
Группа = 2) AND
Оценка >=4
Группа
Оценка
1
4
2
5
1
5
2
4
Этот вид запроса отличается от предыдущего
наличием скобок.
Сначала отбирается 1-я и 2-я группы и
затем, из них отбираются строки с оценкой
>=4, что и требовалось по заданию.
Использование ключевых слов OR и IN
Для проверки условий по одному столбцу, вместо оператора OR можно применять оператор IN. Запись запроса, при этом, выглядит более компактно и выполняется быстрее.
Н
Вокзал
Отправление
Киевский
7.40
Курский
9.20
Киевский
7.55
Киевский
8.25
Курский
10.00
Курский
10.30
иже
приведены два запроса различных по
написанию, но идентичных по результату:
SELECT
Вокзал, Отправление
FROM
Расписание
WHERE
Вокзал = "Киевский" OR
Вокзал = "Курский"
SELECT
Вокзал, Отправление
FROM
Расписание
WHERE
Вокзал IN
( "Киевский" ,
"Курский" )
Использование ключевого слова NOT
Назначение ключевого слова NOT в предложении WHERE - отрицать все, что следует за ним.
Варианты применения ключевого слова NOT.
SELECT
Вокзал
FROM
Расписание
WHERE
NOT
Вокзал IN
( "Киевский" ,
"Курский" )
Вокзал
Ленинградский
Белорусский
Рижский
Павелецкий
SELECT
Вокзал
FROM
Расписание
WHERE
NOT
(Вокзал = "Киевский" OR
Вокзал = "Курский")
В основном, ключевое слово NOT, применяется для поиска строк не соответствующих требуемым критериям. В этом случае, в запросе, пишется проверка на наличие этих критериев, потом все логическое выражение берется в скобки и отрицается.
SELECT
Фамилия, Год, Факультет, Курс
FROM
Список
WHERE
NOT
(Год =1987 AND
Факультет ="ЭФ"
AND
Курс = 3)
Фамилия
Год
Факультет
Курс
Куницын
1987
ЭФ
4
Рыбаков
1986
ВМК
3
Сальников
1986
ЭФ
3