Топ 7 ошибок в MySQL

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.
Photo by Lauren Mancke on Unsplash
Photo by Lauren Mancke on Unsplash

Мы все знаем, насколько важен SQL для любой работы, связанной с анализом данных. Он пользуется популярностью благодаря возможности извлечения значимой информации из данных и предоставления мощных инструментов для их обработки и анализа.

Но, может быть, вы один из тех пользователей SQL, кто допускает ошибки? Например, забываете использовать агрегатные функции или случайно удаляет все строки в наборе данных?

(Ой!)

Не волнуйтесь!

В данной статье мы рассмотрим некоторые распространенные ошибки в SQL, которые мы все совершаем, и узнаем, как их избежать.

Содержание

  • Ошибка №1: Отсутствие использования условия WHERE

  • Ошибка №2: Игнорирование значений NULL

  • Ошибка №3: Использование SELECT *

  • Ошибка №4: Игнорирование чувствительности к регистру символов

  • Ошибка №5: Забыли об использовании GROUP BY

  • Ошибка №6: Пропуск скобок приводит к неправильному запросу

  • Ошибка №7: Путаница между функциями COUNT() и SUM()

  • Заключение

Ошибка №1: Отсутствие условия WHERE

При выполнении операций, таких как DELETE или UPDATE, отсутствие условия WHERE приводит к удалению всех строк в наборе данных.

Пример:

DELETE FROM Employees;

Данная команда удалила все строки из таблицы Employees, так как условие не было указано.

Правильный запрос:

DELETE FROM Employees 
WHERE Salary > 25000;

Чтобы избежать ошибки, рекомендуется использовать условие WHERE и указать, какие строки вы хотите изменить.

Ошибка №2: Игнорирование значений NULL

Как проверить значение NULL?

Если вы делаете вот так:

SELECT * 
FROM Employees 
WHERE name = NULL;

То это неверный подход, который приведет к ошибке!

Для проверки NULL мы используем IS NULL вместо знака равенства (=).

Правильный запрос:

SELECT * 
FROM Employees 
WHERE name IS NULL;

 Задание для вас

Напишите SQL-запрос для проверки значений NOT NULL.

Ошибка №3: Использование SELECT *

Использование SELECT * возвращает все данные, включая ненужные. Это замедляет выполнение запроса.

Пример:

SELECT * 
FROM Employees;

Данный запрос вернет все столбцы, включая ненужные, особенно при работе с большими наборами данных или объединении нескольких таблиц. Это станет проблемой, так как вывод займет много времени, а также увеличит использование памяти.

 Правильный запрос:

 SELECT Emp_ID, Emp_Name 
 FROM Employees;

 Не забывайте указывать столбцы, которые вам необходимы!

Ошибка №4: Игнорирование чувствительности к регистру символов

Помните, SQL может быть чувствителен к регистру символов.

Что такое чувствительность к регистру символов?

В SQL чувствительность к регистру символов означает различие между прописными (UPPERCASE) и строчными (LOWERCASE) буквами при сравнении строк.

 Как вы думаете, каким будет результат выполнения следующего запроса:

 SELECT * 
 FROM Employees 
 WHERE Name = 'john';

 Этот запрос вернет строки, содержащие только слово 'john' в столбце Name.

 Теперь, что если мы хотим получить строки, содержащие имена типа john, John или JOHN?  Каким должен быть запрос?

 SELECT * 
 FROM Employees 
 WHERE LOWER(Name) = 'john';

 Теперь в результате есть 'john', 'John' или 'JOHN'.

Примечание

По умолчанию поиск в MySQL является независимым от регистра символов.

Ошибка №5: Забыли об использовании GROUP BY

Одна из распространённых ошибок - забыть использовать GROUP BY при применении агрегатных функций, таких как MIN(), MAX() или COUNT().

Пример:

 SELECT department, COUNT(*) 
 FROM Employees;

 Это приведет к ошибке!

Когда используется агрегатная функция, такая как COUNT(), вместе с неагрегатной функцией, такой как 'department', требуется GROUP BY.

