Posts Tagged ‘ Database

SQL:Structured Query Language

Note ไว้เพื่อเตือนความจำ เนื่องจากมีโอกาสได้ไปอบรม การใช้งาน SQL มา SQL แบ่งเป็นกลุ่มได้ 3 กลุ่มดังนี้
1. DDL (Data Definition Language) เป็นคำสั่งที่ใช้ในการจัดการโครงสร้างตาราง เช่น
– CREATE
– DROP
– ALTER
2. DCL (Data Control Language) เป็นคำสั่งที่ใช้ในการจัดการสิทธิ์ การใช้งานต่างๆ เช่น
– GRANT
– REVOKE
3. DML (Data Manipulation Language) เป็นคำสั่งที่ใช้ในการ จัดการข้อมูลในตาราง เช่น ดึงข้อมูลมาแสดง ลบ แก้ไข เช่น
– SELECT
– INSERT
– DELETE
– UPDATE
สรุปคร่าวๆตามเอกสารที่อาจารย์ สอนมาครับ

ข้อมูลอ้างอิง :
What are the difference between DDL, DML and DCL commands?

[PHP] PDO For MySQL #1

ปกติสมัยที่ทำเว็บเล่นๆทำไปเรื่อย การติดต่อฐานข้อมูลก็ใช้ Library ของ mysql โดยตรง แต่หลังๆ ความขี้เกียจในการเปลี่ยนแปลง Code ในส่วนของ DAO (Data Access Object) ก็เข้าครอบงำทำให้ต้องหาเครื่องมือ หรือ Lib มาช่วย งานซึ่งก็ได้พบเจอกับ PDO อ่านผ่านๆ และทดลองตามขั้นตอนดังนี้
1. เปิด PDO Library เปิด php.ini แล้วเปิด comment

extension=php_pdo.dll
extension=php_pdo_mysql.dll

2. Restart Apache
3. เขียน Code ทดสอบดังนี้

//Create connection
$conn = new PDO('mysql:host=localhost;dbname=xx', 'user', 'password');
//Query
$datas = $conn->query("SELECT * FROM TB_NAME");
foreach($datas as $row) {
	echo $row['ID']." : ".$row['NAME']."<br/>";
}
//Close connection
$conn = null;

หลังจากทดลองง่ายๆ ได้สองสามนาที คาดหวังว่ามันจะ workสำหรับงานชิ้นต่อไป
ป.ล คาดหวังอีกครั้งว่าใน hosting ทั้งหลายควรเปิดใช้ PDO ด้วยนะครับ

delete , update with Join statement

สืบเนื่องจากเพื่อนผมไปเจอ Blog การ Update หรือ Delete โดย Join เงื่อนไขจากตารางอื่น มาแล้วเกิืดความสงสัยว่า เอ๋ แล้วมันเป็นคำสั่งมาตรฐานหรือเปล่า ผมก็เลยลองนำมาทดลองใช้กับ MySQL ครับ
Delete

DELETE T1.*,T2.* FROM TEST1 T1 INNER JOIN TEST2 T2 ON T1.ID = T2.ID 

สรุปว่าใน MySQL (Version 5.1) ที่ผมใช้อยู่สามารถใช้งานคำสั่ง Delete แล้วทำการ join ได้ครับ ที่ยังไม่ได้ทดลองก็มี Oracle , MS SQL Server ถ้าทดสอบแล้วจะมา Update
Update

UPDATE T1 SET T.NAME = 'TEST_UPDATE',T2.NAME = 'TEST_UPDATE2' FROM 
TEST1 T1 INNER JOIN TEST2 T2

อันนี้ไม่ Error ก็ลองเปลี่ยนเป็น

UPDATE T1 SET T.NAME = 'TEST_UPDATE' FROM 
TEST1 T1 INNER JOIN TEST2 T2 WHERE T1.ID = 1

และ

UPDATE T1 SET T.NAME = 'TEST_UPDATE',T2.NAME = 'TEST_UPDATE2' FROM 
TEST1 T1 INNER JOIN TEST2 T2

เกิด Error ครับ แสดงว่า MySQL สนับสนุนการ delete แบบ join และไม่สนับสนุนการ update

Random row from a database

