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%
Посмотреть ответ
SQL, базы данных. Часть 18.
Приоритет операторов AND, OR.
У нас есть таблица team с разработчиками. И на этот раз нам нужно разработать бэкенд для сайта. И для этого нам нужны все Python и PHP разработчики. Напишем:
SELECT * FROM team
WHERE language = 'python' OR language = 'php';
Обратите внимание, что нужны нам все Python И PHP разработчики, но пишем мы OR. После выполнения запроса мы получим такую таблицу как на Картинке 2.
В итоговую таблицу попали и те и другие программисты. Отлично. Но давайте расширим условие. Скажем, нам нужны только middle разработчики на этих языках. Добавим:
SELECT * FROM team
WHERE
language = 'python' OR
language = 'php' AND
level = 'middle';
После выполнения мы получим такую таблицу как на Картинке 3.
И результат довольно странный, в итоговой таблице присутствуют также джуниоры и сеньоры. И дело в том, что операторы OR и AND имеют приоритет выполнения и у AND он выше. Поэтому в первую очередь база данных находит всех мидлов, которые пишут на PHP. Такому условию соответствует только одна запись, а далее срабатывает оператор OR, который добавляет всех Python-разработчиков.
То есть мы ищем ИЛИ мидлов на PHP, ИЛИ Python-разработчиков без указания их уровня владения языком. Поэтому в таблицу также попали джуниоры и сеньоры.
Чтобы решить поставленную задачу, нужно четко расставить приоритет с помощью скобок. Как в математике. Поместим скобки справа и слева от OR:
SELECT * FROM team
WHERE
(language = 'python' OR
language = 'php') AND
level = 'middle';
Теперь в таблице остались только мидлы на Python и PHP (Картинка 4).
Каждый раз когда в одном запросе встречаются OR и AND, обращайте внимание на порядок выполнения, иначе можно легко получить неверные данные.
Вообще, даже не так, каждый раз когда у вас есть в запросе есть OR и AND применяйте скобки для расстановки приоритетов, даже если уверены в своём коде.
Такая практика позволит избежать неприятных логических ошибок.
✅ JavaStart. Подписаться
Приоритет операторов AND, OR.
У нас есть таблица team с разработчиками. И на этот раз нам нужно разработать бэкенд для сайта. И для этого нам нужны все Python и PHP разработчики. Напишем:
SELECT * FROM team
WHERE language = 'python' OR language = 'php';
Обратите внимание, что нужны нам все Python И PHP разработчики, но пишем мы OR. После выполнения запроса мы получим такую таблицу как на Картинке 2.
В итоговую таблицу попали и те и другие программисты. Отлично. Но давайте расширим условие. Скажем, нам нужны только middle разработчики на этих языках. Добавим:
SELECT * FROM team
WHERE
language = 'python' OR
language = 'php' AND
level = 'middle';
После выполнения мы получим такую таблицу как на Картинке 3.
И результат довольно странный, в итоговой таблице присутствуют также джуниоры и сеньоры. И дело в том, что операторы OR и AND имеют приоритет выполнения и у AND он выше. Поэтому в первую очередь база данных находит всех мидлов, которые пишут на PHP. Такому условию соответствует только одна запись, а далее срабатывает оператор OR, который добавляет всех Python-разработчиков.
То есть мы ищем ИЛИ мидлов на PHP, ИЛИ Python-разработчиков без указания их уровня владения языком. Поэтому в таблицу также попали джуниоры и сеньоры.
Чтобы решить поставленную задачу, нужно четко расставить приоритет с помощью скобок. Как в математике. Поместим скобки справа и слева от OR:
SELECT * FROM team
WHERE
(language = 'python' OR
language = 'php') AND
level = 'middle';
Теперь в таблице остались только мидлы на Python и PHP (Картинка 4).
Каждый раз когда в одном запросе встречаются OR и AND, обращайте внимание на порядок выполнения, иначе можно легко получить неверные данные.
Вообще, даже не так, каждый раз когда у вас есть в запросе есть OR и AND применяйте скобки для расстановки приоритетов, даже если уверены в своём коде.
Такая практика позволит избежать неприятных логических ошибок.
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, базы данных. Часть 19.
Сортировка результатов.
В SQL часто кроме фильтрации данных, также часто требуется отсортировать их по одному из столбцов.
В первом уроке мы написали SQL-запрос для получения данных о совершеннолетних пользователях (Картинка 1). Посмотрим на него еще раз:
SELECT last_name, first_name, birthday, age FROM users WHERE age >= 18;
Обратите внимание, что сейчас данные никак не упорядочены. Ни по фамилии, ни по имени, ни по дате рождения. Но давайте добавим после конструкции WHERE: ORDER BY last_name:
SELECT last_name, first_name, birthday, age
FROM users WHERE age >= 18 ORDER BY last_name;
Получим результат как на Картинке 2. После выполнение данного SQL запроса мы получим таблицу отсортированную по столбцу last_name (фамилия). Так как last_name хранит строки, то сортировка происходит в алфавитном порядке.
Разумеется, сортировать можно не только по текстовым полям. Например, можно написать ORDER BY birthday:
SELECT last_name, first_name, birthday, age
FROM users
WHERE age >= 18
ORDER BY birthday;
И получить данные упорядоченные по дате рождения в хронологическом порядке как на Картинке 3.
А если в конструкции ORDER BY после имени столбца написать DESC, то данные будут отсортированы в обратном порядке — свежие даты выше. Смотрим на Картинку 4.
SELECT last_name, first_name, birthday, age
FROM users
WHERE age >= 18
ORDER BY birthday DESC;
Про ключевое слово DESC часто спрашивают на собеседовании на позицию Junior разработчика или Trainee. Могут даже спросить и мидла. Данное ключевое слово очень часто применяется в повседневной практики на коммерческом проекте!
✅ JavaStart. Подписаться
Сортировка результатов.
В SQL часто кроме фильтрации данных, также часто требуется отсортировать их по одному из столбцов.
В первом уроке мы написали SQL-запрос для получения данных о совершеннолетних пользователях (Картинка 1). Посмотрим на него еще раз:
SELECT last_name, first_name, birthday, age FROM users WHERE age >= 18;
Обратите внимание, что сейчас данные никак не упорядочены. Ни по фамилии, ни по имени, ни по дате рождения. Но давайте добавим после конструкции WHERE: ORDER BY last_name:
SELECT last_name, first_name, birthday, age
FROM users WHERE age >= 18 ORDER BY last_name;
Получим результат как на Картинке 2. После выполнение данного SQL запроса мы получим таблицу отсортированную по столбцу last_name (фамилия). Так как last_name хранит строки, то сортировка происходит в алфавитном порядке.
Разумеется, сортировать можно не только по текстовым полям. Например, можно написать ORDER BY birthday:
SELECT last_name, first_name, birthday, age
FROM users
WHERE age >= 18
ORDER BY birthday;
И получить данные упорядоченные по дате рождения в хронологическом порядке как на Картинке 3.
А если в конструкции ORDER BY после имени столбца написать DESC, то данные будут отсортированы в обратном порядке — свежие даты выше. Смотрим на Картинку 4.
SELECT last_name, first_name, birthday, age
FROM users
WHERE age >= 18
ORDER BY birthday DESC;
Про ключевое слово DESC часто спрашивают на собеседовании на позицию Junior разработчика или Trainee. Могут даже спросить и мидла. Данное ключевое слово очень часто применяется в повседневной практики на коммерческом проекте!
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Сколько примитивных типов данных существует в Java?
Anonymous Quiz
32%
6
18%
7
43%
8
2%
9
6%
Посмотреть ответ
Please open Telegram to view this post
VIEW IN TELEGRAM