Monday, April 21, 2014

Mysql JOIN. Mysql da bir nechta jadvallardan ma'lumotlarni olish.




Internetda bir ushbu rasmni ko'rib ushbu maqolani yozish niyati paydo bo'ladi.
 Bir nechta advallardan malumotlarni olishni o'rganamiz. Buning uchun biz JOIN lardan foydalanamiz.

Yuqoridagi rasmga e'tibor bergan bo'lsangiz 2 ta , A va B aylanalar mavjud, tasavvur qiling ushbu A va B lar bizning jadvallarimiz, ya'ni bizda 2 ta jadval mavjud, biz shu 2 ta jadvallardan o'zimizga kerakli bo'lgan ma'lumotlarni olishni ko'rib chiqamiz.

Yani biror kurslarga qatnashuvchilar haqidagi malumotlarni misol qilaylik.

2 ta jadval yaratamiz.

'user' jadvali :


CREATE TABLE `user` (
`id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(30) NOT NULL,
`course` smallint(5) unsigned DEFAULT NULL,
PRIMARY KEY (`id`)
)

'course' jadvali :

 
CREATE TABLE `course` (
`id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
)


Ushbu jadvallarni yaratganimizdan keyin ularga bir nechta malumotlarni qo'shamiz


'course' jadvaliga :

 
INSERT INTO `course` (`id`, `name`) VALUES (1, 'HTML kursi');
INSERT INTO `course` (`id`, `name`) VALUES (2, 'PHP kursi');
INSERT INTO `course` (`id`, `name`) VALUES (3, 'JavaScript kursi');
INSERT INTO `course` (`id`, `name`) VALUES (4, 'C++ kursi');
INSERT INTO `course` (`id`, `name`) VALUES (5, 'Java kursi'); 
 
'user' jadvaliga:
 
INSERT INTO `user` (`id`, `name`, `course`) VALUES (1, 'Sardor', 4);
INSERT INTO `user` (`id`, `name`, `course`) VALUES (2, 'Eshmat', NULL);
INSERT INTO `user` (`id`, `name`, `course`) VALUES (3, 'Toshmat', 1);
INSERT INTO `user` (`id`, `name`, `course`) VALUES (4, 'Elyor', 4);
INSERT INTO `user` (`id`, `name`, `course`) VALUES (5, 'Ogabek', 5);
INSERT INTO `user` (`id`, `name`, `course`) VALUES (6, 'Shaxboz', 5);
INSERT INTO `user` (`id`, `name`, `course`) VALUES (7, 'Ulugbek', 2);
INSERT INTO `user` (`id`, `name`, `course`) VALUES (8, 'Botir', 4);
INSERT INTO `user` (`id`, `name`, `course`) VALUES (9, 'Sarvar', 5);
INSERT INTO `user` (`id`, `name`, `course`) VALUES (10, 'Muhiddin', 3);
INSERT INTO `user` (`id`, `name`, `course`) VALUES (11, 'Jasur', NULL);
INSERT INTO `user` (`id`, `name`, `course`) VALUES (12, 'Samandar', 2); 
  

INNER JOIN

Ushbu rasmdan ham anglab olish oson, yani 2 ta jadvalda bir biriga mos bo'lganlarnigina chiqarib beradi. Ya'ni rasmdagi bo'yalib turgan qismini chiqarib beradi.
Oddiy qilib tushuntirishga harakat qilaman, userlardan faqat kursga boradiganini ko'rsatish uchun ,shu haqda malumotlarni chiqarib beradi.

SELECT user.name, course.name
FROM `user`
INNER JOIN `course` on user.course = course.id;
 
Natija:
 
"user.name" "course.name"
 
"Toshmat" "HTML kursi"
"Ulugbek" "PHP kursi"
"Samandar" "PHP kursi"
"Muhiddin" "JavaScript kursi"
"Sardor" "C++ kursi"
"Elyor"         "C++ kursi"
"Botir"         "C++ kursi"
"Ogabek" "Java kursi"
"Shaxboz" "Java kursi"
"Sarvar" "Java kursi"
 
'user' jadvalining 'course' ustunidagi qiymat 'course' jadvalining 'id' siga teng bo'ladigan 
qiymatlarni chiqarib beradi  


LEFT JOIN


Nomidan ham ko'rinib turibdi, chap tarafdagi jadval va unga boglangan ikkinchi jadvaldan o'ziga tegishlisini oladi faqat. 
O'ng tarafdagi (user) jadvalga nisbatan qarayapmiz. Yani userlardan kim qaysi kursga boradi va bormaydi, shular haqda ma'lumot
olish uchun ishlatamiz.

SELECT user.name, course.name
FROM `user`
LEFT JOIN `course` on user.course = course.id;
 
Natija:
 
"user.name" "course.name"
 
"Toshmat" "HTML kursi"
"Ulugbek" "PHP kursi"
"Samandar" "PHP kursi"
"Muhiddin" "JavaScript kursi"
"Sardor" "C++ kursi"
"Elyor"         "C++ kursi"
"Botir"         "C++ kursi"
"Ogabek" "Java kursi"
"Shaxboz" "Java kursi"
"Sarvar" "Java kursi"
"Eshmat" NULL
"Jasur"         NULL
 
user jadvalidagi barcha qiymatlarni oladi va course ustunidagi id larga to'gri keluvchi course.name ni ko'rsatib beradi

RIGHT JOIN


SELECT user.name, course.name
FROM `user`
RIGHT JOIN `course` on user.course = course.id;
 
o'ng tarafdagi jadval(course) ga mos bo'lga userlarni chiqarish uchun, ya'ni course jadvlaridagi kurslarga kimlar boradi va bormaydi, shular haqda 
ma'lumot olish uchun ishlatiladi.
Natija :
 
"user.name" "course.name"

"Toshmat" "HTML kursi"
"Ulugbek" "PHP kursi"
"Samandar" "PHP kursi"
"Muhiddin" "JavaScript kursi"
"Sardor" "C++ kursi"
"Elyor"         "C++ kursi"
"Botir"         "C++ kursi"
"Ogabek" "Java kursi"
"Shaxboz" "Java kursi"
"Sarvar" "Java kursi"
NULL         "C# kursi"

OUTER JOIN

Ikkita jadvaldagi barcha malumotlarni birlashtirib beradi.

SELECT user.name, course.name
FROM `user`
LEFT JOIN `course` on user.course = course.id

UNION

SELECT user.name, course.name
FROM `user`
RIGHT JOIN `course` on user.course = course.id; 

Natija :
 
"user.name" "course.name"
 
"Toshmat" "HTML kursi"
"Ulugbek" "PHP kursi"
"Samandar" "PHP kursi"
"Muhiddin" "JavaScript kursi"
"Sardor" "C++ kursi"
"Elyor"         "C++ kursi"
"Botir"         "C++ kursi"
"Ogabek" "Java kursi"
"Shaxboz" "Java kursi"
"Sarvar" "Java kursi"
"Eshmat" NULL
"Jasur"         NULL
NULL         "C# kursi"
Qo'ldan kelgancha tushuntirishga harakat qildim. 
 

 

No comments:

Post a Comment

Yii2 frameworkda frontend va backend sozlanmalarini sozlash(Apache)

Yii2 framework 2 xil template mavjud; Bularni yaxshi bilsangiz kerak, bular basic va advanced; Bularni farqlarini quyidagi rasm orqali bil...