PostgreSQL

سرفصل دروس

INTERSECT

مقدمه ای بر عملگر INTERSECT  در PostgreSQL 

عملگر INTERSECT در PostgreSQL مانند عملگرهای EXCEPT و UNION ، نتیجه دو یا چند SELECT را با یکدیگر ادغام می نماید. عملگر INTERSECT تمام ردیف های نتیجه ها را بر می گرداند. شکل زیر نتیجه ایجاد شده از دستور INTERSECT را نمایش می دهد. نتیجه نهایی توسط رنگ زرد نمایش داده شده است. 

INTERSECT

 

دستور زبان عملگر INTERSECT بصورت زیر می باشد: 

SELECT
 column_list
FROM
 A
INTERSECT
SELECT
 column_list
FROM
 B;

برای استفاده از عملگر INTERSECT ستون های دستور SELECT باید از قوانین زیر پیروی نمایند: 

  • تعداد و ترتیب ستون ها در دستورات SELECT باید یکسان باشد. 
  • نوع داده ستون ها باید با یکدیگر همخوانی داشته باشند. 

 

مثال دستور INTERSECT در PostgreSQL 

برای این مثال ابتدا با دستور CREATE TABLE جداول employees و keys و hipos را ایجاد می نماییم.

CREATE TABLE employees (
 employee_id serial PRIMARY KEY,
 employee_name VARCHAR (255) NOT NULL
);
 
CREATE TABLE keys (
 employee_id INT PRIMARY KEY,
 effective_date DATE NOT NULL,
 FOREIGN KEY (employee_id) REFERENCES employees (employee_id)
);
 
CREATE TABLE hipos (
 employee_id INT PRIMARY KEY,
 effective_date DATE NOT NULL,
 FOREIGN KEY (employee_id) REFERENCES employees (employee_id)
);

جدول employees اطلاعات اصلی کارمندان و جدول keys کارمندان کلیدی و جدول hipos کارمندانی که بیشترین تاثیر را دارند را ذخیره می نمایند. توسط دستورات زیر داده های نمونه را در جداول قرار می دهیم: 

INSERT INTO employees (employee_name)
VALUES
 ('Joyce Edwards'),
 ('Diane Collins'),
 ('Alice Stewart'),
 ('Julie Sanchez'),
 ('Heather Morris'),
 ('Teresa Rogers'),
 ('Doris Reed'),
 ('Gloria Cook'),
 ('Evelyn Morgan'),
 ('Jean Bell');
 
INSERT INTO keys
VALUES
 (1, '2000-02-01'),
 (2, '2001-06-01'),
 (5, '2002-01-01'),
 (7, '2005-06-01');
 
INSERT INTO hipos
VALUES
 (9, '2000-01-01'),
 (2, '2002-06-01'),
 (5, '2006-06-01'),
 (10, '2005-06-01');

دستور زیر لیست کارمندان کلیدی را از جدول keys بر می گرداند:

SELECT
 employee_id
FROM
 keys;
 employee_id
-------------
           1
           2
           5
           7
(4 rows)

دستور زیر لیستی از employee_id را از جدول hipos بر می گرداند:

SELECT
   employee_id
FROM hipos;
employee_id
-------------
           9
           2
           5
          10
(4 rows)

برای دریافت کارمندانی که هم کلیدی هستند و هم بیشترین تاثیر را دارند از دستور زیر استفاده می کنیم: 

SELECT
 employee_id
FROM
 keys
INTERSECT
SELECT
        employee_id
FROM
 hipos;
 employee_id
-------------
           5
           2
(2 rows)

برای مرتب کردن جواب برگردانده شده توسط عملگر INTERSECT می توانید از دستور ORDER BY در پایات دستورات استفاده نمایید. 

SELECT
 employee_id
FROM
 keys
INTERSECT
SELECT
        employee_id
FROM
 hipos
ORDER BY employee_id;
employee_id
-------------
           2
           5
(2 rows)
اشتراک گذاری :