cognity

TOP 50 zapytań SQL

Nauka języka SQL jest prostsza, niż mogłaby się wydawać, a jednocześnie znacząco zwiększa atrakcyjność na rynku pracy. Nie tylko ułatwi Ci pozyskiwanie informacji, ale również zapewni lepsze rozumienie aplikacji, z którymi pracujesz na co dzień.

18 sierpnia 2022
blog

Nauka języka SQL jest prostsza, niż mogłaby się wydawać, a jednocześnie znacząco zwiększa atrakcyjność na rynku pracy. Nie tylko ułatwi Ci pozyskiwanie informacji, ale również zapewni lepsze rozumienie aplikacji, z którymi pracujesz na co dzień.

Zaprezentowanie wiedzy na ten temat może stać się Twoim atutem na rozmowie kwalifikacyjnej. Umiejętność tworzenia zapytań ułatwi Ci też tworzenie własnych projektów, w których istnieje konieczność przechowywania danych i operacji na nich.

W tym artykule znajdziesz najważniejsze zapytania SQL oraz odpowiedzi na najczęściej zadawane pytania. Dowiedz się, jak sformułować ponad 50 podstawowych zapytań dzięki naszemu przekrojowemu przewodnikowi po języku zapytań SQL.

SQL to strukturalny język zapytań (ang. Structured Query Language), który pozwala na

komunikację z bazą danych – uporządkowanym i dostępnym zbiorem danych.

Być może obiły Ci się o uszy nazwy takie jak MySQL albo PostgreSQL? To przykłady systemów zarządzania relacyjnymi bazami danych. Relacyjnymi – ponieważ dane przechowywane są w tabelach, które mogą być połączone relacjami.

Wspomniane wcześniej systemy zarządzania relacyjnymi bazami danych, takie jak MySQL czy PostgreSQL, są doskonałymi przykładami narzędzi, z którymi SQL świetnie współpracuje. Dzięki umiejętności komunikacji z bazą danych za pomocą SQL, będziesz w stanie nie tylko efektywnie pozyskiwać informacje, ale także lepiej zrozumiesz strukturę i działanie aplikacji, z którymi pracujesz na co dzień.

Warto podkreślić, że zdolność formułowania zapytań SQL może znacząco zwiększyć twoją atrakcyjność w oczach pracodawców. Umiejętność ta staje się ważnym atutem podczas rozmowy kwalifikacyjnej, ponieważ pokazuje, że jesteś w stanie skutecznie manipulować danymi, co jest kluczowe w dzisiejszym środowisku biznesowym.

Język zapytań SQL pozwala na obsługę takich systemów – komunikuje się z nimi i zleca operacje na danych. Dzięki temu w szybki sposób, za pomocą jednego zapytania, możesz np. wybrać rekordy tabeli, które chcesz wyświetlić.

SELECT

SELECT pozwala na wyświetlenie tabeli wraz z zawartością. Zapytanie SELECT * from nazwa_tabeli da efekt w postaci całej tabeli

Jeśli z tej tabeli chcesz wybrać wszystkie osoby, które wykonują zawód księgowej, posłużysz się zapytaniem select:

Efekt takiego zapytania będzie następujący:

Jak możesz zauważyć, na potrzeby przykładu prezentujemy tabelę zawierającą cztery kolumny, czasem nazywane polami, oraz pięć wierszy – inaczej rekordów lub krotek. Przy tworzeniu tabeli definiujemy rodzaj danych, który ma się znajdować w danej kolumnie.

CREATE TABLE

Tabela z powyższej grafiki zawiera trzy kolumny o typie danych VARCHAR (tekst o podanej w nawiasie maksymalnej długości) oraz jedną kolumnę z INT (liczby całkowite). Zapytanie tworzące tę tabelę wygląda w ten sposób:

Zauważ, że przy opisie każdej kolumny pojawia się adnotacja NOT NULL, która oznacza, że przy wprowadzaniu danych nie może zabraknąć w niej treści. Używając podobnej adnotacji (ang. constraint) określisz klucz główny tabeli.

Czym jest klucz główny?

Klucz główny (ang. primary key) jednoznacznie identyfikuje wiersz tabeli. Kolumna oznaczona jako klucz główny nie może być pusta (NOT NULL) oraz musi zawierać unikalną dla danego rekordu wartość (UNIQUE) – czyli zawartość tej kolumny nie może się powtarzać pomiędzy wierszami.

