T-SQL II Flashcards
UNION w SQL
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;
UNION ALL
Jeśli chcesz zachować duplikaty, użyj UNION ALL:
INTERSECT i EXCEPT w SQL
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.
INTERSECT
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.
EXCEPT
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.
Case w TSQL
select case
when
then
when
then
else
end as
ISNULL
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
COALESCE
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
Coalesce vs isnull
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.
MERGE w SQL
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.
Kluczowe sekcje mega
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).
Składnia merga
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;
Składnia tworzenia procedury składowanej
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;
Procedura z try-catch
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;
Procedura z whilem
CREATE PROCEDURE PrintNumbers
AS
BEGIN
DECLARE @Counter INT = 1; WHILE @Counter <= 10 BEGIN PRINT @Counter; SET @Counter = @Counter + 1; -- Zwiększamy licznik END;
END;