PostgreSQL : คำสั่ง SQL การใช้ Operator

PostgreSQL แชร์ความรู้เกี่ยวกับ PostgreSQL การใช้งาน ฟังก์ชั่นต่างๆ การเขียน SQL แบบ PGSQL

Moderators: mindphp, ผู้ดูแลกระดาน

thitikorn_lp
PHP Super Hero Member
PHP Super Hero Member
Posts: 680
Joined: 28/07/2014 10:24 am

PostgreSQL : คำสั่ง SQL การใช้ Operator

Post by thitikorn_lp »

Operator ( ตัวดำเนินการ )

  Operator หรือ ตัวดำเนินการ ที่ใช้ในการดำเนินการทางคณิตศาสตร์หรือการเปรียบเทียบเป็นต้น นิยมใช้กันในภาษา SQL เพื่อเป็นการกำหนดเงื่อนไขในคำสั่ง SQL และทำหน้าที่เป็นตัวเชื่อมเงื่อนไขหลาย ๆ เงื่อนไขเข้าด้วยกัน

โดยสามารถเรียงลำดับความสำคัญของตัวดำเนินการได้ดังนี้
1. ( )
2. NOT
3. AND
4. ALL, BETWEEN, IN, LIKE, OR

• NOT ใช้สำหรับในการปฏิเสธค่า เปลี่ยนแปลงค่าฟังก์ชันต่าง ๆ ให้เป็นตรงกันข้าม
• AND ใช้สำหรับการเชื่อมเงื่อนไขที่เป็นจริง มากกว่า 2 เงื่อนไข
• ALL ใช้สำหรับเปรียบเทียบค่ากับค่าทั้งหมดร่วมกับ SUB QUERY
• BETWEEN...AND... ใช้สำหรับกำหนดเงื่อนไขในการค้นหาค่าที่อยู่ระหว่างค่า ๆ หนึ่ง กับค่า ๆ หนึ่ง
• IN ใช้สำหรับเปรียบเทียบค่าในที่อยู่ในกลุ่มที่กำหนด
• LIKE ใช้สำหรับเปรียบเทียบตัวอักษร
• OR ใช้สำหรับการเชื่อมโยงเงื่อนไขและต้องมีเงื่อนใขใดเงื่อนไขหนึ่งที่เป็นจริง


** SUB QUERY คือการใช้คำสั่ง SELECT ซ้อนคำสั่ง SELECT

ตัวอย่าง : การใช้ Operator มีดังนี้
» การใข้ตัวดำเนินการ NOT
» การใข้ตัวดำเนินการ AND
» การใข้ตัวดำเนินการ ALL
» การใข้ตัวดำเนินการ BETWEEN...AND...
» การใข้ตัวดำเนินการ IN
» การใข้ตัวดำเนินการ LIKE
» การใข้ตัวดำเนินการ OR

ซึ่ง Operator บางตัวใน MySQL ไม่สามารถทำงานใน PostgreSQL ได้
Last edited by thitikorn_lp on 23/09/2014 1:01 pm, edited 11 times in total.
Image
thitikorn_lp
PHP Super Hero Member
PHP Super Hero Member
Posts: 680
Joined: 28/07/2014 10:24 am

Re: PostgreSQL : คำสั่ง SQL การใช้ Operator

Post by thitikorn_lp »

NOT การปฏิเสธค่า เปลี่ยนแปลงค่าฟังก์ชันต่าง ๆ ให้เป็นตรงกันข้าม

โค้ด :

Code: Select all

NOT condition
อธิบายคำสั่ง
condition       :  เงื่อนไขที่ต้องการจะปฏิเสธค่า

ตัวอย่าง :

Code: Select all

SELECT *
FROM res_partner
WHERE name NOT IN ( 'Your Company', 'Administrator','Mediapole', 'Maxtor' );
ผลที่ได้ :
ภาพที่ 1 ตัวอย่างชื่อที่อยู่ในคอลัมน์ name ตาราง res_partner 25 ชื่อ
ภาพที่ 1 ตัวอย่างชื่อที่อยู่ในคอลัมน์ name ตาราง res_partner 25 ชื่อ
operater 01.jpg (115.68 KiB) Viewed 3606 times
ภาพที่ 2 เมื่อทำการ NOT IN ในคอลัมน์ name
ภาพที่ 2 เมื่อทำการ NOT IN ในคอลัมน์ name
operater 02.jpg (200.48 KiB) Viewed 3606 times
คำอธิบาย :
จากภาพที่ 1 เป็นรายชื่อในตาราง res_partner จำนวน 25 ชื่อ เราต้องการให้แสดงข้อมูลโดยที่ได้ต้องการชื่อ 'Your Company', 'Administrator', 'Mediapole', 'Maxtor' จำนวน 4 ชื่อนี้ ในกรอบสีแดงๆ