Zazwyczaj kolumna PRIMARY_KEY zawiera wartość jednoznacznie identyfikującą dany wiersz w tabeli (ID). Dzięki temu nawet, gdy w systemie znajdzie się dwóch użytkowników o tych samych imionach lub nazwiskach, możemy ich jednoznacznie zidentyfikować korzystając z wartości zapisanej w tym polu.

Każda tabela może mieć tylko jeden klucz główny, ale może się on składać z kilku kolumn (na przykład w sytuacji, kiedy identyfikujemy transakcję, kluczem głównym może być ID kupującego oraz ID produktu).

Dodajmy klucz główny id_uzytkownicy do naszej tabeli:

ALTER TABLE

Aby dodać kolumnę do istniejącej tabeli definiujemy jej nazwę oraz docelowy typ danych. W poniższym poleceniu zastosowaliśmy dodatkowo dwie cechy tej kolumny:

  • AUTO_INCREMENT sprawi, że kolejne wiersze będą miały automatycznie nadany numer (licząc od 1)
  • PRIMARY KEY to adnotacja dodająca do tworzonej kolumny informację, że jest kluczem głównym

Po wykonaniu zapytania otrzymujemy tabelę z nową kolumną:

Usuwanie w SQL wykonuje się za pomocą trzech różnych komend.

DELETE

TRUNCATE

DROP

· usuwanie wierszy w tabeli

· przydatne w sytuacji, kiedy zależy nam na usunięciu konkretnych danych

· nie usuwa tabeli

· usuwanie wszystkich wierszy z tabeli, bez możliwości wyboru

· nie usuwa tabeli

· resetuje licznik, jeśli w tabeli jest kolumna AUTO INCREMENT

· usuwanie całej tabeli razem z zawartością

 

 

 

 

DROP TABLE

nazwa_tabeli

 

DELETE FROM

nazwa_tabeli WHERE warunek_usunięcia

 

TRUNCATE TABLE

nazwa_tabeli

W tym momencie możemy utworzyć tabelę, edytować ją i wyświetlać dane, które przechowuje nasza baza, oraz usuwać tabele i wiersze.

UPDATE

W niektórych przypadkach istnieje potrzeba grupowej zmiany wartości na inne. Jeśli nagle okazałoby się, że wszystkie księgowe z bazy zmieniły zawód na pracownice banku, to uaktualnimy zawartość tabeli za pomocą poniższego zapytania:

 

Aby wprowadzić informacje do naszej tabeli posłużymy się INSERT INTO.

INSERT INTO

Polecenia INSERT INTO można używać na dwa sposoby: wyszczególniając kolumny lub tego nie robiąc. Pierwszy sposób wymaga wyszczególnienia kolumn, w które wprowadzamy informacje. Jest przydatny, gdy nie dodajemy danych do wszystkich kolumn na raz – na przykład gdy przed chwilą dodaliśmy nową kolumnę pozbawioną adnotacji AUTO INCREMENT. Uwaga – wartość NULL dla zwykłych kolumn nie jest równa pozostawieniu pustego pola lub wpisaniu zera, ponieważ NULL oznacza wartość nieokreśloną, nieposiadającą określonego formatu liczbowego/słownego!

My skorzystamy z drugiej możliwości – na potrzeby następnych przykładów utworzymy tabelę hodowla_psow i wypełnimy ją informacjami.

Zapytanie INSERT INTO pozwala na dodanie wybranej ilości wierszy. Wymieniamy po przecinku wartości, które mają znaleźć się w konkretnych kolumnach, zgodnie z ich kolejnością w tabeli (patrz: zapytanie CREATE TABLE). W wypadku kolumny id_psa, podajemy wartość

NULL - ponieważ określiliśmy ją jako AUTO_INCREMENT, baza danych sama upewni się, że w tym miejscu znajdzie się kolejna liczba porządkowa.

Do zapytania możemy dodać komentarz SQL, który nie wpływa na efekt, ale może przekazywać dodatkowe informacje.

 

Optymalizacja zapytań SQL

Aby efekty wyszukiwania z bazy były bardziej użyteczne możemy precyzyjnie określić, jakich danych szukamy. Dzięki klauzulom, funkcjom i sortowaniu wyników możemy uzyskać potrzebne informacje dzięki jednemu, odpowiednio zbudowanemu zapytaniu. W tym celu używa się również podzapytań SQL.

Jednym ze sposobów na określenie w zapytaniu, jakich danych potrzebujemy, jest użycie klauzuli WHERE.

WHERE

Rozważaliśmy wcześniej przykład, w którym potrzebowaliśmy wybrać z tabeli wszystkie księgowe. Użyliśmy wtedy tej klauzuli, aby pokazać możliwości zapytania SELECT.

