Досега създадохме база данни, добавихме две таблици и вмъкнахме данни в двете таблици. Сега ще разгледаме как да извлечем тези данни. Но не само извличане данните, но за запитване базата данни за него.
SQL означава Structured Query Language . Това е Запитването малко, което прави SQL толкова мощен. SQL е език, който ви позволява да изпълнявате заявки срещу вашата база данни. Позволява ви да запитвате базата данни за данните, които искате.
SQL SELECT
Изявление
Когато става въпрос за запитване на вашата MySQL база данни, SQL SELECT
изявлението прави всичко възможно. Това вероятно ще бъде най-често използваният ви SQL израз, когато работите с MySQL. SELECT
изявлението ви позволява да опишете на MySQL точно какви данни искате да извлече.
Помислете за следния SQL израз:
SELECT * FROM Fruit;
Ето резултата:
Това е SELECT
най-простото изявление. Горният SQL оператор извлича всички записи от
Fruit
таблица.
Звездичката (*
) казва на MySQL да върне всички колони. Това ни спестява време и усилия. Без това ще трябва да напишем имената на всички колони, които бихме искали да върнем.
Като каза това, можете също да кажете на MySQL да връща само онези колони, които искате да върнете. Това се прави чрез именуване само на онези колони, които искате да бъдат върнати. Като това:
SELECT FruitId, FruitName FROM Fruit;
Ето резултата:
Горният SQL оператор избира FruitId и FruitName колони от Плодове таблица.
Това може да намали претрупването, така че да виждате само онези колони, които ви интересуват. Това също може да повиши производителността, тъй като MySQL (и всяко приложение, което използвате) не трябва да използва ценни ресурси за връщане на ненужни данни.
Отново тази заявка извлича всички записи от таблицата — MySQL ще върне всички записи, освен ако не е посочено друго.
WHERE
Клауза
Можете да добавите WHERE
клауза, за да стесните резултата само до онези записи, които ви интересуват. Така:
SELECT * FROM Fruit WHERE UnitId = 1;
Резултат:
Горната заявка връща всички записи от
Fruit
таблица, където
UnitId
колоната има стойност 1
.
Подзаявки — Вложен SELECT
Изявления
Ами ако не знаехме
UnitId
? Ами ако знаехме само да търсим тези записи с име на единица Piece
?
Лесно! Бихме могли да пренапишем горния пример, за да използваме вложен SELECT
израз (известен иначе като подзаявка ), който отправя заявка към друга таблица (
Units
таблица). Това ще ни позволи да използваме действителното име на единицата (а не неговия идентификатор), защото втората таблица съдържа това в UnitName
поле:
SELECT * FROM Fruit WHERE UnitId = (SELECT UnitId FROM Units WHERE UnitName = 'Piece');
Резултат:
Тук използваме вложен SELECT
оператор (т.е. SELECT
израз в SELECT
изявление), за да направите заявка за
Units
таблица за
UnitId
на записа, който съдържа Piece
като
Име на единица
стойност. Можем да направим това, защото
Fruit.UnitId
колоната е външен ключ към
Units.UnitId
колона.
Ето още примери за подзаявки, ако се интересувате.
Използване на SQL JOIN
Като направим още една крачка напред, бихме могли да пренапишем нашия вложен SELECT
изявление в INNER JOIN
.
В SQL, JOIN
ви позволява да заявявате множество таблици, които споделят данни. В нашия случай и двете таблици споделят UnitId
така че можете да кажете, че те са "присъединени" от това поле.
Има различни типове присъединявания в SQL, но ние се интересуваме основно от INNER JOIN
засега.
INNER JOIN
синтаксисът е така:
SELECT * FROM table_name_1 INNER JOIN table_name_2 ON table_name_1.column_name = table_name_2.column_name
Така че можем да пренапишем нашата подзаявка от предишния пример на следното:
SELECT Fruit.* FROM Fruit INNER JOIN Units ON Fruit.UnitId = Units.UnitId WHERE Units.UnitName = 'Piece';
Резултат:
Посочихме Fruit.*
вместо просто *
защото искахме само да върнем всички колони от
Плодове
маса. Ако използвахме *
, заявката би върнала всички колони от двете таблици.
Вижте също LEFT JOIN
и RIGHT JOIN
за да видите как можете да получите различни данни в зависимост от типа на присъединяване.
Подзаявка срещу JOIN
?
Сега, след като видяхте два метода за постигане на един и същ резултат, вероятно се чудите кой е по-добър?
Подзаявките обикновено са по-четливи (и може би по-лесни за разбиране), което може да улесни разбирането от начинаещи.
Въпреки това, много SQL програмисти намират JOIN
е по-ефективен и работи по-добре. Ако срещнете проблеми с производителността на вашите заявки или приложение, опитайте да конвертирате всички подзаявки в JOIN
s или обратно (в някои случаи подзаявката може да се представи по-добре).
Освен това може да има случаи, в които подзаявката е единствената ви опция, така че това също трябва да се има предвид.
Още оператори
Всички наши заявки досега съдържаха знак за равенство (=
). Това се нарича оператор . По-точно това е оператор за сравнение тъй като сравнява един израз с друг.
Има много повече оператори, които можете да използвате във вашите заявки. Те могат да помогнат значително за стесняване на набора от резултати само до онези записи, които са ви необходими. Не е необичайно базата данни да съдържа милиони записи. Дори ако имате само хиляди записи, опитите да намерите един запис (или дори само шепа) сред хиляди би било много обезсърчаваща задача, ако не разполагате с тези оператори на ваше разположение.
Ето някои от най-често използваните SQL оператори.
>
Оператор
Можете да използвате >
оператор, за да изберете данни, които са по-големи от дадена стойност.
SELECT * FROM Fruit WHERE Inventory > 10;
<
Оператор
Можете да използвате <
оператор, за да изберете данни, които са по-малко от дадена стойност.
SELECT * FROM Fruit WHERE Inventory < 10;
<>
Оператор
Можете да използвате <>
оператор, за да изберете данни, които са едновременно по-малко от и по-голяма от дадена стойност.
SELECT * FROM Fruit WHERE Inventory <> 10;
>=
Оператор
Можете да използвате >=
оператор за избор на данни, които са по-големи или равни на дадена стойност.
SELECT * FROM Fruit WHERE Inventory >= 10;
<=
Оператор
Можете да използвате <=
оператор за избор на данни, които са по-малки или равни на дадена стойност.
SELECT * FROM Fruit WHERE Inventory <= 10;
AND
Оператор
Можете да добавите AND
оператор към WHERE
клауза, за да ограничите избора си само до онези записи, които отговарят на две условия (или повече, ако включите повече AND
оператори).
Ето един пример:
SELECT * FROM Fruit WHERE Inventory > 10 AND DateEntered > '2015-01-15';
OR
Оператор
Можете да използвате OR
оператор, за да разширите избора си до повече от един критерий. Както подсказва името, OR
клаузата ви позволява да изберете данни, при които критериите са или това ИЛИ че. Така че AND
оператор ограничения вашия избор и OR
оператор разширява го.
Ето един пример:
SELECT * FROM Fruit WHERE UnitId = 1 OR UnitId = 2;
BETWEEN
Оператор
Използвайте BETWEEN
оператор, за да изберете данни, които са между две дадени стойности.
SELECT * FROM Fruit WHERE DateEntered BETWEEN '2015-01-25' AND '2015-02-25';
NOT
Оператор
Използвайте NOT
оператор, за да изберете данни, които не еквивалентно на дадено условие.
SELECT * FROM Fruit WHERE NOT (FruitName = 'Apple');