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');