WHERE można łączyć w zapytaniach z operatorami OR i AND. Takie działanie może Ci się przydać, kiedy potrzebujesz w łatwy sposób wybrać wiersze spełniające jeden z wybranych przez Ciebie warunków lub oba jednocześnie.

OR

Wyobraź sobie taką sytuację: jesteś właścicielem hodowli psów. Potrzebujesz szybko wybrać z bazy dane wszystkich szczeniąt urodzonych przez dwie psie matki: Herę i Florę. W tym celu sformuujesz takie zapytanie:

AND

Przedstawię Ci teraz inny przykład. Dostajesz pytanie o dostępne do zakupu psy płci męskiej. Dzięki użyciu zapytania z AND szybko otrzymasz informację, który pies jest niezarezerwowany. Takie zapytanie mogłoby być skonstruowane tak, jak poniżej:

 

Aby wynik zapytania był bardziej przejrzysty wyszczególniliśmy kolumny, które chcemy zobaczyć. W efekcie dostarczy nam ono wyłącznie potrzebnych informacji:

Przed wszystkimi warunkami, zarówno przy AND, jak i przy OR możemy dodać NOT, co pozwoli nam wyświetlić bazę pozbawioną krotek spełniających warunek.

Co, jeśli klient szuka najmłodszego psa w hodowli? Możemy znaleźć dane zwierzęcia na dwa sposoby: za pomocą funkcji oraz sortowania wyników.

ORDER BY

Aby wprowadzić sortowanie wyników na końcu zapytania dodajemy ORDER BY, kolumnę, która ma być brana pod uwagę (w naszym przypadku będzie to data_urodzenia) i kolejność:

  • ASC, czyli malejąco
  • DESC, czyli rosnąco

Zapytaniem SQL spełniającym nasze potrzeby będzie:

 

Jego efekt będzie następujący:

Otrzymamy wszystkie psy spełniające nasze warunki posortowane od najmłodszego do najstarszego.

LIMIT

Możemy również wprowadzić limit wyników dodając na końcu zapytania frazę LIMIT i liczbę rekordów, które chcemy wyświetlić.

Czym są funkcje w SQL?

Jeśli nie są nam potrzebne dane wszystkich psów i interesuje nas wyłącznie ten najmłodszy, to łatwiej będzie skorzystać z funkcji. Pozwalają one na uzyskanie prostych informacji na temat tabeli. Przy ich użyciu można w szybki sposób otrzymać średnią, ilość wierszy, pierwszą/ostatnią wartość, maksymalną/minimalną wartość oraz sumę.

Wynik takiego zapytania to największa wartość w kolumnie data_urodzenia, czyli najmłodszy pies.

 

AS

Aby pozbyć się nagłówka MAX(data_urodzenia) możesz również wprowadzić tymczasowo utworzonej kolumnie alias i nazwać ją według własnej potrzeby. W tym celu dodasz na końcu AS i nową nazwę:

 

Pozostałe funkcje możesz wprowadzić w zapytania w analogiczny sposób.

AVG()

Zwraca średnią z podanej w nawiasie kolumny

COUNT()

Zwraca ilość wierszy

FIRST()

Zwraca wartość pierwszego wiersza

LAST()

Zwraca wartość ostatniego

wiersza

MAX()

Zwraca wartość

maksymalną

MIN()

Zwraca wartość minimalną

SUM()

Zwraca sumę wartości w

kolumnie

Czym są joiny?

Zapytania JOIN są używane do roboczego łączenia danych z dwóch lub więcej tabel, bazując na kolumnie zawierającej wspólne dane. Są cztery rodzaje joinów:

  • INNER JOIN – najpopularniejszy model łączenia tabel w SQL. Zwraca dane, które spełniają określony warunek, z obu

 

  • LEFT JOIN – zwraca wszystkie krotki z lewej tabeli, a z prawej tabeli wybiera te, które spełniają

 

  • RIGHT JOIN – analogicznie do LEFT JOIN; zwraca wszystkie dane z prawej tabeli, a z lewej tylko te, które spełniają

  • FULL OUTER JOIN – łączy tabele zwracając wszystkie

Aby zaprezentować zastosowanie JOIN powrócimy do przykładu bazy danych hodowli psów. Przy prowadzeniu hodowli trzeba kontrolować zdrowie szczeniąt, a każdy pies powinien mieć przeprowadzone odrobaczenie i szczepienie. Aby kontrolować terminy tych wizyt dla różnych szczeniąt wprowadźmy nową tabelę zdrowie_psow.