จะเห็นได้ว่า ในภาพที่ 2 ชื่อที่เราทำการ NOT IN ไว้ หรือที่เราไม่ต้องให้แสดง ส่วนที่ขีดสีแดงไว้จะหายไป


เรายังสามารถใช้ NOT ร่วมกับตัวดำเนินการอื่นๆ ได้อีกหลายตัว เช่น
• NULL

Code: Select all

SELECT *
FROM ชื่อตาราง
WHERE ชื่อคอลัมน์ IS NOT NULL;
• LIKE

Code: Select all

SELECT ชื่อคอลัมน์
FROM ชื่อตาราง
WHERE ชื่อคอลัมน์ NOT LIKE 'ตัวอักษร%';
• BETWEEN...AND

Code: Select all

SELECT *
FROM ชื่อตาราง
WHERE ชื่อคอลัมน์ NOT BETWEEN ค่าที่ 1 AND ค่าที่ 2 ;
• EXISTS

Code: Select all

SELECT *
FROM ชื่อตารางที่ 1
WHERE NOT EXISTS (SELECT * 
                  FROM ชื่อตารางที่ 2
                  WHERE ชื่อตารางที่ 1.ชื่อคอลัมน์ของตารางที่ 1 = ชื่อตารางที่ 2.ชื่อชื่อคอลัมน์ของตารางที่ 2 ที่เชื่อมกับตารางที่ 1);

ย้อนกลับด้านบน
Last edited by thitikorn_lp on 10/09/2014 2:12 pm, edited 2 times in total.
Image
thitikorn_lp
PHP Super Hero Member
PHP Super Hero Member
Posts: 680
Joined: 28/07/2014 10:24 am

Re: PostgreSQL : คำสั่ง SQL การใช้ Operator

Post by thitikorn_lp »

AND การเชื่อมเงื่อนไขที่เป็นจริง มากกว่า 2 เงื่อนไข

โค้ด :

Code: Select all

WHERE เงื่อนไขที่ 1
AND เงื่อนไขที่ 2
...
AND เงื่อนไขที่ n ;
ตัวอย่าง :

Code: Select all

SELECT id, name, street, city
FROM res_partner
WHERE name like '%l%'
AND street like '%c%'
ORDER BY id;
ผลที่ได้ :
ภาพที่ 1 รายชื่อจากตาราง res_partner
ภาพที่ 1 รายชื่อจากตาราง res_partner
operater 03.jpg (217.48 KiB) Viewed 3606 times
ภาพที่ 2 รายชื่อจากตาราง res_partner (ต่อ)
ภาพที่ 2 รายชื่อจากตาราง res_partner (ต่อ)
operater 04.jpg (168.1 KiB) Viewed 3606 times
ภาพที่ 3 รายชื่อที่ได้จากเงื่อนไข name like '%l%'
ภาพที่ 3 รายชื่อที่ได้จากเงื่อนไข name like '%l%'
operater 05-1.jpg (180.89 KiB) Viewed 3606 times
ภาพที่ 4 รายชื่อที่ได้จากเงื่อนไข street like '%c%
ภาพที่ 4 รายชื่อที่ได้จากเงื่อนไข street like '%c%
operater 05-2.jpg (91.46 KiB) Viewed 3606 times
ภาพที่ 5 รายชื่อที่ได้จากการใช้ AND เชื่อมเงื่อนไข name like '%l%'<br />และ street like '%c%'
ภาพที่ 5 รายชื่อที่ได้จากการใช้ AND เชื่อมเงื่อนไข name like '%l%'
และ street like '%c%'
operater 05.jpg (62.09 KiB) Viewed 3606 times
อธิบาย :
จากภาพที่ 1 และ ภาพที่ 2 เป็นรายชื่อทั้งหมดจากตาราง res_partner
เมื่อทำการตั้งเงื่อนไขให้แสดงโดยใช้คำสั่ง name like '%l%' จะได้รายชื่อดังที่แสดงใน ภาพที่ 3
และคำสั่ง street like '%c% รายชื่อจะแสดงดังภาพที่ 4
เมื่อใช้ตัวดำเนินการ AND เข้ามาเชื่อม ทั้ง 2 คำสั่งเข้าด้วยกัน
ทำให้ได้รายชื่อดังที่แสดงในภาพที่ 5 นั่นคือ ชื่อที่จะแสดงจะต้องที่ ตัว l และ ที่อยู่จะต้องมีตัว c อยู่ในชื่อ



