Sql или: And & Or — операторы в SQL, примеры

Урок 3. Порядок AND и OR

При использовании в SELECT-запросах операторов OR и AND можно легко ошибиться в составлении логического выражения. И проблема таких ошибок в том, что запрос выполняется как будто ошибки нет, но данные выводятся неверные.

Если у вас мало опыта в написании таких SQL-запросов, то можно легко не заметить проблему. Давайте разберем несколько популярных ошибок.

Работать будем с таблицей team, которая содержит список разработчиков:

Таблица team
idfirst_namelast_namelanguagelevel
1ДмитрийВасильевpythonjunior
2ВалерийЮрьевphpmiddle
3АндрейУшаковpythonsenior
4ПетрКузубjavascriptjunior
5НатальяКузнецоваpythonmiddle
6РусланИсаковphpsenior
7СергейМедведевphpjunior
8АлексейБорисовpythonmiddle
9ВалерияМарковаjavasciptsenior

Каждый разработчик оценивается project-менеджером по двум критериям, после чего он отбирает программиста на тот или иной проект. Основные критерии — это уровень владения технологией: junior, middle или senior, и базовый язык программирования, на котором пишет разработчик.

Нам как менеджерам поступает заявка на разработку проекта и на основании этой заявки мы должны подобрать необходимых разработчиков.

Представьте, что сейчас нас интересуют только мидллы и сеньоры. Напишем SQL-запрос:

SELECT * FROM team WHERE level = 'middle' AND level = 'senior'

После выполнения запроса мы увидим пустую таблицу.

Результат выполнения — пустая таблица
idfirst_namelast_namelanguagelevel

И тут мы столкнулись с первой ошибкой. В нашем запросе база данных по очереди берет строку и проверяет находится ли в колонке level значение «middle» И значение «senior». Оператор AND — это условие одновременности. То есть исходя из нашего запроса в поле level должно находится одновременно и «middle», и «senior», что невозможно, так разработчик может быть только одного уровня.

Почему мы допустили такую ошибку? И дело в формулировках, когда я озвучивал задание, то сказал, что нас интересуют только мидлы И сеньоры. Это правильное выражение с точки зрения русского языка, но неверное с точки зрения логики. Чтобы получить верный результат надо чтобы поле level содержало ИЛИ «middle», ИЛИ «senior». Поэтому заменим AND на OR:

SELECT * FROM team WHERE level = 'middle' OR level = 'senior'

Теперь разработчики подобраны верно:

Получили всех middle и senior разработчиков
idfirst_namelast_namelanguagelevel
2ВалерийЮрьевphpmiddle
3АндрейУшаковpythonsenior
5НатальяКузнецоваpythonmiddle
6РусланИсаковphpsenior
8АлексейБорисовpythonmiddle
9ВалерияМарковаjavasciptsenior

Такую ошибку легко допустить, если в формулировке задачи стоит союз И. Но не стоит его напрямую переносить в SQL-запрос. Возможно здесь кроется ошибка, особенно если мы сравниваем с одним полем.

Давайте рассмотрим другой случай. На этот раз нам нужно разработать бэкенд для сайта. И для этого нам нужны все Python и PHP разработчики. Напишем:

SELECT * FROM team 
WHERE basic_language = 'Python' OR basic_language = "PHP"

Обратите внимание, что нужны нам все Python И PHP разработчики, но пишем мы OR. После выполнения запроса мы получим такую таблицу:

Все Python и PHP разработчики:
idfirst_namelast_namelanguagelevel
1ДмитрийВасильевpythonjunior
2ВалерийЮрьевphpmiddle
3АндрейУшаковpythonsenior
5НатальяКузнецоваpythonmiddle
6РусланИсаковphpsenior
7СергейМедведевphpjunior
8АлексейБорисовpythonmiddle

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

SELECT * FROM team 
WHERE 
    basic_language = 'Python' OR 
    basic_language = "PHP" AND 
    level = "middle"

После выполнения мы получим такую таблицу:

Результат SQL-запроса:
idfirst_namelast_namelanguagelevel
1ДмитрийВасильевpythonjunior
2ВалерийЮрьевphpmiddle
3АндрейУшаковpythonsenior
5НатальяКузнецоваpythonmiddle
8АлексейБорисовpythonmiddle

И результат довольно странный, в итоговой таблице присутствуют также джуниоры и сеньоры. И дело в том, что операторы 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:

Результат SQL-запроса:
idfirst_namelast_namelanguagelevel
2ВалерийЮрьевphpmiddle
5НатальяКузнецоваpythonmiddle
8АлексейБорисовpythonmiddle

Каждый раз когда в одном запросе встречаются 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 .

 

ВЫБЕРИТЕ имя, фамилия, Дата приема на работу, id_отдела ОТ сотрудники КУДА id_отдела = 3 И ГОД (наем_дата) = 1997 ИЛИ ГОД (наем_дата) = 1998 СОРТИРОВАТЬ ПО имя, фамилия;

Язык кода: SQL (язык структурированных запросов) (sql)

Попробуйте

Если запрос использует много ИЛИ , читать будет трудно. Чтобы сделать запрос более читабельным, вместо него можно использовать оператор IN .

Например, следующий запрос находит всех сотрудников, которые пришли в компанию в 1990, 1999 или 2000 году.

 

ВЫБЕРИТЕ имя, фамилия, Дата приема на работу ОТ сотрудники КУДА ГОД (дата_найма) = 2000 ИЛИ ГОД (наем_дата) = 1999 ИЛИ ГОД (наем_дата) = 1990;

Язык кода: SQL (язык структурированных запросов) (sql)

Попробуйте

Вы можете заменить операторы OR оператором IN следующим образом:

 

SELECT имя, фамилия, Дата приема на работу ОТ сотрудники КУДА ГОД (дата найма) В (1990, 1999, 2000) СОРТИРОВАТЬ ПО Дата приема на работу;

Язык кода: SQL (язык структурированных запросов) (sql)

Попробуйте

В этом руководстве вы узнали, как использовать оператор 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 ИЛИ и И требуются круглые скобки (точно так же, как круглые скобки изменяют порядок приоритетов между математическими операциями сложения и умножения).