Sql или: And & Or — операторы в SQL, примеры
Содержание
Урок 3. Порядок AND и OR
При использовании в SELECT-запросах операторов OR и AND можно легко ошибиться в составлении логического выражения. И проблема таких ошибок в том, что запрос выполняется как будто ошибки нет, но данные выводятся неверные.
Если у вас мало опыта в написании таких SQL-запросов, то можно легко не заметить проблему. Давайте разберем несколько популярных ошибок.
Работать будем с таблицей team, которая содержит список разработчиков:
id | first_name | last_name | language | level |
---|---|---|---|---|
1 | Дмитрий | Васильев | python | junior |
2 | Валерий | Юрьев | php | middle |
3 | Андрей | Ушаков | python | senior |
4 | Петр | Кузуб | javascript | junior |
5 | Наталья | Кузнецова | python | middle |
6 | Руслан | Исаков | php | senior |
7 | Сергей | Медведев | php | junior |
8 | Алексей | Борисов | python | middle |
9 | Валерия | Маркова | javascipt | senior |
Каждый разработчик оценивается project-менеджером по двум критериям, после чего он отбирает программиста на тот или иной проект. Основные критерии — это уровень владения технологией: junior, middle или senior, и базовый язык программирования, на котором пишет разработчик.
Нам как менеджерам поступает заявка на разработку проекта и на основании этой заявки мы должны подобрать необходимых разработчиков.
Представьте, что сейчас нас интересуют только мидллы и сеньоры. Напишем SQL-запрос:
SELECT * FROM team WHERE level = 'middle' AND level = 'senior'
После выполнения запроса мы увидим пустую таблицу.
id | first_name | last_name | language | level |
---|
И тут мы столкнулись с первой ошибкой. В нашем запросе база данных по очереди берет строку и проверяет находится ли в колонке level значение «middle» И значение «senior». Оператор AND — это условие одновременности. То есть исходя из нашего запроса в поле level должно находится одновременно и «middle», и «senior», что невозможно, так разработчик может быть только одного уровня.
Почему мы допустили такую ошибку? И дело в формулировках, когда я озвучивал задание, то сказал, что нас интересуют только мидлы И сеньоры. Это правильное выражение с точки зрения русского языка, но неверное с точки зрения логики. Чтобы получить верный результат надо чтобы поле level содержало ИЛИ «middle», ИЛИ «senior». Поэтому заменим AND на OR:
SELECT * FROM team WHERE level = 'middle' OR level = 'senior'
Теперь разработчики подобраны верно:
id | first_name | last_name | language | level |
---|---|---|---|---|
2 | Валерий | Юрьев | php | middle |
3 | Андрей | Ушаков | python | senior |
5 | Наталья | Кузнецова | python | middle |
6 | Руслан | Исаков | php | senior |
8 | Алексей | Борисов | python | middle |
9 | Валерия | Маркова | javascipt | senior |
Такую ошибку легко допустить, если в формулировке задачи стоит союз И. Но не стоит его напрямую переносить в SQL-запрос. Возможно здесь кроется ошибка, особенно если мы сравниваем с одним полем.
Давайте рассмотрим другой случай. На этот раз нам нужно разработать бэкенд для сайта. И для этого нам нужны все Python и PHP разработчики. Напишем:
SELECT * FROM team WHERE basic_language = 'Python' OR basic_language = "PHP"
Обратите внимание, что нужны нам все Python И PHP разработчики, но пишем мы OR. После выполнения запроса мы получим такую таблицу:
id | first_name | last_name | language | level |
---|---|---|---|---|
1 | Дмитрий | Васильев | python | junior |
2 | Валерий | Юрьев | php | middle |
3 | Андрей | Ушаков | python | senior |
5 | Наталья | Кузнецова | python | middle |
6 | Руслан | Исаков | php | senior |
7 | Сергей | Медведев | php | junior |
8 | Алексей | Борисов | python | middle |
В итоговую таблицу попали и те и другие программисты. Отлично. Но давайте расширим условие. Скажем, нам нужны только middle разработчики на этих языках. Добавим:
SELECT * FROM team WHERE basic_language = 'Python' OR basic_language = "PHP" AND level = "middle"
После выполнения мы получим такую таблицу:
id | first_name | last_name | language | level |
---|---|---|---|---|
1 | Дмитрий | Васильев | python | junior |
2 | Валерий | Юрьев | php | middle |
3 | Андрей | Ушаков | python | senior |
5 | Наталья | Кузнецова | python | middle |
8 | Алексей | Борисов | python | middle |
И результат довольно странный, в итоговой таблице присутствуют также джуниоры и сеньоры. И дело в том, что операторы OR и AND имеют приоритет выполнения и у AND он выше. Поэтому в первую очередь база данных находит всех мидлов, которые пишут на PHP. Такому условию соответствует только одна запись, а далее срабатывает оператор OR, который добавляет всех Python-разработчиков.
То есть мы ищем ИЛИ мидлов на PHP, ИЛИ Python-разработчиков без указания их уровня владения языком. Поэтому в таблицу также попали джуниоры и сеньоры.
Чтобы решить поставленную задачу, нужно четко расставить приоритет с помощью скобок. Как в математике. Поместим скобки справа и слева от OR:
SELECT * FROM team WHERE (basic_language = 'Python' OR basic_language = "PHP") AND level = "middle"
Теперь в таблице остались только мидлы на Python и PHP:
id | first_name | last_name | language | level |
---|---|---|---|---|
2 | Валерий | Юрьев | php | middle |
5 | Наталья | Кузнецова | python | middle |
8 | Алексей | Борисов | python | middle |
Каждый раз когда в одном запросе встречаются OR и AND, обращайте внимание на порядок выполнения, иначе можно легко получить неверные данные.
Вообще, даже не так, каждый раз когда у вас есть в запросе есть OR и AND применяйте скобки для расстановки приоритетов, даже если уверены в своём коде.
Такая практика позволит избежать неприятных логических ошибок.
Следующий урок
Урок 4. Сортировка результатов
В этом уроке вы научитесь сортировать итоговые результаты в возрастающем и убывающем порядке с помощью ORDER BY.
Посмотреть
Без воды
Поддержка
Регистрация
Письмо со ссылкой для доступа отправлено.
Проверьте почту.
Письмо не пришло? Посмотрите в спаме.
Регистрируясь, вы соглашаетесь с
условиями предоставления услуг (пользовательское соглашение).
Разница между языками SQL, R или Python: что выбрать дата-сайентисту
Сегодня каждая уважающая себя крупная компания собирает и хранит огромные массивы данных, надеясь извлечь из них коммерческую пользу. Эксперты, которые разбираются в этих массивах и способны показать эффективный результат, могут рассчитывать на быструю карьеру с впечатляющими окладами. Рассказываем, какие инструменты нужно выбрать, чтобы стать успешным аналитиком данных.
Единственная сложность для начинающих аналитиков данных заключается в том, что даже базовые позиции этой сферы предполагают уверенное владение компьютерными языками. Как правило, в объявлениях о вакансиях упоминаются SQL, R и Python. В чем их отличия?
Интересное исследование на эту тему в 2019 году провела специалистка по аналитике данных Женевьева Хейс (Genevieve Hayes). Она проанализировала 100 актуальных объявлений о работе в Data Science, подобрав компании самого разного размера с позициями самого разного уровня. Вакансии руководителей ее не интересовали, только те должности, где нужно работать «руками». В 15% случаев объявления адресовались начинающим специалистам, 44% пришлись на средние позиции, 41% — на старших экспертов.
Во всех трех категориях на первом месте по популярности оказался Python. SQL занял вторую строчку, R — третью. Главный тренд, который отметила Хейс, — это падение позиций SQL с повышением позиции сотрудника. Среди вакансий для начинающих сотрудников этот язык упоминался в 73% случаев, а в самой опытной категории цифра упала до 45%.
Популярность основных языков программирования на разных уровнях экспертизы (Genevieve Hayes, 2019)
Эти результаты говорят о том, что начинающие специалисты должны знать, как сформулировать запрос базе и интерпретировать ответ, понимать принципы обмена данных между хранилищами и т.д. Очевидно, те компании, которые в исследовании Яндекса активно ищут младших экспертов по Data Science, во многом преследуют именно эти цели — наладить грамотную работу с базами, а дальше действовать по ситуации.
С другой стороны, R и Python позволяют работать с данными глубже, чем на уровне базовых запросов и операций. В серьезном статанализе и машинном обучении без этих языков делать нечего — поэтому с повышением должности эксперта от него ждут сильных навыков в этой области.
Тем, кто хочет стать веб-разработчиком с нуля, знание SQL дает отличное понимание работы с бэкендом. Python, в свою очередь, объединяет множество удобных инструментов веб-разработки, позволяющих быстро разворачивать функциональные сайты и мощные порталы. Наконец, R применяется для узких задач — у этого языка довольно специфичная природа, о которой мы расскажем подробнее ниже.
Итак, именно R и Python можно считать главными языками для эксперта по Data Science. Настоящий профессионал сможет работать и с тем, и с другим, но нужно ли новичку браться сразу за все? Исследование Хейс показало, что вне зависимости от уровня сотрудника, главное требование — это знание Python. Это и неудивительно, ведь этот язык достаточно доступен для понимания новичков и невероятно функционален для применения в самых сложных рабочих задачах. Именно поэтому начинающим специалистам стоит начать именно с него, тем более что Python из года в год получает звание лучшего языка для первого знакомства с программированием.
Когда молодой аналитик овладеет базовым набором операций и поймет общую логику работы с данными, ему будет проще перенести ее на другой инструментарий. Так постепенно можно расширять свои компетенции, причем каждый новый язык будет даваться все легче.
Чтобы разобраться со многими вопросами выбора, стоит получше разобраться, что из себя представляют главные рабочие лошадки аналитика. У R и Python много общего, а различия в деталях и определяют специфику каждого языка.
Появление Python и R разделяет два года — первый увидел свет в 1991 году, второй в 1993-м. Оба языка создавались с таким расчетом, чтобы будущие разработчики могли расширять набор их функций с помощью подключаемых библиотек. С этим связано и использование открытого кода — ничто не мешает энтузиастам развивать, дополнять, достраивать и перестраивать.
Главная аудитория Python — это разработчики ПО и веб-разработчики. Именно для этих экспертов создается большинство функциональных модулей, позволяющих загружать данные, проводить с ними сложные операции, моделировать и анализировать. Чтобы стать хорошим веб-разработчиком достаточно собрать набор из десятка библиотек, с помощью которых можно закрыть основной круг базовых задач при сайтостроительстве.
С другой стороны, R вырос из языка S, с которым активно работают специалисты по статистике. Таким образом, его главная сила в сложных статистических функциях, которые используются в академических и высокопрофессиональных задачах.
С точки зрения аналитиков данных и экспертов по Data Science R и Python обладают схожими возможностями. Первый язык чаще выбирают специалисты, которым нужно работать с огромными массивами информации, на втором останавливаются создатели нейросетей и экспериментаторы в области машинного обучения. Следовательно, если вы уже знаете, какая область вам более интересна, вы можете планировать свое профессиональное образование.
Оператор SQL OR и его практическое использование
Резюме : в этом руководстве вы узнаете, как использовать оператор SQL OR для объединения двух логических выражений.
Введение в оператор SQL OR
SQL OR — это логический оператор, который объединяет два логических выражения. Оператор SQL OR возвращает значение true или false в зависимости от результатов выражений.
Оператор ИЛИ обычно используется в предложении WHERE
оператора SELECT
, UPDATE
или DELETE
для формирования гибкого условия.
Ниже показан синтаксис оператора SQL OR:
SELECT столбец1, столбец2, ... ОТ Таблица 1 КУДА выражение1 ИЛИ выражение2;
В следующей таблице показан результат оператора OR
при сравнении значений true, false и NULL.
ИСТИНА | FALSE | NULL | |
TRUE | TRUE | TRUE | TRUE |
FALSE | TRUE | FALSE | NULL |
NULL | TRUE | NULL | NULL |
Обратите внимание, что оператор ИЛИ всегда возвращает значение true, если одно из выражений истинно.
Если система базы данных поддерживает функцию короткого замыкания, 9Оператор 0011 ИЛИ прекращает вычисление остальных частей условия, как только одно из выражений становится истинным.
Обратите внимание, что функция короткого замыкания помогает системе базы данных экономить ресурсы ЦП, прерывая обработку оставшейся части логического выражения, как только она может определить результат. Для получения дополнительной информации о функции короткого замыкания ознакомьтесь с руководством по оператору SQL AND.
При использовании оператора ИЛИ с оператором И система базы данных оценивает оператор ИЛИ после оператора И. Это известно как правило приоритета. Однако вы можете использовать круглые скобки, чтобы изменить порядок оценки.
Примеры оператора SQL ИЛИ
Мы будем использовать таблицу сотрудников
из примера базы данных для демонстрации оператора ИЛИ
.
Следующий оператор находит всех сотрудников, которые пришли в компанию в 1997 или 1998 году.
SELECT имя, фамилия, Дата приема на работу ОТ сотрудники КУДА ГОД (дата_найма) = 1997 ИЛИ ГОД (дата_найма) = 1998 СОРТИРОВАТЬ ПО имя, фамилия;
Попробуйте
Чтобы найти всех сотрудников, которые присоединились к компании в 1997 или 1997 и работал в отделе с идентификатором 3, вы используете операторы И
и ИЛИ
следующим образом:
SELECT имя, фамилия, Дата приема на работу, id_отдела ОТ сотрудники КУДА id_отдела = 3 И ( ГОД (дата_найма) = 1997 ИЛИ ГОД (наем_дата) = 1998 ) СОРТИРОВАТЬ ПО имя, фамилия;
Попробуйте
Если не использовать круглые скобки, запрос будет получать сотрудников, которые пришли в компанию в 1997 году и работали в отделе с идентификатором 3, или сотрудников, которые пришли в компанию в 1998 независимо от факультетов.
Это связано с тем, что система базы данных оценивает оператор OR
после оператора AND
.
Язык кода: SQL (язык структурированных запросов) (sql)
ВЫБЕРИТЕ имя, фамилия, Дата приема на работу, id_отдела ОТ сотрудники КУДА id_отдела = 3 И ГОД (наем_дата) = 1997 ИЛИ ГОД (наем_дата) = 1998 СОРТИРОВАТЬ ПО имя, фамилия;
Попробуйте
Если запрос использует много ИЛИ
, читать будет трудно. Чтобы сделать запрос более читабельным, вместо него можно использовать оператор IN
.
Например, следующий запрос находит всех сотрудников, которые пришли в компанию в 1990, 1999 или 2000 году.
Язык кода: SQL (язык структурированных запросов) (sql)
ВЫБЕРИТЕ имя, фамилия, Дата приема на работу ОТ сотрудники КУДА ГОД (дата_найма) = 2000 ИЛИ ГОД (наем_дата) = 1999 ИЛИ ГОД (наем_дата) = 1990;
Попробуйте
Вы можете заменить операторы OR
оператором IN
следующим образом:
Язык кода: SQL (язык структурированных запросов) (sql)
SELECT имя, фамилия, Дата приема на работу ОТ сотрудники КУДА ГОД (дата найма) В (1990, 1999, 2000) СОРТИРОВАТЬ ПО Дата приема на работу;
Попробуйте
В этом руководстве вы узнали, как использовать оператор SQL ИЛИ
для объединения двух логических выражений для формирования гибкого условия.
Было ли это руководство полезным?
SQL Server Операторы И и ИЛИ
В этом учебнике по SQL основное внимание уделяется логическим операторам SQL Server И и ИЛИ , а также приводятся пояснения, примеры и упражнения. Чтобы выполнить упражнения этого урока, воспользуйтесь этой ссылкой.
Это руководство является частью нескольких сообщений, объясняющих, как использовать предложение WHERE в SQL Server. Чтобы прочитать дополнительные сообщения по этой теме, воспользуйтесь следующими ссылками:
- Введение – SQL Server WHERE, пункт
- Операторы сравнения
- В оператора
- МЕЖДУ оператором
- НРАВИТСЯ оператор
- IS NULL оператор
- Операторы И и ИЛИ
Операторы И и ИЛИ SQL Server
Назначение этих операторов SQL Server — разрешить фильтрацию на основе нескольких условий. Используя эти операторы, вы можете объединить результат двух (или более) условий, чтобы получить на их основе один результат, например:
Имя сотрудника | Зарплата | Идентификатор отдела |
Энн | 10000 | 90 |
Дэвид | 9000 | 80 |
Джон | 8000 | 70 |
Джордж | 7000 | 70 |
Роджер | 5000 | 70 |
Шон | 4000 | 40 |
SQL Server И Оператор
И требует, чтобы все условия были истинными.
ВЫБРАТЬ * ОТ сотрудников ГДЕ зарплата > 6000 И id_отдела = 70
И указывает на то, что должны быть соблюдены все условия — сотрудники, чья зарплата выше 6000 и чей номер отдела 70.
Сотрудники, которые соответствуют обоим этим условиям: Джон и Джордж (всего 2 сотрудника).
SQL Server ИЛИ Оператор
ИЛИ требует выполнения любого из условий.
ВЫБРАТЬ * ОТ сотрудников ГДЕ зарплата > 6000 ИЛИ ЖЕ id_отдела = 70
ИЛИ указывает на то, что должно быть выполнено хотя бы одно из условий — сотрудники, чья зарплата выше 6000 или чей номер отдела 70.
- Для Шона — ни одно из этих условий не выполняется.
- Для Роджера номер отдела 70 – выполнено одно условие.
- Для Джона и Джорджа зарплата выше 6000 и номер отдела 70 – оба условия выполнены.
- Для Анны и Давида зарплата выше 6000 – выполняется одно условие.
5 сотрудников соответствуют хотя бы одному из этих условий.
Примечание:
Примечание: ключевое слово WHERE появляется только один раз. После оператора И или оператора ИЛИ укажите дополнительное условие, не указывая повторно ключевое слово WHERE.
ВЫБРАТЬ * ОТ сотрудников ГДЕ зарплата > 6000 ИЛИ ЖЕ ГДЕ Department_id = 70 -- (Ошибка) ВЫБРАТЬ * ОТ сотрудников ГДЕ зарплата > 6000 ИЛИ ЖЕ id_отдела = 70 -- Действительное заявление
Порядок приоритета
Оператор И в SQL Server имеет приоритет над оператором ИЛИ в SQL Server (точно так же, как операция умножения имеет приоритет над операцией сложения).
Следующая инструкция SQL Server SELECT используется для отображения сотрудников, которые:
(первое условие) имеют роль «DBA».
Или:
(Второе условие) имеют роль «Менеджер» и , чья зарплата выше 8000.
ВЫБРАТЬ * ОТ сотрудников ГДЕ Job_Title = 'DBA' ИЛИ ЖЕ Job_Title = "Менеджер" И Зарплата > 8000
Изменение порядка приоритета
Для изменения порядка приоритетов между операторами SQL Server ИЛИ и И требуются круглые скобки (точно так же, как круглые скобки изменяют порядок приоритетов между математическими операциями сложения и умножения).