T-SQL II Flashcards

1
Q

UNION w SQL

A

UNION to operator w SQL, który łączy wyniki dwóch lub więcej zapytań w jeden zestaw wyników. Usuwa automatycznie powtarzające się wiersze (duplikaty), dzięki czemu wynik jest unikalny.

Oba zapytania muszą zwracać:

Tę samą liczbę kolumn,
Kolumny w tej samej kolejności,
Kompatybilne typy danych (np. liczba całkowita i liczba dziesiętna są kompatybilne).

SELECT kolumny
FROM tabela1
WHERE warunek

UNION

SELECT kolumny
FROM tabela2
WHERE warunek;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

UNION ALL

A

Jeśli chcesz zachować duplikaty, użyj UNION ALL:

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

INTERSECT i EXCEPT w SQL

A

INTERSECT i EXCEPT to operatory w SQL, które służą do porównywania wyników dwóch zapytań. Każdy z tych operatorów zwraca różne wyniki w zależności od tego, jak traktują duplikaty oraz porównanie danych.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

INTERSECT

A

Operator INTERSECT zwraca wspólne rekordy, które występują w obu zapytaniach. Jest to w zasadzie część wspólna między dwoma zestawami wyników.

Zasady działania INTERSECT:
Zwraca tylko te rekordy, które występują w obu zapytaniach.
Usuwa duplikaty, czyli wynik zawsze będzie unikalny.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

EXCEPT

A

Operator EXCEPT zwraca różnice między dwoma zapytaniami. Zwraca te rekordy, które występują w pierwszym zapytaniu, ale nie w drugim.

Zasady działania EXCEPT:
Zwraca rekordy, które są obecne w pierwszym zapytaniu, ale nie w drugim.

Usuwa duplikaty, więc wynik będzie zawierał tylko unikalne wiersze.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Case w TSQL

A

select case

when
then

when
then

else

end as

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

ISNULL

A

ISNULL zwraca określoną wartość zastępczą, jeśli wartość wejściowa jest NULL. Jeżeli wartość wejściowa nie jest NULL, zwraca ją bez zmian.

bierze tylko dwa argumenty

zwraca pierwsze co nie jest nullem

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

COALESCE

A

COALESCE zwraca pierwszy nie-NULL-owy argument z listy podanych wartości. Możesz podać dowolną liczbę argumentów. Jeśli wszystkie wartości są NULL, zwróci NULL.

bierze wiele argumentów

bierze expression a nie wartości

sprawdza jakie ma data type i zwraca ten o najwyższym precedence

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Coalesce vs isnull

A

Because ISNULL is a function, it is evaluated only once. As described above, the input values for the COALESCE expression can be evaluated multiple times. COALESCE basically translates to CASE expression and ISNULL is a built-in implemented in the database engine.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

MERGE w SQL

A

MERGE to zaawansowane polecenie w SQL używane do przeprowadzania operacji typu UPSERT (INSERT + UPDATE lub DELETE) na podstawie warunków porównania. Pozwala ono w jednym poleceniu wykonywać wstawianie, aktualizowanie i usuwanie danych, zamiast pisać oddzielne zapytania.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Kluczowe sekcje mega

A

MERGE INTO: Określa tabelę docelową, w której przeprowadzane będą operacje.

USING: Określa tabelę (lub wynik zapytania), która dostarcza dane porównawcze.

ON: Określa warunek dopasowania między tabelą docelową a tabelą źródłową.

WHEN MATCHED THEN: Określa, co zrobić, gdy rekordy w obu tabelach się zgadzają (np. UPDATE).

WHEN NOT MATCHED THEN: Określa, co zrobić, gdy rekordy są w tabeli źródłowej, ale nie w docelowej (np. INSERT).

WHEN NOT MATCHED BY SOURCE THEN(opcjonalne): Określa, co zrobić, gdy rekordy są w tabeli docelowej, ale nie w źródłowej (np. DELETE).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Składnia merga

A

