- IF ELSE to funkcja warunkowa w MySQL, która zwraca wartości na podstawie warunków, przydatna w instrukcji SELECT i wyrażeniach.
- Można go łączyć z operatorami, agregacjami, podzapytaniami, klauzulami CASE, IFNULL, REGEXP, DATE_FORMAT i GROUP BY/HAVING w celu uzyskania zaawansowanej logiki.
- Umożliwia klasyfikowanie danych, obsługę wartości null i generowanie dynamicznych komunikatów dla każdego rekordu, jednak nadmierne zagnieżdżanie może mieć wpływ na czytelność i wydajność.
W tym artykule pokażę Ci, jak używać polecenia MySQL IF ELSE oraz przykładów, aby udoskonalić swoje zapytania i uzyskać dokładniejsze wyniki. Dzięki tym 18 praktycznym przykładom nauczymy się, jak korzystać z tego potężnego narzędzia i jak najlepiej wykorzystać bazę danych. Przeanalizujemy przypadki z życia wzięte, w których użycie instrukcji IF ELSE okazuje się skuteczne, od warunkowego wyboru danych po wykonywanie złożonych operacji. Jesteś gotowy? No to jedziemy tam! Przygotuj się na opanowanie tej techniki i przenieś swoje umiejętności SQL na wyższy poziom.
Czym jest instrukcja IF ELSE w MySQL?
Zanim przejdziemy do przykładów, istotne jest zrozumienie, czym jest polecenie IF ELSE w MySQL. Zasadniczo jest to struktura warunkowa umożliwiająca wykonywanie różnych działań w zależności od tego, czy spełniony jest określony warunek, czy nie. Oznacza to, że jeśli warunek jest spełniony, zostanie wykonany jeden blok kodu, a jeśli jest spełniony, zostanie wykonany inny blok kodu.
Instrukcja MySQL IF ELSE z przykładami
Poniżej znajduje się tabela zawierająca listę 18 przykładów, które omówimy w tym artykule:
| Przykład | opis |
|---|---|
| 1 | Podstawowe użycie IF ELSE |
| 2 | JEŚLI INACZEJ z wieloma warunkami |
| 3 | Zagnieżdżone IF ELSE |
| 4 | JEŚLI INACZEJ z operatorami logicznymi |
| 5 | JEŚLI INACZEJ z funkcjami agregacji |
| 6 | IF ELSE z podzapytaniami |
| 7 | JEŚLI INACZEJ ze zmiennymi |
| 8 | JEŚLI INACZEJ z CASE |
| 9 | JEŚLI INACZEJ z IFNULL |
| 10 | JEŚLI INACZEJ z NULLIF |
| 11 | JEŚLI INACZEJ z ISTNIEJE |
| 12 | JEŚLI INACZEJ z IN |
| 13 | JEŚLI INACZEJ z POMIĘDZY |
| 14 | JEŚLI INACZEJ z LIKE |
| 15 | JEŚLI INACZEJ z REGEXP |
| 16 | JEŚLI INACZEJ z DATE_FORMAT |
| 17 | JEŚLI INACZEJ z GROUP_CONCAT |
| 18 | JEŚLI INACZEJ z MAJĄC |
1. Podstawowe użycie IF ELSE
Przyjrzyjmy się na początek prostemu przykładowi. Załóżmy, że mamy tabelę o nazwie „produkty” zawierającą następujące pola: id, nazwa, cena i stan magazynowy. Chcemy uzyskać nazwę produktu i komunikat informujący, czy jest on dostępny w magazynie, czy nie. Możemy to zrobić w ten sposób:
SELECT nombre, IF(stock > 0, 'Hay stock', 'No hay stock') AS stock FROM productos;
W tym przypadku warunek jest taki stock > 0. Jeżeli warunek jest spełniony, wyświetlony zostanie komunikat „W magazynie”, a jeżeli nie jest spełniony, wyświetlony zostanie komunikat „Brak w magazynie”.
2. JEŚLI INACZEJ z wieloma warunkami
Możemy również użyć IF ELSE z wieloma warunkami. Na przykład, powiedzmy, że chcemy uzyskać nazwę produktu i komunikat wskazujący, czy cena jest większa niż 100, mniejsza niż 50 lub pomiędzy 50 i 100. Możemy to zrobić w ten sposób:
SELECT nombre,
IF(precio > 100, 'Caro',
IF(precio < 50, 'Barato', 'Precio medio')
) AS precio
FROM productos;
W tym przypadku wykorzystujemy zagnieżdżone instrukcje IF ELSE do oceny różnych warunków.
3. Zagnieżdżone IF ELSE
Jak widzieliśmy w poprzednim przykładzie, możemy zagnieżdżać wiele instrukcji IF ELSE w celu oceny różnych warunków. Przyjrzyjmy się innemu przykładowi. Załóżmy, że chcemy uzyskać nazwę produktu i komunikat wskazujący, czy stan magazynowy jest większy niż 100, mniejszy niż 10 czy między 10 a 100. Ponadto, jeśli stan magazynowy jest mniejszy niż 10, chcemy wskazać, czy wynosi 0, czy nie. Możemy to zrobić w ten sposób:
SELECT nombre,
IF(stock > 100, 'Stock alto',
IF(stock < 10,
IF(stock = 0, 'Sin stock', 'Stock bajo'),
'Stock medio'
)
) AS stock
FROM productos;
W tym przypadku wykorzystujemy trzy poziomy zagnieżdżenia w celu oceny wszystkich niezbędnych warunków.
4. JEŚLI INACZEJ z operatorami logicznymi
Możemy również łączyć IF ELSE z operatorami logicznymi takimi jak AND i OR. Na przykład, powiedzmy, że chcemy uzyskać nazwę produktu i komunikat informujący, czy cena jest większa niż 100, a stan magazynowy jest mniejszy niż 10. Możemy to zrobić w ten sposób:
SELECT nombre, IF(precio > 100 AND stock < 10, 'Urgente reponer', 'OK') AS estado FROM productos;
W tym przypadku warunek jest taki precio > 100 AND stock < 10. Jeśli oba warunki są spełnione, wyświetlony zostanie komunikat „Pilne uzupełnienie”, a jeśli nie są spełnione, wyświetlony zostanie komunikat „OK”.
5. JEŚLI INACZEJ z funkcjami agregującymi
Funkcję IF ELSE można łączyć z funkcjami agregującymi, takimi jak SUM, AVG, MAX itp. Załóżmy na przykład, że chcemy uzyskać łączną sprzedaż i komunikat informujący, czy przekroczyliśmy cel 10000 XNUMX, czy nie. Możemy to zrobić w ten sposób:
SELECT SUM(total) AS total_ventas, IF(SUM(total) > 10000, '¡Objetivo superado!', 'No se alcanzó el objetivo') AS mensaje FROM ventas;
W tym przypadku obliczamy całkowitą sprzedaż za pomocą funkcji SUMA, a następnie używamy funkcji JEŚLI INACZEJ, aby wyświetlić komunikat na podstawie tego, czy cel został przekroczony, czy nie.
6. IF ELSE z podzapytaniami
Możemy również użyć IF ELSE z podzapytaniami . Na przykład, załóżmy, że chcemy uzyskać nazwy produktów i komunikat informujący, czy ich cena jest wyższa niż średnia cena wszystkich produktów. Możemy to zrobić w ten sposób:
SELECT nombre,
IF(precio > (SELECT AVG(precio) FROM productos),
'Precio superior a la media',
'Precio inferior o igual a la media'
) AS comparacion
FROM productos;
W tym przypadku używamy podzapytania w celu obliczenia średniej ceny wszystkich produktów, a następnie porównujemy każdą indywidualną cenę z tą wartością, korzystając z instrukcji IF ELSE.
7. JEŚLI INACZEJ ze zmiennymi
Możemy używać IF ELSE razem ze zmiennymi w celu przechowywania i używania wartości w naszych zapytaniach. Załóżmy na przykład, że chcemy uzyskać całkowitą sprzedaż i komunikat informujący, czy przekroczyliśmy cel zapisany w zmiennej. Możemy to zrobić w ten sposób:
SET @objetivo = 10000; SELECT SUM(total) AS total_ventas, IF(SUM(total) > @objetivo, '¡Objetivo superado!', 'No se alcanzó el objetivo') AS mensaje FROM ventas;
W tym przypadku najpierw zdefiniujemy zmienną @objetivo o wartości 10000 i używamy jej w warunku IF ELSE.
8. JEŚLI INACZEJ z CASE
Innym sposobem użycia instrukcji IF ELSE jest połączenie jej z instrukcją CASE . Załóżmy na przykład, że chcemy uzyskać nazwę produktu i klasyfikację cenową „Tani”, „Średni” lub „Drogi” na podstawie określonych przedziałów cenowych. Możemy to zrobić w następujący sposób:
SELECT nombre,
CASE
WHEN precio < 50 THEN 'Barato'
WHEN precio BETWEEN 50 AND 100 THEN 'Medio'
ELSE 'Caro'
END AS clasificacion
FROM productos;
W tym przypadku stosujemy metodę CASE do oceny różnych warunków i przypisujemy wartość na podstawie wyniku. Jest to alternatywny sposób wykonywania tego samego działania, co w przypadku zagnieżdżonych instrukcji IF ELSE.
9. JEŚLI INACZEJ z IFNULL
Funkcja IFNULL pozwala nam obsługiwać wartości null w naszych zapytaniach. Możemy połączyć tę opcję z IF ELSE, aby przypisać wartość domyślną, gdy napotkamy wartość null. Na przykład, załóżmy, że chcemy uzyskać nazwę produktu i jego cenę, ale jeśli cena jest zerowa, chcemy wyświetlić komunikat „Zapytanie”. Możemy to zrobić w ten sposób:
SELECT nombre, IFNULL(precio, 'Consultar') AS precio FROM productos;
W tym przypadku używamy IFNULL, aby ocenić, czy cena jest równa null i jeśli tak, wyświetlamy komunikat „Zapytanie” zamiast wartości null.
10. JEŚLI INACZEJ z NULLIF
Funkcja NULLIF jest podobna do IFNULL, ale zamiast obsługiwać wartości null, pozwala nam porównać dwie wartości i zwrócić NULL, jeśli są równe. Można ją połączyć z IF ELSE, aby przypisać alternatywną wartość, gdy spełniony jest określony warunek. Na przykład, załóżmy, że chcemy uzyskać nazwę produktu i jego cenę, ale jeśli cena wynosi 0, chcemy wyświetlić komunikat „Za darmo”. Możemy to zrobić w ten sposób:
SELECT nombre, IF(NULLIF(precio, 0) IS NULL, 'Gratis', precio) AS precio FROM productos;
W tym przypadku używamy NULLIF, aby porównać cenę z 0 i zwrócić NULL, jeśli są takie same. Następnie używamy IF ELSE, aby ocenić, czy wynik NULLIF jest równy NULL i jeśli tak, wyświetlamy komunikat „Za darmo” zamiast ceny.
11. JEŚLI INACZEJ z ISTNIEJE
Klauzula EXISTS pozwala sprawdzić, czy istnieje rekord spełniający określony warunek w podzapytaniu. Możemy połączyć tę opcję z instrukcją IF ELSE, aby podejmować decyzje na podstawie wyniku. Załóżmy na przykład, że chcemy uzyskać imiona klientów i komunikat informujący, czy złożyli zamówienie, czy nie. Możemy to zrobić w ten sposób:
SELECT nombre,
IF(EXISTS(SELECT * FROM pedidos WHERE cliente_id = clientes.id),
'Con pedidos',
'Sin pedidos'
) AS estado
FROM clientes;
W tym przypadku używamy EXISTS z podzapytaniem, aby sprawdzić, czy istnieją jakieś zamówienia dla każdego klienta. Następnie używamy IF ELSE, aby wyświetlić komunikat na podstawie wyniku.
12. JEŚLI INACZEJ z IN
Operator IN pozwala sprawdzić, czy wartość znajduje się na liście wartości. Możemy połączyć tę opcję z instrukcją IF ELSE, aby podejmować decyzje na podstawie wyniku. Załóżmy na przykład, że chcemy uzyskać nazwy produktów i komunikat informujący, czy należą one do kategorii „Elektronika” czy „Dom”. Możemy to zrobić w ten sposób:
SELECT nombre,
IF(categoria IN ('Electrónica', 'Hogar'),
'Producto destacado',
'Producto regular'
) AS tipo
FROM productos;
W tym przypadku używamy IN, aby sprawdzić, czy kategoria produktu znajduje się w kategorii „Elektronika” lub „Dom”. Następnie używamy IF ELSE, aby wyświetlić komunikat na podstawie wyniku.
13. JEŚLI INACZEJ z MIĘDZY
Operator BETWEEN pozwala sprawdzić, czy wartość mieści się w zakresie wartości. Możemy połączyć tę opcję z instrukcją IF ELSE, aby podejmować decyzje na podstawie wyniku. Na przykład, powiedzmy, że chcemy uzyskać nazwę produktu i komunikat wskazujący, czy ich cena mieści się w przedziale od 50 do 100. Możemy to zrobić w ten sposób:
SELECT nombre,
IF(precio BETWEEN 50 AND 100,
'Precio en rango',
'Precio fuera de rango'
) AS rango
FROM productos;
W tym przypadku używamy BETWEEN, aby sprawdzić, czy cena produktu mieści się w przedziale od 50 do 100. Następnie używamy IF ELSE, aby wyświetlić komunikat na podstawie wyniku.
14. JEŚLI INACZEJ z LIKE
Operator LIKE umożliwia wyszukiwanie wzorców w ciągach tekstowych. Możemy połączyć tę opcję z instrukcją IF ELSE, aby podejmować decyzje na podstawie wyniku. Załóżmy na przykład, że chcemy uzyskać nazwy produktów i komunikat informujący, czy ich nazwa zawiera słowo „iPhone”. Możemy to zrobić w ten sposób:
SELECT nombre,
IF(nombre LIKE '%iPhone%',
'Producto de Apple',
'Otro producto'
) AS tipo
FROM productos;
W tym przypadku używamy polecenia LIKE, aby sprawdzić, czy nazwa produktu zawiera słowo „iPhone”. Następnie używamy IF ELSE, aby wyświetlić komunikat na podstawie wyniku.
15. JEŚLI INACZEJ z REGEXP
Operator REGEXP pozwala nam wyszukiwać bardziej złożone wzorce w ciągach tekstowych za pomocą wyrażeń regularnych . Możemy go połączyć z operatorem IF ELSE, aby podejmować decyzje na podstawie wyniku. Załóżmy na przykład, że chcemy uzyskać imiona i nazwiska klientów oraz komunikat informujący, czy ich adres e-mail jest prawidłowy, czy nie. Możemy to zrobić w następujący sposób:
SELECT nombre,
IF(email REGEXP '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Z]{2,}$',
'Email válido',
'Email inválido'
) AS validacion
FROM clientes;
W tym przypadku używamy REGEXP z wyrażeniem regularnym, aby sprawdzić, czy adres e-mail klienta jest zgodny z prawidłowym formatem. Następnie używamy IF ELSE, aby wyświetlić komunikat na podstawie wyniku.
16. JEŚLI INACZEJ z DATE_FORMAT
Funkcja DATE_FORMAT umożliwia formatowanie dat w zapytaniach. Możemy połączyć tę opcję z instrukcją IF ELSE, aby podejmować decyzje na podstawie wyniku. Załóżmy na przykład, że chcemy uzyskać nazwę zamówienia i komunikat informujący, czy zostało złożone w weekend, czy nie. Możemy to zrobić w ten sposób:
SELECT id,
IF(DATE_FORMAT(fecha, '%w') IN (0, 6),
'Fin de semana',
'Día de semana'
) AS dia
FROM pedidos;
W tym przypadku używamy DATE_FORMAT, aby uzyskać dzień tygodnia, w którym złożono zamówienie (0 dla niedzieli, 6 dla soboty). Następnie używamy IF ELSE z IN, aby sprawdzić, czy dzień jest 0 czy 6 i wyświetlić komunikat na podstawie wyniku.
17. JEŚLI INACZEJ z GROUP_CONCAT
Funkcja GROUP_CONCAT umożliwia łączenie wartości z wielu wierszy w jeden ciąg. Możemy połączyć tę opcję z instrukcją IF ELSE, aby podejmować decyzje na podstawie wyniku. Załóżmy na przykład, że chcemy uzyskać imię klienta i wiadomość informującą, czy kupił „iPhone'a” czy „Samsunga”. Możemy to zrobić w ten sposób:
SELECT c.nombre,
IF(GROUP_CONCAT(p.nombre) LIKE '%iPhone%',
'Compró iPhone',
IF(GROUP_CONCAT(p.nombre) LIKE '%Samsung%',
'Compró Samsung',
'No compró iPhone ni Samsung'
)
) AS mensaje
FROM clientes c
JOIN pedidos pe ON c.id = pe.cliente_id
JOIN productos p ON pe.producto_id = p.id
GROUP BY c.id;
W tym przypadku używamy GROUP_CONCAT w celu połączenia nazw produktów zakupionych przez poszczególnych klientów. Następnie używamy IF ELSE z LIKE, aby sprawdzić, czy powstały ciąg zawiera „iPhone” lub „Samsung” i wyświetlić komunikat na podstawie wyniku.
18. JEŚLI INACZEJ z MAJĄC
Klauzula HAVING pozwala nam filtrować wyniki zapytania GROUP BY na podstawie określonych warunków. Możemy połączyć ją z klauzulą IF ELSE, aby podejmować decyzje na podstawie wyniku. Załóżmy na przykład, że chcemy uzyskać liczbę zamówień na klienta i komunikat informujący, czy jest on „Klientem VIP” (ponad 10 zamówień), czy „Stałym Klientem”. Możemy to zrobić w następujący sposób:
SELECT c.nombre, COUNT(p.id) AS total_pedidos,
IF(COUNT(p.id) > 10,
'Cliente VIP',
'Cliente regular'
) AS tipo_cliente
FROM clientes c
JOIN pedidos p ON c.id = p.cliente_id
GROUP BY c.id
HAVING COUNT(p.id) > 5;
W tym przypadku używamy polecenia GROUP BY, aby pogrupować zamówienia według klienta i policzyć liczbę zamówień dla każdego z nich za pomocą polecenia COUNT. Następnie używamy polecenia HAVING, aby odfiltrować tylko klientów, którzy złożyli więcej niż 5 zamówień. Na koniec używamy polecenia IF ELSE, aby wyświetlić komunikat na podstawie tego, czy łączna liczba zamówień jest większa niż 10, czy nie.
FAQ na temat IF ELSE MySQL z przykładami
1. Czym jest instrukcja IF ELSE w MySQL?
Instrukcja IF ELSE w MySQL to struktura warunkowa umożliwiająca wykonywanie różnych akcji w zależności od tego, czy spełniony jest określony warunek.
2. Jak używać instrukcji IF ELSE w MySQL?
Podstawowa składnia instrukcji IF ELSE w MySQL jest następująca:
IF(condición, valor_si_verdadero, valor_si_falso)
3. Czy w MySQL można zagnieżdżać wiele instrukcji IF ELSE?
Tak, możesz zagnieżdżać wiele instrukcji IF ELSE, aby oceniać różne warunki i podejmować decyzje na podstawie wyników.
4. Czy funkcję IF ELSE można łączyć z innymi funkcjami i klauzulami MySQL?
Tak, funkcję IF ELSE można łączyć z wieloma innymi funkcjami i klauzulami MySQL, takimi jak funkcje agregujące, podzapytania, CASE, IFNULL, NULLIF, EXISTS, IN, BETWEEN, LIKE, REGEXP, DATE_FORMAT, GROUP_CONCAT, HAVING i wiele innych.
5. Jaka jest różnica między IF ELSE i CASE w MySQL?
Zarówno IF ELSE jak i CASE pozwalają nam wykonywać różne akcje na podstawie określonych warunków. Główną różnicą jest to, że IF ELSE służy do oceny pojedynczego warunku i wykonania działania, niezależnie od tego, czy jest on spełniony, czy nie, natomiast CASE służy do oceny wielu warunków i wykonania różnych działań na podstawie wyniku.
6. Czy istnieją jakieś ograniczenia w stosowaniu IF ELSE w MySQL?
Nie ma istotnych ograniczeń w stosowaniu instrukcji IF ELSE w bazie danych MySQL, poza ograniczeniami wynikającymi z logiki i składni ocenianych warunków. Należy jednak pamiętać, że nadużywanie lub niewłaściwe używanie instrukcji IF ELSE może mieć wpływ na wydajność zapytania oraz utrudniać czytanie i konserwację kodu.
Podsumowanie IF ELSE MySQL z przykładami
W tym artykule dowiedzieliśmy się, czym jest instrukcja IF ELSE w MySQL i jak służy do wykonywania różnych akcji w oparciu o określone warunki. Przedstawiliśmy 18 praktycznych przykładów użycia instrukcji IF ELSE w połączeniu z innymi funkcjami i klauzulami MySQL, takimi jak funkcje agregujące, podzapytania, CASE, IFNULL, NULLIF, EXISTS, IN, BETWEEN, LIKE, REGEXP, DATE_FORMAT, GROUP_CONCAT i HAVING.
Mam nadzieję, że te przykłady były pomocne i pomogą Ci lepiej zrozumieć, jak używać instrukcji IF ELSE w zapytaniach MySQL . I nie zapomnij podzielić się tym artykułem ze znajomymi i współpracownikami, jeśli uznasz go za interesujący!