REFERENCES

Musimy wyznaczyć, na jakiej podstawie tabele mają się łączyć. W tym celu do nowoutworzonej tabeli dodajmy klucz obcy id, który pochodzi z tabeli hodowla_psów. Teraz tabele pozostają ze sobą w relacji, a kolumna id w tabeli zdrowie_psow odnosi się do zawartości kolumny id_psa w tabeli hodowla_psów.

 

Użyjemy zapytania INNER JOIN, aby znaleźć informacje na temat tego, które psy są zaszczepione, a które jeszcze nie:

Jak tworzyć podzapytania SQL?

Podzapytanie, inaczej zapytanie zagnieżdżone, jest umieszczone wewnątrz innego zapytania i oddzielone parą nawiasów. Pozwala na skrócenie pracy, ponieważ uzyskujesz potrzebne dane w efekcie jednego zapytania, kiedy do uzyskania ich potrzeba np. wyniku działania funkcji.

Pamiętaj, że idealne zapytane jest jak najprostsze (przy założeniu, że daje oczekiwany rezultat). Umiejetność stosowania zarówno konstrukcji JOIN, jak i podzapytań pozwala na dobranie odpowiedniej metody do zadania, chociaż niektóre zadania możemy wykonać używając obu tych sposobów.

W hodowli psów (z naszego przykładu) przechowujesz informacje na temat wag szczeniąt w różnych okresach. Dane są wprowadzone do bazy wagi_psow, a jeden wiersz to jednorazowe zważenie psa. 

 

Odpowiednio zbudowane zapytanie zwróci nam informacje na temat średniej wagi każdego z psów w formie tabeli z nagłówkami imie i srednia_waga.

 

Warto dodać, że w SQL istnieje również funkcja ROUND(), która pozwala na zaokrąglenie wyników.

Czym jest normalizacja?

To proces minimalizowania powtarzalności danych dzięki odpowiedniej organizacji bazy, pól i tabel. Służy usprawnieniu przechowywania informacji, zmniejszeniu ilości problemów logistycznych i anomalii. Podczas normalizacji nie usuwamy danych, tylko organizujemy je w bardziej optymalnych jednostkach. Odwrotny proces nazywamy denormalizacją.

Nasza przykładowa baza hodowli psów przechowuje teraz dane na temat faktu szczepienia albo odrobaczenia razem z datami, w jednej tabeli. Nie jest to optymalne, ponieważ powtarzamy informację o braku wykonania danego zabiegu.

W przypadku braku zabiegu wpisujemy „nie” w rubrykę czy_szczepienie/czy_odrobaczenie, a później nie wprowadzamy daty. To powtarzanie informacji jest niepotrzebne – te same dane zajmują przez to więcej miejsca.

Nasza tabela wymaga uproszczenia, czyli normalizacji. Możemy ją osiągnąć np. poprzez dodanie kolumny id_zabiegu do tabeli. Później możemy utworzyć kolejną tabelę zabiegi_psów z kluczem obcym id_zabiegu i datą. Do tej tabeli nie musimy wprowadzać pustych rekordów, więc pozbywamy się problematyczych powtórzonych informacji.

Normalizowanie jest doprowadzaniem naszych baz danych do określonych postaci normalnych, a każda z nich ma własne wymagania. Postacie normalne wyższego rzędu zawierają w sobie warunki postaci niższych rzędów, więc baza znormalizowana do 4NF (czwartej postaci normalnej) jest jednocześnie znormalizowana do 1NF, 2NF, 3NF. Normalizacja to wyjątkowo rozległy temat, więc zaprezentowany przykład ilustruje jedynie wycinek tego zagadnienia.

Przedstawione w artykule informacje to przekrojowy przewodnik po różnych możliwościach, które daje język zapytań SQL. Możesz poszerzyć swoją wiedzę na ten temat korzystając z szerokiej oferty internetowych kursów i szkoleń. Życzymy powodzenia zarówno w dalszej nauce, jak i na rozmowie kwalifikacyjnej!

 

Podsumowanie

Podsumowując naszą podróż przez świat zapytań SQL, zdobyliśmy głębsze zrozumienie tego potężnego języka zapytań bazodanowych. Zapytania SQL pozwalają nam nie tylko na prostą manipulację danymi, ale również na skomplikowane operacje dzięki zastosowaniu podzapytań i joinów.

Podzapytania stanowią istotny element w naszym narzędziu SQL, umożliwiając nam tworzenie bardziej elastycznych i rozbudowanych zapytań. Mogą być używane w różnych kontekstach, na przykład do filtrowania danych, obliczeń agregujących lub nawet wstawiania wartości.

