Język SQL

on

WSTĘP

Język SQL

SQL (Structured Query Language) jest językiem programowania stosowanym do zarządzania i manipulowania relacyjnymi bazami danych. Większość baz danych wykorzystuje do zapisywania danych i tworzenia dotyczących ich zapytań język SQL (Structured Query Language, strukturalny język zapytań). Jego podstawowe funkcje obejmują tworzenie, modyfikowanie i usuwanie baz danych oraz tabel, a także wstawianie, aktualizowanie, usuwanie i wyszukiwanie danych. SQL pozwala na tworzenie zapytań, które umożliwiają uzyskiwanie danych z baz danych w sposób precyzyjny i efektywny. Jest standardem wśród systemów zarządzania bazami danych, takich jak MySQL, PostgreSQL, SQL Server i Oracle.

POZIOM PODSTAWOWY

Tworzenie tabeli

CREATE TABLE NazwaTabeli
(Kolumna1 int,
Kolumna2 varchar(50),
Kolumna3 varchar(50),
Kolumna4 int,
Kolumna5 varchar(50)
)

Wstrzykiwanie danych do tabeli

INSERT INTO NazwaTabeli VALUES
(1, 'Tekst1', 'Tekst2', 25, 'Tekst3'
1, 'Tekst1', 'Tekst2', 25, 'Tekst3')

Zamiana wartości dla rekordu

UPDATE NazwaTabeli 
SET NazwaKolumny = 5005
WHERE NazwaKolumny = 5003

Usunięcie wiersza

DELETE FROM NazwaTabeli WHERE NazwaWiersza=5001

Pobierz wszystkie kolumny z tabeli

SELECT *
FROM NazwaTabeli

Pobierz daną kolumnę z tabeli

SELECT NazwaKolumny
FROM NazwaTabeli

Pobierz 5 najwyższych rekordów z tabeli

SELECT TOP 5 *
FROM NazwaTabeli

Pobierz rekordy bez powtarzania

SELECT DISTINCT(NazwaKolumny)
FROM NazwaTabeli AND

Zlicz rekordy

SELECT COUNT(NazwaKolumny)
FROM NazwaTabeli

Nadaj nazwę kolumnie

SELECT COUNT(NazwaKolumny) AS NowaNazwaKolumny
FROM NazwaTabeli

Wybierz rekord o max. wartości

SELECT MAX(NazwaKolumny)
FROM NazwaTabeli

Wybierz rekord o min. wartości

SELECT MIN(NazwaKolumny)
FROM NazwaTabeli

Wybierz rekord o średniej wartości

SELECT AVG(NazwaKolumny)
FROM NazwaTabeli

Wyświetlenie tabeli z poza menu wyboru

Mówiąc menu wyboru mam na myśli to miejsce

SELECT *
FROM NazwaBazyDanych.dbo.NazwaTabeli

Pobieranie danego rekordu

SELECT *
FROM NazwaTabeli
WHERE Kolumna = 'NazwaRekordu'

Pobieranie rekordów w wykluczeniem danego rekordu

SELECT *
FROM NazwaTabeli
WHERE Kolumna <> 'NazwaRekordu'

Pobieranie rekordów większych niż

SELECT *
FROM NazwaTabeli
WHERE Kolumna > 'NazwaRekordu'

Pobieranie rekordów mniejszych niż

SELECT *
FROM NazwaTabeli
WHERE Kolumna < 'NazwaRekordu'

Operacja logiczna AND

SELECT *
FROM NazwaTabeli
WHERE Kolumna < 'NazwaRekordu' AND Kolumna2 = 'Wartosc'

Operacja logiczna OR

SELECT *
FROM NazwaTabeli
WHERE Kolumna < 'NazwaRekordu' OR Kolumna2 = 'Wartosc'

Proste wyrażenie regularne

SELECT *
FROM NazwaTabeli
WHERE Kolumna LIKE '%4'

Czyli w tym przypadku pobierze rekordy z kolumny Kolumna i pobierze tylko takie rekordy, które kończą się cyfrą 4. Chcąc pobrać rekordy zaczynające się na literę np. G, należy wpisać G%. Chcąc z kolei aby pobrało rekord, gdzie dana litera występuje w środku należy użyć %G%. W przypadku kiedy chcemy wyszukać np. słowo UGOH należy użyć %G%H. Polecenie LIKE jest zatem prostym przykładem wyrażeń regularnych RegEx.

Pobieranie rekordu gdzie kolumna jest pusta

SELECT *
FROM NazwaTabeli
WHERE Kolumna IS NULL

Pobieranie rekordu gdzie kolumna nie jest pusta

SELECT *
FROM NazwaTabeli
WHERE Kolumna IS NOT NULL

Pobieranie rekordu o zadanych nazwach (wersja wielokrotna dla „=”)

SELECT *
FROM NazwaTabeli
WHERE Kolumna IN ('Nazwa1', 'Nazwa2')

Pogrupuj

SELECT COUNT(ID), NazwaKolumny
FROM NazwaTabeli
GROUP BY NazwaKolumny

Wynikiem zapytania będzie tabela ze zliczoną ilością rekordów o danym ID zgrupowana alfabetycznie lub za porządkiem liczb.

Ustaw za porządkiem

SELECT * FROM NazwaTabeli
ORDER BY Wartosc ASC

W zależności czy porządek ma być rosnący czy malejący używa się keywordów ASC lub DESC. Można wykonać również grupowanie po dwóch argumentach.

Pobierz 3 litery ze stringa, zacznij od 1 znaku

SELECT SUBSTRING('Tekst', 1, 3) AS NazwaStringu;
SELECT SUBSTRING('Tekst', -2, 3) AS NazwaStringu;

