poniedziałek, 26 września 2016

MYSQL PART I: Moje pierwsze zapytania wyszukujące w bazach danych



Hejo,

Jestem zadowolony, MySQL okazuje się póki co ultra prostym i intuicyjnym systemem zarządzania bazami danych. Podzielę się szybko tym, co zanotowałem.

Bawiłem się na serwerze zdalnym, localhoście, przy pomocy programu opensource'owego XAMPP. Zbudowałem na nim swoją pierwszą bazę danych, skonfigurowałem serwer, a wszystko po to, by nauczyć się pierwszych komend wyszukowania w 'eskłelu'.

Oto, co udało mi się nauczyć i wydobyć. Wszystko jest ultra intuicyjnę, a w bonusie na końcu zamieszczę poradnik z którego przyszło mi się uczyć, a który serdecznie polecam.

Widok panelu administracyjnego mojego serwera bazy danych, gdzie tworzyłem swoją pierwsza bazę na zasadzie pytań egzaminacyjnych.

localhost/phpmyadmin okazał się rozwiązaniem na tyle intuicyjnym, że nie miałem z nim większych problemów : )

Nauczyłem się tworzyć tabelę, a w niej kolumny, rekordy, nadawać wartości poszczególnym polom, opisywać to, w jaki sposób te wartości będą opisywane etc.

Przed powstaniem pierwszego rekordu, misiaczki. 

Po tych krokach mogłem przejść bezpośrednio do zabawy wyszukiwania poszczególnych wartości, sortowania bazy danych, wyszukiwania zaawansowanego, a to wszystko za pomocą prostej linii kodu  )

Pozwoliłem zapisać sobie wszystkie najważniejsze imho informację.

DBMS = Database Management System lub po polskiemu - System zarządzania bazą danych = SZBD

klienci DBMS to: MySQL, PostgreSQL, Firebird oraz Oracle DATABASE.

SQL = S

Baza danych to uporządkowany zbiór danych (informacji) zazwyczaj zorganizowany jako zestaw tabel powiązanych relacjami.

Przykłady bazy danych to: książka telefoniczna, katalog bibliotek, użytkownicy FB itd.

Baza danych zawsze składa się z tabel! 

Tabele złożone są z wierszy oraz kolumn.

Tabele to nic innego, jak pojemnik na dane. Kolekcja powiązanych informacji, przedstawiana zwykle jako układ poziomych wierszy i pionowych kolumn. W jednej bazie danych może być ich bardzo wiele i wówczas występują między nimi powiązania logiczne (relacje) 

Rekord (krotka) to pojedynczy wiersz w tabeli, czyli zestaw pól w niej wystepujących Np. może być to zestaw cech danego auta.

Pole (atrybut) to część tabeli przechowująca jednostkowe dane np. nazwisko konkretnej osoby w tabeli

REKORD NIE MUSI ZAWIERAĆ WSZYSTKICH CECH OBIEKTU

Klucz podstawowy (PRIMARY KEY) lub też klucz główny to jedno lub więcej pól, których wartośc jednoznacznie identyfikuje każdy rekord w tabeli. Taka cecha klucza nazwana jest unikatowością.

W MySQL wykorzystuje się model relacyjny bazy danych. W modelu tym dzielimy dane w bazie na tabele i definiujemy w tabelach pola będące tzw. kluczami. Następnie określa się relacje istniejące pomiędzy tabelami, które łączą dane w logiczną całość, zrozumiała dla osób korzystających z bazy.

Relacja - powiązania logiczne wystepujące pomiędzy dwoma tabelami realizowane za pomocą klucza podstawowego i klucza obcego albo specjalnej tabeli (tabela łącząca). Każda relacja opisana jest przez typ relacji. Rozróżniamy następujące typy relacji: jeden-do-jednego, jeden-do-wielu, wiele-do-wielu : )

Typy danych - w każdej kolumnie tabeli w bazie przechowywane są dane jednakowego typu:

ZAPISY TYPU DANYCH w MYSQL : ) 

INT - liczba całkowita (zajmuje 4 bajty w pamięci RAM) z zakresu od -2.147.483.648 do 2.147.483.647 (liczba można komfortowo ze sobą porównywać)

CHAR[x] - pole przechowujące od 0 do max. 255 znaków

VARCHAR[x] - pole tekstowe o zmiennej długości

FLOAT - liczba rzeczywista ale zmiennoprzecinkowa (np. 3,14)

TEXT - napis (łańcuch znaków)

LONGTEXT - tekst o długim łancuchu znaków

DATE - przechowuje datę w formacie RRRR_MM_DD

TIME - format GG:MM:SS

A_I - AUTO INCEREMENT - automatyczna inkrementacja (++) - wygodna sprawa :) mysql sam policzy, który rekord wstawiamy do bazy : ) 

SQL = Structured Query Language - strukturalny język zapytań (kierowany do bazy danych ;) )

query = kwerenda* czyli zapytanie do bazy - czyli komendy do administrowani ich zawartością : ) 

Rodzaje kwerend: 

- wstawiające, 
- wyszukujące,
- zmieniające,
- usuwające,
- zmieniające strukturę tabel albo bazy,

Funkcja PHP mysql_query() umożliwia skryptowi PHP wysłanie kwerendy do bazy: mysql_query(ZAPYTANIE SQL);
Funkcja zdeprecjonowana od PHP w wersji 5.5.0 została zasąpiona mysqli_query lub PDO::query 

podstawowe zapytania wyszukujące

SELECT (wybierz) * (gwiazdka oznacza wybierz wszystko - w tym przypadku wszystkie kolumny z tabeli) FROM (z) pytania (nazwa mojej bazy danych) 

