Bir nechta jadvallar birlashtirish, «Join»lar bilan ishlash JOIN operatori, ikki yoki undan ortiq jadvallardagi qatorlarni ular orasidagi bog'liq ustunga asoslanib birlashtirish uchun ishlatiladi.
MySQL da JOIN operatorining quyidagi turlari mavjud:
INNER JOIN
LEFT JOIN
RIGHT JOIN
CROSS JOIN
INNER JOIN – kalit so’zi ikki jadvalda ham aniqlangan qiymatlarni tanlaydi. Sintaksis quyidagicha:
SELECT column_list
FROM table_1
INNER JOIN table_2 ON join_condition;
SELECT column_name(s) FROM table1 INNER JOIN table2 ON table1.column_name = table2.column_name;
SELECT
select_list
FROM t1
INNER JOIN t2 ON join_condition1
INNER JOIN t3 ON join_condition2
...;
Agar JOIN sharti teng operatori(=) ni ishlatsa va ikkala jadvaldagi solishtiralayotgan ustunlar nomi bir xil bo’lsa USING operatoridan foydalanish mumkin:
SELECT column_list
FROM table_1
INNER JOIN table_2 USING (column_name);
SELECT
productCode,
productName,
textDescription
FROM
products t1
INNER JOIN productlines t2
ON t1.productline = t2.productline;
SELECT
productCode,
productName,
textDescription
FROM
products
INNER JOIN productlines USING (productline);
SELECT
orderNumber,
productName,
msrp,
priceEach
FROM
products p
INNER JOIN orderdetails o
ON p.productcode = o.productcode
AND p.msrp > o.priceEach
WHERE
p.productcode = 'S10_1678';
LEFT JOIN kalit so'zi chapdagi jadvaldan (table1) barcha yozuvlarni, o'ngdagi jadvaldan (table2) mos keladigan yozuvlarni qaytaradi. Agar moslik bo'lmasa, natija o'ng tomondagi jadval ustunlari uchun NULL bo'ladi.
LEFT JOIN sintaksisi quyidagicha:
SELECT
select_list
FROM
t1
LEFT JOIN t2 ON
join_condition;
Misol uchun quyidagi jadvallarni ko’rib chiqamiz
SELECT
customers.customerNumber,
customerName,
orderNumber,
status
FROM
customers
LEFT JOIN orders ON
orders.customerNumber = customers.customerNumber;
SELECT
c.customerNumber,
customerName,
orderNumber,
status
FROM
customers c
LEFT JOIN orders o
ON c.customerNumber = o.customerNumber;
Mos kelmagan satrlarni toppish:
SELECT
c.customerNumber,
c.customerName,
o.orderNumber,
o.status
FROM
customers c
LEFT JOIN orders o
ON c.customerNumber = o.customerNumber
WHERE
orderNumber IS NULL;
RIGHT JOIN kalit so'zi o’ng jadvaldan (table1) barcha yozuvlarni, chapdagi jadvaldan (table2) mos keladigan yozuvlarni qaytaradi. Agar moslik bo'lmasa, natija chap tomondagi jadval ustunlari uchun NULL bo'ladi.
LEFT JOIN sintaksisi quyidagicha:
SELECT
select_last
FROM t1
RIGHT JOIN t2 ON
join_condition;
Misol uchun quyidagi jadvallarni ko’rib chiqamiz
SELECT
employeeNumber,
customerNumber
FROM
customers
RIGHT JOIN employees
ON salesRepEmployeeNumber = employeeNumber
ORDER BY
employeeNumber;
CROSS JOIN kalit so’zi jadvallar orasidagi satrlarning Kartesian ko’paytmasini qaytaradi.
Natijaviy to'plam ikkala jadvalning barcha qatorlarini o'z ichiga oladi, bu erda har bir satr birinchi jadvaldagi qatorning ikkinchi jadvaldagi qator bilan birikmasidir.
CROSS JOIN operatori sintaksisi quyidagicha:
SELECT * FROM t1
CROSS JOIN t2;
MySQL qism so’rovi - bu boshqa so'rovga kiritilgan so'rov, masalan, SELECT, INSERT, UPDATE yoki DELETE larga. Bundan tashqari, qism so’rov boshqa qism so’rov ichida joylashtirilishi mumkin.
MySQL qism so'rovi ichki so'rov, qism so'rovini o'z ichiga olgan so'rov esa tashqi so'rov deb ataladi. Qism so’rov ifoda bo’lishi mumkin bo’lgan har qanday joyda ishlatilishi mumkin va qavs ichida joylashishi kerak.
=,>,< kabi operatorlarni qism so’rov natijasi yagona qiymatga ega bo’lganda ishlatishingiz mumkin
Agar qism so’rov birdan ko’p qiymat qaytarsa, IN yoki NOT IN kabi operatorlardan foydalanishingiz mumkin.
FROM bandida qism so’rovdan foydalanganda, qism so’rovdan qaytarilgan natija to'plami vaqtinchalik jadval sifatida ishlatiladi. Ushbu jadval olingan jadval yoki moddiy qism so’rov deb nomlanadi.
Qism so’rov tashqi so’rovdagi jadvalga murojaat qilsa o’zaroq bog’liq qism so’rov hisoblanadi. Misol uchun:
SELECT * FROM t1
WHERE column1 = ANY (SELECT column1 FROM t2
WHERE t2.column2 = t1.column2);
MySQL qism so’rovi EXISTS va NOT EXISTS lar bilan ishlatish.
EXISTS yoki NOT EXISTS operatori bilan qism so'rov ishlatilganda, qism so'rov TRUE yoki FALSE mantiqiy qiymatini qaytaradi. Quyidagi so'rovda EXISTS operatorida ishlatiladigan qism so’rov tasvirlangan:
SELECT
*
FROM
table_name
WHERE
EXISTS( subquery );
Yuqoridagi so'rovda, agar qism so'rov biron bir qatorni qaytarsa, EXISTS qism so'rovi TRUE qaytaradi, aks holda FALSE.
MySQLda funktsiya saqlanadigan dastur bo'lib, siz parametrlarni berishingiz va shunga mos qiymatni qaytarishingiz mumkin.
SQL tilida LIKE operatori biror bir shablondagi qiymatni topish uchun WHERE kalit so'zi bilan ishlatiladi. LIKE operatori bilan ko'pincha 2 xil turdagi usul (wildcard) ishlatiladi:
•Foiz (%) belgisi, nol, bir yoki bir nechta belgilarni bildiradi;
•Tagchiziq (_) belgisi faqatgina bitta belgini bildiradi.
LIKE operatorini sintaksisi quyidagicha:
SELECT ustun1, ustun2, .. FROM jadval_nomi WHERE ustun LIKE shablon;
IN operatori WHERE operatorida bir nechta ustunlarni aniqlashtirish uchun ishlatiladi. IN operatori bir nechta OR shartlarining qisqacha shakli hisoblanadi.
IN operatorining 2 xil sintaksisi mavjud:
SELECT ustun_nom(lar)i FROM jadval_nomi WHERE ustun_nomi IN (qiymat1, qiymat2, ...);
Keling, yuqoridagi jadvaldan yoshi 25 yoki 23 yoki 18 bo'lgan xaridorlarni topamiz.
SELECT * FROM Xaridorlar WHERE XaridorYoshi IN (25, 23, 18);
BETWEEN operatori berilgan oraliqdagi qiymatlarni tanlash uchun ishlatiladi. Qiymatlar son, satr yoki sana-vaqt bo'lishi mumkin. Sintaksisi quyidagicha:
SELECT ustun_nom(lar)i FROM jadval_nomi WHERE ustun_nomi BETWEEN qiymat1 AND qiymat2;
Endi bir nechta oddiy va murakkab so'rovlar yozamiz. Dastlab yuqoridagi jadvaldan yoshi 25 va 30 orasidagi xaridorlarni topadigan SQL so'rov yozamiz.
SELECT * FROM Xaridorlar WHERE XaridorYoshi BETWEEN 25 AND 30;
SELECT kalit so'zi ma'lumotlar bazasidan ma'lumot tanlab olish uchun ishlatiladi. Tanlab olingan ma'lumot jadval shaklida qaytariladi.
SELECT kalit so'zining sintaksisi
SELECT biror jadvalning bir nechta ustunlarini tanlab olish uchun quyidagicha so'rov yoziladi:
SELECT ustun1, ustun2, ustun3, ... FROM jadval;
Bu yerda 'ustun1', 'ustun2', 'ustun3' 'jadval' nomli jadvalning ustunlari nomlaridir.
Agar biror jadvalning barcha ustunlarini olish zarur bo'lsa '*' belgisidan quyidagicha foydalaniladi:
SELECT * FROM jadval;
Quyidagi so'rov Xaridorlar jadvalidagi barcha ma'lumotlarni barcha ustunlari bilan birga olib beradi:
SELECT * FROM Xaridorlar;
SELECT DISTINCT bilan birga yozilganda, ma'lumotlardan faqat turli xil qiymatlarni qaytaradi.
ORDER BY kalit so'zi tanlab olingan ma'lumotlarni saralash uchun qo'llaniladi. Sintaksisi quyidagicha:
SELECT ustun1, ustun2, ...
FROM jadval_nomi
ORDER BY ustun1, ustun2, ... ASC|DESC;
ASC kalit so’zi ustunni o’sish tartibida saralashni, DESC esa kamayish tartibida saralashni bildiradi. Odatiy qiymat ASC.
ORDER BY ustun1 DESC; ORDER BY operatori SELECT va FROM operatorlaridan so’ng bajariladi:
SQL tilida qatorlarni biror shart (masalan, bir xil qiymat) bo'yicha guruhlash uchun GROUP BY kalit so'zidan foydalaniladi. GROUP BY operatori qatorlar to'plamini ustunlar yoki ifodalar qiymatlari bo'yicha natijaviy qatorlar to'plamiga guruhlaydi. GROUP BY operatori har bir guruh uchun bitta qatorni qaytaradi. Boshqacha qilib aytganda, natijalar to'plamidagi qatorlar sonini kamaytiradi.
GROUP BY odatda aggregat funksiyalar (COUNT(), MAX(), MIN(), SUM(), AVG()) bilan ishlatiladi. Sintaksisi quyidagicha:
SELECT ustun_nom(lar)i
FROM jadval_nomi
WHERE shartli_ifoda
GROUP BY ustun_nom(lar)i
ORDER BY ustun_nom(lar)i;
Aggregat funksiyalarni o'rganishdan oldin SQL tilining ALIAS nomli elementi bilan tanishamiz. ALIAS jadval yoki ustunga vaqtinchalik nom berish uchun ishlatiladi va faqat so'rov davomidagina mavjud bo'ladi. ALIAS AS kalit so'zi yordamida yaratiladi. Uning sintaksisi quyidagicha:
SELECT ustun_nomi
AS vaqtinchalik_nomi
FROM jadval_nomi;
SQL tilida aggregat funksiyalar bir nechta qiymatlar ustida hisob-kitob amalga oshiradi va bitta qiymat qaytaradi. MIN(), MAX(), COUNT(), AVG(), SUM()kabi funksiyalar aggregat hisoblanadi.
• MIN() – ustundagi minimal qiymat;
• MAX() – ustundagi maksimal qiymat;
• SUM() – ustundagi qiymatlar summasi;
• AVG() – ustundagi qiymatlarni o‘rtachasi;
• COUNT() – ustundagi NULL dan farqli qiymatlar miqdori.