สืบเนื่องจากงานเก่าที่ผมเคยทำนั้น มีการ “สุ่ม” ข้อมูลออกมาโดยต้องการข้อมูลประมาณ 10 รายการจากทั้งหมด 100 รายการ คุณหัวหน้าเลยให้หาวิธีสุ่มข้อมูลให้ ซึ่งผมหาคิดได้ 2 ข้อดังนี้ เลยมาขอ Note ไว้กันลืม
1. การสุ่มโดยใช้ความสามารถของตัว Database เองวิธีนี้ผมคิดว่าน่าจะดีเพราะเมื่อทำงานใน Engine ของฐานข้อมูลเองนั้นย่อมให้ผลที่ดีกว่า เร็วกว่า แน่นอน (คิดเองนะครับ) ซึ่งจากการทดลองหาข้อมูลการ สุ่มของฐานข้อมูล Oracle ก็ไปเจอรูปแบบการสุ่มของฐานข้อมูลต่างๆ ดังนี้ครับ
MySQL

SELECT column FROM table
ORDER BY RAND()
LIMIT 1

PostgreSQL

SELECT column FROM table
ORDER BY RANDOM()
LIMIT 1

Microsoft SQL Server

SELECT TOP 1 column FROM table
ORDER BY NEWID()

IBM DB2

SELECT column, RAND() as IDX 
FROM table 
ORDER BY IDX FETCH FIRST 1 ROWS ONLY

Oracle

SELECT column FROM( 
    SELECT column FROM table
   ORDER BY dbms_random.value 
)WHERE rownum = 1

2. การสุ่มโดยไม่ใช้ความสามารถของ Database ครับ วิธีนี้ผมคิดเอง ไม่รู้มันจะดีแค่ไหน แต่ก็เคยใช้วิธีนี้มาก่อนแล้วครับ ใครมีวิธีการที่ดีกว่านี้ก็แนะนำได้ครับ วิธีนี้เป็นดังนี้ครับ
ขั้นตอนที่ 1 ไป Query เอา Primary key ของข้อมูลที่ต้องการ สุ่มขึ้นมาก่อน จากนั้นก็จัดเก็บข้อมูลนั้นใน Array
ขั้นตอนที่ 2 นำข้อมูลใน Array ที่ได้จากข้อหนึ่งไปทำการ สลับตำแหน่งก่อน (Shuffle) แล้วก็ตัดเอาเฉพาะจำนวนที่ต้องการ ซึ่งความสามารถนี้น่าจะมีในทุกภาษานะ
ขั้นตอนที่ 3 เอาข้อมูลจากข้อ 2 ไป Query ข้อมูลจากฐานข้อมูลมาใหม่ครับ

จากการเสนอวิธีที่ผมคิดเองได้ดังกล่าวสองข้อ ท่านหัวหน้าบอกไม่ต้องคิดมาก เอาข้อแรกเลย เพราะข้อมูลเรามีไม่เยอะมาก ถ้าเยอะมากๆ นี่แบบแรกก็ไม่ไหว Query จะช้ามาก
หมายเหตุ :
ใครผ่านไปมา มีวิธีการที่ดีกว่านี้ก็แชร์ๆ กันได้ครับ
อ้างอิง (Credit)
SQL to Select a random row from a database table
ปัญหาเขียนโปรแกรมตอนแปด, แสดงค่าสุ่มตัวอย่างระหว่าง 1 ถึง 100

Query records from table (Java)

เป็นตัวอย่าง Code ในการ Query ข้อมูลมาจากฐานข้อมูลครับ โดยใช้ Statement

/**
 * File Name : QueryData.java
 * Created Date : Nov 9, 2009 : 10:43:41 AM
 * Copyright © 2009 www.fun4station.com
 */
package com.fun4station.example;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * @Author Supot Saelao
 * @Version 1.0
 */
public class QueryData {

	public static void main(String[] args) {
		Connection conn = null;		
		ResultSet rs = null;
		Statement stmt = null;
		try {
			conn = ;//getDataBase connection
			String sql = "SELECT ID,NAME FROM CUSTOMER";
			// Create a statment object.
			stmt = conn.createStatement();
			
			// Executes query to select data from table
			rs = stmt.executeQuery(sql);

			//Get all data and iterate until the last record.
			while (rs.next()) {
				//Manage data
				rs.getInt("ID"); //Get int column
				rs.getString("NAME"); //Get String column
			}
		}catch (SQLException e){
			e.printStackTrace();
		} finally {
			try{				
				if(rs != null) rs.close();
				if(stmt != null) stmt.close();
				if (conn != null) conn.close();
			}catch (Exception e){}
		}
	}

}