Kurs MySQL – Podstawy

Tworzenie bazy danych: Polecenie CREATE DATABASE:

Polecenie CREATE DATABASE jest fundamentalnym krokiem w tworzeniu nowej bazy danych w MySQL.

Składnia polecenia:

CREATE DATABASE nazwa_bazy_danych;

Przykład:

CREATE DATABASE MojaBazaDanych;

Polecenie to powoduje stworzenie nowej pustej bazy danych o nazwie „MojaBazaDanych”.

Zasady nazewnictwa i struktury:

  • Nazewnictwo:
    • Nazwa bazy danych powinna być jednoznaczna, zwięzła i opisowa.
    • Unikaj używania znaków specjalnych i diakrytycznych.
    • Zalecane jest stosowanie notacji camelCase lub snake_case (np. „MojaBazaDanych” lub „moja_baza_danych”).
  • Struktura:
    • Baza danych może składać się z wielu tabel, z których każda przechowuje określone dane.
    • Tablice powinny być logicznie zorganizowane, zgodnie z tematyką przechowywanych informacji.
    • Staraj się utrzymywać spójność w strukturze, co ułatwia zrozumienie relacji między tabelami.
  • Przykład:
    • Jeśli projekt obejmuje zarządzanie danymi klientów i zamówień, można utworzyć dwie tabele: „Klienci” i „Zamówienia”. Każda tabela powinna mieć klarowną strukturę, zawierającą kolumny, takie jak „ID”, „Imię”, „Nazwisko” w tabeli „Klienci”, oraz „ID_Zamówienia”, „Data”, „Kwota” w tabeli „Zamówienia”. To umożliwia łatwe zrozumienie relacji między klientami a zamówieniami.

Tworzenie tabel: Polecenie CREATE TABLE

Polecenie CREATE TABLE służy do tworzenia nowych tabel w bazie danych MySQL.

Składnia polecenia:

CREATE TABLE nazwa_tabeli (
  kolumna1 typ_danych_1,
  kolumna2 typ_danych_2,
  ...
);

Przykład:

CREATE TABLE Klienci (
  ID INT AUTO_INCREMENT PRIMARY KEY,
  Imię VARCHAR(50),
  Nazwisko VARCHAR(50),
  Email VARCHAR(100) UNIQUE
);

W powyższym przykładzie tworzymy tabelę „Klienci” z kolumnami: „ID”, „Imię”, „Nazwisko”, „Email”. Kolumna „ID” jest kluczem głównym z automatycznie rosnącym wartościami.

Typy danych w bazie danych MySQL i ograniczenia

MySQL oferuje różne typy danych, które można przypisać kolumnom w tabeli.

  • INT: Liczby całkowite.
  • VARCHAR(n): Ciągi znaków o zmiennej długości, gdzie n to maksymalna liczba znaków.
  • DATE, TIME, DATETIME: Typy dla daty i czasu.
  • FLOAT, DOUBLE: Liczby zmiennoprzecinkowe.
  • BOOLEAN: Wartość logiczna (prawda/fałsz).

Indeksy w MySQL:

PRIMARY KEY:

Unikalny identyfikator dla każdego rekordu w tabeli.

Przykład:

ID INT PRIMARY KEY

AUTO_INCREMENT:

Automatyczne inkrementowanie wartości klucza głównego.

Przykład:

ID INT AUTO_INCREMENT PRIMARY KEY

UNIQUE:

Wartość w danej kolumnie musi być unikalna dla każdego rekordu.

Przykład:

Email VARCHAR(100) UNIQUE

FOREIGN KEY:

Tworzy relację między dwiema tabelami.

Przykład:

ID_Klienta INT,
FOREIGN KEY (ID_Klienta) REFERENCES Klienci(ID)

Wartościowe jest zrozumienie i poprawne zdefiniowanie typów danych oraz ograniczeń, aby tabela spełniała określone wymagania biznesowe i była efektywna podczas operacji na danych.

Operacje na danych w MySQL

Dodawanie rekordów:

Polecenie INSERT INTO służy do dodawania nowych rekordów do tabeli.

Składnia:

INSERT INTO nazwa_tabeli (kolumna1, kolumna2, ...) VALUES (wartość1, wartość2, ...);

Przykład:

INSERT INTO Klienci (Imię, Nazwisko, Email) VALUES ('Jan', 'Kowalski', 'jan.kowalski@email.com');

Usuwanie rekordów:

Polecenie DELETE FROM służy do usuwania rekordów z tabeli.