MERGE INTO tabela_docelowa AS target
USING tabela_źródłowa AS source
ON warunek_porównania
WHEN MATCHED THEN
– akcja dla dopasowanych rekordów

WHEN NOT MATCHED THEN
– akcja dla niedopasowanych rekordów w tabeli docelowej

WHEN NOT MATCHED BY SOURCE THEN
– akcja dla rekordów w tabeli docelowej, które nie mają odpowiednika w tabeli źródłowej

MERGE INTO: Określa tabelę docelową, w której przeprowadzane będą operacje.

USING: Określa tabelę (lub wynik zapytania), która dostarcza dane porównawcze.

ON: Określa warunek dopasowania między tabelą docelową a tabelą źródłową.

WHEN MATCHED THEN: Określa, co zrobić, gdy rekordy w obu tabelach się zgadzają (np. UPDATE).

WHEN NOT MATCHED THEN: Określa, co zrobić, gdy rekordy są w tabeli źródłowej, ale nie w docelowej (np. INSERT).

WHEN NOT MATCHED BY SOURCE THEN
DELETE;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Składnia tworzenia procedury składowanej

A

CREATE PROCEDURE procedure_name
@parameter_name datatype = default_value, – opcjonalne parametry

AS
BEGIN
– Blok instrukcji SQL

END

CREATE PROCEDURE GetEmployeesByJob
@JobTitle NVARCHAR(50)
AS
BEGIN
SELECT EmployeeID, FirstName, LastName, JobTitle
FROM Employees
WHERE JobTitle = @JobTitle;
END;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Procedura z try-catch

A

CREATE PROCEDURE SafeInsertEmployee
@FirstName NVARCHAR(50),
@LastName NVARCHAR(50),
@JobTitle NVARCHAR(50),
@HireDate DATE
AS
BEGIN

BEGIN TRY
    INSERT INTO Employees (FirstName, LastName, JobTitle, HireDate)
    VALUES (@FirstName, @LastName, @JobTitle, @HireDate);

END TRY

BEGIN CATCH
    PRINT 'Error occurred: ' + ERROR_MESSAGE();

END CATCH; END;
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Procedura z whilem

A

CREATE PROCEDURE PrintNumbers
AS
BEGIN

DECLARE @Counter INT = 1;

WHILE @Counter <= 10

BEGIN
    PRINT @Counter;
    SET @Counter = @Counter + 1; -- Zwiększamy licznik

END;

END;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Return w procedurach składowanych

A

Return 0 success
Return 1 failure

17
Q

Error handling w SQL

A

begin catch

if Error_number() = jakaś cyfra to… kod błędu

THROW

albo throw liczba
kod błędu liczba,
‘tekst błędu’,
liczba np 1 (severity)

RAISERROR
(
tekst błędu,
severity np. 10 information,
state np. 1
)

18
Q

OVER() w SQL

A

OVER() to klauzula używana w SQL w połączeniu z funkcjami okna (analitycznymi). Funkcje okna wykonują operacje, które zwracają wartość dla każdego wiersza w zestawie wyników, biorąc pod uwagę inne wiersze w obrębie określonego kontekstu, takiego jak partycja lub cały zbiór danych.

<funkcja> OVER (
[PARTITION BY <kolumna1>, <kolumna2>, ...]
[ORDER BY <kolumna> ASC/DESC]
)
</kolumna></kolumna2></kolumna1></funkcja>

19
Q

Komponenty OVER()

A

PARTITION BY (opcjonalny):

Dzieli dane na partycje (grupy), w obrębie których funkcja działa niezależnie.
Jeśli pominięte, funkcja działa na całym zestawie danych.

ORDER BY (opcjonalny):

Określa kolejność wierszy w obrębie każdej partycji.
Ważne dla funkcji takich jak ROW_NUMBER, LAG, LEAD.
Jeśli obie klauzule są pominięte, funkcja działa na całym zestawie danych w ich oryginalnej kolejności.

20
Q

ROW_NUMBER() z OVER()

