Базовый курс SQL. Извлечение данных с условиями. WHERE.
Primary tabs
Forums:
Для получения данных, соответствующих определённым условиям, нужно к запросу SELECT добавить ключевое слово WHERE.
Буквально это будет означать: "ПОЛУЧИТЬ такие-то строки, ИЗ такой-то таблицы, ГДЕ выполняется такое-то условие".
SELECT student_name FROM Students WHERE student_age = 21;
Получим имена только тех студентов, чей возраст - 21 год:
student_name -------------------- Пётр Григорий
Где лучше фильтровать данные? Cразу в запросе или на уровне приложения, уже после получения всех данных из БД?
Однозначно первый вариант. Во-первых, базы данных специально разработаны для быстрой и эффективной работы с данными, следовательно превосходят в скорости клиентскую сторону. Во-вторых, отправляя лишние данные по сети, Вы подвергаете их дополнительной опасности перехвата. В-третьих, просто неоправданно увеличиваете сетевой трафик.
Также если Вам требуется отсортировать полученные результаты, обратите внимание, что располагать ORDER BY следует в конце запроса, после WHERE.
Какие операторы ещё можно использовать
Оператор | Значение ---------------------------------- = | равно <> | не равно != | не равно < | меньше <= | меньше или равно !< | не меньше > | больше >= | больше или равно !> | не больше BETWEEN | входит в диапазон IS NULL | является NULL
Некоторые из операторов, представленные в таблице, дублируют друг друга по смыслу. Но некоторые из них могут НЕ поддерживаться Вашей СУБД. Чтобы узнать, какие именно, обратитесь к документации.
<> тоже самое, что != <= тоже самое, что !>
Сравнение
Рассмотрим примеры помимо равенства. Допустим, нам нужно найти все группы старше второго курса, т.е. которые проучились больше 4х семестров.:
SELECT group_id, group_name FROM Groups WHERE semester_id > 4;
Ответ:
group_id | group_name --------------------------------- 31548 | 304F 30913 | 117F
Неравенство
В следующем примере сделаем запрос всех названий дисциплин, кроме Истории
SELECT discipline_name FROM Disciplines WHERE discipline_name <> 'История' ORDER BY discipline_name;
Ответ:
discipline_name ------------------------ Дифференциальная геометрия Компьютерная геометрия и графика Математический анализ Объектно-ориентированное программирование Социология Статистика Теория информации Технологии программирования Философия
В данном примере мы заключили слово История в кавычки, чтобы отделить операторы sql от данных, хранящихся в таблице. Это требуется в том случае, если тип данных строковый. Для числовых значений, соответственно, не требуется.
Принадлежность отрезку
Синтаксис BETWEEN немного отличается, т.к. нам необходимо передать 2 значения: начала и конца диапазона. Например, достанем фамилии всех студентов, возраст которых находится в отрезке [22; 24]:
SELECT student_surname FROM Students WHERE student_age BETWEEN 22 AND 24;
Ответ:
student_surname --------------------------- Петрашевский Легран Распопов Колобков Шульгина
Обратите внимание, что крайние значения отрезка также включаются в диапазон. Поэтому BETWEEN при желании можно заменить двойным условием нестрогого сравнения:
SELECT student_surname FROM Students WHERE student_age >= 22 AND student_age <= 24;
Результат будет аналогичный.
Проверка на NULL
При создании таблицы мы указываем, обязательно ли столбец должен содержать значение, или может быть NULL. NULL отличается от 0 и от ' ' (пустая строка): он обозначает, что значения нет вообще. Поэтому запись WHERE smth = NULL не имеет смысла. Для этого в SQL предусмотрена особенная запись:
SELECT student_age FROM Students WHERE student_email IS NULL;
В ответе возраст студентов, не указавших электронную почту:
student_age ----------------------- 21 21
Следует отметить, что строки, содержащие NULL, не вернутся и при проверке условия на неравенство, несмотря на то, что по сути NULL не равен любому предложенному значению. Запомните просто, что NULL не подлежит сравнению и обратиться к нему можно только непосредственно.
Также можно запросить все строки, содержащие НЕ NULL:
SELECT student_age FROM Students WHERE student_email IS NOT NULL;
student_age ----------------------- 22 25 19 24 22 22 23 20
Следующая страница. Комбинирование условий при извлечении данных.
Оглавление.
- Log in to post comments
- 1415 reads