Сложните SQL заявки: разговор с данните
Как огромни системи, от банки до социални мрежи, намират за части от секундата точно тази информация, която ти трябва, сред милиони записи? Тайната е в езика SQL и в умението да се пишат сложни заявки. В дванайсети клас го овладяваш, защото базите данни са в основата на почти всяка програма.
Как огромни системи, от банки до социални мрежи, намират за части от секундата точно тази информация, която ти трябва, сред милиони записи? Тайната е в езика SQL и в умението да се пишат сложни заявки. В дванайсети клас го овладяваш, защото базите данни са в основата на почти всяка съвременна програма.
Какво е SQL
SQL е езикът, на който говорим с релационните бази данни. Чрез него питаме базата какво съдържа, добавяме, променяме или изтриваме данни. Базата подрежда информацията в таблици от редове и колони, а SQL ни позволява да я извличаме точно и бързо. Простите заявки се учат лесно; истинската сила идва от сложните.
Свързването на таблици
Истинските бази данни рядко държат всичко в една таблица. Информацията е разпределена в много свързани таблици, например клиенти в една и поръчки в друга. За да съберем данни от няколко таблици в един резултат, използваме свързване, на английски JOIN. То е сред най-важните умения при работа с бази данни.
Видовете свързване
Има различни видове свързване. Вътрешното свързване, INNER JOIN, връща само редовете, които отговарят на условието и в двете таблици. Лявото свързване, LEFT JOIN, връща всички редове от лявата таблица, а липсващите съответствия от дясната попълва с празна стойност. Изборът на правилния вид свързване определя какъв резултат ще получиш.
Групирането на данни
Често искаме не отделните редове, а обобщение по групи: колко поръчки има всеки клиент, какъв е общият оборот по месеци. За това служи групирането, GROUP BY, което събира редовете по стойност на дадена колона. Заедно с него работят обобщаващите функции, които смятат върху всяка група.
Обобщаващите функции
Обобщаващите функции пресмятат една стойност от много редове. Функцията за броене връща колко са редовете; други функции смятат сбор, средно, най-голяма или най-малка стойност. В съчетание с групирането те дават мощни отговори: не само какви са данните, а какво ни казват те, обобщено и осмислено.
Филтрирането след групиране
Понякога искаме да филтрираме самите групи, например да покажем само клиентите с повече от десет поръчки. Обикновеният филтър работи върху отделните редове, преди групирането. За филтриране след групирането служи отделна клауза, HAVING. Разликата между двата вида филтриране е тънка, но важна, и често се проверява на изпит.
Премахването на повторения
В резултатите често има повтарящи се стойности. Когато искаме само различните, използваме ключовата дума за уникалност, DISTINCT, която премахва дубликатите. Така от дълъг списък с повторения получаваме кратък списък само с различните стойности. Това е просто, но много полезно средство при анализ на данни.
Заявка в заявката
Най-мощните заявки често съдържат друга заявка вътре в себе си, така наречената подзаявка. Тя пресмята междинен резултат, който външната заявка после използва. Подзаявките позволяват да задаваме сложни въпроси на стъпки, всяка от които е разбираема. Те са знак за зряло владеене на езика на базите данни.
Индексите и скоростта
Когато таблиците станат огромни, скоростта става важна. Индексът е специална структура, която ускорява търсенето, подобно на азбучния указател в края на книга. Без индекс базата преглежда всеки ред; с индекс намира бързо. Затова доброто проектиране на индекси е сред тайните на бързите бази данни.
Чести грешки
Често начинаещите бъркат вътрешно с ляво свързване и губят или добавят редове, без да разбират защо. Друга грешка е да филтрират групи с обикновения филтър вместо със специалната клауза. Трета е да пишат бавни заявки върху големи таблици без индекси. Разбирането на тези тънкости отличава добрия от посредствения резултат.
Защо ти трябва
Данните са сред най-ценните неща в съвременния свят, а SQL е езикът, на който ги питаме. Който го владее, може да извлича смисъл от огромни масиви информация, умение, търсено в почти всяка професия, от програмирането до бизнеса и науката. Затова сложните SQL заявки са сред най-практичните умения, които ще усвоиш.
Представи си две таблици, ученици и оценки, и помисли как би попитал базата коя е средната оценка на всеки ученик. Ще ти трябват свързване, групиране и обобщаваща функция. Това е същината на анализа на данни.
Сега се упражни с играта
💡 Добре е да знаеш
Какво е SQL?
Езикът, на който говорим с релационните бази данни: извличаме, добавяме, променяме и изтриваме данни.
Каква е разликата между INNER и LEFT JOIN?
INNER връща само съвпадащите редове; LEFT връща всички от лявата таблица, а липсващите от дясната попълва с празна стойност.
За какво служи GROUP BY?
Групира редовете по стойност на колона, за да се пресметне обобщение по групи с обобщаваща функция.
Каква е разликата между обикновен филтър и HAVING?
Обикновеният филтър работи преди групирането, върху отделните редове, а HAVING филтрира групите след групиране.
За какво служи индексът в базата данни?
Ускорява търсенето, подобно на азбучен указател в книга. Без него базата преглежда всеки ред.
📖 Всички уроци по Информационни технологии за 12. клас
🚀 Упражнявай се с над 900 игри по програмата на МОН
Започни безплатно, играй по темата и проследявай напредъка си.
Започни безплатно