Do tej pory stworzyliśmy bazę danych, dodaliśmy dwie tabele i wstawiliśmy dane do obu tabel. Teraz przyjrzymy się, jak odzyskać te dane. Ale nie tylko odzyskaj dane, ale zapytanie bazę danych.
SQL oznacza Structured Query Language . To jest Zapytanie trochę, który sprawia, że SQL jest tak potężny. SQL to język, który umożliwia uruchamianie zapytań w stosunku do Twojej bazy danych. Pozwala na zapytanie bazę danych dla żądanych danych.
SQL SELECT Oświadczenie
Jeśli chodzi o zapytania do bazy danych MySQL, SQL SELECT oświadczenie sprawia, że to wszystko jest możliwe. Jest to prawdopodobnie najczęściej używana instrukcja SQL podczas pracy z MySQL. WYBIERZ Instrukcja pozwala opisać MySQL dokładnie, jakie dane chcesz pobrać.
Rozważ następującą instrukcję SQL:
SELECT * FROM Fruit;
Oto wynik:
To jest SELECT oświadczenie w najprostszy sposób. Powyższa instrukcja SQL pobiera wszystkie rekordy z
Fruit
tabela.
Gwiazdka (* ) mówi MySQL, aby zwrócił wszystkie kolumny. Oszczędza to nam czas i wysiłek. Bez tego musielibyśmy wpisać nazwy wszystkich kolumn, które chcielibyśmy zwrócić.
Powiedziawszy to, możesz również powiedzieć MySQL, aby zwracał tylko te kolumny, które chcesz zwrócić. Odbywa się to poprzez nazywanie tylko tych kolumn, które chcesz zwrócić. Tak:
SELECT FruitId, FruitName FROM Fruit;
Oto wynik:
Powyższa instrukcja SQL wybiera FruitId i FruitName kolumny z Owoców tabela.
Może to zmniejszyć bałagan, dzięki czemu zobaczysz tylko te kolumny, które Cię interesują. Może to również zwiększyć wydajność, ponieważ MySQL (i każda używana aplikacja) nie musi wykorzystywać cennych zasobów, aby zwracać niepotrzebne dane.
Ponownie, to zapytanie pobiera wszystkie records from the table — MySQL zwróci wszystkie rekordy, chyba że określono inaczej.
GDZIE Klauzula
Możesz dodać GDZIE klauzula, aby zawęzić zestaw wyników tylko do tych rekordów, które Cię interesują. W ten sposób:
SELECT * FROM Fruit WHERE UnitId = 1;
Wynik:
Powyższe zapytanie zwraca wszystkie rekordy z
Owoc
tabela, w której
UnitId
kolumna ma wartość 1 .
Podzapytania — zagnieżdżone SELECT Oświadczenia
Co by było, gdybyśmy nie znali
UnitId
? Co by było, gdybyśmy wiedzieli, że należy szukać tylko tych rekordów o nazwie jednostki Sztuka? ?
Łatwo! Moglibyśmy przepisać powyższy przykład, aby użyć zagnieżdżonego SELECT instrukcja (znana również jako podzapytanie ), który wysyła zapytanie do innej tabeli (
Jednostki
stół). Dzięki temu będziemy mogli użyć rzeczywistej jednostki nazwa (zamiast jego identyfikatora), ponieważ druga tabela zawiera to w UnitName pole:
SELECT * FROM Fruit
WHERE UnitId =
(SELECT UnitId
FROM Units
WHERE UnitName = 'Piece'); Wynik:
Tutaj używamy zagnieżdżonego SELECT oświadczenie (np. SELECT instrukcja w SELECT oświadczenie) do zapytania o
jednostki
tabela dla
UnitId
rekordu zawierającego Sztuka jako jego
UnitName
wartość. Możemy to zrobić, ponieważ
Fruit.UnitId
kolumna jest kluczem obcym do
Units.UnitId
kolumna.
Oto więcej przykładów podzapytań, jeśli jesteś zainteresowany.
Korzystanie z SQL JOIN
Idąc o krok dalej, moglibyśmy przepisać nasz zagnieżdżony SELECT oświadczenie w INNER JOIN .
W SQL JOIN umożliwia wysyłanie zapytań do wielu tabel, które udostępniają dane. W naszym przypadku obie tabele mają wspólny UnitId więc można powiedzieć, że są „połączone” przez to pole.
Istnieją różne typy złączeń w SQL, jednak nas interesuje głównie INNER JOIN na razie.
DOŁĄCZENIE WEWNĘTRZNE składnia wygląda tak:
SELECT * FROM table_name_1 INNER JOIN table_name_2 ON table_name_1.column_name = table_name_2.column_name
Możemy więc przepisać nasze podzapytanie z poprzedniego przykładu w następujący sposób:
SELECT Fruit.* FROM Fruit INNER JOIN Units ON Fruit.UnitId = Units.UnitId WHERE Units.UnitName = 'Piece';
Wynik:
Określiliśmy Fruit.* zamiast po prostu * ponieważ chcieliśmy zwrócić tylko wszystkie kolumny z
Owoc
stół. Gdybyśmy użyli * , zapytanie zwróciłoby wszystkie kolumny z obu tabel.
Sprawdź także LEFT JOIN i PRAWY DOŁĄCZ aby zobaczyć, jak możesz uzyskać różne dane w zależności od typu połączenia.
Podzapytanie a DOŁĄCZ ?
Teraz, gdy znasz już dwie metody osiągnięcia tego samego wyniku, prawdopodobnie zastanawiasz się, która z nich jest lepsza?
Podzapytania są zwykle bardziej czytelne (i być może łatwiejsze do zrozumienia), co może ułatwić początkującym zrozumienie.
Jednak wielu programistów SQL znajduje JOIN s bardziej wydajne i wydajniejsze. Jeśli napotkasz problemy z wydajnością zapytań lub aplikacji, spróbuj przekonwertować dowolne podzapytania na JOIN s lub na odwrót (w niektórych przypadkach podzapytanie może działać lepiej).
Ponadto mogą wystąpić przypadki, w których podzapytanie jest jedyną opcją, więc to również należy wziąć pod uwagę.
Więcej operatorów
Nasze dotychczasowe zapytania zawierały znak równości (= ). Nazywa się to operatorem . Dokładniej jest to operator porównania ponieważ porównuje jedno wyrażenie z drugim.
Istnieje wiele innych operatorów, których możesz użyć w swoich zapytaniach. Mogą one znacznie pomóc w zawężeniu zestawu wyników tylko do tych rekordów, których potrzebujesz. Często zdarza się, że baza danych zawiera miliony rekordów. Nawet jeśli masz tylko tysiące rekordów, próba znalezienia jednego rekordu (lub nawet tylko kilku) spośród tysięcy byłaby bardzo trudnym zadaniem, gdybyś nie miał do dyspozycji tych operatorów.
Oto niektóre z najczęściej używanych operatorów SQL.
> Operator
Możesz użyć > operatora, aby wybrać dane, które są większe niż podana wartość.
SELECT * FROM Fruit WHERE Inventory > 10;
< Operator
Możesz użyć < operatora, aby wybrać dane, które są mniejsze niż podana wartość.
SELECT * FROM Fruit WHERE Inventory < 10;
<> Operator
Możesz użyć <> operatora, aby wybrać dane mniejsze niż i większa niż podana wartość.
SELECT * FROM Fruit WHERE Inventory <> 10;
>= Operator
Możesz użyć >= operatora, aby wybrać dane, które są większe lub równe danej wartości.
SELECT * FROM Fruit WHERE Inventory >= 10;
<= Operator
Możesz użyć <= operatora, aby wybrać dane, które są mniejsze lub równe danej wartości.
SELECT * FROM Fruit WHERE Inventory <= 10;
ORAZ Operator
Możesz dodać ORAZ operator do GDZIE klauzulę, aby ograniczyć wybór tylko do tych rekordów, które spełniają dwa warunki (lub więcej, jeśli uwzględnisz więcej ORAZ operatorów).
Oto przykład:
SELECT * FROM Fruit WHERE Inventory > 10 AND DateEntered > '2015-01-15';
LUB Operator
Możesz użyć LUB operatora, aby poszerzyć wybór do więcej niż jednego kryterium. Jak sama nazwa wskazuje, LUB klauzula pozwala wybrać dane, których kryteria są następujące LUB że. Więc ORAZ operator limity Twój wybór i LUB operator rozszerza to.
Oto przykład:
SELECT * FROM Fruit WHERE UnitId = 1 OR UnitId = 2;
POMIĘDZY Operator
Użyj POMIĘDZY operatora, aby wybrać dane, które znajdują się między dwiema podanymi wartościami.
SELECT * FROM Fruit WHERE DateEntered BETWEEN '2015-01-25' AND '2015-02-25';
NIE Operator
Użyj NIE operatora, aby wybrać dane, które nie odpowiednikiem danego warunku.
SELECT * FROM Fruit WHERE NOT (FruitName = 'Apple');