SQL, базы данных. Часть 14.
Кроме операции AND (И), в условии можно применять OR (ИЛИ). Давайте заменим AND на OR, а также вернем колонки sex и age.
Был запрос (Картинка 2):
SELECT last_name, first_name, birthday, sex
FROM users
WHERE age >= 18 AND sex = 'm';
Стал:
SELECT last_name, first_name, birthday, sex, age
FROM users
WHERE age >= 18 OR sex = 'm';
Если посмотрим на результат (на Картинке 3), то увидим, что получили всех мужчин, а также женщин, которым исполнилось 18 лет. В частности в SQL-таблице одна женщина старше 18 лет и все мужчины, даже те, которым меньше 18. Всё это соответствует условию ИЛИ: ИЛИ возраст от 18 лет, ИЛИ мужской пол.
Все достаточно просто и логично!
✅ JavaStart. Подписаться
Кроме операции AND (И), в условии можно применять OR (ИЛИ). Давайте заменим AND на OR, а также вернем колонки sex и age.
Был запрос (Картинка 2):
SELECT last_name, first_name, birthday, sex
FROM users
WHERE age >= 18 AND sex = 'm';
Стал:
SELECT last_name, first_name, birthday, sex, age
FROM users
WHERE age >= 18 OR sex = 'm';
Если посмотрим на результат (на Картинке 3), то увидим, что получили всех мужчин, а также женщин, которым исполнилось 18 лет. В частности в SQL-таблице одна женщина старше 18 лет и все мужчины, даже те, которым меньше 18. Всё это соответствует условию ИЛИ: ИЛИ возраст от 18 лет, ИЛИ мужской пол.
Все достаточно просто и логично!
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Какой метод Stream API используется для преобразования элементов стрима в другие значения?
Anonymous Quiz
8%
collect()
17%
reduce()
3%
filter()
65%
map()
4%
get()
3%
Посмотреть ответ
SQL, базы данных. Часть 15.
Давайте создадим новую таблицу products и переключим наше внимание на нее.
В ней есть поля id, name, count (количество), price (цена) и поле country, которое содержит данные о стране производителе (Картинка 1).
Давайте выберем товары, произведенные в России, Белоруссии и Украине. Напишем SQL-запрос:
SELECT * FROM products
WHERE country = "RU" OR country = "UA" OR country = "BL";
После выполнения запроса мы получим следующую таблицу (Картинка 2).
Разберем запрос: в блоке WHERE мы используем три условия, разделенные OR (или). Во всех трех условиях мы с помощью символа равенства сравниваем значение в столбце country с одной из стран: ИЛИ Россия, ИЛИ Украина, ИЛИ Белоруссия.
Если мы хотим получить товары еще каких-то стран, то нужно добавить еще условия OR. Это не очень удобно, так как запрос становится громоздиким.
Но его можно упростить. Кроме стандартных условий сравнения AND и OR в языке SQL есть условие принадлежности IN, которое в данном случае подходит лучше. Напишем после WHERE:
SELECT * FROM products
WHERE country IN ("RU", "UA", "BL");
Конструкция получилась короче и понятнее. И с помощью неё мы выбираем данные, в которых страна равна любом из значений перечисленных в скобках. После запуска запроса мы получим результат, аналогичный предыдущему.
✅ JavaStart. Подписаться
Давайте создадим новую таблицу products и переключим наше внимание на нее.
В ней есть поля id, name, count (количество), price (цена) и поле country, которое содержит данные о стране производителе (Картинка 1).
Давайте выберем товары, произведенные в России, Белоруссии и Украине. Напишем SQL-запрос:
SELECT * FROM products
WHERE country = "RU" OR country = "UA" OR country = "BL";
После выполнения запроса мы получим следующую таблицу (Картинка 2).
Разберем запрос: в блоке WHERE мы используем три условия, разделенные OR (или). Во всех трех условиях мы с помощью символа равенства сравниваем значение в столбце country с одной из стран: ИЛИ Россия, ИЛИ Украина, ИЛИ Белоруссия.
Если мы хотим получить товары еще каких-то стран, то нужно добавить еще условия OR. Это не очень удобно, так как запрос становится громоздиким.
Но его можно упростить. Кроме стандартных условий сравнения AND и OR в языке SQL есть условие принадлежности IN, которое в данном случае подходит лучше. Напишем после WHERE:
SELECT * FROM products
WHERE country IN ("RU", "UA", "BL");
Конструкция получилась короче и понятнее. И с помощью неё мы выбираем данные, в которых страна равна любом из значений перечисленных в скобках. После запуска запроса мы получим результат, аналогичный предыдущему.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
SQL, базы данных. Часть 16.
Давайте добавим к нашему запросу по таблице products (Картинка 1) еще одно условие. Например, нам нужны не просто товары, а товары стоимостью до 10 000 рублей.
Был запрос:
SELECT * FROM products
WHERE country IN ("RU", "UA", "BL");
Стал запрос:
SELECT * FROM products
WHERE country IN ("RU", "UK", "BL") AND price < 10000;
Посмотрим на результат на Картинке 2.
Получили новую таблицу с тремя записями, которые удовлетовряют новому условию. И в этом условии мы совместили AND и IN. То есть в SQL-запросах можно совмещать логические операции AND и OR с оператором IN. Что делает их очень гибкими.
Теперь давайте попробуем выбрать товары, стоимостью от 10000 до 20000.
Условие с country уберем и напишем:
SELECT * FROM products
WHERE price >= 10000 AND price <= 20000;
В результате получается такая таблица как на Картинке 3.
Рассмотрим запрос. Как видите в этой конструкции мы снова написали двойное условие по одному полю — price. И с одной стороны всё логично и понятно, а с другой стороны эту конструкцию также можно упростить.
Напишем:
SELECT * FROM products
WHERE price BETWEEN 10000 AND 20000;
Теперь запрос звучит так: ВЫБРАТЬ все столбцы из таблицы products, в которых цена между 10000 и 20000. Звучит более чем понятно.
После запуска мы получим всё тот же один товар.
Вообще AND, OR, IN и BETWEEN — это основные конструкции для построения условий в SQL запросах и используются они в блоке WHERE. Вы можете применять их как поодиночке, так комбинируя в самых различных вариантах.
✅ JavaStart. Подписаться
Давайте добавим к нашему запросу по таблице products (Картинка 1) еще одно условие. Например, нам нужны не просто товары, а товары стоимостью до 10 000 рублей.
Был запрос:
SELECT * FROM products
WHERE country IN ("RU", "UA", "BL");
Стал запрос:
SELECT * FROM products
WHERE country IN ("RU", "UK", "BL") AND price < 10000;
Посмотрим на результат на Картинке 2.
Получили новую таблицу с тремя записями, которые удовлетовряют новому условию. И в этом условии мы совместили AND и IN. То есть в SQL-запросах можно совмещать логические операции AND и OR с оператором IN. Что делает их очень гибкими.
Теперь давайте попробуем выбрать товары, стоимостью от 10000 до 20000.
Условие с country уберем и напишем:
SELECT * FROM products
WHERE price >= 10000 AND price <= 20000;
В результате получается такая таблица как на Картинке 3.
Рассмотрим запрос. Как видите в этой конструкции мы снова написали двойное условие по одному полю — price. И с одной стороны всё логично и понятно, а с другой стороны эту конструкцию также можно упростить.
Напишем:
SELECT * FROM products
WHERE price BETWEEN 10000 AND 20000;
Теперь запрос звучит так: ВЫБРАТЬ все столбцы из таблицы products, в которых цена между 10000 и 20000. Звучит более чем понятно.
После запуска мы получим всё тот же один товар.
Вообще AND, OR, IN и BETWEEN — это основные конструкции для построения условий в SQL запросах и используются они в блоке WHERE. Вы можете применять их как поодиночке, так комбинируя в самых различных вариантах.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Какое ключевое слово в Java используется для создания анонимного внутреннего класса?
Anonymous Quiz
10%
extends
11%
implements
56%
new
17%
instanceof
6%
Посмотреть ответ
Что такое локальная переменная?
Anonymous Quiz
7%
Переменная, определенная вне методов, конструкторов или блоков
81%
Переменная, определенная внутри методов, конструкторов или блоков
4%
Статическая переменная, определенная вне методов, конструкторов или блоков
3%
Ни один вариант из перечисленных
4%
Посмотреть ответ
SQL, базы данных. Часть 17.
При использовании в SELECT-запросах операторов OR и AND можно легко ошибиться в составлении логического выражения. И проблема таких ошибок в том, что запрос выполняется как будто ошибки нет, но данные выводятся неверные.
Если у вас мало опыта в написании таких SQL-запросов, то можно легко не заметить проблему. Давайте разберем несколько популярных ошибок.
Работать будем с таблицей team, которая содержит список разработчиков (Картинка 1).
Основные критерии оценки — это уровень владения технологией: junior, middle или senior, и базовый язык программирования, на котором пишет разработчик.
Нам как менеджерам поступает заявка на разработку проекта и на основании этой заявки мы должны подобрать необходимых разработчиков.
Представьте, что сейчас нас интересуют только мидлы и сеньоры. Напишем SQL-запрос:
SELECT * FROM team WHERE level = 'middle' AND level = 'senior';
После выполнения запроса мы увидим пустую таблицу как на Картинке 2.
И тут мы столкнулись с первой ошибкой. В нашем запросе база данных по очереди берет строку и проверяет находится ли в колонке level значение "middle" И значение "senior". Оператор AND — это условие одновременности. То есть исходя из нашего запроса в поле level должно находится одновременно и "middle", и "senior", что невозможно, так разработчик может быть только одного уровня.
Почему мы допустили такую ошибку? И дело в формулировках, когда я озвучивал задание, то написал, что нас интересуют только мидлы И сеньоры. Это правильное выражение с точки зрения русского языка, но неверное с точки зрения логики. Чтобы получить верный результат надо чтобы поле level содержало ИЛИ "middle", ИЛИ "senior". Поэтому заменим AND на OR:
SELECT * FROM team WHERE level = 'middle' OR level = 'senior';
Теперь разработчики подобраны верно (Картинка 3).
Такую ошибку легко допустить, если в формулировке задачи стоит союз И. Но не стоит его напрямую переносить в SQL-запрос. Возможно здесь кроется ошибка, особенно если мы сравниваем с одним полем.
✅ JavaStart. Подписаться
При использовании в SELECT-запросах операторов OR и AND можно легко ошибиться в составлении логического выражения. И проблема таких ошибок в том, что запрос выполняется как будто ошибки нет, но данные выводятся неверные.
Если у вас мало опыта в написании таких SQL-запросов, то можно легко не заметить проблему. Давайте разберем несколько популярных ошибок.
Работать будем с таблицей team, которая содержит список разработчиков (Картинка 1).
Основные критерии оценки — это уровень владения технологией: junior, middle или senior, и базовый язык программирования, на котором пишет разработчик.
Нам как менеджерам поступает заявка на разработку проекта и на основании этой заявки мы должны подобрать необходимых разработчиков.
Представьте, что сейчас нас интересуют только мидлы и сеньоры. Напишем SQL-запрос:
SELECT * FROM team WHERE level = 'middle' AND level = 'senior';
После выполнения запроса мы увидим пустую таблицу как на Картинке 2.
И тут мы столкнулись с первой ошибкой. В нашем запросе база данных по очереди берет строку и проверяет находится ли в колонке level значение "middle" И значение "senior". Оператор AND — это условие одновременности. То есть исходя из нашего запроса в поле level должно находится одновременно и "middle", и "senior", что невозможно, так разработчик может быть только одного уровня.
Почему мы допустили такую ошибку? И дело в формулировках, когда я озвучивал задание, то написал, что нас интересуют только мидлы И сеньоры. Это правильное выражение с точки зрения русского языка, но неверное с точки зрения логики. Чтобы получить верный результат надо чтобы поле level содержало ИЛИ "middle", ИЛИ "senior". Поэтому заменим AND на OR:
SELECT * FROM team WHERE level = 'middle' OR level = 'senior';
Теперь разработчики подобраны верно (Картинка 3).
Такую ошибку легко допустить, если в формулировке задачи стоит союз И. Но не стоит его напрямую переносить в SQL-запрос. Возможно здесь кроется ошибка, особенно если мы сравниваем с одним полем.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Какой оператор в Java используется для прерывания выполнения цикла и перехода к следующему этапу цикла?
Anonymous Quiz
39%
break
4%
return
55%
continue
2%
switch
0%
Посмотреть ответ