Składnia:

DELETE FROM nazwa_tabeli WHERE warunek;

Przykład:

DELETE FROM Klienci WHERE ID = 1;

To usunie klienta o identyfikatorze 1 z tabeli „Klienci”.

Aktualizowanie rekordów:

Polecenie UPDATE umożliwia aktualizację istniejących rekordów w tabeli.

Składnia:

UPDATE nazwa_tabeli SET kolumna1 = wartość1, kolumna2 = wartość2 WHERE warunek;

Przykład:

UPDATE Klienci SET Email = 'nowy.email@email.com' WHERE ID = 1;

To zaktualizuje adres e-mail klienta o identyfikatorze 1.

Polecenia SELECT i filtracja danych

Służy do pobierania danych z tabeli.

Składnia:

SELECT kolumna1, kolumna2, ... FROM nazwa_tabeli;

Przykład:

SELECT Imię, Nazwisko, Email FROM Klienci;

Zwróci wszystkie rekordy z tabeli „Klienci” z kolumnami „Imię”, „Nazwisko” i „Email”.

Filtracja danych:

Polecenie SELECT może być rozszerzone o warunki, aby filtrować wyniki.

Składnia:

SELECT kolumna1, kolumna2, ... FROM nazwa_tabeli WHERE warunek;

Przykład:

SELECT Imię, Nazwisko FROM Klienci WHERE Nazwisko = 'Kowalski';

Zwróci imiona i nazwiska klientów o nazwisku „Kowalski”.

  • Operatory logiczne:
    • AND, OR, NOT są używane do łączenia warunków.
  • Operatory porównania:
    • =, != (lub <>), <, >, <=, >= służą do porównywania wartości.

Poznanie tych operacji pozwoli efektywnie zarządzać danymi w bazie MySQL, a filtracja danych umożliwi precyzyjne wybieranie potrzebnych informacji.

WHERE i Operatory Logiczne w MySQL

W MySQL, klauzula WHERE jest używana w poleceniu SELECT, UPDATE, DELETE do filtrowania wyników lub danych, które są poddawane operacjom. Operatory logiczne są używane w połączeniu z WHERE, aby tworzyć bardziej złożone warunki.

Klauzula WHERE:

Podstawowe użycie:

SELECT kolumna1, kolumna2, ... FROM nazwa_tabeli WHERE warunek;

Przykład:

SELECT Imię, Nazwisko FROM Klienci WHERE Nazwisko = 'Kowalski';

Zwróci imiona i nazwiska klientów o nazwisku „Kowalski”.

Operatory Logiczne:

AND:

Łączy warunki i zwraca wyniki, które spełniają oba warunki.

SELECT * FROM Tabela WHERE warunek1 AND warunek2;

OR:

Łączy warunki i zwraca wyniki, które spełniają przynajmniej jeden z warunków.

SELECT * FROM Tabela WHERE warunek1 OR warunek2;

NOT:

Odwraca wartość logiczną warunku, czyli zwraca wyniki, które nie spełniają warunku.

SELECT * FROM Tabela WHERE NOT warunek;

Kombinacja Operatorów Logicznych:

Można łączyć operatory logiczne, tworząc bardziej zaawansowane warunki.

SELECT * FROM Tabela WHERE warunek1 AND (warunek2 OR warunek3) AND NOT warunek4;

Operatory logiczne w połączeniu z klauzulą WHERE pozwalają na elastyczne filtrowanie danych w bazie MySQL. To kluczowe narzędzie do precyzyjnego pobierania, aktualizowania lub usuwania danych zgodnie z określonymi kryteriami.

LEFT JOIN

LEFT JOIN to rodzaj złączenia (join) w języku SQL, które zwraca wszystkie rekordy z lewej tabeli i dopasowuje je do rekordów z prawej tabeli na podstawie warunku złączenia. Jeżeli nie ma dopasowania w prawej tabeli, to dla kolumn z prawej tabeli zostaną zwrócone wartości NULL.

Składnia LEFT JOIN:

SELECT tabela1.kolumna1, tabela1.kolumna2, ..., tabela2.kolumna1, tabela2.kolumna2, ...
FROM tabela1
LEFT JOIN tabela2 ON tabela1.warunek_złączenia = tabela2.warunek_złączenia;
  • tabela1 i tabela2 to tabele, które chcemy połączyć.
  • kolumna1, kolumna2, ... to kolumny, które chcemy wybrać z obu tabel.
  • ON określa warunek złączenia, czyli kiedy rekordy z obu tabel są ze sobą powiązane.