Zacznij od 3 litery od końca (-2), pobierz 3 litery.

Konwersja typów danych

SELECT CAST(25.65 AS int);

POZIOM ŚREDNIOZAAWANSOWANY

Typy joinów

Połączenie dwóch tabel o wspólnej części

SELECT *
FROM NazwaBazyDanych.dbo.NazwaTabeli1
INNER JOIN NazwaBazaDanych.dbo.NazwaTabeli2
ON NazwaTabeli1.NazwaKolumny = NazwaTabeli2.NazwaKolumny2

INNER JOIN to operacja która łączy rekordy z dwóch lub więcej tabel na podstawie wspólnego kryterium np. wspólna nazwa kolumny.

Połączenie dwóch tabel

SELECT *
FROM NazwaBazyDanych.dbo.NazwaTabeli1
FULL OUTER JOIN NazwaBazaDanych.dbo.NazwaTabeli2
ON NazwaTabeli1.NazwaKolumny = NazwaTabeli2.NazwaKolumny2

FULL OUTER JOIN to operacja która zwraca wszystko co znajduje się w warunku i poza warunkiem, innymi słowy zwraca wszystko.

Połączenie lewej tablicy z prawą

SELECT *
FROM NazwaBazyDanych.dbo.NazwaTabeli1
LEFT OUTER JOIN NazwaBazaDanych.dbo.NazwaTabeli2
ON NazwaTabeli1.NazwaKolumny = NazwaTabeli2.NazwaKolumny2

Połączenie prawej tablicy z lewą

SELECT *
FROM NazwaBazyDanych.dbo.NazwaTabeli1
RIGHT OUTER JOIN NazwaBazaDanych.dbo.NazwaTabeli2
ON NazwaTabeli1.NazwaKolumny = NazwaTabeli2.NazwaKolumny2

Union

Operator UNION pozwala na połączenie dwóch lub więcej SELECT. Operator ten usuwa duplikaty.

SELECT *
FROM EmployeeDemographics
UNION
SELECT *
FROM WareHouseEmployeeDemographics

UNION ALL pokazuje duplikaty. Jeżeli będzie się używać tego operatora do połączenia dwóch tabel o takiej samej ilości kolumn, ale innych ich nazwach, zadziała, ale powyrzuca NULL.

CASE statement

SELECT Kolumna1, Kolumna2, Kolumna3
CASE
    WHEN Kolumna2 > 30 THEN 'Tekst'
    ELSE 'Tekst2'
END
FROM Tabela
WHERE Kolumna2 IS NOT NULL
ORDER by Kolumna2
SELECT Kolumna1, Kolumna2, Kolumna3
CASE
	WHEN Kolumna1 = 'Rekord1' THEN Kolumna2 + (Kolumna2 * 0.1)
	ELSE Kolumna2 + (Kolumna2 * 0.05)
	END AS NowaKolumna

	FROM Tabela1
	JOIN Tabela2
	ON Tabela1.Kolumna3 = Tabela2.Kolumna3

Having Clause

SELECT Kolumna1, COUNT(Kolumna1)
FROM Tabela1
JOIN Tabela2
	ON Tabela1.Kolumna2 = Tabela2.Kolumna2
GROUP BY Kolumna1
HAVING COUNT(Kolumna1) > 1

The HAVING clause was added to SQL because the WHERE keyword cannot be used with aggregate functions.

Aktualizowanie danych w tabeli

SELECT *
FROM Tabela1

UPDATE Tabela1
SET Kolumna1 = 100
WHERE Kolumna2 = 'Tekst1' And Kolumna3 = 'Tekst2'

Usuwanie wiersza z kolumny

SELECT *
FROM EmployeeDemographics

DELETE FROM EmployeeDemographics
WHERE EmployeeID = 1005

Aliasing

Aliasowanie to tymczasowa zmiana nazwy kolumny dla tabeli.

SELECT Kolumna1 AS AliasKolumny
FROM Tabela

Partition by

do nauczenia

POZIOM ZAAWANSOWANY

CTES

Temp Tables

CREATE TABLE #tabela_temp(
Wartosc int)

String Functions + Use Cases

Stored Procedures + Use Cases

Subqueries

Materiały dodatkowe

Struktura zapytania

1. SELECT

Klauzula SELECT służy do wybierania danych z jednej lub więcej tabel. Określasz tutaj, które kolumny chcesz pobrać.

2. FROM

Klauzula FROM określa, z której tabeli (lub tabel) chcesz pobrać dane.

3. WHERE

Klauzula WHERE służy do filtrowania rekordów na podstawie określonych warunków.

4. GROUP BY

Klauzula GROUP BY grupuje wiersze, które mają te same wartości w określonych kolumnach. Często używana z funkcjami agregującymi (np. COUNT, SUM, AVG).

5. HAVING

Klauzula HAVING jest podobna do WHERE, ale stosowana jest do wyników po zastosowaniu GROUP BY.

5. HAVING

Klauzula HAVING jest podobna do WHERE, ale stosowana jest do wyników po zastosowaniu GROUP BY.

7. LIMIT

Klauzula LIMIT ogranicza liczbę zwracanych rekordów. Jest szczególnie użyteczna w dużych zestawach danych.

Pełne przykładowe zapytanie SQL

SELECT kolumna1, kolumna2, SUM(kolumna3) AS suma
FROM nazwa_tabeli
WHERE kolumna4 = 'wartość'
GROUP BY kolumna1, kolumna2
HAVING SUM(kolumna3) > 100
ORDER BY kolumna1 ASC
LIMIT 10

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *