Featured Post

ไวรัสบนเว็บไซต์ แก้ได้

ช่วงนี้ไวรัสกำลังระบาดหนัก และได้รับการแจ้งเตือนจาก google ว่าเว็บไซต์ของคุณไม่ปลอดภัย ปัญหาส่วนใหญ่เกิดจาก...

อ่านต่อ

การเปรียบเทียบฐานข้อมูล SQL ชนิดต่างๆ

Posted by sunisa | Posted in Database | Posted on 10-07-2009

0

สรุปการเปรียบเทียบฐานข้อมูล SQL ชนิดต่างๆ

1.คำสั่ง Join

ทุกฐานข้อมูลสามารถใช้ INNER JOINs ได้ แต่ join types ประเภทอื่นๆ ไม่สามารถใช้ได้ทุกฐานข้อมูลแต่ขึ้นอยู่กับชนิดของฐานข้อมูล

yes = สามารถใช้งานได้

Join type/feature

PostgreSQL

DB2

MSSQL

MySQL

Oracle

Informix

Natural joins (only tested: NATURAL LEFT JOIN)

yes

yes

yes

USING-clause

yes

yes

yes

FULL joins1 (tested: SELECT…FULL JOIN…ON…=…)

yes

yes

yes

yes

yes

Explicit CROSS JOIN (cartesian product)

yes

yes

yes

yes

yes

yes

2. การเรียงลำดับข้อมูล

บางฐานข้อมูลจัดเรียงโดยค่าที่เป็น NULLs ถือว่ามีค่ามากกว่า non-NULL values เช่น PostgreSQL, DB2, Oracle และบางฐานข้อมูลจัดเรียงโดยค่าที่เป็น NULLs ถือว่ามีค่าน้อยกว่า

non-NULL values เช่น  MSSQL, MySQL, Informix เป็นต้น

รูปแบบคำสั่ง:

DECLARE cursorname CURSOR FOR
SELECT ... FROM ... WHERE ...
ORDER BY column_name1,column_name2,…

3.การใช้คำสั่ง SELECT

คำสั่ง SELECT ใช้ในการเลือกข้อมูลที่ต้องการ โดยการใช้คำสั่งเพื่อดึงข้อมูลที่เราต้องการออกมานั้นมีรูปแบบคำสั่งมาตรฐานหลายรูปแบบให้เลือกใช้  ขึ้นอยู่กับการสนับสนุนของฐานข้อมูล ซึ่งบางฐานข้อมูลไม่สนับสนุนรูปแบบมาตรฐานใดๆเลยและมีชุดคำสั่งเป็นของตัวเอง แบ่งเป็น 3 แบบ ได้แก่
Simple limit, Top-n, Limit—with offset

3.1 SELECT Simple limit มีคำสั่งมาตรฐาน 3 รูปแบบ ดังนี้

  • ใช้ FETCH FIRST:

รูปแบบคำสั่ง:
SELECT … FROM … WHERE … ORDER BY … FETCH FIRST n ROWS ONLY

  • ใช้ Window function: ใช้ฟังก์ชัน ROW_NUMBER() OVER

รูปแบบคำสั่ง:
SELECT * FROM (
SELECT
ROW_NUMBER() OVER (ORDER BY key ASC) AS rownumber,
columns
FROM tablename
) AS foo
WHERE rownumber <= n

  • ใช้ cursor:
    • DECLARE cursor-name CURSOR FOR …
    • OPEN cursor-name
    • FETCH …
    • CLOSE cursor-name

3.2 SELECT Top-n หรือ quota-queries มีคำสั่งมาตรฐาน 2 รูปแบบ ดังนี้

  • The fast variant: ใช้ window function ชื่อ RANK() OVER

รูปแบบคำสั่ง:
SELECT * FROM (
SELECT
RANK() OVER (ORDER BY age ASC) AS ranking,
person_id,
person_name,
age
FROM person
) AS foo
WHERE ranking <= 3

  • The slow variant:

ในกรณีที่ DBMS ไม่สนับสนุน elementary OLAP features

รูปแบบคำสั่ง:
SELECT * FROM person AS px
WHERE (
SELECT COUNT(*)
FROM person AS py
WHERE py.age < px.age
) < 3

3.3 SELECT Limit—with offset

  • ใช้ OFFSET and FETCH FIRST:

รูปแบบคำสั่ง:
SELECT…
FROM …
WHERE …
ORDER BY …
OFFSET skip ROWS
FETCH FIRST n ROWS ONLY

  • Using a window function: ใช้ฟังก์ชัน ROW_NUMBER() OVER

รูปแบบคำสั่ง:
SELECT * FROM (
SELECT
ROW_NUMBER() OVER (ORDER BY key ASC) AS rownum,
columns
FROM tablename
) AS foo
WHERE rownum > skip AND rownum <= (n+skip)

  • ใช้ cursor:

รูปแบบคำสั่ง:

    • DECLARE cursor-name CURSOR FOR …
    • OPEN cursor-name
    • FETCH RELATIVE number-of-rows-to-skip …
    • CLOSE cursor-name

4. การใช้คำสั่ง INSERT

บางฐานข้อมูลสนับสนุนการใช้คำสั่งเพื่อ INSERT ข้อมูลทีละหลายๆแถวได้ เช่น PostgreSQL, DB2, MySQL

รูปแบบคำสั่ง:
INSERT INTO tablename VALUES (0,'foo') , (1,'bar') , (2,'baz');

มีค่าเท่ากับการใช้คำสั่ง

INSERT INTO tablename VALUES (0,'foo');
INSERT INTO tablename VALUES (1,'bar');
INSERT INTO tablename VALUES (2,'baz');

5. ข้อมูลชนิด Boolean

Boolean สามารถมีค่าดังต่อไปนี้

- True

- False

- UNKNOWN หรือ NULL (ถ้าไม่มีข้อจำกัดว่าห้ามมีค่า Null)

โดย True จะมีค่ามากกว่า False บางฐานข้อมูลมีตัวแปรชนิดนี้ และบางฐานข้อมูลไม่มีตัวแปรชนิดนี้ แต่มีการใช้ตัวแปรอื่นเพื่อเก็บค่าเหมือนกับตัวแปร Boolean เช่นในฐานข้อมูล DB2 ใช้ฟิลด์ข้อมูล CHAR(1) เพื่อเก็บค่า 0 กับ 1

6. ข้อมูลชนิด char

บางฐานข้อมูลมีรูปแบบตามมาตรฐานของข้อมูลชนิดนี้ และบางฐานข้อมูลรายละเอียดบางอย่างที่แตกต่างกันออกไป

7.ข้อมูลชนิด TIMESTAMP

มาตรฐานมี 2 แบบ ได้แก่

1. TIMESTAMP เช่น TIMESTAMP '2003-07-29 13:19:30'

2. TIMESTAMP WITH TIME ZONE เช่น TIMESTAMP '2003-07-29 13:19:30+02:00'
บางฐานข้อมูลสนับสนุนทั้ง 2 แบบ และบางฐานข้อมูลสนับสนุน TIMESTAMP  เพียงอย่างเดียว เช่น PostgreSQL

8. SQL functions

แต่ละฐานข้อมูลมีรูปแบบการเขียนคำสั่งแตกต่างกันไป โดยอาจยึดตามรูปแบบคำสั่งมาตรฐาน หรือมีความแตกต่างออกไป เช่น อาจมีชื่อคำสั่ง และพารามิเตอร์ที่ต่างกัน เช่น ตัวอย่างคำสั่งคืนค่าความยาวของข้อมูล CHARACTER

ตัวอย่างคำสั่ง รูปแบบมาตรฐาน:
CHARACTER_LENGTH(argument)

ตัวอย่างคำสั่ง ฐานข้อมูล Oracle:
LENGTH(TRIM(TRAILING FROM foo))

9. การเชื่อม string

รูปแบบมาตรฐาน: string1 || string2

แต่ละฐานข้อมูลมีรูปแบบคำสั่งและ syntax แตกต่างกันออกไป  ตัวอย่างเช่น MSSQL ใช้เครื่องหมาย + แทนเครื่องหมาย ||

10. Automatic key generation

ตัวแปรที่ใช้ในการระบุ IDENTITY แตกต่างกันในแต่ละฐานข้อมูล เช่น PostgreSQL ไม่สนับสนุนคำสั่งมาตรฐานแต่จะประกาศชนิดของคอลัมน์เป็น SERIAL เพื่อให้ข้อมูล auto-generated

ตัวอย่างคำสั่ง รูปแบบมาตรฐาน:

CREATE TABLE tablename (
tablename_id INTEGER GENERATED ALWAYS AS IDENTITY
...
)

ตัวอย่างคำสั่ง ฐานข้อมูล PostgreSQL:

CREATE TABLE tablename (
tablename_id SERIAL,
...
)

11. TRUNCATE TABLE operations

คำสั่ง TRUNCATE ของแต่ละฐานข้อมูลอาจมีรายละเอียดบางอย่างต่างไปจากรูปแบบมาตรฐาน และบางฐานข้อมูลไม่มีคำสั่ง TRUNCATE เช่น ใน DB2 จะใช้คำสั่ง IMPORT statement แทนโดยขึ้นอยู่กับชนิดระบบปฏิบัติการ

ตัวอย่างคำสั่ง

On unix-like systems:                                                                                                     IMPORT FROM /dev/null OF DEL REPLACE INTO tablename

On Windows:                                                                                                                 IMPORT FROM NUL OF DEL REPLACE INTO tablename

12. Command line operations

มีรูปแบบการเขียน และชื่อคำสั่งที่แตกต่างกันออกไป เช่น ตัวอย่างในการดึงรายชื่อฐานข้อมูล

ตัวอย่างคำสั่ง ฐานข้อมูล MSSQL:
EXEC SP_HELPDB

ตัวอย่างคำสั่ง ฐานข้อมูล MySQL:
SHOW DATABASES

Write a comment



Advertise Here