Przykład:

Mamy dwie tabele: Klienci i Zamówienia. Chcemy uzyskać listę klientów wraz z ich zamówieniami (jeżeli takie mają), z zachowaniem wszystkich klientów, nawet tych, którzy nie złożyli zamówień.

SELECT Klienci.ID, Klienci.Imię, Klienci.Nazwisko, Zamówienia.ID_Zamówienia, Zamówienia.Kwota
FROM Klienci
LEFT JOIN Zamówienia ON Klienci.ID = Zamówienia.ID_Klienta;

W tym przykładzie Klienci to lewa tabela, a Zamówienia to prawa tabela. ON Klienci.ID = Zamówienia.ID_Klienta określa warunek złączenia, gdzie ID klienta w tabeli Klienci musi być równy ID klienta w tabeli Zamówienia.

Rezultatem tego złączenia będą wszyscy klienci wraz z ich zamówieniami (jeżeli takie mają). Jeżeli klient nie ma zamówienia, kolumny związane z zamówieniem będą zawierały wartości NULL. Zastosowanie LEFT JOIN umożliwia uwzględnienie wszystkich rekordów z lewej tabeli (tutaj Klienci) niezależnie od tego, czy mają one odpowiedniki w prawej tabeli (Zamówienia).

Sortowanie wyników ORDER BY:

ORDER BY to klauzula w języku SQL, która jest używana do sortowania wyników zapytania. Pozwala na określenie, według których kolumn lub wyrażeń mają być posortowane wyniki. Można sortować wyniki w porządku rosnącym (ASC, domyślne) lub malejącym (DESC).

Składnia ORDER BY:

SELECT kolumna1, kolumna2, ...
FROM nazwa_tabeli
ORDER BY kolumna1 [ASC|DESC], kolumna2 [ASC|DESC], ...;
  • kolumna1, kolumna2, ... to kolumny, według których chcemy posortować wyniki.
  • ASC oznacza sortowanie rosnące (domyślne).
  • DESC oznacza sortowanie malejące.

Przykład:

Załóżmy, że mamy tabelę Pracownicy z kolumnami ID, Imię, Nazwisko i Wynagrodzenie. Chcemy wyświetlić listę pracowników posortowaną według wynagrodzenia w kolejności malejącej:

SELECT ID, Imię, Nazwisko, Wynagrodzenie
FROM Pracownicy
ORDER BY Wynagrodzenie DESC;

W wyniku tego zapytania otrzymamy listę pracowników, posortowaną według kolumny Wynagrodzenie malejąco.

ORDER BY można również używać do sortowania wyników na podstawie wielu kolumn. Na przykład:

SELECT Imię, Nazwisko, DataZatrudnienia, Wynagrodzenie
FROM Pracownicy
ORDER BY DataZatrudnienia ASC, Wynagrodzenie DESC;

W tym przypadku wyniki zostaną posortowane najpierw według daty zatrudnienia rosnąco, a następnie według wynagrodzenia malejąco.

Ograniczenie wyników wyszukiwania LIMIT:

Klauzula LIMIT w języku SQL jest używana do ograniczania liczby wierszy zwracanych przez zapytanie. Jest szczególnie przydatna, gdy chcemy zobaczyć tylko pierwsze kilka wyników z ogromnej tabeli lub kiedy pracujemy nad stroną paginacji.

Składnia LIMIT:

SELECT kolumna1, kolumna2, ...
FROM nazwa_tabeli
LIMIT liczba_wierszy;
  • kolumna1, kolumna2, ... to kolumny, które chcemy wybrać.
  • liczba_wierszy określa maksymalną ilość wierszy, które mają być zwrócone.

Przykład:

Załóżmy, że mamy tabelę Produkty i chcemy zobaczyć tylko pierwsze trzy produkty z tabeli:

SELECT ID_Produktu, Nazwa, Cena FROM Produkty LIMIT 3;

W wyniku tego zapytania otrzymamy trzy pierwsze wiersze z tabeli Produkty.

Klauzulę LIMIT można również łączyć z ORDER BY, aby uzyskać ograniczoną ilość wyników, ale posortowaną według określonego kryterium.

Przykład:

SELECT ID_Produktu, Nazwa, Cena
FROM Produkty
ORDER BY Cena DESC
LIMIT 5;

To zapytanie zwróci pięć produktów z tabeli Produkty, posortowanych malejąco według ceny.

Zadanie praktyczne: Projekt Bazy Danych