ย้อนกลับด้านบน
Last edited by thitikorn_lp on 10/09/2014 2:15 pm, edited 1 time in total.
Image
thitikorn_lp
PHP Super Hero Member
PHP Super Hero Member
Posts: 680
Joined: 28/07/2014 10:24 am

Re: PostgreSQL : คำสั่ง SQL การใช้ Operator

Post by thitikorn_lp »

ALL การเปรียบเทียบค่ากับค่าทั้งหมดร่วมกับ SUB QUERY

โค้ด :

Code: Select all

SELECT ชื่อคอลัมน์ที่ 1, ชื่อคอลัมน์ที่ 2 
FROM ชื่อตาราง
WHERE ชื่อคอลัมน์ที่ต้องการตั้งเงื่อนไข <= ALL ( SELECT ชื่อคอลัมน์ที่ต้องการตั้งเงื่อนไข FROM ชื่อตาราง );


ย้อนกลับด้านบน
Image
thitikorn_lp
PHP Super Hero Member
PHP Super Hero Member
Posts: 680
Joined: 28/07/2014 10:24 am

Re: PostgreSQL : คำสั่ง SQL การใช้ Operator

Post by thitikorn_lp »

BETWEEN...AND...การกำหนดเงื่อนไขในการค้นหาค่าที่อยู่ระหว่างค่า ๆ หนึ่ง กับค่า ๆ หนึ่ง

โค้ด :

Code: Select all

expression BETWEEN value1 AND value2;
อธิบายคำสั่ง
expression      :  ค่าที่ต้องการให้แสดงหรือค่าที่ค้องการคำนวณ
value1 ,value2    :  ค่าที่ต้องการให้แสดงค่าระหว่าง หรือค่าที่ต้องการเปรียบเทียบ

ตัวอย่าง :

Code: Select all

SELECT amount_total
FROM sale_order
WHERE amount_total BETWEEN 2000  AND 5000;
ผลที่ได้ :
ภาพที่ 1 ตาราง sale_order ที่แสดงราคารวมการสั่งซื้อทั้งหมด
ภาพที่ 1 ตาราง sale_order ที่แสดงราคารวมการสั่งซื้อทั้งหมด
operater 06.jpg (76.3 KiB) Viewed 3604 times
ภาพที่ 2 เมื่อทำการกำหนดเงื่อนไขให้ราคารวมแสดงค่าระหว่าง 2,000 บาท - 5,000 บาท
ภาพที่ 2 เมื่อทำการกำหนดเงื่อนไขให้ราคารวมแสดงค่าระหว่าง 2,000 บาท - 5,000 บาท
operater 06-1.jpg (40.82 KiB) Viewed 3604 times
คำอธิบาย :
จากภาพที่ 1 ตาราง sale_order ที่แสดงราคารวมการสั่งซื้อทั้งหมด เมื่อใช้คำสั่ง WHERE amount_total BETWEEN 2000 AND 5000 เพื่อต้องการให้แสดงค่าผลรวมราคาระหว่าง 2,000 บาท - 5,000 บาท ผลที่ได้ ดังแสดงในภาพที่ 2


ย้อนกลับด้านบน
Last edited by thitikorn_lp on 22/09/2014 6:29 pm, edited 1 time in total.
Image
thitikorn_lp
PHP Super Hero Member
PHP Super Hero Member
Posts: 680
Joined: 28/07/2014 10:24 am

Re: PostgreSQL : คำสั่ง SQL การใช้ Operator

Post by thitikorn_lp »

IN การเปรียบเทียบค่าในที่อยู่ในกลุ่มที่กำหนด

โค้ด :

Code: Select all

expression IN (value1, value2, .... value_n);
อธิบายคำสั่ง
expression      :  ค่าที่ต้องการทดสอบ
value1 ,value2    :  ค่าที่ต้องการให้ expression แสดงอยู่ในตัวที่กำหนด

ตัวอย่าง :

Code: Select all

