Jadvallarni to'liq birlashtirish
Kirish: ushbu darsda siz ikkita jadval qatorlarini to'liq birlashtirish uchun PostgreSQL FULL JOIN bandidan qanday foydalanishni o'rganasiz.
FULL JOIN ikkita jadvaldagi qatorlarni birlashtiradi va ikkala jadvaldagi barcha qatorlarni qaytaradi. Bundan tashqari, FULL JOIN boshqa jadvalda mos qatori bo'lmagan jadvalning har bir ustuni uchun NULL qiymatlaridan foydalanadi. Boshqacha qilib aytganda, FULL JOIN LEFT JOIN va RIGHT JOIN natijalar to'plamini o'zida birlashtiradi.
Mana FULL JOIN sintaksisi:
SELECT
table1.column1,
table2.column2,
...
FROM
table1
FULL JOIN table2 ON table2.column1 = table1.column1;
Ushbu sintaksisda:
FROM bandida birinchi jadval nomini (table1) ko'rsating.FULL JOIN bandida to'liq birlashtirmoqchi bo'lgan ikkinchi jadval nomini (table2) bering.ON bandida ikkala jadvaldagi qatorlarni moslashtirish shartini yozing. Bu shart table1 dagi column1 qiymatlarini table2 dagi column1 qiymatlari bilan solishtiradi.SELECT bandida ma'lumot olmoqchi bo'lgan ustunlarni ko'rsating.FULL OUTER JOIN — FULL JOIN ning muqobil to'liq sintaksisidir:
SELECT
table1.column1,
table2.column2,
...
FROM
table1
FULL OUTER JOIN table2 ON table2.column1 = table1.column1;
E'tibor bering, OUTER kalit so'zi ixtiyoriy (optional) bo'lib, uni tushirib qoldirish mumkin.
PostgreSQL FULL JOIN qanday ishlaydi:
FROM bandi table1 jadvalidagi barcha qatorlarni oladi.FULL JOIN ikkala jadvaldagi column1 qiymatlarini solishtirish orqali table1 dagi har bir qatorni table2 dagi har bir qator bilan moslashtiradi. Agar ular mos kelsa, FULL JOIN ikkala qatorni bitta qatorga birlashtiradi. Aks holda, u moslik topilmagan jadval ustunlariga NULL qiymatlarini qo'yib, boshqa jadvaldagi qator bilan birlashtiradi.SELECT bandida ko'rsatilgan ustunlarni o'z ichiga olgan natijalar to'plami qaytariladi.Aytaylik, siz to'liq birlashtirish (full join) yordamida X va Y jadvallaridagi qatorlarni birlashtirmoqchisiz:
X jadvalida ikkita ustun mavjud: id (kalit) va x.Y jadvalida ham ikkita ustun mavjud: id (kalit) va y.| X jadvali | Y jadvali |
|---|---|
To'liq tashqi birlashtirish qatorlar boshqa jadvalda mos qatorga ega bo'lishidan qat'i nazar, ikkala jadvaldagi barcha qatorlarni o'z ichiga olgan natija to'plamini qaytaradi. U boshqa jadvalda mos qatori bo'lmagan qatorlar ustunlarini NULL bilan to'ldiradi:
Quyidagi Venn diagrammasi full join qanday ishlashini tasvirlashning yana bir usulidir:
Birinchi, brands jadvalini yarating:
CREATE TABLE brands (
brand_id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
name VARCHAR(255) NOT NULL
);
Ikkinchi, brands jadvaliga uchta qator kiriting:
INSERT INTO
brands (name)
VALUES
('Apple'),
('Samsung'),
('Google')
RETURNING *;
Natija:
brand_id | name
----------+---------
1 | Apple
2 | Samsung
3 | Google
Uchinchi, products jadvalini yarating:
CREATE TABLE products (
product_id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
name VARCHAR(100) NOT NULL,
price DECIMAL(10, 2) NOT NULL,
brand_id INT,
FOREIGN KEY (brand_id) REFERENCES brands (brand_id)
);
Nihoyat, products jadvaliga to'rtta qator kiriting:
INSERT INTO
products (name, price, brand_id)
VALUES
('iPhone 14 Pro', 999.99, 1),
('iPhone 15 Pro', 1199.99, 1),
('Galaxy S23 Ultra', 1149.47, 2),
('Oppo Find Flip', 499.99, NULL)
RETURNING *;
Natija:
product_id | name | price | brand_id
------------+------------------+---------+----------
1 | iPhone 14 Pro | 999.99 | 1
2 | iPhone 15 Pro | 1199.99 | 1
3 | Galaxy S23 Ultra | 1149.47 | 2
4 | Oppo Find Flip | 499.99 | NULL
Quyidagi so'rov products va brands jadvallaridagi qatorlarni birlashtirish uchun FULL JOIN dan foydalanadi:
SELECT
p.name AS product_name,
p.price,
b.name AS brand_name
FROM
products p
FULL JOIN brands b ON b.brand_id = p.brand_id;
Natija:
product_name | price | brand_name
------------------+---------+------------
iPhone 14 Pro | 999.99 | Apple
iPhone 15 Pro | 1199.99 | Apple
Galaxy S23 Ultra | 1149.47 | Samsung
Oppo Find Flip | 499.99 | NULL
NULL | NULL | Google
FROM bandi products jadvalidan barcha qatorlarni oladi.FULL JOIN bandi products jadvalidagi har bir qatorni brand_id ustunidagi qiymatlarni solishtirish orqali brands jadvalidagi har bir qator bilan moslashtiradi:
product_id = 1 bo'lgan mahsulot brands jadvalidagi brand_id = 1 (Apple) qatori bilan mos keladi.product_id = 2 bo'lgan mahsulot brands jadvalidagi brand_id = 1 (Apple) qatori bilan mos keladi.product_id = 3 bo'lgan mahsulot brands jadvalidagi brand_id = 2 (Samsung) qatori bilan mos keladi.product_id = 4 bo'lgan mahsulot (Oppo Find Flip) brands jadvalida hech qanday mos qatorga ega emas (brand_id si NULL), shuning uchun brands jadvali ustunlari NULL bilan to'ldiriladi.brand_id = 3 bo'lgan brend (Google) products jadvalida hech qanday mos mahsulotga ega emas, shuning uchun products jadvalining ustunlari NULL bilan to'ldiriladi.SELECT bandida ko'rsatilgan ustunlar berilgan taxalluslar bilan natijada qaytariladi.FULL JOIN dan foydalaning.FULL OUTER JOIN — FULL JOIN ning muqobil sintaksisidir.