Introduction to SQL (MySQL) 353352 – Special Problem (Database) Choopan Rattanapoka
SQL (Structured Query Language) SQL ที่ใช้ในระบบฐานข้อมูลแบบ Relational Database เกิดมาจากพื้นฐานของ Relational Model อย่างเช่น Relational Algebra SQL ประกอบไปด้วยหลายส่วน Data-Definition Language (DDL) : เป็นคำสั่งเพื่อกำหนด relation schemas Interactive data-manipulation language (DML) : เป็นการรวมคำสั่งใน query language ที่มาจากพื้นฐานของ relational algebra และ relational calculus Embedded DML : อยู่ในรูป library เพื่อติดต่อกับภาษาโปรแกรมอื่นๆเช่น C, Pascal, PHP View Definition : คำสั่งเกี่ยวกับการสร้าง view Authorization : คำสั่งเกี่ยวกับสิทธิการเข้าถึงข้อมูล Integrity : คำสั่งเกี่ยวกับการกำหนดความถูกต้องของข้อมูล Transaction Control : คำสั่งเกี่ยวกับการเริ่มต้นและสิ้นสุดของ transaction เช่น lock
MySQL MySQL เป็นโปรแกรมระบบฐานข้อมูลแบบ Relational Database System เป็น open source และสามารถ download มาใช้ได้ Free สามารถทำงานได้กับระบบปฎิบัติการสำคัญๆ ได้หมด เช่น Windows, Linux, Mac OS Website: http://www.mysql.com
AppServ ในการเรียนการสอนต่อไป เราจะใช้ AppServ ซึ่งไปการรวม software หลาย อย่างเข้าด้วยกัน เพื่อเป็น package ที่ง่ายในการติดตั้ง และ ใช้งาน Website: http://www.appservnetwork.com ในโปรแกรม AppServ (AppServ 2.5.10) จะประกอบไปด้วย Apache 2.2.8 : เป็นโปรแกรม web server PHP 5.2.6 : module PHP ที่ทำให้ web server สามารถใช้งานภาษา PHP ได้ MySQL 5.0.51b : ระบบฐานข้อมูล mySQL phpMyAdmin-2.10.3 : เป็น web page ที่ช่วยในการติดต่อการระบบฐานข้อมูล mySQL ทำให้ทำงานกับระบบฐานข้อมูล mySQL ได้ง่ายขึ้น
AppServ เมื่อติดตั้งโปรแกรม AppServ สามารถดูการทำงานว่าเริ่มต้นทำงานได้ด้วยดี โดยเปิด web browser และพิมพ์ 127.0.0.1 ที่ช่อง URL
การใช้ MySQL ผ่านทาง terminal ใน Windows ให้กด control panel -> run -> พิมพ์ cmd เมื่อได้ terminal ให้พิมพ์ mysql –u root –p หมายถึงเรียกใช้งานโปรแกรม mysql โดยจะเข้าสู่ระบบฐานข้อมูลแบบ user (-u) ที่ชื่อ root และ –p หมายถึง เป็น account ที่มี password ป้องกันไว้อยู่ เมื่อโปรแกรมถาม password ให้ใส่ password ของ root ที่ตั้งเอาไว้
การใช้ MySQL ผ่านทาง terminal ถ้าพิมพ์รหัสถูกต้องจะเข้าสู่ prompt ของโปรแกรม MySQL
คำสั่ง MySQL เราสามารถตรวจดูระบบฐานข้อมูลทั้งหมด ที่ root สามารถมองเห็นด้วยคำสั่ง show databases;
คำสั่ง MySQL ถ้าติดตั้ง AppServ จะมีฐานข้อมูลเริ่มต้นอยู่ 4 ฐานข้อมูล Information_schema และ mysql เป็นฐานข้อมูลที่ใช้ในการตั้งค่าระบบของ MySQL Phpmyadmin เป็นฐานข้อมูลที่เก็บค่าระบบของ PhpMyAdmin Test เป็นฐานข้อมูลทดลอง เราสามารถเลือกการทำงานว่าจะทำงานกับฐานข้อมูลตัวไหนด้วยคำสั่ง use <ชื่อฐานข้อมูล>; เช่น use phpmyadmin;
คำสั่ง MySQL เราสามารถทราบว่าระบบฐานข้อมูลที่เราใช้อยู่นั้นประกอบไปด้วย ตาราง อะไรบ้าง โดย การใช้คำสั่ง show tables;
การดูโครงสร้างของตารางที่ถูกสร้างมาแล้ว สามารถดูโครงสร้างของตารางได้โดยใช้คำสั่ง DESCRIBE <ชื่อตาราง> หรือ DESC <ชื่อตาราง>;
Let’s go SQL ในการค้นหาข้อมูลด้วย Relational Algebra ส่วนใหญ่จะอยู่ในรูป ใน SQL นั้นจะมีคำสั่งในรูป SELECT A1, A2, … , An FROM R1, R2, … , Rm WHERE P
Relational Algebra -> SQL จาก Relational Schema Person(id, name, age) Relational Algebra เพื่อหารหัส และ ชื่อ ของคนที่มีอายุมากกว่า 20 SQL : SELECT id, name FROM person WHERE age > 20;
Relational Algebra -> SQL ในกรณีที่ Relational Algebra ไม่มีการใช้ project ( ) หมายถึงให้ แสดงผลลัพธ์ออกมาทุกฟิลด์ ซึ่งตรงกับเครื่องหมาย “*” ใน SQL Relational Algebra SQL SELECT * FROM person WHERE age > 20
Relational Algebra -> SQL ในกรณีที่ Relational Algebra ไม่มีการใช้ select ( ) หมายถึงไม่มีเงื่อนไข ในการกรองผลลัพธ์ ดังนั้นใน SQL สามารถละ WHERE ออกไปได้ Relational Algebra SQL SELECT id,name FROM person
Relational Algebra -> SQL SELECT * FROM <ชื่อตาราง> เช่น SELECT * FROM person
SQL : SELECT คำสั่ง SELECT ใน SQL ตามด้วยฟิลด์ที่จะค้นหา วิธี SELECT มีอยู่ 2 แบบ SELECT ALL (เป็น default ของคำสั่ง SELECT ถ้าไม่ระบุ) SELECT DISTINCT
SQL : SELECT คำสั่ง SELECT สามารถทำการ + , - , * , / กับฟิลด์ที่เลือกแสดง ออกมาได้
SQL : FROM ใช้สำหรับเลือกตารางที่จะค้นหาข้อมูล ถ้าใส่มากกว่า 1 และคั่นด้วยเครื่องหมาย “,” หมายถึงจะทำผลคูณ cartesian ของตารางนั้นๆ
SQL : WHERE ใน Relational Algebra เงื่อนไขของ จะเปลี่ยนจากสัญลักษณ์ทาง คณิตศาสตร์ เป็น สัญลักษณ์ที่พิมพ์ได้ทาง keyboard ปกติ Logical Operations (RA SQL) AND OR NOT Arithmetic Operations (SQL) >, <, <=, >=, =, <>
Exercise 1 กำหนดตารางนักเรียนที่มีโครงสร้างดังนี้ จงเขียน SQL เพื่อหา Student(Fname, Lname, Faculty, GPA) Fname = ชื่อ Lname = นามสกุล Faculty = คณะ GPA = คะแนน GPA จงเขียน SQL เพื่อหา ชื่อและนามสกุลของนักเรียนที่อยู่ที่คณะ “วทอ” นามสกุลของนักเรียนที่มี GPA > 2.00 ทุกข้อมูลของนักเรียนที่มีนามสกุล “ชินวัด” และ GPA < 2.00 ทุกข้อมูลของนักเรียนที่มีนามสกุล “ชินวัด” หรือนามสกุล “วัดชิน”
SQL : UNION ใน SQL สามารถทำการรวมค่าของ 2 SQL statements ด้วยการใช้คำสั่ง UNION ลบข้อมูลที่ซ้ำกันออก UNION ALL เก็บข้อมูลที่ซ้ำกันไว้
SQL : Set Difference ใน MySQL ไม่มีคำสั่ง set difference โดยตรงแต่สามารถเขียนได้ ดูตัวอย่าง SELECT cust_id FROM borrower WHERE cust_id NOT IN (SELECT cust_id FROM depositor);
SQL : Rename ใน SQL การเปลี่ยนชื่อสามารถเปลี่ยนได้ทั้งชื่อ ฟิลด์ และ ชื่อตารางด้วยคำสั่ง ชื่อเก่า AS ชื่อใหม่ ตัวอย่าง
SQL : Set Intersect ใน MySQL ไม่มีคำสั่ง intersect ให้ใช้โดยตรงแต่สามารถเขียนได้ ดังนี้ SELECT cust_id FROM borrower WHERE cust_id IN (SELECT cust_id FROM depositor)
SQL : Natural Join วิธีที่ใช้ Cartesian product : Cust_id Name 001-586-777 John 367-895-124 DJ Cust_id City 001-586-777 Bangkok 367-895-124 Nonthaburi CustName CustCity วิธีที่ใช้ Cartesian product : วิธีที่ใช้ Natural-Join :
SQL : Natural Join
Exercise 2 จงแปลง Relational Algebra ต่อไปนี้ให้เป็นคำสั่ง SQL