CodeGym /Kursy /SQL SELF /Typowe błędy przy użyciu SELECT

Typowe błędy przy użyciu SELECT

SQL SELF
Poziom 3, Lekcja 3
Dostępny

Tak jak w każdej innej dziedzinie programowania, przy pracy z SELECT błędy są nieuniknione. Nawet najbardziej doświadczeni programiści czasem mają bugi w zapytaniach SQL. Dzisiaj rozkminimy typowe błędy przy użyciu SELECT, ich przyczyny i jak ich unikać.

SQL to język, który trzyma się sztywno zasad składni. Zgubiony lub zbędny przecinek, brakujący operator albo zła kolejność słów – i baza danych od razu podnosi "czerwoną flagę".

Brakujące słowa kluczowe

Najczęstszy błąd – po prostu zapomnieć o jednym z obowiązkowych słów kluczowych. Na przykład, spróbujmy wykonać taką komendę:

SELECT name age FROM students;

Czegoś tu brakuje, nie? Tutaj brakuje przecinka , między polami name i age. Naprawiamy błąd:

SELECT name, age FROM students;

Powód takich błędów jest prosty: albo dopiero uczysz się pisać zapytania, albo się spieszysz. SQL nie lubi pośpiechu!

Błędy w nazwach kolumn i tabel

Komendy SQL są czułe na poprawne nazwy kolumn i tabel. Spróbujmy zapytania:

SELECT naem, agge FROM studnts;

Baza patrzy na to jak na bełkot: kolumny naem i agge, tak samo jak tabela studnts, po prostu nie istnieją. Poprawiamy:

SELECT name, age FROM students;

Tip: Jeśli nie jesteś pewien nazw, użyj komendy \d table_name w psql albo interfejsu pgAdmin, żeby sprawdzić strukturę tabeli.

Zapomniane cudzysłowy

Jeśli nazwy kolumn lub tabel mają spacje albo inne znaki specjalne, muszą być w podwójnych cudzysłowach. Przykład:

SELECT "first name", age FROM students;

Jak zapomnisz cudzysłowy, SQL nie ogarnie, o co chodzi, i wywali błąd.

Błędy logiczne: kiedy wszystko działa, ale nie tak, jak się spodziewałeś

Czasem zapytania wykonują się poprawnie, ale wynik jest "dziwny". To błędy logiczne. Są bardziej podstępne, bo baza nie powie ci, że coś poszło nie tak.

  1. Złe użycie operatorów porównania. Wyobraź sobie, że chcesz wybrać wszystkich studentów starszych niż 18 lat:
SELECT * FROM students WHERE age > 18;

Teraz spróbujmy zapytania z innym operatorem:

SELECT * FROM students WHERE age = 18;

To zapytanie zwróci tylko tych, którzy mają dokładnie 18 lat. Jeśli chciałeś mieć wszystkich starszych niż 18, to błąd logiczny.

Tip: Sprawdzaj takie detale dokładnie. Jak masz wątpliwości, zacznij od małych wycinków (np. z LIMIT).

Błędy przy łączeniu warunków

Przykład:

SELECT * FROM students WHERE age > 18 OR grade = 'A' AND city = 'New York';

To zapytanie może niespodziewanie zwrócić studentów, którzy nie mieszkają w Nowym Jorku. Dlaczego? Bo kolejność operatorów logicznych jest taka: SQL najpierw ogarnia AND, potem OR. Przepiszmy zapytanie ze nawiasami:

SELECT * FROM students WHERE (age > 18 OR grade = 'A') AND city = 'New York';

Teraz jest git.

Brak filtrowania

Czasem zapytanie typu SELECT * FROM students; zwraca ogromne ilości danych, chociaż szukałeś czegoś konkretnego, np. studentów z danego miasta. Rozwiązanie? Dodaj filtry przez WHERE:

SELECT * FROM students WHERE city = 'New York';

Problemy z wydajnością

Kiedy zapytania pracują na dużych ilościach danych, optymalizacja robi się mega ważna. Zobaczmy typowe błędy, które spowalniają zapytania.

Zapytania typu SELECT * są wygodne podczas developmentu, ale w realu mocno obciążają wydajność. Jeśli potrzebujesz tylko konkretnych kolumn – podaj je wprost.

-- Słabo:
SELECT * FROM students;

-- Dobrze:
SELECT name, age FROM students;

Dlaczego to ważne? SELECT * pobiera wszystkie kolumny, nawet jeśli ich nie używasz. To zwiększa ilość przesyłanych danych.

Praktyczne tipy: jak unikać błędów

Zapytania SQL mogą być bardziej niezawodne, jeśli będziesz trzymać się kilku zasad:

  • Sprawdzaj składnię przed wykonaniem: używaj IDE albo podpowiedzi pgAdmin, które mogą od razu pokazać błędy.
  • Zaczynaj od małych wycinków. Dodaj LIMIT 5 albo LIMIT 10 na start.
  • Używaj komentarzy, żeby ogarnąć, co robi zapytanie:
    -- Wyciągnij wszystkich studentów starszych niż 18 lat
    SELECT name, age FROM students WHERE age > 18;
    
  • Testuj na różnych danych, żeby sprawdzić logikę.
  • Nie nadużywaj SELECT *, szczególnie na dużych tabelach.

Pułapki na rozmowach kwalifikacyjnych

Jedno z popularnych zadań na rozmowie SQL – znaleźć błędy w zapytaniu. Na przykład:

SELECT name FROM employees WHERE salary > 50000 ORDER BY department;

Pytanie do siebie: czy to zapytanie jest logicznie poprawne? Jeśli używasz ORDER BY, to pewnie sortowanie powinno być po pensji:

SELECT name FROM employees WHERE salary > 50000 ORDER BY salary DESC;

Praca z SELECT to podstawa SQL i błędy tutaj są normalne na początku. Ale z czasem będziesz pisać zapytania tak łatwo, jak wiadomości na Messengerze, bo prawdziwi programiści ćwiczą nie tylko na kotach, ale i na bazach danych. 😉

2
Zadanie
SQL SELF, poziom 3, lekcja 3
Niedostępne
Poprawa błędu składniowego
Poprawa błędu składniowego
2
Zadanie
SQL SELF, poziom 3, lekcja 3
Niedostępne
Błąd logiczny w zapytaniu z filtrowaniem i sortowaniem
Błąd logiczny w zapytaniu z filtrowaniem i sortowaniem
1
Ankieta/quiz
Sortowanie danych, poziom 3, lekcja 3
Niedostępny
Sortowanie danych
Sortowanie danych
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION