Sunday, December 7, 2014

SQL

SQL 
SQL SELECT
เป็นคำสั่งที่ใช้สำหรับการเรียกดูข้อมูลในตาราง (Table) คำสั่ง SQL SELECT สามารถเรียกได้ทั้งตาราง หรือว่า สามารถระบุฟิวด์ที่ต้องการเรียกดูข้อมูลได้
Database : MySQL,Microsoft Access,SQL Server,Oracle
Syntax
SELECT Column1, Column2, Column3,... FROM [Table-Name]
Table : customer
CustomerID
Name
Email
CountryCode
Budget
Used
C001
Win Weerachai
win.weerachai@thaicreate.com
TH
1000000
600000
C002
John Smith
john.smith@thaicreate.com
EN
2000000
800000
C003
Jame Born
jame.born@thaicreate.com
US
3000000
600000
C004
Chalee Angel
chalee.angel@thaicreate.com
US
4000000
100000


Sample1 การเลือกข้อมูลที่ระบุฟิวด์
SELECT CustomerID, Name, Email FROM customer
Output 
CustomerID
Name
Email
C001
Win Weerachai
win.weerachai@thaicreate.com
C002
John Smith
john.smith@thaicreate.com
C003
Jame Born
jame.born@thaicreate.com
C004
Chalee Angel
chalee.angel@thaicreate.com

Sample2 การเลือกข้อมูลทั้งหมดของ Table
SELECT * FROM customer
Output

CustomerID
Name
Email
CountryCode
Budget
Used
C001
Win Weerachai
win.weerachai@thaicreate.com
TH
1000000
600000
C002
John Smith
john.smith@thaicreate.com
EN
2000000
800000
C003
Jame Born
jame.smith@thaicreate.com
US
3000000
600000
C004
Chalee Angel
chalee.angel@thaicreate.com
US
4000000
100000


SQL SELECT
เป็นคำสั่งที่ใช้สำหรับการเรียกดูข้อมูลในตาราง (Table) คำสั่ง SQL SELECT สามารถเรียกได้ทั้งตาราง หรือว่า สามารถระบุฟิวด์ที่ต้องการเรียกดูข้อมูลได้
Database : MySQL,Microsoft Access,SQL Server,Oracle
Syntax
SELECT Column1, Column2, Column3,... FROM [Table-Name
Table : customer
CustomerID
Name
Email
CountryCode
Budget
Used
C001
Win Weerachai
win.weerachai@thaicreate.com
TH
1000000
600000
C002
John Smith
john.smith@thaicreate.com
EN
2000000
800000
C003
Jame Born
jame.born@thaicreate.com
US
3000000
600000
C004
Chalee Angel
chalee.angel@thaicreate.com
US
4000000
100000

Sample1 การเลือกข้อมูลที่ระบุฟิวด์
SELECT CustomerID, Name, Email FROM customer
Output

CustomerID
Name
Email
C001
Win Weerachai
win.weerachai@thaicreate.com
C002
John Smith
john.smith@thaicreate.com
C003
Jame Born
jame.born@thaicreate.com
C004
Chalee Angel
chalee.angel@thaicreate.com

Sample2 การเลือกข้อมูลทั้งหมดของ Table
SELECT * FROM customer
Output 
CustomerID
Name
Email
CountryCode
Budget
Used
C001
Win Weerachai
win.weerachai@thaicreate.com
TH
1000000
600000
C002
John Smith
john.smith@thaicreate.com
EN
2000000
800000
C003
Jame Born
jame.smith@thaicreate.com
US
3000000
600000
C004
Chalee Angel
chalee.angel@thaicreate.com
US
4000000
100000




SQL OR AND 
เป็นคำสั่งที่ใช้สำหรับการระบุเงื่อนไขการเลือกข้อมูลในตาราง (Table) การเชื่อมวลีสำหรับเงื่อนไขต่าง ๆ
Database : MySQL,Microsoft Access,SQL Server,Oracle
Syntax
SELECT Column1,Column2,Column3,... FROM [Table-Name] WHERE [Field] = 'Value' [AND/OR] [Field] = 'Value'
Table : customer
CustomerID
Name
Email
CountryCode
Budget
Used
C001
Win Weerachai
win.weerachai@thaicreate.com
TH
1000000
600000
C002
John Smith
john.smith@thaicreate.com
EN
2000000
800000
C003
Jame Born
jame.born@thaicreate.com
US
3000000
600000
C004
Chalee Angel
chalee.angel@thaicreate.com
US
4000000
100000


Sample1 การเลือกข้อมูลที่ CountryCode = US และ Used = 100000 
SELECT * FROM customer WHERE CountryCode = 'US' AND Used = '100000'
หรือ
SELECT * FROM customer WHERE CountryCode = 'TH' OR CountryCode = 'EN'

Output 
CustomerID
Name
Email
CountryCode
Budget
Used
C004
Chalee Angel
chalee.angel@thaicreate.com
US
4000000
100000

CustomerID
Name
Email
CountryCode
Budget
Used
C001
Win Weerachai
win.weerachai@thaicreate.com
TH
1000000
600000
C002
John Smith
john.smith@thaicreate.com
EN
2000000
800000


SQL SUB SELECT QUERY 
เป็นคำสั่งที่ใช้สำหรับการระบุเงื่อนไขการเลือกข้อมูลในตาราง (Table) โดยใช้เลือกข้อมูลย่อยภายใน SELECT ย่อยอีกชั้นหนึ่งครับSUB SELECT QUERY เข้ามาช่วยในด้านความสะดวกและง่ายกว่าการ JOIN TABLE แต่ข้อเสียของ SUB SELECT คือ สามารถทำงานได้ช้ากว่า JOIN TABLE

Database : MySQL,Microsoft Access,SQL Server,Oracle

Syntax
SELECT Column1,Column2,Column3,... FROM [Table-Name] WHERE [Field] IN (SELECT ..... FROM ....)
Table : customer
CustomerID
Name
Email
CountryCode
Budget
Used
C001
Win Weerachai
win.weerachai@thaicreate.com
TH
1000000
600000
C002
John Smith
john.smith@thaicreate.com
EN
2000000
800000
C003
Jame Born
jame.born@thaicreate.com
US
3000000
600000
C004
Chalee Angel
chalee.angel@thaicreate.com
US
4000000
100000
Table : audit 
AuditID
CustomerID
Date
Used
1
C001
2008-07-01
100000
2
C001
2008-07-05
200000
3
C001
2008-07-10
300000
4
C002
2008-07-02
400000
5
C002
2008-07-07
100000
6
C002
2008-07-15
300000
7
C003
2008-07-20
400000
8
C003
2008-07-25
200000
9
C004
2008-07-04
100000

Sample1 การเลือกข้อมูลตาราง customer ที่เชื่อมโยงกับตาราง audit ที่มีการใช้ยอดเงินในแต่ล่ะครั้งมากกว่า 400000
SELECT * FROM customer WHERE CustomerID IN (SELECT CustomerID FROM audit WHERE Used >= '400000')
Output

CustomerID
Name
Email
CountryCode
Budget
Used
C002
John Smith
john.smith@thaicreate.com
EN
2000000
800000
C003
Jame Born
jame.smith@thaicreate.com
US
3000000
600000

SQL IN 
เป็นคำสั่งที่ใช้สำหรับการระบุเงื่อนไขการเลือกข้อมูลในตาราง (Table) โดยเลือกเฉพาะค่าที่กำหนด

Database : MySQL,Microsoft Access,SQL Server,Oracle
Syntax
SELECT Column1, Column2, Column3,... FROM [Table-Name] WHERE [Field] IN ('Value1','Value2')
Table : customer
CustomerID
Name
Email
CountryCode
Budget
Used
C001
Win Weerachai
win.weerachai@thaicreate.com
TH
1000000
600000
C002
John Smith
john.smith@thaicreate.com
EN
2000000
800000
C003
Jame Born
jame.born@thaicreate.com
US
3000000
600000
C004
Chalee Angel
chalee.angel@thaicreate.com
US
4000000
100000
Sample1 การเลือกข้อมูลที่ CustomerID = C002 และ C003
SELECT * FROM customer WHERE CustomerID IN ('C002','C003')
Output

  CustomerID
Name
Email
CountryCode
Budget
Used
C002
John Smith
john.smith@thaicreate.com
EN
2000000
800000
C003
Jame Born
jame.smith@thaicreate.com
US
3000000
600000

SQL FIRST 
เป็นคำสั่งที่ใช้สำหรับการระบุเงื่อนไขการเลือกข้อมูลในตาราง (Table) โดยเลือกข้อมูล แถวแรกของข้อมูลที่พบ
Database : MySQL,Microsoft Access,SQL Server,Oracle
Syntax
SELECT FIRST(ColumnName) FROM TableName
Table : customer
CustomerID
Name
Email
CountryCode
Budget
Used
C001
Win Weerachai
win.weerachai@thaicreate.com
TH
1000000
600000
C002
John Smith
john.smith@thaicreate.com
EN
2000000
800000
C003
Jame Born
jame.born@thaicreate.com
US
3000000
600000
C004
Chalee Angel
chalee.angel@thaicreate.com
US
4000000
100000
Sample1 การเลือกข้อมูลแบบด้วย FIRST ในตาราง customer
SELECT FIRST(Name) As Name FROM customer
Output

Name
Weerachai Nukitram


MYSQL ADDDATE()
เป็นคำสั่งของ MySQL กับ DateTime โดย ADDDATE ใช้ในการหา เพิ่มหรอลดค่าของวันที่
Database : MySQL
Syntax
ADDDATE(date,INTERVAL expr unit), ADDDATE(expr,days)

expr argument for each unit value.
unit Value
Expected expr Format
MICROSECOND
MICROSECONDS
SECOND
SECONDS
MINUTE
MINUTES
HOUR
HOURS
DAY
DAYS
WEEK
WEEKS
MONTH
MONTHS
QUARTER
QUARTERS
YEAR
YEARS
SECOND_MICROSECOND
'SECONDS.MICROSECONDS'
MINUTE_MICROSECOND
'MINUTES:SECONDS.MICROSECONDS'
MINUTE_SECOND
'MINUTES:SECONDS'
HOUR_MICROSECOND
'HOURS:MINUTES:SECONDS.MICROSECONDS'
HOUR_SECOND
'HOURS:MINUTES:SECONDS'
HOUR_MINUTE
'HOURS:MINUTES'
DAY_MICROSECOND
'DAYS HOURS:MINUTES:SECONDS.MICROSECONDS'
DAY_SECOND
'DAYS HOURS:MINUTES:SECONDS'
DAY_MINUTE
'DAYS HOURS:MINUTES'
DAY_HOUR
'DAYS HOURS'
YEAR_MONTH
'YEARS-MONTHS'

ทั้งนี้ยังสามารถใช้ INTERVAL เข้ามา + หรือ - ค่าวันที่ได้เช่นเดียวกัน 
date + INTERVAL expr unit
date - INTERVAL expr unit
Sample
SELECT ADDDATE('2008-01-02', INTERVAL 31 DAY);
-> 2008-02-02
SELECT ADDDATE('2008-01-02', 31);
-> 2008-02-02

MYSQL DATE_ADD() , DATE_SUB()
SQL CASE..WHEN
เป็นคำสั่งที่ใช้สำหรับการกำหนดเงื่อนไขการแสดงค่าของฟิวด์ หรือค่าของ Value ถ้าจะให้เข้าใจง่าย ๆ ทางภาษา Syntax ของภาษาทั่วไปก็คือ การใช้ IF...Else...

Database : SQL Server , MySQL

Syntax
Simple CASE expression:
CASE input_expression
WHEN when_expression THEN result_expression [ ...n ]
[ ELSE else_result_expression ]
END
Searched CASE expression:
CASE
WHEN Boolean_expression THEN result_expression [ ...n ]
[ ELSE else_result_expression ]
END


Table : customer
CustomerID
Name
Email
CountryCode
Budget
Used
C001
Win Weerachai
win.weerachai@thaicreate.com
TH
1000000
600000
C002
John Smith
john.smith@thaicreate.com
EN
2000000
800000
C003
Jame Born
jame.born@thaicreate.com
US
3000000
600000
C004
Chalee Angel
chalee.angel@thaicreate.com
US
4000000
100000


Sample1 ตัวอย่างนี้จะแสดงการใช้ CASE...WHEN เช่นการกำหนดค่าแสดงผลของ Column ชื่อ CountryCode
SELECT CustomerID, Name,
CASE CountryCode
WHEN 'TH' THEN 'Thailand'
WHEN 'EN' THEN 'English'
WHEN 'US' THEN 'United states'
ELSE 'Unknown'
END AS Country
FROM customer
CustomerID
Name
Country
C001
Win Weerachai
Thailand
C002
John Smith
English
C003
Jame Born
United states
C004
Chalee Angel
United states
Output







นอกจากนี้ในส่วนของ THEN ยังสามารถกำหนดค่า Value ฟิวด์ Column ได้เช่นเดียวกัน
SELECT CustomerID, Name,
CASE CountryCode
WHEN 'TH' THEN Column1
WHEN 'EN' THEN 'Value'
WHEN 'US' THEN Column3
ELSE Column4
END AS Country
FROM customer

SQL CREATE INDEX
เป็นคำสั่งที่ใช้สำหรับการสร้าง Index การ Index ข้อมูลในฟิวด์หรือ Column นั้นตัวฐานข้อมูลจะให้ความสำคัญกับฟิวด์นั้น ๆ โดยจะจัดเรียงต้นแบบ และ แบบแผนที่ง่านต่อการเข้าถึงข้อมูลกลุ่มนั้น ๆ การ Index มีประโยชน์ในการค้นหาข้อมูล และเมื่อมีการใช้ JOIN Table หลาย ๆ ตัว การ Index ฟิวด์ที่มีความสัมพันธ์กัยระหว่าง JOIN จะทำให้การ Query มีประสิทธิ์ภาพมากขึ้น
Database : MySQL,Microsoft Access,SQL Server,Oracle
Syntax
CREATE TABLE "TableName" 
(
ColumnName1 DataType ,
ColumnName2 DataType ,
ColumnName3 DataType ,
ColumnName4 DataType ,
...
INDEX (ColumnName1,ColumnName2...)
)
หรือในกรณี ALTER
ALTER TABLE "TabmeName" ADD INDEX (Column1,Column2)
Table : customer
CustomerID
Name
Email
CountryCode
Budget
Used
C001
Win Weerachai
win.weerachai@thaicreate.com
TH
1000000
600000
C002
John Smith
john.smith@thaicreate.com
EN
2000000
800000
C003
Jame Born
jame.born@thaicreate.com
US
3000000
600000
C004
Chalee Angel
chalee.angel@thaicreate.com
US
4000000
100000
CountryCode
CountryName
TH
Thailand
EN
English
US
United states
Table : country

Sample 1 ต้องการทำ Index ของ Table customer สำหรับ Column ชื่อ CountryCode (กรณีที่แก้ไข Table)
ALTER TABLE customer ADD INDEX (CountryCode)


Output
ได้ Index ของ Column CountryCode
Sample 2 การ JOIN Table ที่เป็น Column ที่เป็น Index ระหว่างตาราง customer กับ country เพื่อดึงชื่อประเทศมาแสดง
SELECT a.CustomerID, a.Name, a.Email, b.CountryName, a.Budget, a.Used
FROM customer a, country b
WHERE a.CountryCode = b.CountryCode
CustomerID
Name
Email
CountryCode
Budget
Used
C001
Win Weerachai
win.weerachai@thaicreate.com
Thailand
1000000
600000
C002
John Smith
john.smith@thaicreate.com
English
2000000
800000
C003
Jame Born
jame.smith@thaicreate.com
English
3000000
600000
C004
Chalee Angel
chalee.angel@thaicreate.com
United states
4000000
100000
Output