// pytania i odpowiedzi SQL
Pytania rekrutacyjne z SQL — od podstaw, kluczy i relacji przez JOIN-y i podzapytania, indeksy i widoki, normalizację, ACID, aż po procedury, triggery i CTE. Kliknij pytanie żeby zobaczyć odpowiedź, oznacz ✓ gdy je znasz.
01
Czym jest SQL?
✓▶
SQL (Structured Query Language) to język do zarządzania relacyjnymi bazami danych. Używamy go do tworzenia, modyfikowania i usuwania struktur baz danych (DDL), manipulowania danymi (DML) oraz kontroli dostępu (DCL).
SQL pojawił się w 1974 roku. W 1986 stał się standardem ANSI, a w 1987 — ISO. Dziś jest podstawowym językiem wszystkich relacyjnych DBMS: MySQL, SQL Server, PostgreSQL, Oracle.
02
Jakie są podzbiory SQL (DDL, DML, DCL)?
✓▶
- DDL (Data Definition Language) — definiuje strukturę bazy danych: CREATE, ALTER, DROP, TRUNCATE;
- DML (Data Manipulation Language) — manipuluje danymi: SELECT, INSERT, UPDATE, DELETE;
- DCL (Data Control Language) — kontroluje dostęp: GRANT, REVOKE;
- TCL (Transaction Control Language) — zarządza transakcjami: COMMIT, ROLLBACK, SAVEPOINT.
03
Czym jest DBMS a czym RDBMS?
✓▶
- DBMS (Database Management System) — system zarządzania bazą danych. Pośredniczy między użytkownikiem a danymi, umożliwiając ich tworzenie, modyfikowanie i pobieranie. Przykłady: pliki flat, XMLdb.
- RDBMS (Relational DBMS) — DBMS oparty na modelu relacyjnym. Dane przechowywane w powiązanych tabelach, relacje przez klucze. Przykłady: MySQL, SQL Server, PostgreSQL, Oracle.
04
Czym są tabele i pola (kolumny) w bazie danych?
✓▶
Tabela to podstawowa struktura przechowywania danych w RDBMS — dwuwymiarowa siatka składająca się z wierszy i kolumn.
- Kolumny (pola) — pionowe; definiują typ i strukturę danych (np. id INT, name VARCHAR(100));
- Wiersze (rekordy) — poziome; każdy wiersz to jeden rekord danych.
Tabela ma zawsze stałą liczbę kolumn (zdefiniowaną schemą) ale może zawierać dowolną liczbę wierszy.
05
Czy SQL wspiera programowanie proceduralne?
✓▶
Standardowy SQL (ANSI) nie ma pętli ani rozbudowanych instrukcji warunkowych — jest językiem deklaratywnym (opisujesz CO chcesz, nie JAK). Jednak każdy RDBMS rozszerza SQL o elementy proceduralne:
- T-SQL (Microsoft SQL Server) — IF/ELSE, WHILE, zmienne;
- PL/SQL (Oracle) — pełnoprawny język proceduralny;
- PL/pgSQL (PostgreSQL) — podobny do PL/SQL.
06
Jakie są różnice między SQL, MySQL a SQL Server?
✓▶
- SQL — język standardowy (ANSI/ISO) do komunikacji z relacyjnymi bazami danych;
- MySQL — open-source RDBMS (Oracle) używający SQL jako języka. Popularny w aplikacjach webowych;
- SQL Server (MSSQL) — RDBMS firmy Microsoft. Używa dialektu T-SQL. Popularny w środowiskach .NET i korporacyjnych.
Zarówno MySQL jak i SQL Server to systemy zarządzania bazami danych — SQL to język którym się z nimi komunikujemy.
07
Jakie są różnice między SQL a PL/SQL?
✓▶
- SQL — deklaratywny, wykonuje jedną kwerendę na raz, źródło danych;
- PL/SQL (Oracle) — proceduralny dialekt SQL, wykonuje cały blok kodu, dodaje pętle, warunki, wyjątki;
- Instrukcja SQL może być osadzona w PL/SQL — odwrotnie nie zadziała;
- PL/SQL jest platformą wyświetlającą dane zwrócone przez SQL.
08
Czym jest klucz główny (PRIMARY KEY)?
✓▶
Klucz główny to kolumna (lub zestaw kolumn) jednoznacznie identyfikująca każdy wiersz w tabeli. Gwarantuje unikalność i nie może zawierać wartości NULL. Każda tabela może mieć tylko jeden klucz główny.
CREATE TABLE Employees (
Id INT PRIMARY KEY,
Name VARCHAR(100) NOT NULL,
Email VARCHAR(200) UNIQUE
);
09
Czym jest klucz obcy (FOREIGN KEY)?
✓▶
Klucz obcy to kolumna (lub zestaw kolumn) w tabeli podrzędnej, która odwołuje się do klucza głównego tabeli nadrzędnej. Tworzy i egzekwuje relację między tabelami i zapewnia integralność referencyjną.
CREATE TABLE Orders (
OrderId INT PRIMARY KEY,
CustomerId INT,
FOREIGN KEY (CustomerId) REFERENCES Customers(Id)
);
10
Czym jest klucz unikalny (UNIQUE KEY) i czym różni się od PRIMARY KEY?
✓▶
Klucz unikalny gwarantuje że kolumna (lub zestaw kolumn) nie zawiera duplikatów. Różnice od PRIMARY KEY:
- Klucz unikalny może zawierać jedną wartość NULL — PRIMARY KEY nie może;
- Tabela może mieć wiele kluczy unikalnych, ale tylko jeden PRIMARY KEY;
- PRIMARY KEY domyślnie tworzy indeks klastrowany, UNIQUE — nieklastrowany.
11
Czym są ograniczenia (Constraints) w SQL?
✓▶
Ograniczenia to reguły wymuszające poprawność danych w kolumnie lub tabeli. Dwa poziomy: na poziomie kolumny i na poziomie tabeli.
CREATE TABLE Products (
Id INT PRIMARY KEY, -- unikalny + NOT NULL
Name VARCHAR(100) NOT NULL, -- nie może być NULL
Price DECIMAL CHECK (Price > 0),-- warunek
Category VARCHAR(50) DEFAULT 'General' -- wartość domyślna
);
12
Jaka jest różnica między NULL, zerem a wartością pustą?
✓▶
- NULL — brak wartości: "niedostępna, nieprzypisana, nieznana". Nie jest równe niczemu — nawet samemu sobie (NULL = NULL → FALSE);
- 0 — konkretna wartość liczbowa zero;
- '' (pusty string) — istniejąca wartość tekstowa o długości 0.
SELECT * FROM t WHERE col IS NULL; -- prawidłowo
SELECT * FROM t WHERE col = NULL; -- ZAWSZE false!
13
Jakie są podstawowe operatory w SQL?
✓▶
- Arytmetyczne — +, -, *, /, %;
- Porównania — =, !=, <>, <, >, <=, >=;
- Logiczne — AND, OR, NOT, ALL, ANY, BETWEEN, IN, LIKE, EXISTS, UNIQUE, IS NULL;
- Zbiorów — UNION, UNION ALL, INTERSECT, MINUS/EXCEPT.
14
Jaka jest różnica między operatorami BETWEEN a IN?
✓▶
-- BETWEEN — zakres wartości (włącznie z granicami)
SELECT * FROM Orders
WHERE Amount BETWEEN 100 AND 500;
-- IN — konkretna lista wartości
SELECT * FROM Products
WHERE Category IN ('Electronics', 'Books', 'Toys');
-- NOT IN — wykluczenie
WHERE Status NOT IN ('Cancelled', 'Refunded')
15
Jakie są typy JOIN w SQL?
✓▶
- INNER JOIN — tylko wiersze z dopasowaniem w obu tabelach;
- LEFT (OUTER) JOIN — wszystkie wiersze z lewej tabeli + dopasowania z prawej (brak → NULL);
- RIGHT (OUTER) JOIN — wszystkie wiersze z prawej tabeli + dopasowania z lewej;
- FULL (OUTER) JOIN — wszystkie wiersze z obu tabel (NULL tam gdzie brak dopasowania);
- CROSS JOIN — iloczyn kartezjański (każdy wiersz z każdym);
- SELF JOIN — tabela łączona ze sobą (np. hierarchie).
16
Czym jest INNER JOIN i jak go użyć?
✓▶
INNER JOIN zwraca tylko te wiersze gdzie istnieje dopasowanie w obu tabelach. Wiersze bez dopasowania są pomijane.
SELECT e.Name, d.DeptName
FROM Employees e
INNER JOIN Departments d ON e.DeptId = d.Id;
-- Tylko pracownicy którzy mają przypisany dział
17
Czym są GROUP BY i HAVING?
✓▶
GROUP BY grupuje wiersze o tych samych wartościach w określonej kolumnie — używane z funkcjami agregującymi (COUNT, SUM, AVG, MIN, MAX). HAVING filtruje grupy (jak WHERE ale dla agregatów).
SELECT DeptId, COUNT(*) AS EmpCount, AVG(Salary) AS AvgSal
FROM Employees
GROUP BY DeptId
HAVING AVG(Salary) > 5000;
-- Działy ze średnią pensją powyżej 5000
Kolejność klauzul: WHERE → GROUP BY → HAVING → ORDER BY
18
Czym są podzapytania (subqueries)?
✓▶
Podzapytanie to zapytanie zagnieżdżone wewnątrz innego zapytania. Może wystąpić w klauzulach WHERE, FROM, SELECT lub HAVING.
-- Podzapytanie w WHERE
SELECT Name, Salary
FROM Employees
WHERE Salary > (SELECT AVG(Salary) FROM Employees);
-- Podzapytanie skorelowane (używa wartości z zewnętrznego zapytania)
SELECT e.Name
FROM Employees e
WHERE EXISTS (SELECT 1 FROM Orders o
WHERE o.EmpId = e.Id);
19
Jakie operatory zbiorów występują w SQL?
✓▶
-- UNION — suma (bez duplikatów)
SELECT Id FROM Customers
UNION
SELECT Id FROM Suppliers;
-- UNION ALL — suma (z duplikatami, szybszy)
UNION ALL
-- INTERSECT — część wspólna
INTERSECT
-- EXCEPT / MINUS — różnica (Oracle używa MINUS)
EXCEPT
Wszystkie zapytania muszą mieć tę samą liczbę kolumn i zgodne typy danych.
20
Napisz SQL zwracający pracownika o 3. najwyższej pensji.
✓▶
-- SQL Server / MySQL 8+ (TOP lub LIMIT)
SELECT TOP 1 Salary
FROM (
SELECT TOP 3 Salary
FROM Employees
ORDER BY Salary DESC
) sub
ORDER BY Salary ASC;
-- Elegancko z funkcją okna (SQL Server, PostgreSQL)
SELECT Name, Salary
FROM (
SELECT Name, Salary,
DENSE_RANK() OVER (ORDER BY Salary DESC) AS rnk
FROM Employees
) r
WHERE rnk = 3;
21
Czy można sortować przy użyciu aliasu kolumny?
✓▶
Tak. Alias kolumny można użyć w klauzuli ORDER BY — jest ona ewaluowana po SELECT, więc aliasy są już znane. Nie można używać aliasów w WHERE lub HAVING (ewaluowane przed SELECT).
SELECT FirstName + ' ' + LastName AS FullName,
Salary * 12 AS AnnualSalary
FROM Employees
ORDER BY AnnualSalary DESC; -- alias działa tutaj
22
Czym jest indeks w SQL i po co go używamy?
✓▶
Indeks to struktura danych przyspieszająca wyszukiwanie wierszy w tabeli — jak spis treści w książce. Zmniejsza liczbę stron danych przeskanowanych przez kwerendę.
CREATE INDEX idx_emp_name ON Employees(LastName);
CREATE UNIQUE INDEX idx_email ON Employees(Email);
-- Sprawdzenie indeksów (SQL Server):
SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID('Employees');
Indeksy przyspieszają SELECTy ale spowalniają INSERT/UPDATE/DELETE — dodają narzut na utrzymanie struktury.
23
Jakie są typy indeksów w SQL?
✓▶
- Unikalny (UNIQUE) — wartości kolumny nie mogą się powtarzać;
- Klastrowany (Clustered) — fizycznie sortuje wiersze tabeli; max 1 na tabelę; tworzony automatycznie dla PRIMARY KEY;
- Nieklastrowany (Non-Clustered) — oddzielna struktura z referencjami; max 999 na tabelę; tworzony automatycznie dla UNIQUE;
- Złożony (Composite) — obejmuje wiele kolumn;
- Funkcyjny — oparty na wyrażeniu lub funkcji;
- Bitmapowy — dla kolumn o niskiej kardynalności (Oracle).
24
Jaka jest różnica między indeksem klastrowanym a nieklastrowanym?
✓▶
- Tabela może mieć tylko jeden indeks klastrowany ale 999 nieklastrowanych;
- Klastrowany fizycznie sortuje dane tabeli; nieklastrowany ma oddzielną strukturę;
- Klastrowany przechowuje dane i informacje o indeksie razem; nieklastrowany — tylko referencje;
- Odczyt z klastrowanego jest generalnie szybszy niż z nieklastrowanego;
- Klastrowany tworzony automatycznie dla PRIMARY KEY; nieklastrowany dla UNIQUE KEY.
25
Czym jest widok (VIEW) w SQL?
✓▶
Widok to wirtualna tabela oparta na zapytaniu SELECT. Nie przechowuje danych fizycznie — za każdym razem gdy pytamy o widok, wykonywane jest zapytanie bazowe.
CREATE VIEW ActiveEmployees AS
SELECT Id, Name, Department
FROM Employees
WHERE Status = 'Active';
-- Użycie jak zwykła tabela:
SELECT * FROM ActiveEmployees;
-- Usunięcie:
DROP VIEW ActiveEmployees;
Widoki upraszczają zapytania, ukrywają złożoność, ograniczają dostęp do kolumn i zapewniają warstwę bezpieczeństwa.
26
Jakie polecenie SQL wyświetla bieżącą datę?
✓▶
-- SQL Server
SELECT GETDATE(); -- data i czas
SELECT GETUTCDATE(); -- UTC
SELECT SYSDATETIME(); -- wyższa precyzja
SELECT CAST(GETDATE() AS DATE); -- tylko data bez czasu
-- MySQL
SELECT NOW(); -- data i czas
SELECT CURDATE(); -- tylko data
-- PostgreSQL / standard SQL
SELECT CURRENT_DATE;
SELECT CURRENT_TIMESTAMP;
27
Jakie funkcje agregujące oferuje SQL?
✓▶
SELECT
COUNT(*), -- liczba wierszy
COUNT(DISTINCT City), -- liczba unikalnych
SUM(Salary), -- suma
AVG(Salary), -- średnia
MIN(Salary), -- minimum
MAX(Salary), -- maksimum
STRING_AGG(Name, ', ') -- konkatenacja (SQL Server)
FROM Employees;
Funkcje agregujące ignorują wartości NULL (z wyjątkiem COUNT(*)).
28
Jakie znasz funkcje manipulacji tekstem w SQL?
✓▶
UPPER(str) -- na wielkie litery
LOWER(str) -- na małe litery
LEN(str) -- długość (SQL Server)
SUBSTRING(str,s,len) -- wycinek
TRIM(str) -- usuń spacje
LTRIM/RTRIM(str) -- lewe/prawe
REPLACE(str,a,b) -- zastąp a → b
CHARINDEX(a,str) -- pozycja znaku
CONCAT(a,b,c) -- łączenie stringów
FORMAT(val, fmt) -- formatowanie
29
Napisz SQL który znajdzie pracowników których imię zaczyna się na 'A'.
✓▶
-- LIKE z symbolem wieloznacznym %
SELECT * FROM Employees
WHERE EmpName LIKE 'A%';
-- _ oznacza dokładnie jeden dowolny znak
WHERE EmpName LIKE 'A_a%'; -- np. "Ana", "Ala"
-- NOT LIKE — wykluczenie
WHERE EmpName NOT LIKE '%Manager%';
30
Czym jest normalizacja i jakie są jej postaci normalne?
✓▶
Normalizacja to proces organizowania bazy danych w celu eliminacji nadmiarowości i zależności. Postaci normalne:
- 1NF — atomowe wartości (brak list w komórkach), unikalny klucz główny;
- 2NF — spełnia 1NF + brak częściowych zależności od klucza złożonego;
- 3NF — spełnia 2NF + brak tranzytywnych zależności (kolumna zależy od klucza, nie od innej niekolumny);
- BCNF (3.5NF) — silniejsza forma 3NF;
- 4NF, 5NF — rzadziej stosowane w praktyce.
31
Czym jest denormalizacja i kiedy ją stosujemy?
✓▶
Denormalizacja to świadome wprowadzenie redundancji do znormalizowanej bazy danych w celu poprawy wydajności odczytu. Polega na łączeniu tabel lub powielaniu danych.
Stosujemy ją gdy: zapytania JOIN są zbyt kosztowne, priorytetem jest prędkość odczytu (hurtownie danych, OLAP), mamy systemy z dużą liczbą odczytów i małą ilością zapisów.
Kompromis: lepsza wydajność SELECT vs trudniejsze utrzymanie spójności danych.
32
Jakie są wady braku normalizacji bazy danych?
✓▶
- Nadmiarowość danych — te same dane przechowywane wielokrotnie, marnowanie miejsca;
- Anomalie aktualizacji — zmiana danych w jednym miejscu nie propaguje się do innych kopii;
- Anomalie wstawiania — nie można wstawić danych bez zbędnych informacji;
- Anomalie usuwania — usunięcie wiersza może stracić inne ważne dane;
- Naruszenie ACID — trudna spójność przy wielu kopiach tych samych danych.
33
Czym jest właściwość ACID?
✓▶
ACID to cztery właściwości gwarantujące poprawne przetwarzanie transakcji:
- A — Atomicity (Niepodzielność) — transakcja to "wszystko albo nic". Jeśli jedna operacja się nie powiedzie — cała transakcja jest cofana (ROLLBACK);
- C — Consistency (Spójność) — baza zawsze przechodzi z jednego spójnego stanu do drugiego. Żadne zasady integralności nie są naruszane;
- I — Isolation (Izolacja) — współbieżne transakcje nie wpływają na siebie nawzajem. Poziomy: READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, SERIALIZABLE;
- D — Durability (Trwałość) — zatwierdzone (COMMIT) zmiany są trwałe — nawet po awarii systemu.
34
Jaka jest różnica między DELETE a TRUNCATE?
✓▶
-- DELETE — DML, można cofnąć (ROLLBACK), obsługuje WHERE
DELETE FROM Orders WHERE Status = 'Cancelled';
DELETE FROM Orders; -- wszystkie wiersze (wolno)
-- TRUNCATE — DDL, nie można cofnąć, bez WHERE, szybkie
TRUNCATE TABLE TempData;
- DELETE — powolne (loguje każdy wiersz), zachowuje IDENTITY, transakcyjne;
- TRUNCATE — szybkie (dealokuje strony), resetuje IDENTITY, nie można filtrować.
35
Jakie są typy systemów zarządzania bazami danych?
✓▶
- Hierarchiczne DBMS — dane w strukturze drzewa (rodzic-dziecko). Np. IBM IMS. Ograniczone relacje;
- Sieciowe DBMS — wiele-do-wielu przez sieć rekordów. Np. IDMS;
- Relacyjne DBMS (RDBMS) — dane w tabelach powiązanych kluczami. Standard dziś. Np. MySQL, PostgreSQL, Oracle;
- Obiektowe DBMS — dane jako obiekty. Np. db4o;
- NoSQL (dokumentowe, kolumnowe, grafowe, klucz-wartość) — MongoDB, Cassandra, Redis, Neo4j.
36
Czym jest niespójna zależność w bazie danych?
✓▶
Niespójna zależność (anomalia zależności) to sytuacja gdy ścieżka dostępu do danych jest brakująca, uszkodzona lub błędna. Użytkownik musi przeszukiwać dane w niewłaściwej tabeli, co prowadzi do błędnych wyników.
Najczęstsza przyczyna: brak normalizacji — dane rozłożone nielogicznie między tabelami, brakujące klucze obce lub złe relacje między tabelami.
37
Czym jest TRIGGER w SQL?
✓▶
Trigger (wyzwalacz) to specjalna procedura automatycznie wykonywana gdy na tabeli zachodzi INSERT, UPDATE lub DELETE.
CREATE TRIGGER trg_AfterInsert
ON Orders
AFTER INSERT
AS
BEGIN
-- loguj każde nowe zamówienie
INSERT INTO AuditLog (Action, TableName, ActionDate)
VALUES ('INSERT', 'Orders', GETDATE());
END;
Typy triggerów: AFTER (po operacji), INSTEAD OF (zastępuje operację), BEFORE (Oracle). Używaj ostrożnie — mogą ukrywać logikę biznesową.
38
Czym jest procedura składowana (Stored Procedure)?
✓▶
Procedura składowana to zestaw instrukcji SQL skompilowany i przechowywany na serwerze. Może przyjmować parametry wejściowe i zwracać wyniki.
CREATE PROCEDURE GetEmployeesByDept
@DeptId INT
AS
BEGIN
SELECT Id, Name, Salary
FROM Employees
WHERE DeptId = @DeptId;
END;
-- Wywołanie:
EXEC GetEmployeesByDept @DeptId = 3;
Zalety: lepsza wydajność (kompilacja raz), bezpieczeństwo (parametryzacja → brak SQL injection), hermetyzacja logiki.
39
Czym jest CTE (Common Table Expression)?
✓▶
CTE to tymczasowy, nazwany wynik zapytania definiowany za pomocą klauzuli WITH. Istnieje tylko na czas wykonywania jednego zapytania. Czytelniejszy odpowiednik podzapytań i tabel tymczasowych.
WITH TopSalaries AS (
SELECT DeptId, MAX(Salary) AS MaxSal
FROM Employees
GROUP BY DeptId
)
SELECT e.Name, e.Salary, t.MaxSal
FROM Employees e
JOIN TopSalaries t ON e.DeptId = t.DeptId
WHERE e.Salary = t.MaxSal;
-- Rekurencyjne CTE — np. dla hierarchii
WITH RECURSIVE OrgChart AS (...)
40
Czym są funkcje okna (Window Functions)?
✓▶
Funkcje okna wykonują obliczenia na zestawie wierszy powiązanych z bieżącym wierszem — bez grupowania wyników (każdy wiersz zachowuje swoją tożsamość).
SELECT
Name, DeptId, Salary,
ROW_NUMBER() OVER (PARTITION BY DeptId ORDER BY Salary DESC) AS Rank,
SUM(Salary) OVER (PARTITION BY DeptId) AS DeptTotal,
LAG(Salary) OVER (ORDER BY HireDate) AS PrevSalary
FROM Employees;
Popularne funkcje: ROW_NUMBER, RANK, DENSE_RANK, NTILE, LAG, LEAD, FIRST_VALUE, LAST_VALUE.
41
Czym jest transakcja i jak jej używać?
✓▶
Transakcja to jednostka pracy składająca się z jednej lub więcej operacji SQL, które muszą się wykonać wszystkie albo żadna (ACID).
BEGIN TRANSACTION;
UPDATE Accounts SET Balance = Balance - 500
WHERE Id = 1; -- przelew z konta
UPDATE Accounts SET Balance = Balance + 500
WHERE Id = 2; -- przelew na konto
IF @ERROR <> 0
ROLLBACK; -- cofnij obie operacje
ELSE
COMMIT; -- zatwierdź obie
42
Czym jest PIVOT w SQL?
✓▶
PIVOT przekształca unikalne wartości z kolumny w wiele kolumn — obraca wiersze w kolumny. UNPIVOT robi odwrotność.
-- Sprzedaż per kwartał (wiersze) → kolumny
SELECT Product, [Q1], [Q2], [Q3], [Q4]
FROM Sales
PIVOT (SUM(Amount) FOR Quarter IN ([Q1],[Q2],[Q3],[Q4])) p;
43
Czym są funkcje w SQL i do czego ich używamy?
✓▶
Funkcje SQL to obiekty bazy danych zwracające wartość. W odróżnieniu od procedur — nie modyfikują stanu bazy, mogą być używane wewnątrz zapytań SELECT.
-- Przykład funkcji skalarnej (SQL Server)
CREATE FUNCTION dbo.GetFullName(@First VARCHAR(50), @Last VARCHAR(50))
RETURNS VARCHAR(101)
AS
BEGIN
RETURN @First + ' ' + @Last;
END;
-- Użycie:
SELECT dbo.GetFullName(FirstName, LastName) FROM Employees;
44
Czym jest CASE WHEN w SQL?
✓▶
CASE WHEN to warunkowe wyrażenie SQL — odpowiednik if/else używany w SELECT, WHERE i ORDER BY.
-- Simple CASE
SELECT Name,
CASE Department
WHEN 'IT' THEN 'Technologia'
WHEN 'HR' THEN 'Zasoby ludzkie'
ELSE 'Inne'
END AS DeptPL
FROM Employees;
-- Searched CASE
SELECT Name, Salary,
CASE
WHEN Salary < 3000 THEN 'Junior'
WHEN Salary < 7000 THEN 'Mid'
ELSE 'Senior'
END AS Level
FROM Employees;