Tworzenie Bazy Danych Składającej się z Trzech Tabel:

Tabela Osób (Osoby):

Kolumny: ID_Osoby (klucz główny), Imię, Nazwisko, Inkeds (informacja o posiadaniu tatuaży).

CREATE TABLE Osoby (
  ID_Osoby INT AUTO_INCREMENT PRIMARY KEY,
  Imię VARCHAR(50),
  Nazwisko VARCHAR(50),
  Inkeds BOOLEAN
);

Tabela Adresów (Adresy):

Kolumny: ID_Adresu (klucz główny), ID_Osoby (klucz obcy), Miasto, Ulica, Kod_Pocztowy.

CREATE TABLE Adresy (
  ID_Adresu INT AUTO_INCREMENT PRIMARY KEY,
  ID_Osoby INT,
  Miasto VARCHAR(50),
  Ulica VARCHAR(50),
  Kod_Pocztowy VARCHAR(10),
  FOREIGN KEY (ID_Osoby) REFERENCES Osoby(ID_Osoby)
);

Tabela Kontaktów (Kontakty):

Kolumny: ID_Kontaktu (klucz główny), ID_Osoby (klucz obcy), Email, Telefon.

CREATE TABLE Kontakty (
  ID_Kontaktu INT AUTO_INCREMENT PRIMARY KEY,
  ID_Osoby INT,
  Email VARCHAR(100),
  Telefon VARCHAR(20),
  FOREIGN KEY (ID_Osoby) REFERENCES Osoby(ID_Osoby)
);

Uzupełnienie Tabeli 5 Przykładowymi Danymi:

Tabela Osób (Osoby):

INSERT INTO Osoby (Imię, Nazwisko, Inkeds) VALUES
('Anna', 'Nowak', TRUE),
('Jan', 'Kowalski', FALSE),
('Karolina', 'Wiśniewska', TRUE),
('Piotr', 'Lewandowski', FALSE),
('Ewa', 'Mazurek', TRUE);

Tabela Adresów (Adresy):

INSERT INTO Adresy (ID_Osoby, Miasto, Ulica, Kod_Pocztowy) VALUES
(1, 'Warszawa', 'Aleje Jerozolimskie 123', '00-111'),
(2, 'Kraków', 'ul. Floriańska 45', '30-001'),
(3, 'Gdańsk', 'ul. Długa 67', '80-001'),
(4, 'Poznań', 'ul. Wielka 11', '60-101'),
(5, 'Wrocław', 'Rynek 22', '50-102');

Tabela Kontaktów (Kontakty):

INSERT INTO Kontakty (ID_Osoby, Email, Telefon) VALUES
(1, 'anna.nowak@email.com', '123-456-789'),
(2, 'jan.kowalski@email.com', '987-654-321'),
(3, 'karolina.wisniewska@email.com', '555-777-999'),
(4, 'piotr.lewandowski@email.com', '111-222-333'),
(5, 'ewa.mazurek@email.com', '444-888-000');

5 pomysłów na zapytania do bazy:

Pobierz Wszystkie Osoby z Ich Adresami:

SELECT Osoby.Imię, Osoby.Nazwisko, Adresy.Miasto, Adresy.Ulica, Adresy.Kod_Pocztowy
FROM Osoby
LEFT JOIN Adresy ON Osoby.ID_Osoby = Adresy.ID_Osoby;

Znajdź Osoby z Tatuażami:

SELECT * FROM Osoby WHERE Inkeds = TRUE;

Pobierz Osoby z Ich Kontaktami:

SELECT Osoby.Imię, Osoby.Nazwisko, Kontakty.Email, Kontakty.Telefon
FROM Osoby
LEFT JOIN Kontakty ON Osoby.ID_Osoby = Kontakty.ID_Osoby;

Sortuj Osoby Według Nazwiska Rosnąco:

SELECT * FROM Osoby ORDER BY Nazwisko ASC;

Znajdź Osoby z Adresami w Warszawie:

SELECT Osoby.Imię, Osoby.Nazwisko, Adresy.Miasto, Adresy.Ulica, Adresy.Kod_Pocztowy
FROM Osoby
LEFT JOIN Adresy ON Osoby.ID_Osoby = Adresy.ID_Osoby
WHERE Adresy.Miasto = 'Warszawa';

Te przykładowe zapytania ilustrują różne scenariusze korzystania z utworzonej bazy danych, obejmujące różne aspekty związane z danymi osobowymi, adresami i kontaktami.