ภาษา SQL เบื้องต้น

ประเภทคำสั่งของภาษา SQL

  1. ภาษานิยามข้อมูล (Data Definition Language : DDL)
  2. ภาษาจัดการข้อมูล (Data Manipulation Language : DML)
  3. ภาษาที่ใช้ควบคุมข้อมูล (Data Control Language : DCL)
ภาษา SQL ที่โต้ตอบได้ (Interactive SQL)

ใช้เพื่อปฏิบัติงานกับฐานข้อมูลโดยตรง โดยเรียกดูข้อมูลได้ในขณะที่ทำงาน เพื่อให้ได้ผลลัพธ์ที่นำไปใช้ได้ (เป็นการใช้ภาษา SQL ตรง ๆ กับระบบฐานข้อมูลโดยไม่ผ่านภาษาอื่น ๆ)

SELECT * FROM Student;
ภาษา SQL ที่ฝังในโปรแกรม (Embedded SQL)

เป็นการใช้ภาษาอื่น ๆ เข้ามาช่วยในการเรียกใช้งานภาษา SQL เพื่อเพิ่มประสิทธิภาพ ความสามารถของภาษา SQL ให้มากยิ่งขึ้น

mysql.excute(
    "SELECT * FROM Student",
    (err,result)=>{
        console.log(result);
    }
)
การสร้าง TABLE (Create Table)
CREATE TABLE <ชื่อตาราง>
(
  <ชื่อ_column_1> <ประเภทข้อมูล_1> [OPTIONAL_1...],
  <ชื่อ_column_2> <ประเภทข้อมูล_2> [OPTIONAL_2...],
  . . .
);

ประเภทของข้อมูล (Data Type)

  • int: เก็บตัวเลข
  • char: เก็บข้อความตัวอักษรที่ไม่เกิน 255 อักษร
  • varchar: เก็บข้อความตัวอักษรที่ไม่เกิน 4000 อักษร
  • text: เก็บข้อความตัวอักษรที่มีความยาวมาก ๆ
  • date: เก็บข้อมูลเฉพาะวันที่เท่านั้น
  • time: เก็บข้อมูลเฉพาะเวลาเท่านั้น
  • datetime: เก็บข้อมูลวันที่และเวลา
  • decimal: เก็บทศนิยม
  • double: เก็บทศนิยมที่มีความยาวมาก ๆ

โดยหากใส่วงเล็บ (x) ท้ายประเภทตัวแปร จะเป็นการกำหนดขนาดที่สามารถเก็บได้ เช่น

CREATE TABLE Student
(
  std_id int(13),
  name varchar(255),
  lastname varchar(255)
);

// สร้างตาราง Student มี Field std_id เก็บตัวเลขได้ไม่เกิน 13 หลัก
// name เป็น varchar เก็บไม่เกิน 255 ตัวอักษร
// lastname เป็น varchar เก็บไม่เกิน 255 ตัวอักษร

OPTIONAL สามารถใส่การกำหนดค่าเพิ่มเติมได้ เช่น

  • NOT NULL: ห้ามว่าง
  • UNIQUE: เป็นเอกลักษณ์
  • PRIMARY KEY: เป็นคีย์หลัก
CREATE TABLE Student
(
  std_id int(13) NOL NULL UNIQUE PRIMARY KEY,
  name varchar(255) NOT NULL,
  lastname varchar(255) NOT NULL
);

// สร้างตาราง Student มี Field std_id เก็บตัวเลขได้ไม่เกิน 13 หลัก
// เป็น primary key ห้ามว่าง และเป็นเอกลักษณ์
// name เป็น varchar เก็บไม่เกิน 255 ตัวอักษร และห้ามว่าง
// lastname เป็น varchar เก็บไม่เกิน 255 ตัวอักษร และห้ามว่าง

---------------------------

// กรณีต้องการให้ Column มากกว่า 1 เป็น Primary Key
CREATE TABLE Student
(
  std_id int(13) NOL NULL,
  name varchar(255) NOT NULL,
  lastname varchar(255) NOT NULL,
  PRIMARY KEY(name, lastname)
);