SELECT tresc FROM pytania - wybierz tylko kolumnę treść z całej tabeli zapytania.

Jeżeli chcemy wbierać kilka nazw kolumn, to analogicznie wybieramy wszystko po przecinku : ) 

czyli 

SELECT tresc, odpa, odpb (ostatnie bez przecinka) etc FROM pytania

Jeżeli chcemy wybrać konkretny rekord z określonym przez nas warunkiem (np. id - w tym przypadku będzie to nasz primary key z numerem 15) to sprawa jest prosta. 

SELECT (WYBIERZ) * (WSZYSTKO) FROM (Z TABELI) pytania WHERE (SŁOWO KLUCZ w tym przypadku czyli "GDZIE) id=15 (nasze id równe jest 15) (tutaj ciekawostka - tutaj nadanie wartości wyrażane jest pojedynczym operatorem porównania "=", w C++ nadanie wartosci wyrażamy dwoma znakami równości "=="). 

Podobna sprawa z C++ w MySQL - wszystkie pola tekstowe w zapytaniach (te z warotścią text) umieszamy w cudzysłowiach, tak, aby maszyna wiedziała, kiedy tekst się kończy, a kiedy się zaczyna.

Dajmy na to, że szukamy tylko tylko rekordów, w których poprawną odpowiedzią będzie odpowiedź A. 

stąd logicznie

SELECT * FROM pytania WHERE answer="a" 

dla odmiany, jeśli będziemy wyszukiwać wartości, które są liczbamy całkowitymi (INT) albo też liczbami po przecinku (przyda się do budowania baz danych np. sklepów internetowych z cenami 12,99 zł) (FLOAT) nie musimy wstawiać w ramy cudzysłowiu ale również możemy - wartości podczas przypisywania zawsze będą odczytane przez maszynę w ramach "", aczkolwiek lepiej liczby całkowite lub nie zapisywać bez "" dla przejrzystości zapytań : ) 

spójniki logiczne są dwa: I oraz LUB (AND, OR) 

Jezeli dwa lub więcej warunków ma być spełnionych używamy and o zapisie "&&" - warunek1 && warunek2 to już wiemy z C++, w MySQL wystarczy zapisać to endem znanym z C++ (&&) lub po prostu komendą... "AND" :D (po co utrudniać sobie życie?)
Jeżeli jeden warunek z wielu ma być spełniony to używamy zapisu warunek1 || warunek2 albo słowo "OR" :) 

Reasumując - AND = część wspólna wyników (koniunkcja), a OR = suma (alternatywa) jeśli ktoś lubi porównania matematyczne : ) 

Jak zrobić sortowanie? : ) komendą ORDER BY (order - porządek by - według) 
Sortować możemy malejąco, bądź rosnąco i teraz:

ASC = ascending (rosnąco) i dodajemy tę komendę już po tym, jak wybierzemy daną wartość do posortowania np: 

SELECT * FROM pytania ORDER BY tresc ASC 

DESC = descending (malejąco) i reszta analogicznie, jak w przypadku ascending : )

Jeżeli nie uszczególnimy kierunku sortowania to domyślnie sortować będziemy rosnąco : ) 

Oczywiście możemy używać warunków matematycznych, jeśli chcielibyśmy wybrać tylko te dane bazy danych, których wartości PRIMARY KEY sa większe od 10 ale mniejsze od 15 to nic trudnego - zapiszemy to w ten sposób:

SELECT id, tresc FROM pytania WHERE id>=10 AND id<=15 TADAM!

Jest jednak specjalne słowo kluczowe dla przedziałów w MySQL! : ) i tak, również z angielskiego ta komenda to BETWEEN (pomiędzy), zapisujemy to wtedy tak:

SELECT id, tresc FROM pytania WHERE id BETWEEN 10 AND 15 TADAM2! - zadziała jak poprzednio ale taki zapis jest bardzej pro ^_^

Jeśli chcemy wyszukać po pierwszych słowach w treści to również nic trudnego! 

SELECT * FROM pytania WHERE tresc LIKE (podobny do, nie myl z lajkiem z fb) "Jak%" - symbol procenta oznacza to, że po treści Jak może znajdować się obojętnie jaka treść. Dlaczego nie używamy do tego gwiazdki "*"? Ano dlatego, że gwiazdka jest już zajeta na początku pierwszej linii przy SELECT :) 

Analogicznie, jeśli chcemy wyszukać wszystkich rekordów ze słowem C++ w bazie danych to użyjemy komendy: 

SELECT * FROM pytania WHERE tresc LIKE "%C++%" - polecenie znajdzie nam wszystkie spełniające kryteria rekordy ale tylko w treści. Jeśli chcemy to rozwinąć to komendę będziemy musieli rozpisać o dodatkowe kryteria i tak:

SELECT * FROM pytania WHERE tresc LIKE "%C++%" OR odpa LIKE "%C++%" OR odpb LIKE "%C++%" i analogicznie : ) 

Idąc tym tropem możemy używać zapytań bardziej ambitnie. Rozszyfrujcie sobie to polecenie: 

SELECT * FROM pytania WHERE (kategoria="programowanie" OR kategoria="systemy operacyjne i sieci") AND rok=2012 

Polecam serdecznie zapoznać się również z TUTORKIEM świetnego Pana M.Z. : )




Pozdrówki! 

F.

1 komentarz:

  1. Jeśli chodzi o zapytania do bazy mysql to jest wiele poradników tego typu, chociaż gratuluję autorowi pomysłowości. Może napiszesz jakiś poradnik odnośnie wdrażania płatności w sklepie internetowym na przykładzie https://www.cashbill.pl/integracja/integracja-platnosci-online-sstore ?

    OdpowiedzUsuń