PostgreSQL

سرفصل دروس

NATURAL JOIN

توضیح NATURAL JOIN در PostgresQL  با مثال

NATURAL JOIN ارتباطی است که یک ارتباط مجازی بر پایه ستون های مشترک بین جداول را ایجاد می نماید. عبارت زیر دستور زبان NATURAL JOIN را در PostgreSQL نمایش می دهد:

SELECT *
FROM T1
NATURAL [INNER, LEFT, RIGHT] JOIN T2;

یک natural join می تواند یک inner join, left join یا  right join باشد. اگر شما نوع ارتباط را مشخص ننمایید، PostgreSQL  بصورت پیشفرض INNER JOIN را در نظر می گیرد. 

اگر از ستاره (*) استفاده نمایید نتیجه شامل ستون های زیر می شود: 

  • تمام ستون های معمول که در دو جدول با نام مشترک هستند. 
  • تمام ستون های جدول اول و دوم که مشترک نیستند. 

 

مثال

برای نمایش natural join در PostgreSQL دو جدول categories و products را ایجاد می کنیم. 

CREATE TABLE categories (
 category_id serial PRIMARY KEY,
 category_name VARCHAR (255) NOT NULL
);
 
CREATE TABLE products (
 product_id serial PRIMARY KEY,
 product_name VARCHAR (255) NOT NULL,
 category_id INT NOT NULL,
 FOREIGN KEY (category_id) REFERENCES category (category_id)
);

هر category  شامل صفر یا تعدادی products  می باشد. و هر product  متعلق به فقط یک category می باشد. ستون category_id در جدول products کلید خارجی به کلید اصلی جدول categories می باشد. category_id ستون مشترکی می باشد که از آن برای پیاده سازی natural join استفاده می کنیم. 

توسط دستور زیر داده نمونه در جداول قرار می دهیم: 

INSERT INTO categories (category_name)
VALUES
 ('Smart Phone'),
 ('Laptop'),
 ('Tablet');
 
INSERT INTO products (product_name, category_id)
VALUES
 ('iPhone', 1),
 ('Samsung Galaxy', 1),
 ('HP Elite', 2),
 ('Lenovo Thinkpad', 2),
 ('iPad', 3),
 ('Kindle Fire', 3);

دستور زیر از NATURAL JOIN برای ارتباط دو جدول استفاده می کند: 

SELECT
 *
FROM
 products
NATURAL JOIN categories;
 category_id | product_id |  product_name   | category_name
-------------+------------+-----------------+---------------
           1 |          1 | iPhone          | Smart Phone
           1 |          2 | Samsung Galaxy  | Smart Phone
           2 |          3 | HP Elite        | Laptop
           2 |          4 | Lenovo Thinkpad | Laptop
           3 |          5 | iPad            | Tablet
           3 |          6 | Kindle Fire     | Tablet
(6 rows)

دستور بالا معادل دستور زیر می باشد که از عبارت INNER JOIN استفاده کرده است:

SELECT
 *
FROM
 products
INNER JOIN categories USING (category_id);

شما باید دقت نمایید که نباید از NATURAL JOIN در هرجایی استفاده نمایید چو ممکن است نتیجه ایجاد شده خارج از انتظار شما باشد. برای مثال به جدول های city و country دقت نمایید. هر دو جدول شامل ستون مشترک country_id می باشند پس می توان از NATURAL JOIN بصورت زیر استفاده کرد:

SELECT
 *
FROM
 city
NATURAL JOIN country;
 country_id | last_update | city_id | city | country
------------+-------------+---------+------+---------
(0 rows)

پرس و جو نتیجه خالی را بر می گرداند.  و این بدین خاطر است که هر دو جدول دارای ستون مشترک last_update هم هستند که نمی توانند در ارتباط استفاده شوند. با این وجود NATURAL JOIN از ستون last_update استفاده می کند. 

اشتراک گذاری :