วันพุธที่ 31 มกราคม พ.ศ. 2561
Database System - slide week 3
https://docs.google.com/presentation/d/1lsH6lMC7ofC6Q_zZMTGXa_clC2xK8yZm1BTF6LgBKcg/edit?usp=sharing
วันจันทร์ที่ 29 มกราคม พ.ศ. 2561
Database System - work 3 insert data to DBMS
what you have done/learned
- การใช้งาน Module SQLconnector ของ Python เบื้องต้น- หลายๆ Module จะรองรับเฉพาะ version ที่ตรงกันเท่านั้น (เช่น python 3.4 ,2.7)
- การใช้ power shell ใน window
- การ insert data to database , create database , delete database , delete table, create table การกำหนด PK, ForeignKey, NOTNULL ,type ,auto increatement,
การรับส่วน Error ผ่านทาง module SQLconnector
- สำเร็จในการ แปลง file csv จากที่ import มาจาก
https://docs.google.com/spreadsheets/d/16zSaz5njoh-vLxbrVzll4fLuU3ydmjfWm1_mYEMflKU/edit?usp=sharing
ให้กลายเป็น file csv ที่มีรูปแบบที่กำหนด จากนั้นนำไฟล์ที่ มีรูปแบบที่กำหนดไว้
ไป เข้า ใน database ได้ ซึ่งจะคือ ถ้ามีรูปแบบที่กำหนดถูกต้อง ก็สามารถ นำเข้าได้โดยไม่มีผลกระทบใดๆ
- แบ่งโค้ดเป็นหลายส่วน ส่วนแปลงไฟล์ให้เป็นรูปแบบมาตรฐาน ส่วนสร้าง database ส่วนสร้าง table ส่วนนำข้อมูลเข้า table
- code https://github.com/poklonas/Python-GPA-cal
- commit
เตรียมฟังก์ชั่นในการสร้างไฟล์รูปแบบที่กำหนดไว้
ฟังก์ชั่น สร้างไฟล์ตามรูปแบบที่ต้องการเสร็จแล้ว
แก้ปัญหา มีบรรทัดว่างในไฟล์
เปลี่ยนให้สามารถรับค่าชื่อไฟล์ผ่าน command line
แยกไฟล์ระหว่างสร้างtable, insert
สร้าง database, table ได้แล้ว
insert ได้แล้ว
ผลลัพธ์สุดท้าย
any problem/solution
การทำงานเป็นกลุ่มใหญ่ ที่ไม่คุ้นเคย และไม่ค่อยได้เจอหน้ากัน ทำให้ติดต่อกันค่อนข้างลำบาก และอาจจะทำให้งานไม่ไปในทางเดียวกัน แก้ปัญหาโดยการสร้างกลุ่ม ใน Facebook , Messenger ขึ้นมาเพื่อติดต่องานโดยเฉพาะ และ ลงรายละเอียดต่างๆ เกี่ยวกับงานเอาไว้ ใช้ git hub เพื่อ แสดงโค้ดที่แต่ละคนจะใช้ในการจัดการกับหัวข้อต่างๆ ใช้บล๊อคเพื่อเขียนรายละเอียดมากขึ้น และ คอยพูดคุยงานด้วยเสียงผ่านทาง discord หากต้องใช้
ต้องการแยก subject id ออกจาก subject name ที่ไม่ได้แยก column ออกมาตั้งแต่ตอนแรก ในงานแรกที่ทำ ทำให้ต้องใช้ split ในการช่วยแยกข้อมูลออกมา
decision
งาน Tutorial ให้แต่ละคนแยกกันทำ เนื่องจากไม่มีความจำเป็นต้องทำร่วมกันก็ได้ส่วน เรื่องการนำข้อมูลเข้า Database นั้น จะให้เริ่มจาก แยกกันไปศึกษาและทำกันเอง โดยให้เขียนลง blog และ อัพโค้ดลง github แต่ว่า ได้คุยกันเอาไว้ว่าจะให้ทำขั้นตอนดังนี้
ดึงข้อมูล CSV จาก google spreedsheet และดูว่า รูปแบบตรงกับที่ต้องการมั้ย หรือนำเข้า ฐานข้อมูลได้เลยหรือไม่
ถ้า ไม่ จะไปยังรูป ไฟล์ที่เป็นตัว X ในภาพ และผ่าน ฟังก์ชั่นทำให้เป็นรูปแบบที่กำหนดไว้ ดังไฟล์รูป ถูกต้อง หรือหาก ดึงจาก google spreedsheet และ รูปแบบตรงก็มาขั้นตอนนี้ได้เลย จากนั้น นำเข้าฟังก์ชั่น ที่จะนำข้อมูลนั้นเข้าฐานข้อมูลได้
การทำ TABLE 2 Table ดังนี้
| "CREATE TABLE Student (" | |
| " `Student_id` varchar(13) NOT NULL, " | |
| " `First_name` varchar(100) NOT NULL," | |
| " `Last_name` varchar(100) NOT NULL," | |
| " PRIMARY KEY (`Student_id`)," | |
| " UNIQUE (Student_id))") | |
| "CREATE TABLE Student_Records (" | |
| " PK int(11) NOT NULL AUTO_INCREMENT," | |
| " SubjectID varchar(10) NOT NULL," | |
| " SubjectName varchar(100) NOT NULL," | |
| " Weight int(1) NOT NULL," | |
| " Section int(3) NOT NULL," | |
| " Grade varchar(2) NOT NULL," | |
| " Term int(2) NOT NULL," | |
| " Student_id varchar(13) NOT NULL," | |
| " PRIMARY KEY (`PK`)," | |
| " FOREIGN KEY (Student_id) REFERENCES Student(Student_id))") |
โดยจะมี TABLE Student และ Student record ที่จะมี Foreign key ชี้ไปยัง ข้อมูลในตาราง Student นั้นเอง
แยกฟังก์ชั่นสร้าง Database , Table และ เพิ่มข้อมูลแยกกันเอาไว้ เพราะไม่มีความจำเป็นต้องสร้างใหม่ตลอดเวลา (และ mysql ก็ไม่ยอมอยู่แล้วด้วย)
ตัวอย่างข้อมูลที่ ไม่ตรงตามรูปแบบที่ต้องการ
และ รูปแบบที่ต้องการ
related info/link/reference
https://www.w3schools.com/sql/ sql command
sql connector module for python 3.4 and 2.7
https://dev.mysql.com/doc/connector-python/en/ how to use sql connector module
วันศุกร์ที่ 26 มกราคม พ.ศ. 2561
Database System - work 3 learn SQL
ศึกษา เกี่ยวกับ SQL จาก
..............................................................................
โดย ได้เรียนรู้เพิ่มเติมดังนี้
คำสั่ง
SELECT * FROM TABLENAME;
* แทน Column ทั้งหมด หรือสามารถระบุเป็นชื่อ Column ก็ได้
ส่วน TABLE NAME เป็นชื่อ table ใน ฐานข้อมูลนั้น
ผลลัพธ์จะ หมายถึง ข้อมูลใน column ทั้งหมดใน ตารางนั้นๆ
..............................................................................
จาก SELECT หากต้องการเลือกหลายๆ Column นั้นทำได้โดยการใช้ ' , ' คั่นไว้เช่น
SELECT A, B , C FROM TABLE NAME
SELECT Count(*) AS DistinctCountries
FROM (SELECT DISTINCT Country FROM Customers);
โดยจะทำการกรองข้อมูลมาก่อน แล้วค่อยมานับอีกที จะได้ข้อมูลเหมือนด้านบนแต่ได้ ชื่อ column เป็น DistinctCountries แทน
..............................................................................
SQL is an ANSI (American National Standards Institute) standard
SELECT A, B , C FROM TABLE NAME
SELECT DISTINCT A FROM TABLENAME
DISTINCT จะทำให้เราเลือกเฉพาะ ข้อมูลที่ไม่ซ้ำกันมาเท่านั้น
SELECT COUNT(DISTINCT Country) FROM Customers;
COUNT( X ) จะนับข้อมูลที่มีอยู่ใน ( ) แล้วคืนค่าเป็นตัวเลขกลับมา แต่ในตัวอย่างนี้จะได้อยู่ใน Column count(distinct country), row 1
แต่มีวิธีที่ทำให้สามารถ กำหนดชื่อ column ได้ เช่น
FROM (SELECT DISTINCT Country FROM Customers);
โดยจะทำการกรองข้อมูลมาก่อน แล้วค่อยมานับอีกที จะได้ข้อมูลเหมือนด้านบนแต่ได้ ชื่อ column เป็น DistinctCountries แทน
..............................................................................
SELECT * FROM Customers
WHERE CustomerID=1;
การใช้ WHERE ในการเลือกข้อมูลที่ตรงตามเงื่อนไข โดยในที่นี้กำหนดให้ CustomerID ต้องมีเลขเท่ากับ 1
และสามารถมีหลายเงื่อนไขได้เช่น
SELECT * FROM Customers
WHERE NOT Country='Germany' AND NOT Country='USA';
..............................................................................
SELECT * FROM Customers
ORDER BY Country ASC, CustomerName DESC;
สามารถกำหนดได้ว่าจะให้ เรียงตามลำดับของ column ไหน รูปแบบไหน ASC จะเรียงตามปกติ น้อยไปมาก ส่วน DESC จะกลับกันคือมากไปน้อย และ ถ้ามีการเรียงหลาย Column จะเรียงจากซ้ายไปขวาก่อน คือเรียง Country ก่อนและจึงมาเรียงด้วย CustomerName อีกที (ภายใน Country เดียวกัน)
..............................................................................
INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)
VALUES ('Cardinal','Tom B. Erichsen','Skagen 21','Stavanger','4006','Norway');
ตัวอย่างการเพิ่มข้อมูลลงใน Table customers โดยจะใช้คำสั่ง INSERT INTO + values โดย ในวงเล็บหลังชื่อ table จะเป็นลำดับของ column และหลัง value จะเป็น ค่าใน column ที่ตรงกัน
..............................................................................
UPDATE Customers
SET ContactName='Juan';
SET ContactName='Juan';
จะทำการอัพเดทค่าใน table customers column contactname ทั้งหมดเป็น Juan
UPDATE Customers
SET ContactName='Juan'
WHERE Country='Mexico';
SET ContactName='Juan'
WHERE Country='Mexico';
สามารถกำหนดเฉพาะที่ได้โดยใช้ WHERE
..............................................................................
DELETE FROM Customers
WHERE CustomerName='Alfreds Futterkiste';
การลบ ข้อมูล จากตาราง
หากไม่มี WHERE จะลบทั้งหมด
DELETE FROM Customers
WHERE CustomerName='Alfreds Futterkiste';
การลบ ข้อมูล จากตาราง
หากไม่มี WHERE จะลบทั้งหมด
..............................................................................
SELECT TOP 3 * FROM Customers;
เลือก สูงสุด 3 แถว
SELECT * FROM Customers LIMIT 3;
เลือก สูงสุด 3 แถว
SELECT * FROM Customers LIMIT 3;
จำนวนข้อมูลสูงสุด 3
SELECT TOP 50 PERCENT * FROM Customers;
สูงสุด 50% แรก (ข้อมูล ครึ่งนึงด้านบน)
..............................................................................
SELECT MIN(Price) AS SmallestPrice
FROM Products;
SELECT MAX(Price) AS LargestPrice
FROM Products;
หาค่าสูงสุดและต่ำสุด
..............................................................................
SELECT COUNT(ProductID)
FROM Products;
SELECT AVG(Price)
FROM Products;
SELECT SUM(Quantity)
FROM OrderDetails;
หาค่าจำนวน ค่าเฉลี่ย และค่าผลรวม
..............................................................................
เครื่องหมาย _ หมายถึงตัวอักษรใดๆ % ถ้า a% หมายถึง นำหน้าด้วย a ถ้า %a หมายถึงลงท้ายด้วย และ %a% มี a ในตำแหน่งใดๆ จากตัวอย่างข้างบนหมายถึง นำหน้าด้วย a และมีตัวอักษรอย่างน้อย 3 ตัว
% wildcard
SELECT * FROM Customers
WHERE CustomerName LIKE 'a_%_%';
เครื่องหมาย _ หมายถึงตัวอักษรใดๆ % ถ้า a% หมายถึง นำหน้าด้วย a ถ้า %a หมายถึงลงท้ายด้วย และ %a% มี a ในตำแหน่งใดๆ จากตัวอย่างข้างบนหมายถึง นำหน้าด้วย a และมีตัวอักษรอย่างน้อย 3 ตัว
% wildcard
SELECT * FROM Customers
WHERE City LIKE '[bsp]%';
SELECT * FROM Customers
WHERE City LIKE '[!a-c]%';
จากรูปแบบนี้ อันแรกจะอะไรก็ได้ที่ขึ้นต้นด้วย bsp ส่วนอันแรก อะไรก็ได้ที่ไม่ได้ขึ้นต้นด้วย a b c
..............................................................................
SELECT * FROM Customers
WHERE Country IN ('Germany', 'France', 'UK');
SELECT * FROM Customers
WHERE Country IN (SELECT Country FROM Suppliers);
เลือก จาก ในเมืองที่กำหนดไว้เท่านั้น (โดยใช้ IN ในเงื่อนไข)
SELECT * FROM Orders
WHERE OrderDate BETWEEN #07/04/1996# AND #07/09/1996#;
SELECT * FROM Products
WHERE (Price BETWEEN 10 AND 20)
AND NOT CategoryID IN (1,2,3);
การใช้เงื่อนไข BETWEEN เพื่อเลือกช่วง
..............................................................................
SELECT o.OrderID, o.OrderDate, c.CustomerName
FROM Customers AS c, Orders AS o
WHERE c.CustomerName="Around the Horn" AND c.CustomerID=o.CustomerID;
การใช้ชื่อชัวคราว
..............................................................................
SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
FROM Orders
INNER JOIN Customers
ON Orders.CustomerID=Customers.CustomerID;
เช่นการหา รายการสั่ง ของลูกค้าที่มี id ตรงกันโดย order จะมี pk ref to customerID ของอีกตารางหนึ่ง
SELECT Orders.OrderID, Customers.CustomerName, Shippers.ShipperName
FROM ((Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID)
INNER JOIN Shippers ON Orders.ShipperID = Shippers.ShipperID);
for 3 table join
..............................................................................
SELECT City, Country FROM Customers
WHERE Country='Germany'
UNION
SELECT City, Country FROM Suppliers
WHERE Country='Germany'
ORDER BY City;
SELECT City, Country FROM Customers
WHERE Country='Germany'
UNION ALL
SELECT City, Country FROM Suppliers
WHERE Country='Germany'
ORDER BY City;
UNION จะทำการรวมข้อมูล จาก 2 SELECT เข้าด้วยกัน ถ้าไม่มี ALL จะรวมแบบ นำข้อมูลที่ไม่ซ้ำกันเท่านั้นแต่ถ้า ALL จะเพิ่มส่วนที่ซ้ำกันเข้าไปด้วย
..............................................................................
SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country;
ผลลัพธ์ จะเป็นการ นับจำนวน ว่ามีลูกค้าในเมืองใดๆกี่คน
SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
HAVING COUNT(CustomerID) > 5
ORDER BY COUNT(CustomerID) DESC;
ทำหน้าที่คล้ายกับ WHERE แต่ว่าสามารถใช้กับ function ได้
..............................................................................
SELECT ProductName
FROM Products
WHERE ProductID = ALL (SELECT ProductID FROM OrderDetails WHERE Quantity = 10);
SELECT SupplierName
FROM Suppliers
WHERE EXISTS (SELECT ProductName FROM Products WHERE SupplierId = Suppliers.supplierId AND Price < 20);
EXISTS return ture ถ้า ในเงื่อนไข มีค่าที่ตรงกับที่กำหนดไว้ ใช้ในการทดสอบได้
..............................................................................
SELECT ProductName
FROM Products
WHERE ProductID = ANY (SELECT ProductID FROM OrderDetails WHERE Quantity > 99);
ANY return ture ถ้ามีเงื่อนไขตรงเพียงชุดเดียวก็ได้
FROM Products
WHERE ProductID = ALL (SELECT ProductID FROM OrderDetails WHERE Quantity = 10);
ALL return ture ถ้าทั้งหมดตรงกับเงื่อนไข
..............................................................................
SELECT column1, column2, column3, ...
INTO newtable [IN externaldb]
FROM oldtableWHERE condition;
SELECT ProductName, UnitPrice * (UnitsInStock + ISNULL(UnitsOnOrder, 0))
FROM Products
การใช้งาน comment
/*Select all the columns
of all the records
in the Customers table:*/
SELECT * FROM Customers WHERE (CustomerName LIKE 'L%'
OR CustomerName LIKE 'R%' /*OR CustomerName LIKE 'S%'
OR CustomerName LIKE 'T%'*/ OR CustomerName LIKE 'W%')
AND Country='USA'
ORDER BY CustomerName;
SELECT * FROM Customers -- WHERE City='Berlin';
ใช้เครื่องหมาย /* ......... */ สำหรับหลายบรรทัด และ -- สำหรับบรรทัดเดียว
..............................................................................
SELECT column1, column2, column3, ...
INTO newtable [IN externaldb]
FROM oldtableWHERE condition;
copy จาก table หนึ่งไปอีก table หนึ่ง
INSERT INTO Customers (CustomerName, City, Country)
SELECT SupplierName, City, Country FROM Suppliers
WHERE Country='Germany';
SELECT SupplierName, City, Country FROM Suppliers
WHERE Country='Germany';
การเพิ่มข้อมูล จากต่างตาราง และมีเงื่อนไข
..............................................................................
SELECT ProductName, UnitPrice * (UnitsInStock + IFNULL(UnitsOnOrder, 0))
FROM Products
ฟังก์ชั่นเช็คถ้า null return 0
FROM Products
ฟังก์ชั่นเช็คถ้า null return 0
SELECT ProductName, UnitPrice * (UnitsInStock + COALESCE(UnitsOnOrder, 0))
FROM Products
ฟังก์ชั่นเช็คถ้า null return 0
FROM Products
ฟังก์ชั่นเช็คถ้า null return 0
SELECT ProductName, UnitPrice * (UnitsInStock + ISNULL(UnitsOnOrder, 0))
FROM Products
การใช้งาน comment
/*Select all the columns
of all the records
in the Customers table:*/
SELECT * FROM Customers WHERE (CustomerName LIKE 'L%'
OR CustomerName LIKE 'R%' /*OR CustomerName LIKE 'S%'
OR CustomerName LIKE 'T%'*/ OR CustomerName LIKE 'W%')
AND Country='USA'
ORDER BY CustomerName;
SELECT * FROM Customers -- WHERE City='Berlin';
ใช้เครื่องหมาย /* ......... */ สำหรับหลายบรรทัด และ -- สำหรับบรรทัดเดียว
..............................................................................
เกี่ยวกับ SQL
SQL is an ANSI (American National Standards Institute) standard
you will need: (for web site)
An RDBMS database program (i.e. MS Access, SQL Server, MySQL)
To use a server-side scripting language, like PHP or ASP
To use SQL to get the data you want
To use HTML / CSS to style the page
SQL keywords are NOT case sensitive ( select = SELECT )
NULL = EMPTY OR NOT VALUES
วันจันทร์ที่ 22 มกราคม พ.ศ. 2561
Database System - work 2 MySQL การลง และการใช้งานเบื้องต้น
โหลด MySQL > > https://dev.mysql.com/downloads/file/?id=474802
จากนั้น กดท่ีตัวลงที่ทำการดาวน์โหลดมา และกดตามภาพไปเรื่อยๆ ( Next > > > )
จากนั้น กดท่ีตัวลงที่ทำการดาวน์โหลดมา และกดตามภาพไปเรื่อยๆ ( Next > > > )
ขั้นตอนนี้สามารถเลือกได้ว่าจะลง แบบไหน
รอการดาวน์โหลดและลงให้เสร็จสิ้น
หลังจากกด Next มาเรื่อยๆเราจะได้ทำการตั้งค่า MySQL Server ตามขั้นตอน
ตั้งค่า พอร์ท และรูปแบบ เป็น Developement Machine
การกำหนดรหัส รูท และ เพิ่ม User ตามความต้องการ
กำหนดชื่อเซิฟเวอร์
รอติดตั้ง
การตั้งค่า MySQL Router
พิมรหัส และกด เช็ค และกด Next เพื่อลงตัวอย่างการใช้งาน
รอการติดตั้งจนเสร็จ
จากนั้นก็การติดตั้งก็เป็นอันเสร็จเรียบร้อยแล้ว
ซึ่ง สามารถใช้งานได้ทั้งแบบ Shell และ แบบที่มี GUI
และ commandline client
วิธีการใช้งาน อ้างอิงจาก https://dev.mysql.com/doc/mysql-getting-started/en/
- \h คือตัวแสดงรายละเอียดคำสั่งต่างๆ
คำสั่ง SHOW DATABASES; จะแสดง ฐานข้อมูลออกมา
สามารถเพิ่ม Database โดยการพิม CREATE DATABASE name;
ส่วนการเปลี่ยนเปลี่ยนแปลงสร้างตารางใน ดาต้าเบสนั้นๆเริ่มแรกต้องเลือก data base ที่เราสนใจจะไปเพิ่มก่อน โดยใช้
USE dbmame
จากนั้นลองเพิ่มตาราง ดังนี้
CREATE TABLE cats
(
id INT unsigned NOT NULL AUTO_INCREMENT, # Unique ID for the record
name VARCHAR(150) NOT NULL, # Name of the cat
owner VARCHAR(150) NOT NULL, # Owner of the cat
birth DATE NOT NULL, # Birthday of the cat
PRIMARY KEY (id) # Make the id the primary key
);
เป็นตาราง ที่มี column ที่เก็บค่าต่างๆ id ที่เก็บเป็น unsigned int ชื่อที่เก็บได้ไม่เกิน 150 ตัวอักษร เจ้าของที่เป็นชื่อเช่นกัน วันเกิด และ Primary key โดยข้อมูลทุกตัว จะต้องไม่เป็น null และ ในช่อง id จะ เพิ่มเลขแบบอัตโนมัต
จากนั้นจะลองดูรายละเอียดว่ามีตารางใน database นี้ ก็พิม
show tables;
จะได้ผลลัพธ์ดังนี้
แต่หากว่าต้องการดูรายละเอียดที่มากขึ้นให้พิมดังนี้
DESCRIBE name_of_table
การจะเพิ่มข้อมูลลงในตารางให้พิมดังนี้
INSERT INTO cats ( name, owner, birth) VALUES
( 'Sandy', 'Lennon', '2015-01-03' ),
( 'Cookie', 'Casey', '2013-11-13' ),
( 'Charlie', 'River', '2016-05-21' );
โดยจะใช้คำว่า INSERT INTO name (ar1, . . . . , arN) VALUES ไล่ไปเรื่อยๆ ดังตัวอย่าง () = 1 row
หากต้องการจะดูข้อมูลในตารางจะใช้คำสั่ง
SELECT * FROM cats;
SELECT * FROM name_of_table;
และยังเจาะจง เลือกได้เฉพาะสิ่งที่ต้องการได้ ยกตัวอย่างเช่น
SELECT name FROM cats WHERE owner = 'Casey';
เลือก ชื่อ จากตาราง cats ที่เจ้าข้อง(column) = 'Casey' ผลก็จะแสดงแค่ column name ของแมวที่มีเจ้าของตรงกันเท่านั้น
การลบข้อมูลทำได้โดย
DELETE FROM cats WHERE name='Cookie';
ใช้คำสั่ง DELETE
เพิ่ม Column ได้โดยใช้คำสั่ง
ALTER TABLE cats ADD gender CHAR(1) AFTER name;
ALTER TABLE .... ADD ..... โดย gender char(1) จะเป็น column ใหม่ที่เกิดหลัง column name
SHOW CREATE TABLE cats\G
คำสั่งนี้จะแสดงรายละเอียดที่มากกว่าเดิมของตารางนั้นๆ
ส่วนการลบ column จะใช้คำสั่ง
ALTER TABLE cats DROP gender;
DROP
โดยพื้นฐานเบื้องต้นก็จะมีเพียงเท่านี้ ต้องไปศึกษาคำสั่ง อื่นๆเพิ่มเติม
สมัครสมาชิก:
บทความ (Atom)