การสร้างตารางโดยมี Foreign Key

FOREIGN KEY (<column_name>) REFERENCES <ตารางที่เชื่อม>(<คอลัมน์ตารางที่เชื่อม>)

ตัวอย่าง

CREATE TABLE Student
(
  std_id int(13) NOL NULL UNIQUE PRIMARY KEY,
  name varchar(255) NOT NULL,
  lastname varchar(255) NOT NULL,
  consultant_id int(10),
  FOREIGN KEY (consultant_id) REFERENCES Consultant_table(consultant_id)
);
การลบ TABLE (Drop Table)
DROP TABLE <ชื่อตาราง>;
การแก้ไขตาราง (Alter Table)
// เพิ่ม Column
ALTER TABLE <ชื่อตาราง> ADD <ชื่อ_column> <ประเภท (ขนาด)>;
// แก้ไขประเภท ALTER TABLE <ชื่อตาราง> MODIFY <ชื่อ_column> <ประเภทที่ต้องการเปลี่ยน (ขนาด)>; // แก้ไขชื่อ ALTER TABLE <ชื่อตาราง> RENAME <ชื่อ_column เดิม> TO <ชื่อ_column ใหม่>;
การสร้างดัชนี (Create Index)
CREATE UNIQUE INDEX <ชื่อ_index> ON <ชื่อตาราง>(<column1,...>);
การลบดัชนี (Drop Index)
DROP INDEX <ชื่อ_index>;
การเพิ่มข้อมูลเข้าตาราง (Insert)
// แบบกำหนด Column อันไหนว่างจะได้ค่าว่างหากไม่ได้กำหนด NOl NULL
INSERT INTO <ชื่อตาราง>(column1,column2,...) VALUES (<ค่า1>,<ค่า2>,...);

// แบบไม่กำหนด Column (VALUES ต้องเท่ากับจำนวน Column ไม่รวม Auto Increment)
INSERT INTO <ชื่อตาราง> VALUES (<ค่า1>,<ค่า2>,...);
การเพิ่มข้อมูลเข้าตาราง (Insert) โดยใช้การ SELECT จากอีกตาราง
INSERT INTO <ชื่อตาราง>
SELECT statement;

// เช่น
INSERT INTO 'BANGKOKSTAFF'
SELECT * FROM 'SALESTAB' WHERE ADDRESS = 'Bangkok';
การปรับปรุงค่า (Update)
UPDATE <ชื่อตาราง> SET <column1>="<ค่า>",<column2>="<ค่า>", . . .
WHERE <เงื่อนไขที่ตรงกันแล้วจึงแก้ไขค่า>;
// หากต้องการ Update ทั้งหมดไม่ต้องใส่ WHERE

// เช่น
UPDATE Student SET name="Wutthiphon",lastname="Tassana"
WHERE student_id=6504062620116;
การลบแถว (Delete)
DELETE FROM <ชื่อตาราง>
WHERE <เงื่อนไขที่ตรงกันแล้วจึงลบค่า>;
// หากต้องการลบทั้งหมดไม่ต้องใส่ WHERE

// เช่น
DELETE FROM Student
WHERE student_id=6504062620116;
การเลือกข้อมูล (Select)
SELECT <column,... หรือ * ทั้งหมด> FROM <ชื่อตาราง>
WHERE <เงื่อนไขในการเลือก>
การเลือกข้อมูลโดยตัดตัวซ้ำ (Select Distinct)
SELECT DISTINCT <column ที่ต้องการให้เช็คแล้วตัดตัวซ้ำ> FROM <ชื่อตาราง>
WHERE <เงื่อนไขในการเลือก>
การเลือกข้อมูลโดยการเรียงข้อมูล (Select Order)
SELECT <column,... หรือ * ทั้งหมด> FROM <ชื่อตาราง>
WHERE <เงื่อนไขในการเลือก> ORDER BY <ต้องการให้เรียงจาก column> ASC/DESC

// ASC คือการเรียงจาก น้อยไปมาก
// DESC คือการเรียงจาก มากไปน้อย
การเลือกข้อมูลโดยการหาค่าที่ประกอบด้วย (Select Contain)

