SQL SELECT และแบบสอบถามการเลือกข้อมูล ตัวอย่างแบบสอบถาม SQL ไปยังฐานข้อมูล MySQL วิธีเขียนแบบสอบถามแบบเลือก SQL

คำสั่ง SQL SELECT มีไว้สำหรับการสืบค้นเพื่อเลือกข้อมูลจากฐานข้อมูล สามารถใช้โดยไม่มีเงื่อนไข (เลือกทุกแถวในทุกคอลัมน์หรือทุกแถวในบางคอลัมน์) หรือมีหลายเงื่อนไข (เลือกแถวเฉพาะ) ที่ระบุไว้ในส่วนคำสั่ง WHERE มาทำความรู้จักกับเครื่องมือ SQL ที่สามารถใช้เพื่อกำหนดเงื่อนไขในการเลือกข้อมูลและเรียนรู้วิธีใช้คำสั่ง SELECT ในแบบสอบถามย่อย

SELECT เพื่อเลือกคอลัมน์ในตาราง

แบบสอบถามที่มีคำสั่ง SELECT เพื่อเลือกคอลัมน์ทั้งหมดของตารางจะมีไวยากรณ์ดังต่อไปนี้:

เลือก * จาก TABLE_NAME

นั่นคือ ในการเลือกคอลัมน์ทั้งหมดของตาราง คุณต้องใส่เครื่องหมายดอกจันหลังคำว่า SELECT

ตัวอย่างที่ 1มีฐานข้อมูลบริษัท-บริษัท ประกอบด้วยตารางองค์กร (โครงสร้างบริษัท) และพนักงาน (พนักงาน) คุณต้องเลือกคอลัมน์ทั้งหมดจากตาราง แบบสอบถามที่เกี่ยวข้องเพื่อเลือกคอลัมน์ทั้งหมดจากตารางองค์กรมีดังนี้:

เลือก * จากองค์กร

แบบสอบถามนี้จะส่งคืนสิ่งต่อไปนี้ (หากต้องการขยายภาพ ให้คลิกซ้ายที่ภาพ):

แบบสอบถามเพื่อเลือกคอลัมน์ทั้งหมดจากตารางเจ้าหน้าที่มีลักษณะดังนี้:

เลือก * จากเจ้าหน้าที่

แบบสอบถามนี้จะส่งคืนสิ่งต่อไปนี้:


ในการเลือกคอลัมน์ตารางเฉพาะ แทนที่จะใช้เครื่องหมายดอกจัน เราจำเป็นต้องแสดงรายการชื่อของคอลัมน์ทั้งหมดที่ต้องเลือก โดยคั่นด้วยเครื่องหมายจุลภาค:

เลือก SELECTABLE_COLUMNS จาก TABLE_NAME

ตัวอย่างที่ 2สมมติว่าคุณต้องการเลือกคอลัมน์ Depnumb และ Deptname จากตาราง Org ซึ่งมีข้อมูลเกี่ยวกับหมายเลขแผนกของบริษัทและชื่อตามลำดับ แบบสอบถามเพื่อให้ได้ตัวอย่างดังกล่าวจะเป็นดังนี้:

เลือก DEPNUMB, DEPTNAME จาก ORG

และจากตารางพนักงานคุณต้องเลือกคอลัมน์ DEPT, NAME, JOB ซึ่งมีข้อมูลเกี่ยวกับหมายเลขแผนกที่พนักงานทำงาน ชื่อ และตำแหน่งของเขาตามลำดับ:

เลือกแผนก ชื่อ งานจากเจ้าหน้าที่

ในการเลือกแถวบางแถวของตารางร่วมกับคำสั่ง SELECT คุณจะต้องมีคีย์เวิร์ด WHERE อยู่แล้วซึ่งระบุค่าบางค่าหรือค่าหลายค่าที่มีอยู่ในแถวที่เราสนใจ เงื่อนไขที่ง่ายที่สุดจะถูกระบุโดยใช้ตัวดำเนินการการเปรียบเทียบและความเท่าเทียมกัน (, =) รวมถึงคำหลัก IS อาจมีเงื่อนไขได้หลายเงื่อนไข จากนั้นจะแสดงรายการโดยใช้คำสำคัญ AND แบบสอบถามการเลือกแถวมีไวยากรณ์ต่อไปนี้:

ตัวอย่างที่ 4ในตัวอย่างก่อนหน้านี้ เราเลือกแถวจากตารางตามค่าของหนึ่งคอลัมน์เท่านั้น - DEPT สมมติว่าตอนนี้คุณต้องเลือกข้อมูลเกี่ยวกับพนักงานที่ทำงานในแผนกที่ 38 และตำแหน่งเสมียน ในการดำเนินการนี้ในส่วน WHERE จะต้องแสดงรายการค่าที่เกี่ยวข้องโดยใช้คำว่า AND:


ตัวอย่างที่ 5สมมติว่าคุณต้องเลือกตัวระบุและชื่อของพนักงานที่มีขนาดค่าคอมมิชชันไม่แน่นอนจากตารางพนักงาน ในการดำเนินการนี้ในส่วน WHERE ก่อนที่จะระบุค่าของคอลัมน์ COMM - NULL คุณจะต้องไม่ใส่เครื่องหมายเท่ากับ แต่คำว่า IS:

แบบสอบถามนี้จะส่งคืนข้อมูลต่อไปนี้:


เครื่องหมายเปรียบเทียบยังใช้เพื่อระบุค่าในแถวที่คุณต้องการเลือก

การใช้เพรดิเคต SELECT และ IN หรือ BETWEEN LIKE

เพรดิเคต - คำ IN, OR, BETWEEN, LIKE ในส่วน WHERE - ยังอนุญาตให้คุณเลือกช่วงของค่าบางอย่าง (IN, OR, BETWEEN) หรือค่าในแถว (LIKE) ที่คุณต้องการเลือกจาก โต๊ะ. เคียวรีที่มีเพรดิเคต IN, OR, BETWEEN มีไวยากรณ์ต่อไปนี้:

เคียวรีที่มีเพรดิเคต LIKE มีไวยากรณ์ต่อไปนี้:

ตัวอย่างที่ 7สมมติว่าคุณต้องการเลือกชื่อ ตำแหน่ง และจำนวนปีที่ทำงานของพนักงานที่ทำงานในแผนกหมายเลข 20 หรือ 84 จากตารางพนักงาน ซึ่งสามารถทำได้โดยใช้แบบสอบถามต่อไปนี้:

ผลลัพธ์ของการร้องขอ:


ตัวอย่างที่ 8สมมติว่าตอนนี้คุณต้องการเลือกข้อมูลเดียวกันจากตาราง Staff เช่นเดียวกับในตัวอย่างก่อนหน้านี้ ข้อความค้นหาที่มีคำว่า OR คล้ายกับข้อความค้นหาที่มีคำว่า IN และแสดงรายการค่าที่สนใจในวงเล็บ คำขอจะเป็นดังนี้:

ตัวอย่างที่ 9ให้เราเลือกชื่อ ตำแหน่ง และจำนวนปีที่ทำงานของพนักงานที่มีเงินเดือนระหว่าง 15,000 ถึง 17,000 จากตารางเดียวกัน:

ผลลัพธ์ของการร้องขอ:


เพรดิเคต LIKE ใช้เพื่อเลือกสตริงที่มีค่าประกอบด้วยอักขระที่ระบุหลังเพรดิเคตระหว่างเครื่องหมายอะพอสทรอฟี (")

ตัวอย่างที่ 10ให้เราเลือกจากตารางเดียวกันชื่อตำแหน่งและจำนวนปีที่ทำงานของพนักงานที่ชื่อขึ้นต้นด้วยตัวอักษร S และประกอบด้วย 7 ตัวอักษร:

อักขระขีดล่าง (_) หมายถึงอักขระใดๆ ผลลัพธ์ของการร้องขอ:


ตัวอย่างที่ 11ให้เราเลือกชื่อตำแหน่งและจำนวนปีที่ทำงานของพนักงานจากตารางเดียวกันซึ่งมีชื่อขึ้นต้นด้วยตัวอักษร S และมีตัวอักษรอื่น ๆ ในปริมาณเท่าใดก็ได้:

สัญลักษณ์เปอร์เซ็นต์ (%) หมายถึงอักขระจำนวนเท่าใดก็ได้ ผลลัพธ์ของการร้องขอ:


ค่าที่ระบุโดยใช้เพรดิเคต IN, OR, BETWEEN, LIKE สามารถกลับด้านได้โดยใช้คำว่า NOT จากนั้นข้อมูลที่ร้องขอจะมีความหมายตรงกันข้าม หากเราใช้ NOT IN (20, 84) ข้อมูลของพนักงานที่ทำงานในทุกแผนกยกเว้นที่มีหมายเลข 20 และ 84 จะปรากฏขึ้น การใช้ NOT BETWEEN 15,000 ถึง 17,000 เราจะได้ข้อมูลของพนักงานที่ไม่มีเงินเดือน รวมในช่วงตั้งแต่ 15,000 ถึง 17,000 การสืบค้นที่มี NOT LIKE จะส่งคืนข้อมูลสำหรับพนักงานที่ไม่มีชื่อขึ้นต้นหรือไม่มีอักขระที่ระบุด้วย NOT LIKE

เขียนคำสั่ง SQL ด้วย SELECT และเพรดิเคต IN, NOT IN, BETWEEN ตัวคุณเอง จากนั้นดูวิธีแก้ไข

มีฐานข้อมูล "โรงละคร" ตารางการเล่นมีข้อมูลเกี่ยวกับการผลิต ตารางทีม - เกี่ยวกับบทบาทของนักแสดง ตารางนักแสดงเป็นเรื่องเกี่ยวกับนักแสดง โต๊ะผู้กำกับ - เกี่ยวกับกรรมการ ฟิลด์ตาราง คีย์หลักและคีย์นอกสามารถดูได้ในรูปด้านล่าง (คลิกซ้ายเพื่อดูภาพขยาย)


ตัวอย่างที่ 12แสดงรายชื่อนักแสดงที่ไม่เคยได้รับบทนำ ในตารางทีม ข้อมูลเกี่ยวกับบทบาทหลักจะอยู่ในคอลัมน์ทีมหลัก หากบทบาทเป็นบทบาทหลัก ระบบจะทำเครื่องหมาย "Y" ในบรรทัดที่เกี่ยวข้อง

SELECT และ ORDER BY - เรียงลำดับ (เรียงลำดับ) แถว

แบบสอบถาม SQL SELECT กล่าวถึงแถวที่ส่งคืนซึ่งอาจอยู่ในลำดับใดก็ได้ อย่างไรก็ตาม คุณมักจะต้องเรียงลำดับแถวตามลำดับตัวเลข ตัวอักษร และเกณฑ์อื่นๆ ทำได้โดยใช้คีย์เวิร์ด ORDER BY คำขอดังกล่าวมีไวยากรณ์ดังต่อไปนี้:

ตัวอย่างที่ 15ให้ข้อกำหนดคือเลือกจากตารางพนักงาน พนักงานที่ทำงานในแผนกหมายเลข 84 และเรียงลำดับ (เรียงลำดับ) บันทึกตามจำนวนปีที่ทำงานตามลำดับจากน้อยไปหามาก:

คำว่า ASC บ่งชี้ว่าลำดับการจัดเรียงกำลังเพิ่มขึ้น คำนี้เป็นทางเลือกเนื่องจากการเรียงลำดับจากน้อยไปหามากเป็นค่าเริ่มต้น ผลลัพธ์ของการร้องขอ:


ตัวอย่างที่ 16ปล่อยให้ข้อกำหนดคือเลือกข้อมูลเดียวกันกับในตัวอย่างก่อนหน้า แต่เรียงลำดับ (เรียงลำดับ) ระเบียนตามจำนวนปีที่ทำงานตามลำดับจากมากไปน้อย:

คำว่า DESC บ่งชี้ว่าลำดับการจัดเรียงจากมากไปน้อย ผลลัพธ์ของการร้องขอ:


SELECT และ DISTINCT - ลบแถวที่ซ้ำกัน

เมื่อไม่ได้ตั้งค่าแถวของตารางเป็นแบบเฉพาะ แถวที่ซ้ำกันอาจปรากฏในผลลัพธ์ของแบบสอบถาม บ่อยครั้งที่คุณจะต้องส่งออกเฉพาะสตริงที่ไม่ซ้ำใครเท่านั้น ซึ่งทำได้โดยใช้นิพจน์ DISTINCT หลังคำสั่ง SELECT

ตัวอย่างที่ 17สมมติว่าคุณต้องการทราบว่ามีแผนกใดบ้างและตำแหน่งใดอยู่ในแผนกที่มีจำนวนน้อยกว่า 30 ซึ่งสามารถทำได้โดยใช้แบบสอบถามต่อไปนี้:

ผลลัพธ์ของการร้องขอ:


คำสั่ง SELECT ในแบบสอบถามย่อย SQL

จนถึงตอนนี้ เราได้ดูโครงสร้าง SQL ด้วยคำสั่ง SELECT ซึ่งเงื่อนไขในการเลือกข้อมูลและข้อมูลที่เลือกเองจะรวมอยู่ในตารางฐานข้อมูลเดียวกัน ในทางปฏิบัติ มักเกิดขึ้นที่ข้อมูลที่จำเป็นต้องเลือกอยู่ในตารางหนึ่ง และเงื่อนไขอยู่ในอีกตารางหนึ่ง นี่คือจุดที่แบบสอบถามย่อยเข้ามาช่วยเหลือ: ค่าของเงื่อนไขการเลือกจะถูกส่งกลับจากแบบสอบถามอื่น (แบบสอบถามแบบซ้อน) โดยเริ่มต้นด้วย SELECT ข้อความค้นหาที่มีข้อความค้นหาย่อยสามารถส่งคืนแถวได้ตั้งแต่หนึ่งแถวขึ้นไป

ตัวอย่างที่ 18ตาราง ORG และ STAFF เดียวกันทั้งหมด สมมติว่าคุณต้องการค้นหาว่าพนักงานหมายเลขประจำตัว 280 ทำงานอยู่ในแผนกใด และแผนกนี้ตั้งอยู่ที่ใด แต่ข้อมูลเกี่ยวกับแผนกต่างๆ จะถูกจัดเก็บไว้ในตาราง ORG และข้อมูลเกี่ยวกับพนักงานจะถูกจัดเก็บไว้ในตาราง STAFF ซึ่งสามารถทำได้โดยใช้แบบสอบถามต่อไปนี้พร้อมกับแบบสอบถามย่อยที่ SELECT ภายนอกเข้าถึงตาราง ORG และ SELECT ภายในเข้าถึงตาราง STAFF:

ผลลัพธ์ของการร้องขอ:


ตัวอย่างที่ 19สมมติว่าตอนนี้คุณต้องค้นหาว่าแผนกใด (ไม่มีการซ้ำซ้อน) ที่มีเงินเดือนน้อยกว่า 13,000 งาน เมื่อต้องการทำเช่นนี้ในส่วน WHERE ของ SELECT ภายนอก (สอบถามไปยังตาราง ORG) จะมีการระบุเงื่อนไขที่ต้องใช้เวลา ช่วงของค่า (IN) และ SELECT ภายใน (ไปยังตาราง STAFF ) เพียงส่งคืนช่วงของค่าที่ต้องการ:

ฐานข้อมูลเชิงสัมพันธ์และภาษา SQL

ยินดีต้อนรับสู่เว็บไซต์บล็อกของฉัน วันนี้เราจะพูดถึงคำสั่ง SQL สำหรับผู้เริ่มต้น เว็บมาสเตอร์บางคนอาจมีคำถาม ทำไมต้องเรียน sql? ผ่านไปไม่ได้เหรอ?

ปรากฎว่านี่ไม่เพียงพอสำหรับการสร้างโครงการอินเทอร์เน็ตระดับมืออาชีพ Sql ใช้เพื่อทำงานกับฐานข้อมูลและสร้างแอปพลิเคชันสำหรับ WordPress มาดูวิธีใช้แบบสอบถามโดยละเอียดกันดีกว่า

มันคืออะไร

Sql เป็นภาษาคิวรีที่มีโครงสร้าง ออกแบบมาเพื่อกำหนดประเภทของข้อมูล ให้การเข้าถึง และประมวลผลข้อมูลในระยะเวลาอันสั้น โดยจะอธิบายส่วนประกอบหรือผลลัพธ์บางอย่างที่คุณต้องการดูในโครงการอินเทอร์เน็ต

พูดง่ายๆ ก็คือ ภาษาการเขียนโปรแกรมนี้ช่วยให้คุณสามารถเพิ่ม เปลี่ยนแปลง ค้นหา และแสดงข้อมูลในฐานข้อมูลได้ ความนิยมของ mysql เกิดจากการใช้เพื่อสร้างโครงการอินเทอร์เน็ตแบบไดนามิกที่อิงจากฐานข้อมูล ดังนั้น ในการพัฒนาบล็อกที่ใช้งานได้จริง คุณต้องเรียนรู้ภาษานี้

มันทำอะไรได้บ้าง

ภาษา sql ช่วยให้คุณ:

  • สร้างตาราง
  • เปลี่ยนแปลงการรับและจัดเก็บข้อมูลต่างๆ
  • รวมข้อมูลเป็นบล็อก
  • ปกป้องข้อมูล
  • สร้างคำขอในการเข้าถึง

สำคัญ! เมื่อคุณเข้าใจ sql แล้ว คุณก็สามารถเขียนแอปพลิเคชันสำหรับ WordPress ที่ซับซ้อนเท่าใดก็ได้

โครงสร้างอะไร

ฐานข้อมูลประกอบด้วยตารางที่สามารถนำเสนอเป็นไฟล์ Excel

โดยมีชื่อ คอลัมน์ และแถวพร้อมข้อมูลบางอย่าง คุณสามารถสร้างตารางดังกล่าวได้โดยใช้คำสั่ง SQL

สิ่งที่คุณต้องรู้


ประเด็นสำคัญในการเรียนรู้ Sql

ตามที่ระบุไว้ข้างต้น แบบสอบถามจะใช้ในการประมวลผลและป้อนข้อมูลใหม่ลงในฐานข้อมูลที่ประกอบด้วยตาราง แต่ละบรรทัดเป็นรายการแยกต่างหาก เรามาสร้างฐานข้อมูลกันดีกว่า เมื่อต้องการทำเช่นนี้ ให้เขียนคำสั่ง:

สร้างฐานข้อมูล 'bazaname'

เราเขียนชื่อฐานข้อมูลเป็นภาษาละตินด้วยเครื่องหมายคำพูด พยายามตั้งชื่อให้ชัดเจน อย่าสร้างฐานข้อมูลเช่น "111", "www" และสิ่งที่คล้ายคลึงกัน

หลังจากสร้างฐานข้อมูลแล้ว ให้ติดตั้ง:

ตั้งชื่อ 'utf-8'

นี่เป็นสิ่งจำเป็นสำหรับเนื้อหาบนไซต์ที่จะแสดงอย่างถูกต้อง

ตอนนี้เรามาสร้างตารางกัน:

สร้างตาราง 'bazaname' 'โต๊ะ' (

id INT (8) ไม่ใช่คีย์หลัก AUTO_INCREMENT ที่เป็นโมฆะ

บันทึก VARCHAR(10)

ผ่าน VARCHAR (10)

วันที่ DATE

ในบรรทัดที่สอง เราเขียนคุณลักษณะสามประการ มาดูกันว่าพวกเขาหมายถึงอะไร:

  • คุณลักษณะ NOT NULL หมายความว่าเซลล์จะไม่ว่างเปล่า (จำเป็นต้องกรอกข้อมูลในฟิลด์)
  • ค่า AUTO_INCREMENT เป็นการเติมข้อมูลอัตโนมัติ
  • คีย์หลัก - คีย์หลัก

วิธีการเพิ่มข้อมูล

ในการเติมค่าลงในฟิลด์ของตารางที่สร้างขึ้น จะใช้คำสั่ง INSERT เราเขียนโค้ดบรรทัดต่อไปนี้:

แทรกลงใน 'ตาราง'

(เข้าสู่ระบบ, ผ่าน, วันที่) ค่านิยม

('วาซา', '87654321', '2017-06-21 18:38:44');

ในวงเล็บเราระบุชื่อของคอลัมน์และถัดไป - ค่าต่างๆ

สำคัญ! รักษาความสอดคล้องในชื่อคอลัมน์และค่า

วิธีการอัพเดตข้อมูล

เมื่อต้องการทำเช่นนี้ ให้ใช้คำสั่ง UPDATE มาดูวิธีการเปลี่ยนรหัสผ่านสำหรับผู้ใช้เฉพาะรายกัน เราเขียนโค้ดบรรทัดต่อไปนี้:

อัปเดต 'ตาราง' SET pass = '12345678' WHERE id = '1'

ตอนนี้เปลี่ยนรหัสผ่าน '12345678' การเปลี่ยนแปลงเกิดขึ้นในบรรทัดด้วย “id”=1 หากคุณไม่ได้เขียนคำสั่ง WHERE บรรทัดทั้งหมดจะเปลี่ยนไป ไม่ใช่เฉพาะบรรทัด

ขอแนะนำให้คุณซื้อหนังสือ" SQL สำหรับหุ่นจำลอง - ด้วยความช่วยเหลือนี้ คุณสามารถทำงานอย่างมืออาชีพกับฐานข้อมูลทีละขั้นตอน ข้อมูลทั้งหมดมีโครงสร้างตามหลักการตั้งแต่ง่ายไปจนถึงซับซ้อนและจะรับรู้ได้ดี

วิธีการลบรายการ

หากคุณเขียนสิ่งผิด ให้แก้ไขโดยใช้คำสั่ง DELETE ทำงานเหมือนกับ UPDATE เราเขียนโค้ดต่อไปนี้:

ลบจาก 'ตาราง' โดยที่ id = '1'

ข้อมูลการสุ่มตัวอย่าง

หากต้องการดึงค่าจากฐานข้อมูลให้ใช้คำสั่ง SELECT เราเขียนโค้ดต่อไปนี้:

SELECT * จาก 'ตาราง' โดยที่ id = '1'

ในตัวอย่างนี้ เราเลือกฟิลด์ที่มีอยู่ทั้งหมดในตาราง สิ่งนี้จะเกิดขึ้นหากคุณป้อนเครื่องหมายดอกจัน “*” ในคำสั่ง หากคุณต้องการเลือกค่าตัวอย่าง ให้เขียนสิ่งนี้:

เลือกบันทึก ส่งผ่านจากตาราง โดยที่ id = '1'

ควรสังเกตว่าความสามารถในการทำงานกับฐานข้อมูลจะไม่เพียงพอ หากต้องการสร้างโครงการอินเทอร์เน็ตแบบมืออาชีพ คุณจะต้องเรียนรู้วิธีเพิ่มข้อมูลจากฐานข้อมูลลงในเพจ โดยทำความคุ้นเคยกับภาษาการเขียนโปรแกรมเว็บ PHP มันจะช่วยคุณในเรื่องนี้ หลักสูตรเจ๋งๆ โดย มิคาอิล รูซาคอฟ .


ลบตาราง

เกิดขึ้นโดยใช้คำขอ DROP เมื่อต้องการทำเช่นนี้ เราจะเขียนบรรทัดต่อไปนี้:

โต๊ะวางโต๊ะ;

การแสดงบันทึกจากตารางตามเงื่อนไขเฉพาะ

พิจารณารหัสนี้:

เลือกรหัส ประเทศ เมือง จากตาราง WHERE คน>150000000

โดยจะแสดงบันทึกของประเทศที่มีประชากรมากกว่าหนึ่งร้อยห้าสิบล้านคน

สมาคม

สามารถเชื่อมโยงหลายตารางเข้าด้วยกันโดยใช้การเข้าร่วม ดูรายละเอียดวิธีการทำงานโดยละเอียดในวิดีโอนี้:

PHP และ MySQL

ฉันต้องการย้ำอีกครั้งว่าคำขอเมื่อสร้างโครงการอินเทอร์เน็ตเป็นเรื่องปกติ หากต้องการใช้ในเอกสาร PHP ให้ปฏิบัติตามอัลกอริทึมต่อไปนี้:

  • เชื่อมต่อกับฐานข้อมูลโดยใช้คำสั่ง mysql_connect()
  • ใช้ mysql_select_db() เราเลือกฐานข้อมูลที่ต้องการ
  • เราประมวลผลคำขอโดยใช้ mysql_fetch_array();
  • ปิดการเชื่อมต่อด้วยคำสั่ง mysql_close()

สำคัญ! การทำงานกับฐานข้อมูลไม่ใช่เรื่องยาก สิ่งสำคัญคือการเขียนคำขออย่างถูกต้อง

เว็บมาสเตอร์มือใหม่จะคิดเรื่องนี้ คุณควรอ่านอะไรในหัวข้อนี้? ฉันอยากจะแนะนำหนังสือของ Martin Graber” SQL สำหรับมนุษย์ธรรมดา - มันเขียนในลักษณะที่ผู้เริ่มต้นจะเข้าใจทุกอย่าง ใช้เป็นหนังสืออ้างอิง

แต่นี่เป็นทฤษฎี สิ่งนี้ทำงานอย่างไรในทางปฏิบัติ? ในความเป็นจริง โครงการอินเทอร์เน็ตไม่เพียงแต่ต้องสร้างขึ้นเท่านั้น แต่ยังต้องนำไปไว้บนสุดของ Google และ Yandex ด้วย หลักสูตรวิดีโอจะช่วยคุณในเรื่องนี้” การสร้างและโปรโมตเว็บไซต์ ».


คำแนะนำวิดีโอ

ยังมีคำถามอยู่ใช่ไหม? ชมวิดีโอออนไลน์สำหรับรายละเอียดเพิ่มเติม

บทสรุป

ดังนั้นการหาวิธีเขียนคำสั่ง sql จึงไม่ใช่เรื่องยากอย่างที่คิด แต่เว็บมาสเตอร์ทุกคนจำเป็นต้องทำเช่นนี้ หลักสูตรวิดีโอที่อธิบายไว้ข้างต้นจะช่วยในเรื่องนี้ ติดตาม กลุ่ม VKontakte ของฉัน เพื่อเป็นคนแรกที่จะได้ทราบเมื่อมีข้อมูลใหม่ที่น่าสนใจปรากฏขึ้น

SQL - คำสั่ง SELECT

ชื่อ SQL (Structured Query Language) สะท้อนถึงข้อเท็จจริงที่ว่าคิวรีเป็นองค์ประกอบที่ใช้บ่อยที่สุดของ SQL แบบสอบถามคือคำสั่งที่ส่งคำสั่งไปยังระบบจัดการฐานข้อมูล (DBMS) เพื่อจัดการหรือแสดงข้อมูลบางอย่าง การสืบค้นทั้งหมดเพื่อเลือกข้อมูลใน SQL ถูกสร้างขึ้นโดยใช้คำสั่ง SELECT ช่วยให้คุณสามารถทำการตรวจสอบและประมวลผลข้อมูลที่ค่อนข้างซับซ้อน

แบบสอบถามสามารถส่งคืนข้อมูลจากคอลัมน์ใดคอลัมน์หนึ่งหรือจากคอลัมน์ทั้งหมดของตารางได้ หากต้องการสร้างแบบสอบถาม SELECT แบบง่าย คุณต้องระบุชื่อคอลัมน์และชื่อตาราง

ไวยากรณ์คำสั่ง SELECT

เลือก column_list จาก table_name

เลือกคำสำคัญที่บอกฐานข้อมูลว่าคำสั่งนั้นเป็นแบบสอบถาม ข้อความค้นหาทั้งหมดขึ้นต้นด้วยคำนี้ ตามด้วยช่องว่าง

คอลัมน์_รายการรายการคอลัมน์ของตารางที่ถูกเลือกโดยแบบสอบถาม คอลัมน์ที่ไม่ได้ระบุในคำสั่งจะไม่รวมอยู่ในผลลัพธ์ หากคุณต้องการแสดงข้อมูลจากคอลัมน์ทั้งหมด คุณสามารถใช้รูปแบบการจดชวเลขได้ เครื่องหมายดอกจัน (*) ระบุรายการคอลัมน์ทั้งหมด

จาก table_nameคีย์เวิร์ดที่ต้องแสดงในทุกคำขอ หลังจากนั้นให้คั่นด้วยช่องว่าง ชื่อของตารางที่เป็นแหล่งข้อมูลจะถูกระบุ

รหัสในวงเล็บเป็นทางเลือกในคำสั่ง SELECT จำเป็นต้องกำหนดคำขอให้แม่นยำยิ่งขึ้น

นอกจากนี้ยังจำเป็นต้องบอกว่าโค้ด SQL ไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ ซึ่งหมายความว่าสามารถเขียนบันทึก SELECT เป็นแบบเลือกได้ DBMS จะไม่แยกความแตกต่างระหว่างสองรายการนี้ แต่ขอแนะนำให้เขียนคำสั่ง SQL ทั้งหมดด้วยตัวพิมพ์ใหญ่เพื่อให้สามารถแยกแยะได้ง่ายจากโค้ดอื่น

ลองดูตัวอย่างตารางพนักงานขายจากหนังสือเรียน SQL แบบคลาสสิกโดย Martin Graber
นี่คือโค้ด MySQL เพื่อสร้างตารางทดสอบ:

สร้างตาราง `พนักงานขาย` (`snum` INTEGER(11) NOT NULL AUTO_INCREMENT, `sname` VARCHAR(20) COLLATE cp1251_general_ci DEFAULT NULL, `city` VARCHAR(20) COLLATE cp1251_general_ci DEFAULT NULL, `comm` DOUBLE(15,3) ค่าเริ่มต้น NULL, คีย์หลัก (`snum`)) ENGINE=ชุดอักขระ InnoDB "cp1251" COLLATE "cp1251_general_ci" COMMENT="InnoDB ฟรี: 5120 kB"; INSERT INTO `salespeople` (`snum`, `sname`, `city`, `comm`) ค่า (1001,"Peel", "London", 0.120), (1002, "Serres", "San Jose", 0.130 ), (1003,"แอกเซลร็อด","นิวยอร์ก",0.100), (1004,"โมติก้า","ลอนดอน",0.110), (1007,"ริฟกิ้น","บาร์เซโลนา",0.150); ให้สัญญา;

ตารางมีลักษณะดังนี้:

ตัวอย่างการใช้คำสั่ง SELECT

1. จำเป็นต้องแสดงรายชื่อผู้ขายและแสดงชื่อ (ชื่อ)

เลือกชื่อจากพนักงานขาย

ผลลัพธ์:

ที่นี่ หลังจากคำสั่ง SELECT คอลัมน์ที่ต้องแสดงจะแสดงรายการ ชื่อคอลัมน์คั่นด้วยเครื่องหมายจุลภาค

3. คุณต้องแสดงทั้งตาราง

เมื่อต้องการทำเช่นนี้ คุณสามารถใช้ไวยากรณ์ที่แตกต่างกันในการเขียนแบบสอบถามได้ เราแสดงรายการแต่ละคอลัมน์หลังคำสั่ง SELECT:

เลือก snum , sname , city , comm จากพนักงานขาย

หรือคุณสามารถบรรลุผลลัพธ์เดียวกันได้โดยใช้สัญลักษณ์ชวเลข:

SELECT * จากพนักงานขายผลลัพธ์:

สนัมชื่อเมืองการสื่อสาร
1001 ปอกลอนดอน0,12
1002 เซอร์เรสซานโฮเซ่0,13
1003 แอกเซลร็อดนิวยอร์ก0,1
1004 โมติกาลอนดอน0,11
1007 ริฟกิ้นบาร์เซโลนา0,15
ฉันอยากจะให้คำแนะนำเล็กน้อยเช่นกัน เพื่อให้แก้ไขข้อบกพร่องของข้อความค้นหาได้ง่ายขึ้น บางคนเขียนรายการคอลัมน์ที่ต้องแสดงแยกบรรทัด ทำให้ง่ายต่อการแสดงความคิดเห็นโค้ด หากต้องการแสดงความคิดเห็นโค้ดใน SQL จะใช้ไวยากรณ์ต่อไปนี้ - /* commented code */ ตัวอย่าง: SELECT snum , sname , city , comm FROM Salespeople

ซึ่งจะแสดง 4 คอลัมน์ แต่ด้วยรายการนี้ คุณสามารถใส่ความคิดเห็นในคอลัมน์ที่ไม่จำเป็นได้อย่างง่ายดาย ตัวอย่างเช่น:

SELECT /* snum , */ sname , city , comm จากพนักงานขาย

ตอนนี้คอลัมน์ snum จะไม่ถูกพิมพ์เนื่องจากมีการใส่ความคิดเห็นไว้ รวดเร็วและสะดวกมาก แน่นอนว่าวิธีเขียนโค้ด SQL นั้นขึ้นอยู่กับคุณ แต่การรู้สิ่งเหล่านี้บางครั้งก็มีประโยชน์

การใช้นิพจน์ในคำสั่ง SELECT

DBMS จำนวนมากมีความสามารถพิเศษสำหรับการประมวลผลผลลัพธ์การสืบค้น ชุดเครื่องมือดังกล่าวแตกต่างกันไปในแต่ละ DBMS แต่มีคุณสมบัติมาตรฐานบางอย่าง เช่น นิพจน์ ตัวอย่างเช่น คุณอาจต้องดำเนินการทางคณิตศาสตร์อย่างง่ายกับข้อมูลเพื่อนำเสนอด้วยวิธีที่สะดวกยิ่งขึ้น หรือแทรกข้อความเพิ่มเติมลงในผลลัพธ์ของคิวรี SQL ช่วยให้คุณสามารถวางนิพจน์สเกลาร์และค่าคงที่ระหว่างคอลัมน์ที่เลือก ซึ่งสามารถเสริมหรือแทนที่คอลัมน์ในส่วนคำสั่ง SELECT ได้ ลองดูตัวอย่าง

4. จำเป็นต้องแสดงค่าคอมมิชชั่น (comm) ของผู้ขายเป็นเปอร์เซ็นต์ ไม่ใช่เลขทศนิยม

เลือก snum, ชื่อ, เมือง, comm * 100 จากพนักงานขาย

ผลลัพธ์:

สนัมชื่อเมืองการสื่อสาร
1001 ปอกลอนดอน12
1002 เซอร์เรสซานโฮเซ่13
1003 แอกเซลร็อดนิวยอร์ก10
1004 โมติกาลอนดอน11
1007 ริฟกิ้นบาร์เซโลนา15
ในคอลัมน์สุดท้าย ข้อมูลที่ได้รับทั้งหมดจะคูณด้วย 100 และแสดงเป็นเปอร์เซ็นต์

คอลัมน์นี้ไม่มีชื่อเนื่องจากไม่มีข้อมูลที่เปลี่ยนแปลง ดังนั้นจึงตั้งชื่อตามดุลยพินิจของ DBMS (เช่น MySQL ตั้งชื่อคอลัมน์ comm * 100 ในตัวอย่างของ M. Grabber คอลัมน์จะมีชื่อว่า 4 นั่นคือหมายเลข)

ในกรณีเช่นนี้จะสะดวกต่อการใช้งาน การตั้งชื่อคอลัมน์- ตัวอย่างเช่น คุณสามารถเรียกเปอร์เซ็นต์ของคอลัมน์สุดท้ายได้ เมื่อต้องการทำเช่นนี้ หลังจากชื่อคอลัมน์ คุณต้องระบุคำหลัก AS และชื่อคอลัมน์ในเพจผลลัพธ์

SELECT snum, sname, city, comm * 100 AS "percent" จากผลลัพธ์ของพนักงานขาย:

สนัมชื่อเมืองเปอร์เซ็นต์
1001 ปอกลอนดอน12
1002 เซอร์เรสซานโฮเซ่13
1003 แอกเซลร็อดนิวยอร์ก10
1004 โมติกาลอนดอน11
1007 ริฟกิ้นบาร์เซโลนา15

ผลลัพธ์คิวรีจะตั้งชื่อคอลัมน์สุดท้ายเป็นแถว "เปอร์เซ็นต์" เพื่อให้เข้าใจได้ง่ายขึ้น

เนื่องจากตัวเลขแสดงเป็นเปอร์เซ็นต์ จึงเป็นการดีที่จะระบุสิ่งนี้ในผลลัพธ์ ความสามารถของ SQL มาช่วย เพิ่มข้อความลงในผลลัพธ์- ดูเหมือนว่านี้:

SELECT snum, sname, city, comm * 100 AS เปอร์เซ็นต์ , "%" จากพนักงานขายผลลัพธ์:

สนัมชื่อเมืองเปอร์เซ็นต์%
1001 ปอกลอนดอน12 %
1002 เซอร์เรสซานโฮเซ่13 %
1003 แอกเซลร็อดนิวยอร์ก10 %
1004 โมติกาลอนดอน11 %
1007 ริฟกิ้นบาร์เซโลนา15 %

จะเห็นได้ว่าหลังจากที่แถวถูกเอาท์พุตจากฐานข้อมูลแล้ว คอลัมน์ใหม่ก็ปรากฏขึ้นพร้อมกับเครื่องหมายเปอร์เซ็นต์ (%)

หากคุณไม่พอใจกับการแสดงข้อมูลและข้อความเสริมในคอลัมน์ต่างๆ คุณสามารถใช้ฟังก์ชันพิเศษของ DBMS เพื่อรวมเป็นคอลัมน์เดียวได้

MySQL ใช้ฟังก์ชันนี้ คอนแคต - นี่คือคำจำกัดความจากหนังสืออ้างอิง:

CONCAT(str1,str2,...)
ส่งกลับสตริงที่เป็นผลลัพธ์ของการต่ออาร์กิวเมนต์เข้าด้วยกัน ถ้าอย่างน้อยหนึ่งอาร์กิวเมนต์เป็น NULL ระบบจะส่งคืนค่า NULL สามารถโต้แย้งได้มากกว่า 2 ข้อ อาร์กิวเมนต์ตัวเลขจะถูกแปลงเป็นรูปแบบสตริงที่เทียบเท่า

ตัวอย่าง: SELECT snum, sname, city , CONCAT(comm * 100, "%") AS "persent" จากพนักงานขาย ผลลัพธ์:

สนัมชื่อเมืองดื้อดึง
1001 ปอกลอนดอน12.000%
1002 เซอร์เรสซานโฮเซ่13.000%
1003 แอกเซลร็อดนิวยอร์ก10.000%
1004 โมติกาลอนดอน11.000%
1007 ริฟกิ้นบาร์เซโลนา15.000%

ในคำขอนี้ ฟังก์ชัน CONCAT รับ 2 อาร์กิวเมนต์ comm * 100 และเครื่องหมายเปอร์เซ็นต์ ("%") หลังจากนั้นเราตั้งชื่อคอลัมน์โดยใช้ AS

สิ่งสำคัญคือต้องรู้ว่าการใช้ฟังก์ชันทำให้ประสิทธิภาพลดลง นี่ไม่ใช่ข้อเสียเพียงอย่างเดียว แต่เป็นสิ่งที่สำคัญมาก ดังนั้น หากคุณสามารถใช้โค้ด SQL มาตรฐานได้ จะเป็นการดีกว่าที่จะไม่ใช้ฟังก์ชัน ควรจดจำไว้เฉพาะในกรณีที่รุนแรงเท่านั้น

การกำจัดข้อมูลที่ซ้ำซ้อน

มักจำเป็นต้องแยกค่าที่ซ้ำกันออกจากผลลัพธ์ของแบบสอบถาม เมื่อต้องการทำเช่นนี้ ให้ใช้คีย์เวิร์ด DISTINCT การใช้คำว่า ALL ซึ่งเป็นค่าเริ่มต้น (นั่นคือไม่จำเป็นต้องระบุ) จะให้ผลตรงกันข้าม

5.จำเป็นต้องแสดงเมืองที่มีผู้ขาย

คำขอโดยไม่มีข้อยกเว้น:

เลือกเมืองจากพนักงานขาย ผลลัพธ์:

ค่าลอนดอนที่ซ้ำกันจะไม่รวมอยู่ในผลลัพธ์ตามที่ต้องการ

จัดเรียงผลลัพธ์ตามค่าตามคอลัมน์

คำสั่ง SELECT จะแสดงข้อมูลในลำดับใดก็ได้ ในการจัดเรียงผลลัพธ์ตามคอลัมน์เฉพาะ SQL จะใช้ตัวดำเนินการ ORDER BY (เช่น เรียงลำดับตาม...) โอเปอเรเตอร์นี้อนุญาตให้คุณเปลี่ยนลำดับของเอาต์พุตข้อมูล ORDER BY เรียงลำดับผลลัพธ์ของการสืบค้นตามค่าของคอลัมน์ตั้งแต่หนึ่งคอลัมน์ขึ้นไปที่เลือกในส่วนคำสั่ง SELECT ในกรณีนี้ สำหรับแต่ละคอลัมน์ คุณสามารถตั้งค่าการเรียงลำดับจากน้อยไปหามาก (ASC) (พารามิเตอร์นี้ใช้เป็นค่าเริ่มต้น) หรือจากมากไปน้อย (DESC)

ลองเรียงลำดับผลลัพธ์ตามคอลัมน์ sname หลังจากตัวดำเนินการ ORDER BY เราจะระบุคอลัมน์ที่จะเรียงลำดับ จากนั้นคุณจะต้องระบุวิธีการเรียงลำดับ

ตัวอย่าง - การเรียงลำดับจากน้อยไปหามาก:

SELECT * จากพนักงานขาย ORDER BY ชื่อ ASC

ผลลัพธ์:


ตัวอย่าง - จัดเรียงตามหลายคอลัมน์:

SELECT snum, sname, city จากพนักงานขาย ORDER BY sname DESC, city DESC ผลลัพธ์:

สนัมชื่อเมือง
1002 เซอร์เรสซานโฮเซ่
1007 ริฟกิ้นบาร์เซโลนา
1001 ปอกลอนดอน
1004 โมติกาลอนดอน
1003 แอกเซลร็อดนิวยอร์ก

หมายเหตุสำคัญบางประการ:
- ต้องระบุคอลัมน์ที่ใช้ในการเรียงลำดับในช่อง SELECT (คุณสามารถใช้ *)
- คำสั่ง ORDER BY จะถูกเขียนไว้ท้ายแบบสอบถามเสมอ

  • การแปล
  • บทช่วยสอน
คุณต้องการ “SELECT * WHERE a=b FROM c” หรือ “SELECT WHERE a=b FROM c ON *” หรือไม่

หากคุณเป็นเหมือนฉัน คุณจะเห็นด้วย: SQL เป็นหนึ่งในสิ่งที่ดูเหมือนง่ายในตอนแรก (อ่านได้เหมือนภาษาอังกฤษ!) แต่อย่างไรก็ตาม คุณต้องเข้า Google ทุกคำค้นหาง่ายๆ เพื่อค้นหาไวยากรณ์ที่ถูกต้อง


จากนั้นจึงเข้าร่วม การรวมกลุ่ม แบบสอบถามย่อยเริ่มต้นขึ้น และกลายเป็นขยะโดยสิ้นเชิง บางสิ่งเช่นนี้:


เลือกสมาชิกชื่อ || - members.lastname AS "Full Name" จากการยืม INNER JOIN สมาชิก ON members.memberid=borrowings.memberid INNER JOIN หนังสือ ON books.bookid=borrowings.bookid WHERE allowances.bookid IN (SELECT bookid จากหนังสือ WHERE stock>(SELECT avg(stock ) จากหนังสือ)) จัดกลุ่มตาม members.firstname, members.lastname;

บ๊ะ! สิ่งนี้จะทำให้มือใหม่หรือแม้แต่นักพัฒนาระดับกลางหวาดกลัวหากเขาเห็น SQL เป็นครั้งแรก แต่มันก็ไม่ได้เลวร้ายขนาดนั้น


ง่ายต่อการจดจำว่าสิ่งใดที่เข้าใจง่าย และด้วยคำแนะนำนี้ ฉันหวังว่าจะลดอุปสรรคในการเข้าสู่ SQL สำหรับมือใหม่ และเสนอวิธีใหม่ในการดู SQL แก่ผู้ที่มีประสบการณ์แล้ว


แม้ว่าไวยากรณ์ SQL จะเกือบจะเหมือนกันระหว่างฐานข้อมูลต่างๆ แต่บทความนี้ใช้ PostgreSQL สำหรับการสืบค้น ตัวอย่างบางส่วนจะใช้งานได้ใน MySQL และฐานข้อมูลอื่นๆ

1. คำวิเศษสามคำ

มีคำหลักหลายคำใน SQL แต่ SELECT, FROM และ WHERE จะปรากฏในเกือบทุกแบบสอบถาม หลังจากนั้นไม่นาน คุณจะเข้าใจว่าคำสามคำนี้แสดงถึงลักษณะพื้นฐานที่สุดของการสร้างคิวรีฐานข้อมูล และคิวรีอื่นๆ ที่ซับซ้อนกว่านั้นเป็นเพียงส่วนเสริมที่อยู่เหนือสิ่งเหล่านั้น

2. ฐานของเรา

ลองมาดูฐานข้อมูลที่เราจะใช้เป็นตัวอย่างในบทความนี้:







เรามีห้องสมุดหนังสือและผู้คน นอกจากนี้ยังมีโต๊ะพิเศษสำหรับบันทึกหนังสือที่ออกให้

  • ตาราง "หนังสือ" จัดเก็บข้อมูลเกี่ยวกับชื่อหนังสือ ผู้แต่ง วันที่ตีพิมพ์ และความพร้อมของหนังสือ มันง่ายมาก
  • ในตาราง "สมาชิก" - ชื่อและนามสกุลของทุกคนที่สมัครใช้บริการห้องสมุด
  • ตาราง “การยืม” จัดเก็บข้อมูลเกี่ยวกับหนังสือที่นำมาจากห้องสมุด คอลัมน์ bookid หมายถึง ID ของหนังสือที่อยู่ในตาราง "หนังสือ" และคอลัมน์ memberid หมายถึงบุคคลที่เกี่ยวข้องจากตาราง "สมาชิก" นอกจากนี้เรายังมีวันที่ออกและวันที่ที่จะต้องคืนหนังสืออีกด้วย

3. คำของ่ายๆ

เริ่มจากคำของ่ายๆ: เราต้องการ ชื่อและ ตัวระบุ(id) ของหนังสือทั้งหมดที่เขียนโดยผู้แต่ง “แดน บราวน์”


คำขอจะเป็นดังนี้:


เลือก bookid เป็น "id" ชื่อเรื่องจากหนังสือ WHERE author = "Dan Brown";

และผลลัพธ์ก็เป็นเช่นนี้:


รหัส ชื่อ
2 สัญลักษณ์ที่หายไป
4 นรก

ค่อนข้างง่าย มาดูคำขอเพื่อทำความเข้าใจว่าเกิดอะไรขึ้น

3.1 FROM - แหล่งที่มาที่เราได้รับข้อมูล

สิ่งนี้อาจดูเหมือนชัดเจนในตอนนี้ แต่ FROM จะมีความสำคัญมากในภายหลังเมื่อเราได้เข้าร่วมและแบบสอบถามย่อย


จาก ชี้ไปที่ตารางเพื่อสอบถาม ซึ่งอาจเป็นตารางที่มีอยู่แล้ว (ดังตัวอย่างด้านบน) หรือตารางที่สร้างขึ้นทันทีผ่านการรวมหรือแบบสอบถามย่อย

3.2 WHERE - ข้อมูลใดที่แสดง

โดยที่เพียงทำตัวเหมือนตัวกรอง เส้นซึ่งเราต้องการส่งออก ในกรณีของเรา เราต้องการดูเฉพาะแถวที่มีค่าในคอลัมน์ผู้เขียนคือ "Dan Brown"

3.3 SELECT - วิธีแสดงข้อมูล

ตอนนี้เรามีคอลัมน์ทั้งหมดที่ต้องการจากตารางที่ต้องการแล้ว เราจำเป็นต้องตัดสินใจว่าจะแสดงข้อมูลนี้อย่างไร ในกรณีของเรา เราต้องการเพียงชื่อหนังสือและรหัสเท่านั้น นั่นคือสิ่งที่เรากำลังทำอยู่ มาเลือกกันโดยใช้การเลือก ในเวลาเดียวกัน คุณสามารถเปลี่ยนชื่อคอลัมน์โดยใช้ AS ได้


แบบสอบถามทั้งหมดสามารถมองเห็นได้โดยใช้ไดอะแกรมง่ายๆ:


4. การเชื่อมต่อ (เข้าร่วม)

ตอนนี้เราต้องการดูชื่อหนังสือ (ไม่จำเป็นต้องมีเอกลักษณ์เฉพาะตัว) ของหนังสือ Dan Brown ทั้งหมดที่ถูกเช็คเอาท์จากห้องสมุด และเมื่อจำเป็นต้องส่งคืนหนังสือเหล่านั้น:


SELECT books.title AS "Title", ยืม.returndate AS "Return Date" จากการยืม เข้าร่วมหนังสือ ON allowances.bookid=books.bookid WHERE books.author="Dan Brown";

ผลลัพธ์:


ชื่อ วันที่เดินทางกลับ
สัญลักษณ์ที่หายไป 2016-03-23 00:00:00
นรก 2016-04-13 00:00:00
สัญลักษณ์ที่หายไป 2016-04-19 00:00:00

คำขอส่วนใหญ่จะคล้ายกับคำขอก่อนหน้า ยกเว้นจากส่วนต่างๆ มันหมายความว่าอย่างนั้น เรากำลังสืบค้นข้อมูลจากตารางอื่น- เราไม่เข้าถึงตาราง "หนังสือ" หรือตาราง "การกู้ยืม" แต่เราหันไปหา ตารางใหม่ซึ่งสร้างขึ้นโดยการรวมสองตารางนี้เข้าด้วยกัน


การยืม เข้าร่วมหนังสือบน การยืม.bookid=books.bookid - พิจารณาตารางใหม่ที่สร้างขึ้นโดยการรวมบันทึกทั้งหมดจากตาราง "หนังสือ" และ "การยืม" ซึ่งค่า bookid เหมือนกัน ผลลัพธ์ของการควบรวมกิจการดังกล่าวจะเป็น:



จากนั้นเราจะสอบถามตารางนี้ในลักษณะเดียวกับในตัวอย่างด้านบน ซึ่งหมายความว่าเมื่อเข้าร่วมตาราง คุณเพียงแค่ต้องกังวลเกี่ยวกับวิธีการเข้าร่วมเท่านั้น แล้วคำขอก็ชัดเจนเหมือนกับในกรณี “คำขอธรรมดา” จากข้อ 3


ลองรวมสองตารางที่ซับซ้อนกว่านี้เล็กน้อย


ตอนนี้เราต้องการทราบชื่อและนามสกุลของผู้หยิบหนังสือจากห้องสมุดโดยผู้แต่ง "แดน บราวน์"


คราวนี้เรามาเริ่มจากล่างขึ้นบนกันดีกว่า:


ขั้นตอนที่ 1- เราจะรับข้อมูลได้จากที่ไหน? เพื่อให้ได้ผลลัพธ์ที่ต้องการ เราต้องเข้าร่วมตาราง "สมาชิก" และ "หนังสือ" พร้อมด้วยตาราง "การยืม" ส่วน JOIN จะมีลักษณะดังนี้:


การยืม เข้าร่วมหนังสือที่การยืม.bookid=books.bookid เข้าร่วมสมาชิกบน members.memberid=borrowings.memberid

สามารถดูผลการเชื่อมต่อได้ที่ลิงค์


ขั้นตอนที่ 2- เราแสดงข้อมูลอะไรบ้าง? เราสนใจเฉพาะข้อมูลที่ผู้เขียนหนังสือคือ “แดน บราวน์”


WHERE books.author = แดน บราวน์

ขั้นตอนที่ 3- เราจะแสดงข้อมูลอย่างไร? เมื่อได้รับข้อมูลแล้ว คุณเพียงแค่ต้องแสดงชื่อและนามสกุลของผู้ที่ได้รับหนังสือ:


เลือก members.firstname AS "ชื่อ", members.lastname AS "นามสกุล"

สุด ๆ ! สิ่งที่เหลืออยู่คือการรวมองค์ประกอบทั้งสามเข้าด้วยกันและทำการร้องขอที่เราต้องการ:


SELECT members.firstname AS "First Name", members.lastname AS "Last Name" จากการยืม เข้าร่วมหนังสือ ON allowance.bookid=books.bookid เข้าร่วมสมาชิก ON members.memberid=borrowings.memberid WHERE books.author="Dan Brown";

จะให้อะไรเรา:


ชื่อจริง นามสกุล
ไมค์ วิลลิส
เอลเลน ฮอร์ตัน
เอลเลน ฮอร์ตัน

ยอดเยี่ยม! แต่ชื่อซ้ำกัน (ไม่ซ้ำกัน) เราจะแก้ไขปัญหานี้เร็วๆ นี้

5. การรวมกลุ่ม

พูดประมาณว่า จำเป็นต้องมีการรวมกลุ่มเพื่อแปลงหลายแถวให้เป็นแถวเดียว- ในเวลาเดียวกัน ในระหว่างการรวมกลุ่ม จะใช้ตรรกะที่แตกต่างกันสำหรับคอลัมน์ที่แตกต่างกัน


มาดูตัวอย่างของเราต่อเมื่อมีชื่อซ้ำกัน เห็นได้ชัดว่าเอลเลน ฮอร์ตันหยิบหนังสือมากกว่าหนึ่งเล่ม แต่นี่ไม่ใช่วิธีที่ดีที่สุดในการแสดงข้อมูลนี้ คุณสามารถส่งคำขออื่นได้:


SELECT members.firstname AS "First Name", members.lastname AS "Last Name", นับ(*) AS "จำนวนหนังสือที่ยืม" จากการยืม เข้าร่วมหนังสือ ON allowance.bookid=books.bookid เข้าร่วมสมาชิก ON members.memberid=borrowings .memberid WHERE books.author="Dan Brown" จัดกลุ่มตาม members.firstname, members.lastname;

ซึ่งจะให้ผลลัพธ์ตามที่ต้องการแก่เรา:


ชื่อจริง นามสกุล จำนวนหนังสือที่ยืม
ไมค์ วิลลิส 1
เอลเลน ฮอร์ตัน 2

การรวมเกือบทั้งหมดมาพร้อมกับ GROUP BY clause สิ่งนี้จะเปลี่ยนตารางที่สามารถดึงข้อมูลโดยการสืบค้นให้เป็นกลุ่มของตาราง แต่ละกลุ่มสอดคล้องกับค่าที่ไม่ซ้ำกัน (หรือกลุ่มของค่า) ของคอลัมน์ที่เราระบุใน GROUP BY ในตัวอย่างของเรา เราแปลงผลลัพธ์จากแบบฝึกหัดก่อนหน้าเป็นกลุ่มของแถว นอกจากนี้เรายังทำการรวมด้วย count ซึ่งแปลงหลายแถวให้เป็นค่าจำนวนเต็ม (ในกรณีของเราคือจำนวนแถว) ความหมายนี้จึงถูกกำหนดให้กับแต่ละกลุ่ม


แต่ละแถวในผลลัพธ์แสดงถึงผลลัพธ์ของการรวมกลุ่มแต่ละกลุ่ม



เราสามารถสรุปได้ว่าควรระบุฟิลด์ทั้งหมดในผลลัพธ์ GROUP BY หรือรวมเข้าด้วยกัน เนื่องจากฟิลด์อื่นๆ ทั้งหมดอาจแตกต่างกันในบรรทัดที่ต่างกัน และหากคุณเลือกด้วย SELECT จะไม่ชัดเจนว่าควรใช้ค่าใดที่เป็นไปได้


ในตัวอย่างข้างต้น ฟังก์ชันนับจะประมวลผลแถวทั้งหมด (เนื่องจากเรานับจำนวนแถว) ฟังก์ชันอื่นๆ เช่น ผลรวมหรือกระบวนการสูงสุดเฉพาะแถวที่ระบุเท่านั้น ตัวอย่างเช่น หากเราต้องการทราบจำนวนหนังสือที่เขียนโดยผู้แต่งแต่ละคน เราจำเป็นต้องมีข้อความค้นหาต่อไปนี้:


เลือกผู้แต่ง ผลรวม (หุ้น) จากหนังสือ GROUP BY author;

ผลลัพธ์:


ผู้เขียน ผลรวม
โรบิน ชาร์มา 4
แดน บราวน์ 6
จอห์น กรีน 3
อามิช ตรีปาตี 2

ที่นี่ฟังก์ชันผลรวมจะประมวลผลเฉพาะคอลัมน์หุ้นและคำนวณผลรวมของค่าทั้งหมดในแต่ละกลุ่ม

6. คำถามย่อย


แบบสอบถามย่อยคือแบบสอบถาม SQL ปกติที่ฝังอยู่ภายในแบบสอบถามขนาดใหญ่ แบ่งออกเป็นสามประเภทตามประเภทของผลลัพธ์ที่ส่งคืน

6.1 ตารางสองมิติ

มีคำถามที่ส่งคืนหลายคอลัมน์ ตัวอย่างที่ดีคือคำถามจากแบบฝึกหัดการรวมกลุ่มครั้งก่อน เนื่องจากเป็นแบบสอบถามย่อย ระบบจะส่งคืนตารางอื่นที่สามารถสร้างแบบสอบถามใหม่ได้ ต่อจากแบบฝึกหัดที่แล้ว หากเราต้องการทราบจำนวนหนังสือที่เขียนโดยผู้แต่ง "Robin Sharma" วิธีหนึ่งที่เป็นไปได้คือใช้ข้อความค้นหาย่อย:


SELECT * FROM (เลือกผู้เขียน ผลรวม (หุ้น) จากหนังสือ GROUP BY author) AS ผลลัพธ์ WHERE author="Robin Sharma";

ผลลัพธ์:



เขียนเป็น: ["Robin Sharma", "Dan Brown"]


2. ตอนนี้เราใช้ผลลัพธ์นี้ในการสืบค้นใหม่:


เลือกชื่อ, bookid จากหนังสือ WHERE author IN (เลือกผู้เขียนจาก (เลือกผู้เขียน, ผลรวม (หุ้น) จากหนังสือ GROUP BY author) AS ผลลัพธ์ WHERE sum > 3);

ผลลัพธ์:


ชื่อ จอง
สัญลักษณ์ที่หายไป 2
ใครจะร้องไห้เมื่อคุณตาย? 3
นรก 4

นี่เป็นเช่นเดียวกับ:


เลือกชื่อ, bookid จากหนังสือ WHERE ผู้แต่ง IN ("Robin Sharma", "Dan Brown");

6.3 ค่านิยมส่วนบุคคล

มีการสืบค้นที่ส่งผลให้มีเพียงหนึ่งแถวและหนึ่งคอลัมน์ สามารถถือเป็นค่าคงที่และสามารถใช้ได้ทุกที่ที่ใช้ค่า เช่น ในตัวดำเนินการเปรียบเทียบ นอกจากนี้ยังสามารถใช้เป็นตารางสองมิติหรืออาร์เรย์องค์ประกอบเดียวได้อีกด้วย


ตัวอย่างเช่น รับข้อมูลเกี่ยวกับหนังสือทุกเล่มที่มีจำนวนในห้องสมุดเกินค่าเฉลี่ยปัจจุบัน


สามารถรับค่าเฉลี่ยได้ดังนี้:


เลือกค่าเฉลี่ย (หุ้น) จากหนังสือ

อะไรทำให้เรา:


7. การดำเนินการเขียน

การดำเนินการเขียนฐานข้อมูลส่วนใหญ่ค่อนข้างง่ายเมื่อเทียบกับการดำเนินการอ่านที่ซับซ้อนกว่า

7.1 อัปเดต

ไวยากรณ์ของคำขอ UPDATE มีความหมายเหมือนกับคำขออ่าน ข้อแตกต่างเพียงอย่างเดียวคือแทนที่จะเลือกคอลัมน์ด้วย SELECT เราตั้งค่าความรู้ด้วย SET


หากหนังสือของ Dan Brown ทั้งหมดสูญหาย คุณจะต้องรีเซ็ตค่าปริมาณ แบบสอบถามสำหรับสิ่งนี้จะเป็น:


อัพเดทหนังสือ SET stock=0 WHERE author="Dan Brown";

WHERE ทำสิ่งเดียวกันกับเมื่อก่อน: เลือกแถว แทนที่จะใช้ SELECT ที่เราใช้อ่าน ตอนนี้เราใช้ SET อย่างไรก็ตาม ตอนนี้คุณต้องระบุไม่เพียงแต่ชื่อคอลัมน์ แต่ยังต้องระบุค่าใหม่สำหรับคอลัมน์นี้ในแถวที่เลือกด้วย


7.2 ลบ

แบบสอบถาม DELETE เป็นเพียงแบบสอบถาม SELECT หรือ UPDATE ที่ไม่มีชื่อคอลัมน์ อย่างจริงจัง. เช่นเดียวกับ SELECT และ UPDATE บล็อก WHERE ยังคงเหมือนเดิม: โดยจะเลือกแถวที่จะลบ การดำเนินการลบจะทำลายทั้งแถว ดังนั้นจึงไม่มีเหตุผลที่จะระบุแต่ละคอลัมน์ ดังนั้น หากเราตัดสินใจที่จะไม่รีเซ็ตจำนวนหนังสือของ Dan Brown แต่ต้องการลบบันทึกทั้งหมดทั้งหมด เราก็สามารถยื่นคำขอต่อไปนี้ได้:


ลบออกจากหนังสือ WHERE author="Dan Brown";

7.3 เม็ดมีด

บางทีสิ่งเดียวที่แตกต่างจากแบบสอบถามประเภทอื่นคือ INSERT รูปแบบคือ:


ใส่ลงในค่า x (a,b,c) (x, y, z);

โดยที่ a , b , c คือชื่อคอลัมน์ และ x , y และ z คือค่าที่จะแทรกลงในคอลัมน์เหล่านั้นในลำดับเดียวกัน โดยพื้นฐานแล้วมันเป็น


ลองดูตัวอย่างที่เฉพาะเจาะจง ต่อไปนี้เป็นแบบสอบถาม INSERT ที่เติมข้อมูลตาราง "books" ทั้งหมด:


แทรกลงในหนังสือ (bookid, ชื่อเรื่อง, ผู้แต่ง, ตีพิมพ์, หุ้น) ค่านิยม (1, "Scion of Ikshvaku", "Amish Tripathi", "06-22-2015", 2), (2, "The Lost Symbol", " แดน บราวน์","07-22-2553",3), (3,"ใครจะร้องไห้เมื่อคุณตาย?""โรบิน ชาร์มา""06-15-2549",4), (4,"Inferno" ,"แดน บราวน์", "05-05-2014", 3), (5, "ความผิดพลาดในดวงดาวของเรา", "จอห์น กรีน", "01-03-2015",3);

8. ตรวจสอบ

มาถึงจุดสิ้นสุดแล้ว ผมขอเสนอแบบทดสอบเล็กๆ น้อยๆ ดูคำขอนั้นที่ตอนต้นของบทความ คุณช่วยคิดออกได้ไหม? ลองแบ่งมันออกเป็นส่วน SELECT , FROM , WHERE , GROUP BY และดูที่ส่วนประกอบแต่ละส่วนของแบบสอบถามย่อย


นี่คือรูปแบบที่อ่านง่ายขึ้น:


เลือกสมาชิกชื่อ || - members.lastname AS "Full Name" จากการยืม INNER JOIN สมาชิก ON members.memberid=borrowings.memberid INNER JOIN หนังสือ ON books.bookid=borrowings.bookid WHERE allowances.bookid IN (SELECT bookid จากหนังสือ WHERE stock> (SELECT avg(stock) ) จากหนังสือ)) จัดกลุ่มตาม members.firstname, members.lastname;

ข้อความค้นหานี้จะส่งคืนรายชื่อผู้ที่เช็คเอาท์หนังสือจากห้องสมุดซึ่งมีจำนวนรวมสูงกว่าค่าเฉลี่ย


ผลลัพธ์:


ชื่อเต็ม
ลิดา ไทเลอร์

ฉันหวังว่าคุณจะสามารถเข้าใจได้โดยไม่มีปัญหาใดๆ แต่ถ้าไม่ฉันยินดีรับความคิดเห็นและข้อเสนอแนะของคุณเพื่อที่ฉันจะได้ปรับปรุงโพสต์นี้

แท็ก: เพิ่มแท็ก