Без него механизм SQL не знает, как агрегировать столбец 'department' с результатами COUNT().

Правильный запрос:

SELECT department, COUNT(*) 
FROM Employees
GROUP BY department;

Теперь результат покажет каждый отдел (department) вместе с количеством сотрудников в этом отделе.

Ошибка №6: Пропуск скобок приводит к неправильному запросу

Скобки в SQL имеют решающее значение, особенно в сложных условиях или при использовании нескольких логических операторов.

Пример:

 Предположим, нам нужно отфильтровать сотрудников, которые работают либо в отделе «ИТ», либо в отделе «HR» с зарплатой выше 65000.

 SELECT * FROM Employees 
 WHERE department = 'IT' OR department = 'HR' AND salary > 65000;

Этот запрос выведет в результат всех сотрудников отдела ИТ и только тех сотрудников отдела HR, чья зарплата превышает 65000.

Правильный вариант запроса:

SELECT * FROM Employees 
WHERE (department = 'IT' OR department = 'HR') AND salary > 65000;

Этот запрос теперь корректно показывает сотрудников отделов ИТ или HR с зарплатой выше 65 000.

Ошибка №7: Путаница между функциями COUNT() и SUM()

Начинающие пользователи часто путают функции COUNT() и SUM() в SQL, что приводит к неверным результатам.

COUNT(): Используется для подсчета строк на основе определенного условия. Она считает только строки, но не значения, присутствующие в них.

SUM(): Суммирует числовые значения, присутствующие в конкретном столбце. Она вычисляет общую сумму значений в этом столбце.

 Пример:

Допустим, мы хотим узнать общую зарплату в отделе продаж.

SELECT department, COUNT(salary) AS Total_Salary
FROM employees
WHERE department = 'Sales'
GROUP BY department;

 Результат: 

Здесь COUNT(salary) считает количество ненулевых (non-NULL) зарплат в отделе продаж, а не фактическое значение зарплаты.

Поскольку только у двух сотрудников в отделе «Продажи» есть ненулевые зарплаты (фактическая зарплата), результатом является число 2, что неправильно, если мы хотим получить общую сумму заработной платы.

 Правильный вариант запроса:

SELECT department, SUM(salary) AS Total_Salary
FROM employees
WHERE department = 'Sales'
GROUP BY department;

 Результат:

Этот результат правильно суммирует заработную плату в отделе продаж: 50 000 + 55 000 = 105 000.

Заключение

Понимание и предотвращение распространенных ошибок в MySQL — это ключ к эффективной работе с базами данных. Любая ошибка может привести к нежелательным последствиям, но теперь вы хотя бы знаете о некоторых из них.

Чтобы избежать этих распространенных ловушек, важно развивать внимательность к деталям и следовать лучшим практикам при написании SQL-запросов. Помните, что даже опытные разработчики иногда допускают ошибки, но знание о них и умение их исправлять — это то, что отличает профессионала от новичка.

Источник: https://habr.com/ru/articles/885836/


Интересные статьи

Интересные статьи

Привет, Хабр! Меня зовут Екатерина Саяпина, я Product Owner личного кабинета платформы МТС Exolve. В разных проектах я вижу одну и ту же ошибку: разработчики пытаются внедрить как можно больше разных ...
Применять паттерны программирования — хорошая практика. К сожалению, на проектах CMS Bitrix редко встречаются примеры использования. В статье я покажу на примере, как можно использовать паттерн D...
Для каких целей? На момент возникновения идеи было еще не совсем понятно. Но предпосылки развития идеи были
Приятно познакомиться, мы битриксоиды. Да-да, те самые которые:- вообще не модные,- пишут НЕ на Laravel и Symphony,- возятся с кучей мягко говоря “неидеального” кода под названием “1С-Битрикс: Управле...
Вторая часть истории про мой новый домашний сервер — о выборе софта на замену старой системе. Что было, что хотелось получить и что было выбрано в итоге. Картинка же повествует о том, что любое обл...