SELECT id, name,street,city
FROM res_partner
WHERE city IN ('Taipei', 'Fremont', 'Boston');
ผลที่ได้ :
ภาพที่ 1 รายชื่อที่แสดงในตาราง res_partner ทั้งหมด
ภาพที่ 1 รายชื่อที่แสดงในตาราง res_partner ทั้งหมด
operater 03.jpg (217.48 KiB) Viewed 3602 times
ภาพที่ 2 รายชื่อที่แสดงในตาราง res_partner ทั้งหมด (ต่อ)
ภาพที่ 2 รายชื่อที่แสดงในตาราง res_partner ทั้งหมด (ต่อ)
operater 04.jpg (168.1 KiB) Viewed 3602 times
ภาพที่ 3 รายชื่อผลที่ได้จากการใช้คำสั่ง IN
ภาพที่ 3 รายชื่อผลที่ได้จากการใช้คำสั่ง IN
operater 07.jpg (140.19 KiB) Viewed 3602 times
คำอธิบาย :
จากภาพที่ 1 และภาพที่ 2 ที่แสดงรายชื่อทั้งหมดของตาราง res_partner เราต้องการใช้คำสั่ง WHERE city IN ('Taipei', 'Fremont', 'Boston') เพื่อต้องการให้แสดงค่าในคอลัมน์ city ที่มีค่าเท่ากับ 'Taipei', 'Fremont', 'Boston'
ผลที่ได้ดังในภาพที่ 3

ย้อนกลับด้านบน
Image
thitikorn_lp
PHP Super Hero Member
PHP Super Hero Member
Posts: 680
Joined: 28/07/2014 10:24 am

Re: PostgreSQL : คำสั่ง SQL การใช้ Operator

Post by thitikorn_lp »

LIKE การเปรียบเทียบตัวอักษร

โค้ด :
expression LIKE pattern [ ESCAPE 'escape_character' ]
อธิบายคำสั่ง
expression      :  ค่าที่อยู่ในคอลัมน์ หรือ ในฟิลด์ที่ต้องการให้แสดง
pattern          :  รูปแบบของค่าที่ต้องการจับคู่ หรือ ต้องการให้แสดงค่าออกมา
escape_character :  ตัวเลือกจะช่วยในการทดสอบค่าที่ต้องแสดงของอักษร อักขระ เช่น % หรือ _

%  ใช้ในการช่วยจับคู่หรือเปรียบเทียบให้ตรงกับความยาวของตัวอักษรใดๆ
_   ใช้ในการช่วยจับคู่ตัวอักษรเพียง 1 ตัว

การใช้ % (เปอร์เซ็น)
'?%' : % (เปอร์เซ็น) อยู่ข้างหลัง หมายความว่า คำใดๆ ที่ขึ้นต้นด้วย ?
'%?%' : % (เปอร์เซ็น) อยู่ทั้งขเางหน้าข้างหลัง หมายความว่า คำใดๆ ที่มีคำว่า ?
'%?' : % (เปอร์เซ็น) อยู่ข้างหน้า หมายความว่า คำใดๆ ที่ลงท้ายด้วย ?

ตัวอย่าง :

Code: Select all

SELECT id, name
FROM res_partner
WHERE name like 'L%'
ผลที่ได้ :
ภาพที่ 1 รายชื่อทั้งหมดจากตาราง res_partner
ภาพที่ 1 รายชื่อทั้งหมดจากตาราง res_partner
operater 08.jpg (169.95 KiB) Viewed 3597 times
ภาพที่ 2 รายชื่อที่ได้จากการใช้คำสั่ง WHERE name like 'L%'
ภาพที่ 2 รายชื่อที่ได้จากการใช้คำสั่ง WHERE name like 'L%'
operater 08-1.jpg (37.08 KiB) Viewed 3597 times
คำอธิบาย :
ผลจากการใช้คำสั่ง WHERE name like 'L%' หมายความว่า เราต้องการค้นหาให้แสดงรายชื่อในคอลัมน์ที่ name มีตัวอักษร 'L' อยู่ข้างหน้าสุด ผลที่ได้ดังภาพที่ 2

การใช้ _ (ขีดเส้นใต้)
ใช้เมื่อกำลังมองหาตัวอักษรเพียงตัวเดียว

ตัวอย่าง :

Code: Select all

SELECT ชื่อคอลัมน์
FROM ชื่อตาราง
WHERE ชื่อคอลัมน์ LIKE '??_??';


ย้อนกลับด้านบน
Image
thitikorn_lp
PHP Super Hero Member
PHP Super Hero Member
Posts: 680
Joined: 28/07/2014 10:24 am

Re: PostgreSQL : คำสั่ง SQL การใช้ Operator

Post by thitikorn_lp »

OR ใช้สำหรับการเชื่อมโยงเงื่อนไขและต้องมีเงื่อนใขใดเงื่อนไขหนึ่งที่เป็นจริง

โค้ด :

Code: Select all