เป็นการหาค่าใน Column ที่ต้องประกอบไปด้วย

  • % ค่าที่ไม่ทราบหลายตัว
  • _ ค่าที่ไม่ทราบตัวเดียว
SELECT <column,... หรือ * ทั้งหมด> FROM <ชื่อตาราง>
WHERE <column_name> LIKE ("%วุ%")
// หาข้อมูลใน Column ที่ประกอบด้วย <อักษรที่ไม่ทราบ>วุ<อักษรที่ไม่ทราบ>

SELECT <column,... หรือ * ทั้งหมด> FROM <ชื่อตาราง>
WHERE <column_name> LIKE ("วุ%")
// หาข้อมูลใน Column ที่ประกอบด้วย วุ<อักษรที่ไม่ทราบ>
การเลือกข้อมูลโดยมีหลายการตรวจสอบ (Select AND/OR)
SELECT <column,... หรือ * ทั้งหมด> FROM <ชื่อตาราง>
WHERE <เงื่อนไขในการเลือก1> AND <เงื่อนไขในการเลือก2>

// AND และ
// OR หรือ
การเลือกข้อมูลโดยมีหลายรายการเป็น List (Select IN)

มีค่าเท่ากับการใช้ Select OR หลาย ๆ ตัวต่อกัน

SELECT <column,... หรือ * ทั้งหมด> FROM <ชื่อตาราง>
WHERE <column1> IN (<ชุดข้อมูลที่จะเช็ค>)

เช่น
SELECT * FROM Student
WHERE name IN ("อชิรวิชญ์","ฉัตรณภัทร์","วุฒิพร","ปิยบุตร")
การเลือกข้อมูลโดยมีใช้งานร่วมกับ Table อื่น (Join)

ประเภทการ JOIN

  • LEFT JOIN: การเชื่อมโยงข้อมูลโดยเอาฝั่งซ้ายเป็นหลัก
  • RIGHT JOIN: การเชื่อมโยงข้อมูลโดยเอาฝั่งขวาเป็นหลัก
  • OUTER JOIN: การเชื่อมโยงข้อมูลโดยเอาข้อมูลจากทั้ง 2 table ทั้งหมด
  • INNER JOIN: การเชื่อมโยงข้อมูลโดยเอาข้อมูลจากทั้ง 2 table เฉพาะที่ตรงกัน

SELECT <column,... หรือ * ทั้งหมด> FROM <ชื่อตาราง>
LEFT JOIN <table2> ON <table1.foreign_key>=<table2.primary_key>
การเลือกข้อมูลโดยมีการสร้างตัวแปรเพิ่ม
SELECT <column> AS <column ใหม่> FROM <ชื่อตาราง>
WHERE <เงื่อนไขในการเลือก1>

โดยสามารถประยุกต์ใช้กับ Aggreate Column ได้

Aggreate Column

ให้ผลของคาสั่งออกมาเพียง 1 คอลัมน์ ใช้กับข้อมูลที่เป็นตัวเลข

  • COUNT(X): นับจำนวน
  • SUM(X): หาผลรวม
  • AVG(X): หาค่าเฉลี่ย
  • MAX(X): หาค่าที่มากที่สุด
  • MIN(X): หาค่าที่น้อยที่สุด
  • VARIANC(X): หาส่วนเบี่ยงเบียนมาตรฐานยกกำลัง2
  • STDDEV(X): หาส่วนเบี่ยงเบียนมาตรฐาน
  • ABS(X): หาค่าสมบูรณ์
  • CEIL(X): ให้ตัวเลขจำนวนเต็มที่มีค่า > หรือ = ใน Column
  • FLOOR(X): เช็คการปัดทศนิยมจากการแบ่งครึ่ง .5

เช่น

SELECT COUNT(age) AS age_more_than_18 FROM Student
WHERE Age > 18
// นับจำนวนแถวที่มีค่าใน column->age มากกว่า 18

SELECT SUM(salary) AS sum_salary,
SUM(age) AS sum_age
FROM Teacher
// หาผลรวมของ salary และ age
Wutthiphon Tassana
Wutthiphon Tassana