A

Numeruje wiersze w obrębie partycji w określonej kolejności.

SELECT
Region,
Month,
Sales,
ROW_NUMBER() OVER (PARTITION BY Region ORDER BY Sales DESC) AS RowNumber
FROM Sales;

21
Q

Kiedy używać OVER()?

A

Agregaty wierszowe:

Sumy bieżące, średnie, liczby wierszy w obrębie grup bez łączenia wierszy.

Numeracja i rankingi:
Numerowanie (ROW_NUMBER), rankingi (RANK, DENSE_RANK) w ramach grup.

Analizy przesunięć:
Porównywanie wartości z sąsiadującymi wierszami (LAG, LEAD).
Obliczenia dynamiczne:

Przykładowo, obliczenia na podstawie danych historycznych lub prognozowanie.

22
Q

Current row i UNBOUNDED

A

W kontekście funkcji okna (OVER()), klauzule CURRENT ROW i UNBOUNDED służą do określenia zakresu wierszy, na które funkcja działa w danym oknie. Te terminy są używane w klauzuli ROWS lub RANGE w ramach funkcji okna.

23
Q

WITH Statement in SQL

A

WITH is used to define Common Table Expressions (CTEs) in SQL.

A CTE provides a temporary result set that can be referenced within a single SELECT, INSERT, UPDATE, or DELETE statement. It improves code readability and simplifies complex queries by breaking them into smaller, reusable components.

– tymczasowa table

WITH cte_name (optional_column_list) AS (
– CTE query
SELECT column1, column2, …
FROM table_name
WHERE condition
)

– główne zapytanie korzystające z tymczasowej tabeli

– Main query using the CTE
SELECT column1, column2
FROM cte_name
WHERE condition;

24
Q

Przykład użycia with

A

– jest subquery wewnątrz

SELECT department_id, AVG(salary) AS avg_salary
FROM employees
WHERE department_id IN (
SELECT department_id
FROM departments
WHERE location_id = 100
)
GROUP BY department_id;

-jest subquery na zewnątrz z with

WITH dept_filter AS (
SELECT department_id
FROM departments
WHERE location_id = 100
)
SELECT department_id, AVG(salary) AS avg_salary
FROM employees
WHERE department_id IN (SELECT department_id FROM dept_filter)
GROUP BY department_id;

25
Q

Using Multiple CTEs

A

WITH
dept_filter AS (
SELECT department_id
FROM departments
WHERE location_id = 100
),
high_salaries AS (
SELECT employee_id, department_id, salary
FROM employees
WHERE salary > 5000
)
SELECT e.employee_id, e.salary, d.department_id
FROM high_salaries e
JOIN dept_filter d
ON e.department_id = d.department_id;

26
Q

PIVOT

A

Operacja PIVOT przekształca dane w taki sposób, że wartości w jednej kolumnie stają się nazwami nowych kolumn, a odpowiadające im wartości w innych kolumnach stają się wartościami w nowych kolumnach.

SELECT <columns>
FROM
(
SELECT <columns> FROM <table>
) AS source
PIVOT
(
<aggregation>(<value_column>)
FOR <pivot_column> IN (<pivot_values>)
) AS pvt;</pivot_values></pivot_column></value_column></aggregation></columns></columns>

27
Q

UNPIVOT

A

Operacja UNPIVOT jest odwrotnością operacji PIVOT. Zmienia tabelę z szerokiego formatu (z wieloma kolumnami) na format długi (z wieloma wierszami), przekształcając kolumny w wiersze.

28
Q

CTE (Common Table Expression)

A

CTE (Common Table Expression) to konstrukcja w SQL, która pozwala na definiowanie tymczasowej tabeli w obrębie zapytania. CTE jest bardzo przydatna do uproszczenia zapytań, poprawy ich czytelności i ponownego używania logicznych fragmentów kodu w zapytaniu. CTE jest definiowane przed głównym zapytaniem i może być używane w tym samym zapytaniu, np. w SELECT, INSERT, UPDATE czy DELETE.

