Fiszki Online SQL (Preview)
Darmowy podgląd 15 z 105 dostępnych pytań
Podstawy SQL
Czym jest SQL i co oznacza ten skrót?
SQL to skrót od Structured Query Language (Strukturalny Język Zapytań). Jest to standardowy język programowania przeznaczony do zarządzania danymi przechowywanymi w relacyjnych bazach danych. SQL umożliwia wykonywanie różnych operacji na danych, takich jak:
- Tworzenie i modyfikowanie struktur bazy danych
- Wstawianie, aktualizowanie i usuwanie danych
- Wykonywanie zapytań w celu pobierania informacji
- Zarządzanie uprawnieniami użytkowników
Źródła:
↑ Powrót na góręJakie są główne typy komend SQL (DDL, DML, DCL, TCL)?
DDL (Data Definition Language) - Język Definicji Danych:
- Służy do tworzenia i modyfikowania struktury bazy danych
- Komendy:
CREATE,ALTER,DROP,TRUNCATE
DML (Data Manipulation Language) - Język Manipulacji Danych:
- Umożliwia operacje na danych w tabelach
- Komendy:
SELECT,INSERT,UPDATE,DELETE
DCL (Data Control Language) - Język Kontroli Danych:
- Zarządza uprawnieniami i dostępem do danych
- Komendy:
GRANT,REVOKE
TCL (Transaction Control Language) - Język Kontroli Transakcji:
- Kontroluje wykonywanie transakcji w bazie danych
- Komendy:
COMMIT,ROLLBACK,SAVEPOINT
Źródła:
↑ Powrót na góręCzym jest klucz główny i dlaczego jest ważny?
Klucz główny (Primary Key) to kolumna lub kombinacja kolumn, która jednoznacznie identyfikuje każdy rekord w tabeli.
Właściwości klucza głównego:
- Unikalność - każda wartość musi być unikalna w tabeli
- Nie może być NULL - musi zawierać wartość
- Niezmienność - wartość nie powinna się zmieniać po utworzeniu
- Jeden na tabelę - każda tabela może mieć tylko jeden klucz główny
Znaczenie klucza głównego:
- Zapewnia integralność danych
- Umożliwia tworzenie relacji między tabelami (klucze obce)
- Automatycznie tworzy indeks dla lepszej wydajności
- Służy do replikacji i synchronizacji danych
- Niezbędny dla niektórych operacji (np. UPDATE, DELETE w niektórych systemach)
Źródła:
↑ Powrót na góręPodstawowe zapytania SQL
Napisz zapytanie, które wybierze wszystkie kolumny z tabeli o nazwie "employees".
SELECT * FROM employees;
Znak gwiazdki (*) oznacza wybór wszystkich kolumn z tabeli. Jest to wygodny sposób na pobranie pełnych rekordów, jednak w środowiskach produkcyjnych zaleca się jawne wyspecyfikowanie potrzebnych kolumn dla lepszej wydajności.
Źródła:
↑ Powrót na góręJaki jest cel klauzuli WHERE?
Klauzula WHERE służy do filtrowania rekordów w zapytaniach SQL. Pozwala na określenie warunków, które muszą być spełnione, aby rekord został uwzględniony w wynikach zapytania.
SELECT * FROM employees WHERE department = 'IT';
SELECT * FROM employees WHERE salary > 50000;
SELECT * FROM employees WHERE hire_date >= '2020-01-01';
Klauzula WHERE może zawierać operatory porównania (=, >, <, >=, <=, <>), operatory logiczne (AND, OR, NOT) oraz funkcje.
Źródła:
↑ Powrót na góręJaka jest różnica między klauzulami WHERE i HAVING?
| Aspekt | WHERE | HAVING |
|---|---|---|
| Moment filtrowania | Przed grupowaniem | Po grupowaniu |
| Zastosowanie | Filtruje pojedyncze wiersze | Filtruje grupy |
| Funkcje agregujące | Nie może używać funkcji agregujących | Może używać funkcji agregujących |
| Wydajność | Bardziej wydajne | Mniej wydajne |
-- WHERE - filtruje przed grupowaniem
SELECT department, COUNT(*)
FROM employees
WHERE salary > 40000
GROUP BY department;
-- HAVING - filtruje po grupowaniu
SELECT department, COUNT(*)
FROM employees
GROUP BY department
HAVING COUNT(*) > 5;
-- Kombinacja obu
SELECT department, AVG(salary)
FROM employees
WHERE hire_date >= '2020-01-01'
GROUP BY department
HAVING AVG(salary) > 60000;
Źródła:
↑ Powrót na góręFiltrowanie i manipulacja danych w SQL
Jakie są różne operatory porównania dostępne w SQL?
SQL oferuje następujące operatory porównania:
=- równość<>lub!=- nierówność<- mniejsze niż>- większe niż<=- mniejsze lub równe>=- większe lub równeIS NULL- sprawdza wartości NULLIS NOT NULL- sprawdza wartości różne od NULLBETWEEN- sprawdza zakres wartościIN- sprawdza przynależność do zbioru wartościLIKE- dopasowywanie wzorców tekstowychNOT- negacja (może być używana z innymi operatorami)
-- Przykłady użycia
SELECT * FROM employees WHERE salary > 50000;
SELECT * FROM products WHERE category IN ('Electronics', 'Books');
SELECT * FROM orders WHERE order_date BETWEEN '2024-01-01' AND '2024-12-31';
Źródła:
↑ Powrót na góręJaka jest różnica między operatorami IN i EXISTS?
Operator IN:
- Sprawdza czy wartość kolumny znajduje się w określonej liście wartości lub wynikach podzapytania
- Porównuje wartości bezpośrednio
- Może zwracać
NULLjeśli wartość w kolumnie toNULL
Operator EXISTS:
- Sprawdza czy podzapytanie zwraca co najmniej jeden rekord
- Nie porównuje wartości, tylko sprawdza istnienie rekordów
- Zwraca
TRUElubFALSE, nigdyNULL
-- Przykład IN
SELECT * FROM customers
WHERE country IN ('USA', 'Canada', 'Mexico');
SELECT * FROM customers
WHERE customer_id IN (SELECT customer_id FROM orders WHERE order_date > '2024-01-01');
-- Przykład EXISTS
SELECT * FROM customers c
WHERE EXISTS (SELECT 1 FROM orders o WHERE o.customer_id = c.customer_id);
-- NOT EXISTS
SELECT * FROM customers c
WHERE NOT EXISTS (SELECT 1 FROM orders o WHERE o.customer_id = c.customer_id);
Kluczowe różnice:
- Wydajność:
EXISTSczęsto jest szybszy dla dużych zbiorów danych - Obsługa NULL:
INmoże dawać nieoczekiwane rezultaty zNULL,EXISTSnie - Korelacja:
EXISTSpozwala na korelowane podzapytania
Źródła:
↑ Powrót na góręCzym są wildcards i jak się ich używa?
Wildcards to znaki specjalne używane w SQL do dopasowywania wzorców tekstowych, głównie z operatorem LIKE.
Podstawowe wildcards:
%(procent) - zastępuje zero lub więcej znaków:
SELECT * FROM customers WHERE customer_name LIKE 'A%'; -- zaczyna się od A
SELECT * FROM customers WHERE customer_name LIKE '%son'; -- kończy się na son
SELECT * FROM customers WHERE customer_name LIKE '%and%'; -- zawiera and
_(podkreślenie) - zastępuje dokładnie jeden znak:
SELECT * FROM customers WHERE customer_name LIKE 'J_hn'; -- John, Jahn, etc.
SELECT * FROM products WHERE product_code LIKE 'A_C'; -- ABC, AXC, A5C, etc.
[](nawiasy kwadratowe) - dopasowuje jeden znak z zestawu (SQL Server, Access):
SELECT * FROM customers WHERE customer_name LIKE '[ABC]%'; -- zaczyna się od A, B lub C
SELECT * FROM products WHERE product_code LIKE '[0-9][0-9]'; -- dwie cyfry
[^]lub[!]- dopasowuje znaki NIE z zestawu:
SELECT * FROM customers WHERE customer_name LIKE '[^ABC]%'; -- NIE zaczyna się od A, B lub C
Kombinowanie wildcards:
-- Nazwa z co najmniej 5 znakami, zaczyna się od A
SELECT * FROM customers WHERE customer_name LIKE 'A____%';
-- Email z domeną .com
SELECT * FROM users WHERE email LIKE '%.com';
-- Kod produktu: litera, cyfra, litera
SELECT * FROM products WHERE product_code LIKE '_[0-9]_';
Źródła:
↑ Powrót na góręJoiny i relacje SQL
Jakie są różne typy JOINów w SQL?
W SQL istnieje kilka typów operatorów JOIN, które pozwalają na łączenie danych z różnych tabel:
- INNER JOIN - zwraca tylko te rekordy, które mają dopasowania w obu tabelach
- LEFT JOIN (LEFT OUTER JOIN) - zwraca wszystkie rekordy z lewej tabeli oraz dopasowane z prawej
- RIGHT JOIN (RIGHT OUTER JOIN) - zwraca wszystkie rekordy z prawej tabeli oraz dopasowane z lewej
- FULL OUTER JOIN - zwraca wszystkie rekordy z obu tabel, niezależnie od dopasowań
- CROSS JOIN - zwraca iloczyn kartezjański dwóch tabel
- SELF JOIN - łączenie tabeli ze sobą samą
Źródła:
↑ Powrót na góręKiedy użyłbyś RIGHT JOIN zamiast LEFT JOIN?
RIGHT JOIN używa się rzadko, ponieważ można go zawsze zastąpić LEFT JOIN poprzez zamianę kolejności tabel. Jednak może być przydatny w następujących sytuacjach:
- Zachowanie logicznej kolejności tabel - gdy chcemy zachować określoną kolejność tabel w zapytaniu ze względów czytelności
- Praca z istniejącym kodem - gdy modyfikujemy istniejące zapytanie i nie chcemy zmieniać kolejności tabel
- Specyficzne wymagania biznesowe - gdy logika biznesowa wymaga określonej perspektywy danych
-- Zamiast zmieniać kolejność tabel
SELECT products.name, categories.category_name
FROM products
RIGHT JOIN categories ON products.category_id = categories.id;
-- Można użyć LEFT JOIN z zamienioną kolejnością
SELECT products.name, categories.category_name
FROM categories
LEFT JOIN products ON products.category_id = categories.id;
Źródła:
↑ Powrót na góręJak połączyć tabelę ze sobą samą (self-join)?
Self-join to technika łączenia tabeli ze sobą samą przy użyciu aliasów. Jest przydatny przy pracy z hierarchicznymi danymi lub gdy potrzebujemy porównać wiersze w tej samej tabeli.
Przykłady zastosowań:
- Struktury hierarchiczne - pracownicy i ich przełożeni
- Porównania w obrębie tabeli - znajdowanie duplikatów lub podobnych rekordów
- Relacje typu rodzic-dziecko - kategorie i podkategorie
-- Znalezienie pracowników i ich przełożonych
SELECT
e1.name AS employee_name,
e2.name AS manager_name
FROM employees e1
INNER JOIN employees e2 ON e1.manager_id = e2.id;
-- Znajdowanie produktów w tej samej kategorii cenowej
SELECT
p1.name AS product1,
p2.name AS product2,
p1.price
FROM products p1
INNER JOIN products p2 ON p1.price_range = p2.price_range
WHERE p1.id < p2.id; -- Unikanie duplikatów
Źródła:
↑ Powrót na góręFunkcje agregujące i grupowanie w SQL
Czym są funkcje agregujące? Wymień najczęściej używane.
Funkcje agregujące to specjalne funkcje SQL, które wykonują obliczenia na zestawie wierszy i zwracają pojedynczą wartość. Służą do podsumowywania i analizowania danych w tabelach.
Najczęściej używane funkcje agregujące:
- COUNT() - zlicza liczbę wierszy lub wartości nie-NULL w kolumnie
- SUM() - oblicza sumę wartości numerycznych
- AVG() - oblicza średnią arytmetyczną wartości numerycznych
- MAX() - znajduje największą wartość w zbiorze
- MIN() - znajduje najmniejszą wartość w zbiorze
- GROUP_CONCAT() / STRING_AGG() - łączy wartości tekstowe z wielu wierszy
Źródła:
↑ Powrót na góręJaki jest cel klauzuli HAVING?
Klauzula HAVING służy do filtrowania grup utworzonych przez GROUP BY na podstawie warunków zastosowanych do wyników funkcji agregujących. Jest to odpowiednik WHERE dla zagregowanych danych.
SELECT department, AVG(salary) as avg_salary
FROM employees
GROUP BY department
HAVING AVG(salary) > 50000;
Różnice między WHERE a HAVING:
WHEREfiltruje wiersze przed grupowaniemHAVINGfiltruje grupy po wykonaniu GROUP BYWHEREnie może używać funkcji agregującychHAVINGmoże używać funkcji agregujących
Kolejność wykonywania:
- FROM
- WHERE
- GROUP BY
- HAVING
- SELECT
- ORDER BY
Źródła:
↑ Powrót na góręJaka jest różnica między COUNT(*) i COUNT(column_name)?
COUNT(*):
- Zlicza wszystkie wiersze w tabeli lub grupie
- Uwzględnia wiersze z wartościami NULL
- Jest zazwyczaj szybsze w wykonaniu
COUNT(column_name):
- Zlicza tylko wiersze, gdzie określona kolumna ma wartość nie-NULL
- Ignoruje wartości NULL w danej kolumnie
- Może być wolniejsze od COUNT(*)
-- Przykład różnic
CREATE TABLE example (
id INT,
name VARCHAR(50)
);
INSERT INTO example VALUES
(1, 'John'),
(2, NULL),
(3, 'Jane');
SELECT
COUNT(*) as total_rows, -- Wynik: 3
COUNT(name) as non_null_names, -- Wynik: 2
COUNT(id) as non_null_ids -- Wynik: 3
FROM example;
Kiedy używać którego:
- Użyj
COUNT(*)gdy chcesz policzyć wszystkie wiersze - Użyj
COUNT(column_name)gdy chcesz policzyć tylko wiersze z wartościami w konkretnej kolumnie
Źródła:
↑ Powrót na górę