Joiny natomiast pozwalają nam łączyć dane z różnych tabel, tworząc spójne i kompleksowe wyniki. Wspomniane zostały różne typy joinów, takie jak INNER JOIN, LEFT JOIN, RIGHT JOIN i FULL JOIN, które pozwalają na dostosowanie zapytań do naszych konkretnych potrzeb.

Optymalizacja zapytań SQL to kluczowy element dbania o wydajność systemów bazodanowych. Poprzez odpowiednie indeksowanie, unikanie zbędnych operacji i dbanie o klarowność struktury zapytań, możemy znacznie przyspieszyć dostęp do danych.

Nie zapomnijmy także o roli klucza głównego w bazach danych. Klucz główny to unikalny identyfikator dla każdego rekordu w tabeli, co gwarantuje spójność danych oraz ułatwia operacje łączenia tabel i indeksowanie. Dobrze zaprojektowany klucz główny jest kluczowym elementem efektywnego zarządzania bazą danych.

Wraz z opanowaniem tych koncepcji, możemy śmiało eksplorować bardziej zaawansowane aspekty SQL i wykorzystywać go do rozwiązywania nawet najbardziej skomplikowanych problemów związanych z bazami danych. Pamiętajmy, że umiejętność tworzenia optymalnych zapytań SQL to ważny atut każdego programisty i administratora baz danych. Warto więc systematycznie doskonalić nasze umiejętności w tym obszarze, aby efektywnie wykorzystywać potencjał baz danych i tworzyć wydajne aplikacje.

Kurs Hurtownia danych na platformie MS SQL Server - tworzenie hurtowni danych i wykorzystanie relacyjnych bazy danych oraz raportów
początkujący
cena
od 4100 zł + VAT dla szkoleń otwartych
szkolenia zamknietę
Zapytaj o cenę dla szkoleń zamkniętych
Kurs Hurtownia danych na platformie MS SQL Server...
Kurs NoSQL - zarządzanie bazami danych dla programistów, architektów oraz administratorów
średnio zaawansowany
cena
od 4100 zł + VAT dla szkoleń otwartych
szkolenia zamknietę
Zapytaj o cenę dla szkoleń zamkniętych
Kurs NoSQL - zarządzanie bazami danych dla programistów...
Kurs SQL podstawowy - praktyczne wykorzystanie języka SQL i budowa baz danych
początkujący
cena
od 1290 zł + VAT dla szkoleń otwartych
szkolenia zamknietę
Zapytaj o cenę dla szkoleń zamkniętych
Kurs SQL podstawowy - praktyczne wykorzystanie języka SQL...
Kurs SQL - praktyczne stosowanie języka SQL i budowa funkcjonalnych baz danych
początkujący
cena
od 1090 zł + VAT dla szkoleń otwartych
szkolenia zamknietę
Zapytaj o cenę dla szkoleń zamkniętych
Kurs SQL - praktyczne stosowanie języka SQL...
Kurs SQL - praktyczna obsługa dużych baz danych i usprawnienie procesów biznesowych
początkujący
cena
od 850 zł + VAT dla szkoleń otwartych
szkolenia zamknietę
Zapytaj o cenę dla szkoleń zamkniętych
Kurs SQL - praktyczna obsługa dużych baz danych...
Kurs SQL - przegląd narzędzi analitycznych, wizualizacja i projektowanie baz danych
początkujący
cena
od 3500 zł + VAT dla szkoleń otwartych
szkolenia zamknietę
Zapytaj o cenę dla szkoleń zamkniętych
Kurs SQL - przegląd narzędzi analitycznych, wizualizacja i projektowanie...
Kurs SQL zaawansowany - wykorzystanie zaawansowanych opcji funkcji, procedur i zmiennych
zaawansowany
cena
od 3500 zł + VAT dla szkoleń otwartych
szkolenia zamknietę
Zapytaj o cenę dla szkoleń zamkniętych
Kurs SQL zaawansowany - wykorzystanie zaawansowanych opcji...
Kurs SQL - podstawy relacyjnych baz danych i wirtualizacja
początkujący
cena
od 3500 zł + VAT dla szkoleń otwartych
szkolenia zamknietę
Zapytaj o cenę dla szkoleń zamkniętych
Kurs SQL - podstawy relacyjnych baz danych i wirtualizacja...
icon

Formularz kontaktowyContact form

Imię *Name
NazwiskoSurname
Adres e-mail *E-mail address
Telefon *Phone number
UwagiComments