Strukturalny Język Zapytań jest standardowym językiem baz danych, który jest używany do tworzenia, utrzymywania i pobierania danych z relacyjnych baz danych. Poniżej kilka ciekawostek na temat języka SQL.
- W języku SQL nie jest rozróżniana wielkość liter. Zaleca się jednak, aby słowa kluczowe (takie jak SELECT, UPDATE, CREATE, itp.) były pisane wielkimi literami, a słowa zdefiniowane przez użytkownika (takie jak nazwa tabeli, nazwa kolumny, itp.) małymi literami.
- Komentarze w SQL możemy pisać używając „-” (podwójny myślnik) na początku dowolnej linii.
- SQL jest językiem programowania dla relacyjnych baz danych (wyjaśnione poniżej) takich jak MySQL, Oracle, Sybase, SQL Server, Postgre, itp. Inne nierelacyjne bazy danych (zwane również NoSQL), takie jak MongoDB, DynamoDB, itp. nie używają SQL
- Pomimo, że istnieje standard ISO dla SQL, większość implementacji nieznacznie różni się składnią. Możemy więc spotkać się z zapytaniami, które działają w SQL Server, ale nie działają w MySQL.
Co to jest relacyjna baza danych?
Relacyjna baza danych oznacza, że dane są przechowywane, jak również pobierane w postaci relacji (tabel). Tabela 1 przedstawia relacyjną bazę danych zawierającą tylko jedną relację o nazwie STUDENT, która przechowuje ROLL_NO, NAME, ADDRESS, PHONE i AGE studentów.
STUDENT
ROLL_NO | NAME | ADDRESS | PHONE | AGE |
1 | RAM | DELHI | 9455123451 | 18 |
2 | RAMESH | GURGAON | 9652431543 | 18 |
3 | SUJIT | ROHTAK | 9156253131 | 20 |
4 | SURESH | DELHI | 9156768971 | 18 |
TABELA 1
To są niektóre ważne terminologie, które są używane w kontekście relacji.
Atrybut: Atrybuty są właściwościami, które definiują relację. np.; ROLL_NO, NAME etc.
Tuple: Każdy wiersz w relacji jest znany jako tuple. Powyższa relacja zawiera 4 tuple, z których jeden jest przedstawiony jako:
1 | RAM | DELHI | 9455123451 | 18 |
Stopień: Liczba atrybutów w relacji jest znana jako stopień relacji. Relacja STUDENT zdefiniowana powyżej ma stopień 5.
Kardynalność: Liczba tupli w relacji jest znana jako kardynalność. Relacja STUDENT zdefiniowana powyżej ma kardynalność 4.
Kolumna: Kolumna reprezentuje zbiór wartości dla danego atrybutu. Kolumna ROLL_NO jest wyodrębniona z relacji STUDENT.
ROLL_NO
Kwerendy do obsługi relacyjnej bazy danych można podzielić na następujące kategorie:
Język definicji danych: Jest on używany do definiowania struktury bazy danych. np. CREATE TABLE, ADD COLUMN, DROP COLUMN i tak dalej.
Język manipulacji danymi: Jest on używany do manipulowania danymi w relacjach. np.; INSERT, DELETE, UPDATE i tak dalej.
Język zapytań o dane: Służy do wydobywania danych z relacji. np.; SELECT
Więc najpierw rozważymy Język zapytań o dane. Ogólne zapytanie do pobierania danych z relacyjnej bazy danych to:
- SELECT Attribute_List FROM R1,R2….RM
- ]
- ];
Część zapytania reprezentowana przez instrukcję 1 jest obowiązkowa, jeśli chcesz pobierać dane z relacyjnej bazy danych. Deklaracje napisane wewnątrz są opcjonalne. Przyjrzymy się możliwym kombinacjom zapytań na relacjach przedstawionych w tabeli 1.
Przypadek 1: Jeśli chcemy pobrać atrybuty ROLL_NO i NAME wszystkich studentów, zapytanie będzie brzmiało:
SELECT ROLL_NO, NAME FROM STUDENT;
ROLL_NO | NAME |
1 | RAM |
2 | RAMESH |
3 | SUJIT |
4 | SURESH |
Przypadek 2: Jeśli chcemy pobrać ROLL_NO i NAME uczniów, których ROLL_NO jest większe niż 2, zapytanie będzie brzmiało:
SELECT ROLL_NO, NAME FROM STUDENT WHERE ROLL_NO>2;
ROLL_NO | NAME |
3 | SUJIT |
4 | SURESH |
Przypadek 3: Jeśli chcemy pobrać wszystkie atrybuty uczniów, możemy napisać * w miejsce zapisu wszystkich atrybutów jako:
SELECT * FROM STUDENT WHERE ROLL_NO>2;
ROLL_NO | NAME | ADDRESS | PHONE | AGE |
3 | SUJIT | ROHTAK | 9156253131 | 20 |
4 | SURESH | DELHI | 9156768971 | 18 |
Przypadek 4: Jeśli chcemy przedstawić relację w porządku rosnącym według AGE, możemy użyć klauzuli ORDER BY jako:
SELECT * FROM STUDENT ORDER BY AGE;
ROLL_NO | NAME | ADDRESS | PHONE | AGE |
1 | RAM | DELHI | 9455123451 | 18 |
2 | RAMESH | GURGAON | 9652431543 | 18 |
4 | SURESH | DELHI | 9156768971 | 18 |
3 | SUJIT | ROHTAK | 9156253131 | 20 |
Uwaga: ORDER BY AGE jest równoważne z ORDER BY AGE ASC. Jeśli chcemy pobrać wyniki w porządku malejącym według AGE, możemy użyć ORDER BY AGE DESC.
KASA 5: Jeśli chcemy pobrać odrębne wartości atrybutu lub grupy atrybutów, używamy DISTINCT, jak w:
SELECT DISTINCT ADDRESS FROM STUDENT;
ADDRESS
DELHI
GURGAON
ROHTAK
Jeśli DISTINCT nie zostanie użyty, DELHI powtórzy się dwukrotnie w zbiorze wyników. Zanim zrozumiemy GROUP BY i HAVING, musimy zrozumieć funkcje agregacji w SQL.
FUNKCJE AGREGACJI: Funkcje agregacji są używane do wykonywania operacji matematycznych na wartościach danych w relacji. Niektóre z popularnych funkcji agregujących używanych w SQL to:
- COUNT: Funkcja Count służy do zliczania liczby wierszy w relacji. np;
SELECT COUNT (PHONE) FROM STUDENT;
COUNT(PHONE)
- SUM: Funkcja SUM służy do dodawania wartości atrybutu w relacji. np.;
SELECT SUM (AGE) FROM STUDENT;
SUM(AGE)
W ten sam sposób można używać funkcji MIN, MAX i AVG. Jak widzieliśmy powyżej, wszystkie funkcje agregujące zwracają tylko 1 wiersz.
AVERAGE: Daje średnie wartości kijanek. Jest również definiowana jako suma podzielona przez wartość count.
Syntaktyka:AVG(atrybut)
OR
Syntaktyka:SUM(atrybut)/COUNT(atrybut)
Powyższa składnia zwraca również średnią wartość tupples.
MAXIMUM:Wyodrębnia maksymalną wartość wśród zbioru bijaków.
Syntaktyka:MAX(atrybut)
MINIMUM:Wyodrębnia minimalną wartość wśród zbioru wszystkich bijaków.
Syntaktyka:MIN(atrybut)
GROUP BY: Group by służy do grupowania krotek w relacji na podstawie atrybutu lub grupy atrybutów. Jest to zawsze połączone z funkcją agregacji, która jest obliczana na grupie. np.;
SELECT ADDRESS, SUM(AGE) FROM STUDENTGROUP BY (ADDRESS);
W tym zapytaniu, SUM(AGE) zostanie obliczona, ale nie dla całej tabeli, ale dla każdego adresu, np.; suma AGE dla adresu DELHI (18+18=36) i podobnie dla innych adresów. Dane wyjściowe to:
ADRES | SUM(AGE) |
DELHI | 36 |
GURGAON | 18 |
ROHTAK | 20 |
Jeśli spróbujemy wykonać zapytanie podane poniżej, spowoduje to błąd, ponieważ pomimo, że obliczyliśmy SUM(AGE) dla każdego adresu, istnieje więcej niż 1 ROLL_NO dla każdego adresu, który zgrupowaliśmy. Zatem nie można ich wyświetlić w zbiorze wyników. Musimy użyć funkcji agregujących na kolumnach po instrukcji SELECT, aby nadać sens zestawowi wynikowemu, gdy używamy GROUP BY.
SELECT ROLL_NO, ADDRESS, SUM(AGE) FROM STUDENTGROUP BY (ADDRESS);
UWAGA: Atrybut, który nie jest częścią klauzuli GROUP BY nie może być użyty do selekcji. Każdy atrybut, który jest częścią klauzuli GROUP BY może być użyty do selekcji, ale nie jest to obowiązkowe. Możemy jednak użyć atrybutów, które nie są częścią klauzuli GROUP BY w funkcji agregującej.
Quiz z SQL