17 July 2018, version 1.0 SQL CHEAT SHEET FOR EVERYONE SQL ย่อมาจาก Structured Qu ery L a nguage เป็ นภาษา ทางการทีใช ้งานกับ database มามากกว่า 40 ปี และเป็ น ทักษะสําคัญของ data analyst ทีทุกคนควรมี Command สําคัญใน SQL ทีต ้องใช ้ให ้เป็ น ประกอบด ้วย ● SELECT ● WHERE ● ORDER BY ● GROUP BY ● HAVING [1] SELECT - --------------------------------------------------เลือกทุกคอลัมใน table นันๆ ด ้วย asterisk (*) SELECT * FROM table_name; ื เลือกคอลัมทีเราต ้องการใน table นันๆ สามารถพิมพ์ชอคอลั ม ได ้เลย แยกชือคอลัมด ้วย comma (,) SELECT columnA, columnB FROM table_name; เปลียนชือคอลัมด ้วย AS (alias) SELECT columnA AS new_column_name FROM table_name; กําหนดจํานวนแถวทีอยากดึงข ้อมูลออกมาด ้วย LIMIT SELECT firstname, lastname FROM table_name LIMIT 10; นับจํานวนแถวทังหมดใน table นันๆด ้วย COUNT SELECT COUNT(*) FROM table_name; ํ นเลยในคอลัมนันๆ นับจํานวน value ทีไม่ซากั SELECT DISTINCT country FROM customers; [2] WHERE --------------------------------------------------WHERE คือการใส่เงือนไข (conditions) ในการ filter rows ที เราต ้องการ SELECT * FROM customers WHERE age >= 30; ฟิ ลเตอร์เฉพาะลูกค ้าทีใช ้อีเมล์ @google.com SELECT * FROM customers WHERE email LIKE '%@google.com'; ฟิ ลเตอร์เฉพาะลูกค ้าทีใช ้ชือจริงว่า J_hn โดยที _ จะเป็ นตัว อักษรอะไรก็ได ้แค่หนึง character SELECT * FROM customers WHERE firstname LIKE 'J_hn'; ถ ้าต ้องการใส่มากกว่าหนึงเงือนไข สามารถใช ้ AND หรือ OR เข ้ามาช่วยใน WHERE clause เราสามารถตรวจสอบ missing value (NULL) ในตารางต่างๆ ด ้วย IS NULL / IS NOT NULL เลือกทุกคอลัมจาก table customers ฟิ ลเตอร์เฉพาะลูกค ้าที อายุมากกว่าหรือเท่ากับ 30 ปี และ อาศัยในประเทศไทย ฟิ ลเตอร์เฉพาะลูกค ้าทีไม่ระบุ address ใน table customers SELECT * FROM customers WHERE age >= 30 AND country = "Thailand"; SELECT * FROM customers WHERE address I S NULL; ฟิ ลเตอร์เฉพาะลูกค ้าทีระบุ address ใน table customers เลือกทุกคอลัมจาก table customers ฟิ ลเตอร์เฉพาะลูกค ้าที อายุมากกว่าหรือเท่ากับ 30 ปี หรือ ลูกค ้าทุกคนทีเป็ นผู ้ชาย SELECT * FROM customers WHERE age >= 30 OR gender = " Male"; เราสามารถใช ้ wildcard (%, _) เพือทํา pattern matching ( สําหรับคอลัมทีเป็ น text/ string เช่น ชือลูกค ้า) ใน WHERE clause ได ้เช่นกัน ฟิ ลเตอร์เฉพาะลูกค ้าทีชือขึนต ้นด ้วยตัว D SELECT * FROM customers WHERE firstname LIKE 'D%' SELECT * FROM customers WHERE address I S NOT NULL; แทนที NULL ในคอลัม address ด ้วยคําว่า ‘Bangkok’ SELECT COALESCE(address, ‘Bangkok’) FROM customers; [3] ORDER BY - ---------------------------------------------เรียงข ้อมูลแถว (rows) จากค่าน ้อยไปมาก (Ascending) SELECT * FROM customers WHERE age >= 30 ORDER B Y age; SQL Cheat Sheet โดย DataRockie School ส มัครเรียนฟรีคอร์สออนไลน์ Intro to SQL for Data Analysis ที https://datarockie.teachable.com 17 July 2018, version 1.0 เรียงข ้อมูลแถว (rows) จากค่ามากไปน ้อย (Desceding) SELECT * FROM customers WHERE age >= 30 ORDER BY age DESC; เราสามารถใช ้ ORDER BY กับคอลัมทีเป็ นตัวอักษร text/ string ได ้ โดย ascending order จะเรียงแถวจาก A-Z และ desceding order (DESC) เรียงจาก Z-A [4] GROUP BY ----------------------------------------------ใช ้จับกลุม ่ ผล query ของเรา ปกติจะใช ้คูก ่ บ ั พวก AGGREGATE functions SELECT country, COUNT(*) AS n FROM customers GROUP BY country; AGGREGATE functions คืออะไร? คือฟั งชันทีใช ้คํานวณค่า สถิตเิ บืองต ้นในคอลัมทีเราเลือกมา เช่น ● COUNT - นับจํานวนแถว ● AVG - หาค่าเฉลีย ● SUM - หาผลรวม ● MAX - หาค่ามากทีสุด ● MIN - หาค่าน ้อยทีสุด ตัวอย่างการใช ้งาน AGGREGATE functions SELECT COUNT(sales) AS number_of_transaction, AVG(sales) AS average_sales, SUM(sales) AS total_sales, MAX(sales) AS max_sales, MIN(sales) AS min_sales FROM orders; [5] HAVING - ------------------------------------------------ฟิ ลเตอร์ผล query ทีได ้จากการ GROUP BY ใช ้เหมือนกับ WHERE clause ตัวอย่างด ้านล่าง จะได ้ออกมาสองคอลัมคือ country และ n โดยฟิ ลเตอร์เอาเฉพาะประเทศทีมีลก ู ค ้าตังแต่ 10 คนขึนไป SELECT country, COUNT(*) AS n FROM customers GROUP B Y country HAVING n >= 10; Relational Database --------------------------------------เราสามารถเขียน query JOIN หลายๆ tables เข ้าด ้วยกัน รูปแบบการ JOIN ทีใช ้กันบ่อยๆ ได ้แก่ ● INNER JOIN ● LEFT JOIN ● RIGHT JOIN ● FULL OUTER JOIN Template สําหรับเขียน LEFT JOIN SELECT a.column_name, b.column_name FROM tableA AS a LEFT JOIN tableB AS b ON a.key = b.key; Template สําหรับเขียน FULL JOIN SELECT a.column_name, b.column_name FROM tableA AS a FULL OUTER J OIN tableB AS b ON a.key = b.key; Appendix -----------------------------------------------------Visual รูปแบบการ JOIN ทังสีแบบทีใช ้บ่อยๆใน SQL เทคนิคเวลาเขียน SQL JOIN ● ใช ้ alias (AS) เข ้ามาช่วยตังชือตาราง ● a.column_name โดยที a คือ alias ของตารางนันๆ .column_name คือชือคอลัมทีเราต ้องการ ● ใช ้ ON a.key = b.key เพือเชีอมสองตารางเข ้า ด ้วยกัน (primary key = foreign key) Template สําหรับเขียน INNER JOIN SELECT a.column_name, b.column_name FROM tableA AS a INNER J OIN tableB AS b ON a.key = b.key; ติดตามเนือหาดีๆและคอร์สเรียนออนไลน์ฟรีของ DataRockie ได ้ที www.facebook.com/datarockie DataRockie - Never Stop Learning SQL Cheat Sheet โดย DataRockie School ส มัครเรียนฟรีคอร์สออนไลน์ Intro to SQL for Data Analysis ที https://datarockie.teachable.com