[MySQL|MariaDB|SQL] Wyszukiwanie danych

W dzisiejszym świecie internetu, poszukiwanie informacji stało się kluczowym elementem korzystania z niego. Dzięki zaawansowanym algorytmom wyszukiwarek, znalezienie porządanych informacji stało się szybkie i proste. Nic nie stoi na przeszkodzie, aby użytkownikom Twojej strony również umożliwić szybkie odnalezienie informacji poprzez stworzenie wyszukiwarki. W tym wpisie omówimy wyszukiwanie danych z bazy SQL np. MariaDB na podstawie podanych parametrów.

Na potrzeby tego wpisu załóżmy, że mamy tabelę "cars" z przykładowymi rekordami:

| id | car_name   | engine_capacity | max_speed (km/h)  | power |
|----|------------|-----------------|-------------------|-------|
| 1  | Toyota     | 1.8             | 180.0             | 140.00|
| 2  | Ford       | 2.0             | 200.0             | 180.00|
| 3  | Volkswagen | 1.6             | 190.0             | 110.00|
| 4  | BMW        | 3.0             | 250.0             | 300.00|
| 5  | Audi       | 2.5             | 240.0             | 250.00|

Jeśli chcemy wyszukać samochód po parametrze `max_speed`, tworzymy następujące zapytanie:

$max_speed_query = 200;

$sql = 'SELECT * FROM cars WHERE max_speed <= :max_speed';

Powyższe zapytanie wyszuka wszystkie auta, które mają max_speed=200. Jeśli takich rekordów będzie więcej, a jest potrzeba pobrania tylko jednego, dodajmy klauzulę LIMIT 1:

$sql = 'SELECT * FROM cars WHERE max_speed <= :max_speed' LIMIT 1;

Jeśli chcemy wyszukiwać po danym zakresie np. od - do danej prędkości, trzeba nieco zmodyfikować zapytanie:

$min_speed_query = 180;
$max_speed_query = 250;

$sql = 'SELECT * FROM cars WHERE max_speed >= :min_speed AND max_speed <= :max_speed';

Operator LIKE

Składnia operatora LIKE jest następująca:

SELECT * FROM tabela WHERE kolumna LIKE 'wartość';

Operatora LIKE używa się w połączeniu z wyrażeniem regularnym, które jest wzorcem do porównania z wartościami w kolumnie. Wyrażenie regularne może zawierać specjalne znaki, które pozwalają na bardziej zaawansowane wyszukiwanie.

Przykładowo, jeśli chcemy znaleźć wszystkie rekordy, których kolumna `car_name` zaczyna się od litery 'F', możemy użyć następującego zapytania:

SELECT * FROM cars WHERE car_name LIKE 'F%';

Znak '%' jest tzw. znakiem wieloznacznym (wildcard), który oznacza, że może wystąpić dowolny ciąg znaków. W tym przypadku oznacza to, że szukamy wszystkich rekordów, których kolumna `car_name` zaczyna się od litery 'F', niezależnie od tego, jakie są kolejne znaki.

Możemy również użyć znaku '_' (podkreślenie) jako znaku wieloznacznego, który oznacza, że dokładnie jeden znak powinien wystąpić na tym miejscu. Na przykład, jeśli chcemy znaleźć wszystkie rekordy, których kolumna `car_name` ma trzy znaki i zaczyna się od litery 'B', możemy użyć następującego zapytania:

SELECT * FROM cars WHERE car_name LIKE 'B__';

Operatora LIKE można również używać w połączeniu z innymi operatorami, takimi jak AND, OR, NOT, aby przeprowadzać bardziej zaawansowane wyszukiwania. Na przykład, jeśli chcemy znaleźć wszystkie rekordy, których kolumna `car_name` zaczyna się od litery 'F' i kończy na literę 'T', możemy użyć następującego zapytania:

SELECT * FROM cars WHERE car_name LIKE 'F% T';

Warto również zauważyć, że operator LIKE jest wrażliwy na wielkość liter. Oznacza to, że 'F' i 'f' będą traktowane jako różne znaki. Jeśli chcemy przeprowadzić wyszukiwanie, które jest niezależne od wielkości liter, możemy użyć funkcji UPPER() lub LOWER().

Na przykład, jeśli chcemy znaleźć wszystkie rekordy, których kolumna `car_name` zaczyna się od litery 'F', niezależnie od wielkości liter, możemy użyć następującego zapytania:

SELECT * FROM cars WHERE UPPER(car_name) LIKE 'F%';

Pomijanie duplikatów

Gdy w tabeli jest więcej takich samych rekordów i chcemy pominąć powtarzające się, należy użyć klauzuli DISTINCT:

SELECT DISTINCT car_name FROM cars';

Komentarze

Popular

[C++] Jak obliczyć pole i obwód trapezu?

[HTML] Jak wyśrodkować tekst?

[PHP|HTML] Odświeżenie strony