29
Q

Plan zapytania (ang. Query Plan)

A

Plan zapytania (ang. Query Plan) to sposób, w jaki system zarządzania bazą danych (DBMS) decyduje, jak wykonać zapytanie SQL.

DBMS opracowuje plan zapytania na podstawie dostępnych informacji, takich jak statystyki tabel, indeksy, struktury danych, itp., w celu określenia najwydajniejszej metody wykonania zapytania.

Plan zapytania jest szczególnie ważny, ponieważ może znacząco wpłynąć na wydajność zapytań. Źle zoptymalizowany plan zapytania może prowadzić do znacznego spadku wydajności, a w przypadku złożonych zapytań z dużymi zbiorami danych – do długich czasów odpowiedzi.

30
Q

heap

A

W kontekście baz danych, heap (stos) to termin odnoszący się do nieposortowanej struktury danych, w której dane są przechowywane w tabeli bez używania indeksu

W bazach danych SQL, pojęcie “heap” najczęściej dotyczy sposobu przechowywania danych w tabelach.

Kiedy tworzysz tabelę w SQL bez żadnego indeksu (poza indeksem podstawowym, który automatycznie dodaje się do kolumny klucza głównego), tabela jest przechowywana w formie heap.

31
Q

B-tree

A

balanced tree

B-tree (ang. Balanced Tree) to struktura danych, która jest szeroko stosowana w systemach baz danych, w tym w SQL Server, do przechowywania indeksów. Jest to drzewo zrównoważone, które umożliwia szybkie operacje wyszukiwania, wstawiania, usuwania oraz aktualizacji danych. B-tree jest używane w SQL Server zarówno dla indeksów klastrowanych, jak i nieklastrowanych.

**B-tree to drzewo poszukiwawcze, **w którym każdy węzeł może zawierać więcej niż jedno dziecko, a każdy węzeł jest uporządkowany w taki sposób, że:

Wartości w każdym węźle są posortowane.

Każdy węzeł (z wyjątkiem liści) posiada wskaźniki do swoich dzieci.

Liście drzewa przechowują dane i wskazują na kolejne wiersze w tabeli (w przypadku indeksów klastrowanych).

taka hierarchia jak w wordzie

32
Q

Index Allocation Model

A

Index Allocation Model odnosi się do sposobu przechowywania i organizacji indeksów w bazach danych SQL, szczególnie w SQL Server. W szczególności dotyczy to sposobu przechowywania struktur indeksów na dysku, co ma bezpośredni wpływ na wydajność operacji takich jak wyszukiwanie, sortowanie, łącznie tabel, czy modyfikowanie danych.

W SQL Server indeksy mogą być przechowywane w różnych strukturach, a odpowiednia organizacja tych indeksów zależy od modelu alokacji i struktury danych używanych przez system zarządzania bazą danych.

33
Q

Indeks klastrowany (Clustered Index)

A

W indeksie klastrowanym dane w tabeli są przechowywane w porządku fizycznym zgodnym z indeksami. Tylko jeden indeks klastrowany może istnieć na tabeli, ponieważ porządek danych w tabeli jest ustalany na podstawie tego indeksu.

Indeks klastrowany tworzy strukturę drzewa B (B-tree) z węzłami zawierającymi dane.

CREATE CLUSTERED INDEX IX_ProductID
ON Products (product_id);

MOŻE ISTNIEĆ TYLKO JEDEN

SEEK ZAMIAST SCAN

34
Q

Indeks nieklastrowany (Non-clustered Index)

A

Indeks nieklastrowany przechowuje kopię wskazówek do danych w postaci wskaźników (adresów wierszy) zamiast samych danych. Tego typu indeksy są oddzielną strukturą od danych w tabeli.

Może istnieć wiele indeksów nieklastrowanych w tabeli.

Indeks nieklastrowany używa również struktury drzewa B.

CREATE NONCLUSTERED INDEX IX_ProductName
ON Products (product_name);