WHERE condition1
OR condition2
...
OR condition_n;
อธิบายคำสั่ง
condition1      :  เงื่อนไขที่ 1 ที่กำหนด
....
condition_n     :  เงื่อนไขที่ n
  • หมายเหตุ
    - OR ช่วยให้สามารถทำการทดสอบเงื่อนไขได้มากกว่า 2 เงื่อนไข
    - OR จะทำการตรวจสอบว่า เงื่อนไขทั้งหมดที่กล่าวมาจะต้องมีความถูกต้อง อย่างน้อย 1 เงื่อนไข
    - OR สามารถใช้ได้ทั้งในการ SELECT, INSERT, UPDATE หรือ DELETE
ตัวอย่าง : การใช้ OR ใน SELECT

Code: Select all

SELECT name,street,city,zip
FROM res_partner
WHERE name like '%J%'
OR city like '%M%'
OR zip like '%33%';
ผลที่ได้ :
ภาพที่ 1
ภาพที่ 1
2014-09-22_18-45-51.jpg (147.26 KiB) Viewed 3590 times
คำอธิบาย :
จากภาพจะเห็นได้ว่า เราได้ทำการตั้งเงื่อนไขว่า ข้อมูลที่เลือกให้แสดงจะต้องมี
- เงื่อนไขที่ 1 คือ "name" จะต้องมี J ตัวใหญ่อยู่
- เงื่อนไขที่ 2 คือ ใน "city" จะต้องมี M อยู่ใหญ่อยู๋ในชื่อเมือง
และเงื่อนไขสุดท้ายคือ zip ในรหัสประเทศจะต้องมี เลข "33"
ดังนั้น ข้อมูลที่แสดงจะต้องมีอยู่ในเงื่อนไข อย่างน้อย 1 เงื่อนไข จึงแสดงออกมา

ตัวอย่าง : การใช้ OR ใน INSERT

Code: Select all

INSERT INTO z_cpartner
(name, email)
SELECT name , email
FROM res_partner
WHERE city = 'Taipei'
OR city = 'Miami';
ผลที่ได้ :
รายชื่อทั้งหมดจากตาราง res_partner
ภาพที่ 2
ภาพที่ 2
operater 03.jpg (217.48 KiB) Viewed 3589 times
ภาพที่ 3
ภาพที่ 3
operater 04.jpg (168.1 KiB) Viewed 3589 times
รายชื่อที่ได้ที่จากเงื่อนไขที่ว่า city = 'Taipei' หรือ city = 'Miami'
ภาพที่ 4
ภาพที่ 4
2014-09-23_9-59-21.jpg (52.2 KiB) Viewed 3589 times
ผลที่ได้
ภาพที่ 5
ภาพที่ 5
2014-09-23_10-00-28.jpg (40.09 KiB) Viewed 3589 times
คำอธิบาย :
จากภาพที่ 2 และ 3 เป็นรายชื่อทั้งหมดของตาราง res_partner เราได้ทำการ insert โดยตั้งเงื่อนไขว่า ชื่อที่จะทำการ insert มานั้น จะต้องมี city ชื่อว่า 'Taipei' หรือ 'Miami' จึงจะทำการ insert มาได้

ตัวอย่าง : การใช้ OR ใน UPDATE

Code: Select all

UPDATE ชื่อตาราง
SET คอลัมน์ที่ต้องการ = 'ค่าที่ต้องการ'
WHERE คอลัมน์ที่ตั้งเงื่อนไข = 'เงื่อนไข'
OR คอลัมน์ที่ตั้งเงื่อนไข > ค่า(ตัวเลข)(เงื่อนไข);
ตัวอย่าง : การใช้ OR ใน DELETE

Code: Select all

DELETE FROM ชื่อตาราง
WHERE คอลัมน์ที่ตั้งเงื่อนไข= 'เงื่อนไข'
OR คอลัมน์ที่ตั้งเงื่อนไข<= ค่า(ตัวเลข)(เงื่อนไข);
** การใช้ SELECT, INSERT, UPDATE, DELETE เป็นการใช้เหมือนทั่วๆ ไป เพียงแต่การใส่ OR เพิ่มเข้าไป เราจะสามารถตั้งเงื่อนไขในการทำงานต่างๆ ให้กับตัวเลือกของเราได้มากกว่า 1 เงื่อนไข


ย้อนกลับด้านบน
Image
Post Reply
  • Similar Topics
    Replies
    Views
    Last post

Return to “PostgreSQL”

Who is online

Users browsing this forum: No registered users and 3 guests