MySql: polecenie INNER JOIN (łączenie wewnętrzne)

Prawdopodobnie każdy z nas pracując z bazami danych miał szansę napotkać problem, gdy dane, które aktualnie są nam potrzebne miesczą się w kilku osobnych tabelach co nie jest komfortowe do ich przeglądania.

Do wybrania danych rozstrzelonych po całej bazie danych w przeróżnych tabelach służy polecenie JOIN, która występuje w połączeniu z frazami LEFT, RIGHT, INNER i innymi.

W tym wpisie zajmiemy się głównie komendą INNER JOIN.

Efektem jest kombinacja wartości z 2 tabel, które mają wspólny element wskazany jako „łącznik”. Przy wskazywaniu elementu”łącznika” należy sprecyzować również tabele z której wartość pochodzi, ponieważ polecenie inner join pozwala na łaczenie więcej niż 2 tabel.


Ogólny schemat pisania zapytań z poleceniem INNER JOIN:

SELECT pole1,pole2..poleX FROM tabela1,tabela2…tabelaX INNER JOIN poleX ON tabela1.pole_z_tej_tabeli=tabela2.pole_z_tej_tabeli WHERE warunek_logiczny;

Przykład:

SELECT nazwisko,trener,seria FROM zawodnicy INNER JOIN skoki on zawodnicy.idskoczka=skoki.idskoczka where seria>2;

MySql: Funkcje agregujące

Dane można podsumować wykorzystując funkcje agregujące, do których zaliczają się:

  • zliczanie (COUNT())-pozwala na znalezienie liczby wystąpień.
  • sumowanie (SUM())-umożliwia wyliczenie sumy elementów.
  • obliczanie średniej (AVG())-pozwala na wyliczenie średniej.
  • wyznaczanie maksimum (MAX())-umożliwia znalezienie maksymalnej wartości w zbiorze.
  • wyznaczanie minimum (MIN())-umożliwia znaleznie miniminalnej wartości w zbiorze.

Każda z funkcji posiada jeden parametr, będący wyrażeniem dającym nam wartości do obliczeń.

W przypadku funkcji AVG i SUM wyrażenie musi dostarczać wartości liczbowe, pozostałe funkcje agregujące przyjmują wartości dowolnego typu podstawowego.

Przed wyrażeniem można umieścić słowo kluczowe DISTINCT i do obliczeń zostaną wzięte wartości bez powtórzeń. Umieszczenie w wywołaniu funkcji słowa ALL powoduje, że do obliczeń są wzięte wszystkie wartości.

 Funkcja COUNT zwróci liczbę niepustych wartości. Jeśli w wywołaniu funkcji wyrażenie zastąpimy gwiazdką (*), to zostanie policzona liczba rekordów należących do grupy.

Pozostałe funkcje agregujące również pomijają przy obliczeniach wartości puste, więc nie ma konieczności stosowania mechanizmów wykluczających wartości puste.

MySql: Klauzula Having

Klauzula HAVING w SQL według ogólnego wzoru zapytań SELECT wpisywana jest po klauzuli GROUP BY. Działa ona praktycznie tak samo jak słowo kluczowe WHERE z różnicą, że przy WHERE nie mogliśmy używać funkcji grupujących oraz operować na pogrupowanych danych. Klauzula HAVING nam to wszystko umożliwia.

W skrócie funkcja ta może zostać wykorzystana na przykład do wyeliminowania grup danych, które nie spełniają podanego po niej warunku.


Ogólny zapis klauzuli HAVING wygląda następująco:
SELECT kolumna1, kolumna2 FROM tabela GROUP BY kolumna3 HAVING kolumna4 warunek logiczny;
Przykład:
SELECT IDSkoczka,Imię FROM Zawodnicy GROUP BY IDSkoczka HAVING wzrost > 160;
Analizując wiele przykładów/zadań można ułożyc sobie pewien schemat: najpierw grupowanie, potem HAVING.
Używając WHERE zamiast HAVING zostałyby pogrupowane tylko przefiltrowane wyniki, co w rezultacie mogloby nam dać zły wynik!
 

MySql: Nadawanie uprawnień

Nadawanie uprawnień ma duże znaczenie bo przecież bez nich nie jesteśmy w stanie nic zrobić.

  1. Grant all on nazwa_bazy.* to nazwa_uzytkownika; (to polecenie spowoduje ze wszystkie uprawnienia zostaną przypisanego danemu użytkownikowi, a gwiazdka po kropce oznacza, ze zostały nadane do wszystkich tabel)
  2. Grant all on nazwa_bazy.* to nazwa_uzytkownika with grant option; (to polecenie spowoduje dokładnie taki sam wynik jak poprzednie ale „dodatek” with grant option doda nam uprawnienia do nadawania uprawnień.
Czytaj dalej MySql: Nadawanie uprawnień

Polecenia: Data & czas

Polecenia daty i czasu w MySql są bardzo prostymi „składankami” słów z języka angielskiego.

  • now(); – zwraca datę i czas systemowy
  • select now() as data_i_czas;
 
  • curdate(); – zwraca bieżącą date (current date)
  • select curdate() as biezaca_data;
 
  • curtime(); -zwraca bieżący czas (current time)
  • select curtime() a biezacy_czas;
 
  • dayofweek(); – zwraca bieżący dzień tygodnia (1-7)
  • dayofmonth(); – zwraca bieżący dzień miesiąca (1-31)
  • dayofyear(); – zwraca bieżący dzień roku (1-365)
  (current-bieżący)

POLECENIE ALTER TABE

ALTER TABLE zmienia właściwości istniejącej tabeli stworzonej instrukcją CREATE TABLE. Instrukcja może być wykonywana tylko przez właściciela schematu, w którym znajduje się dana tabela.

Polecenia:

1.Dodawanie kolumny

  • ALTER TABLE nazwa_tabeli ADD nazwa_kolumny typ_kolumny AFTER nazwa_istniejącej_kolumny;

2.Usuwanie kolumny

  • ALTER TABLE nazwa_tabelii DROP COLUMN nazwa_kolumny;

3. Zmiana nazwy i typu danych

  • ALTER TABLE nazwa_tabeli CHANGE stara_nazwa nowa_nazwa typ_danych;
  • ALTER TABLE nazwa_tabeli MODIFY nazwa_kolumny typ_danych;

4.Wiązanie tabel

  • ALTER TABLE tabel_podrzędna ADD CONSTRAINT nazwa_relacji FOREIGN KEY (kolumna_podrzędna) REFERENCES kolumna_nadrzędna(nazwa_kolumny);