PostgreSQL

سرفصل دروس

FULL OUTER JOIN

مقدمه ای بر FULL OUTER JOIN در PostgreSQL 

شما می توانید دستور زبان FULL OUTER JOIN را در زیر مشاهده نمایید: 

SELECT * FROM A
FULL [OUTER] JOIN B on A.id = B.id;

کلمه کلیدی OUTER اختیاری می باشد. full outer join نتیجه left  join و right join را باهم ترکیب می نماید. اگر داده متناظر وجود نداشته باشد مقدار NULL  به ازای هر ستون قرار داده می شود. برای حالات متناظر یک ردیف برای نمایش نتیجه که شامل هر دو جدول می باشد نمایش داده می شود. دیاگرام زیر FULL OUTER JOIN را نمایش می دهد:

FULL OUTER JOIN

 

مثال FULL OUTER JOIN در PostgreSQL 

ابتدا دو جدول employees و departments را ایجاد می نماییم: 

CREATE TABLE
IF NOT EXISTS departments (
 department_id serial PRIMARY KEY,
 department_name VARCHAR (255) NOT NULL
);
 
CREATE TABLE
IF NOT EXISTS employees (
 employee_id serial PRIMARY KEY,
 employee_name VARCHAR (255),
 department_id INTEGER
);

هر بخش صفر یا چند کارمند دارد و هر کارمند متعلق به صفر یا یک واحد می باشد.  دستور INSERT زیر تعدادی داده به دو جدول اضافه می نماید:

INSERT INTO departments (department_name)
VALUES
 ('Sales'),
 ('Marketing'),
 ('HR'),
 ('IT'),
 ('Production');
 
INSERT INTO employees (
 employee_name,
 department_id
)
VALUES
 ('Bette Nicholson', 1),
 ('Christian Gable', 1),
 ('Joe Swank', 2),
 ('Fred Costner', 3),
 ('Sandra Kilmer', 4),
 ('Julia Mcqueen', NULL);

حال پرس و جویی بر روی داده های departments و employees می نویسیم : 

# SELECT * FROM departments;
 department_id | department_name
---------------+-----------------
             1 | Sales
             2 | Marketing
             3 | HR
             4 | IT
             5 | Production
(5 rows)
# SELECT * FROM employees;
 employee_id |  employee_name  | department_id
-------------+-----------------+---------------
           1 | Bette Nicholson |             1
           2 | Christian Gable |             1
           3 | Joe Swank       |             2
           4 | Fred Costner    |             3
           5 | Sandra Kilmer   |             4
           6 | Julia Mcqueen   |
(6 rows)

سپس از FULL OUTER JOIN برای نوشتن پرس و جو بر روی هر دو جدول استفاده می کنیم:

SELECT
 employee_name,
 department_name
FROM
 employees e
FULL OUTER JOIN departments d ON d.department_id = e.department_id;

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

  employee_name  | department_name
-----------------+-----------------
 Bette Nicholson | Sales
 Christian Gable | Sales
 Joe Swank       | Marketing
 Fred Costner    | HR
 Sandra Kilmer   | IT
 Julia Mcqueen   | NULL
 NULL            | Production
(7 rows)

برای پیدا کردن واحدهایی که کارمندی ندارند از WHERE بصورت زیر استفاده می کنیم: 

SELECT
 employee_name,
 department_name
FROM
 employees e
FULL OUTER JOIN departments d ON d.department_id = e.department_id
WHERE
 employee_name IS NULL;
 employee_name | department_name
---------------+-----------------
 NULL          | Production
(1 row)

برای پیدا کردن کارمندانی که متعلق به هیچ واحدی نیستند از دستور زیر استفاده می کنیم: 

SELECT
 employee_name,
 department_name
FROM
 employees e
FULL OUTER JOIN departments d ON d.department_id = e.department_id
WHERE
 department_name IS NULL;
 employee_name | department_name
---------------+-----------------
 Julia Mcqueen | NULL
(1 row)

 

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