คำขอของ Skl ตัวอย่างคำสั่ง SQL ไปยังฐานข้อมูล MySQL แบบสอบถาม SQL: การจัดกลุ่มระเบียน

SQL - คำสั่ง SELECT

ชื่อ SQL (ภาษาแบบสอบถามที่มีโครงสร้าง) แบบสอบถามที่มีโครงสร้าง) สะท้อนถึงความจริงที่ว่าคิวรีเป็นองค์ประกอบที่ใช้บ่อยที่สุดของ 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) ของผู้ขายเป็นเปอร์เซ็นต์ ไม่ใช่เลขทศนิยม

ผลลัพธ์:

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

ในคอลัมน์สุดท้าย ข้อมูลที่ได้รับทั้งหมดจะคูณด้วย 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 "percent" จากผลลัพธ์ของพนักงานขาย:%
1001 ปอกลอนดอน12 %
1002 เซอร์เรสซานโฮเซ่13 %
1003 แอกเซลร็อดนิวยอร์ก10 %
1004 โมติกาลอนดอน11 %
1007 ริฟกิ้นบาร์เซโลนา15 %

SELECT snum, sname, city, comm * 100 AS เปอร์เซ็นต์ , "%" จากพนักงานขายผลลัพธ์: จะเห็นได้ว่าหลังจากเอาท์พุตบรรทัดจากฐานข้อมูลแล้วคอลัมน์ใหม่

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

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 จะถูกเขียนไว้ท้ายแบบสอบถามเสมอ

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

ฐานคืออะไร ข้อมูล SQL?

ภาษาที่มีโครงสร้างการสืบค้น (Structured Query Language) เป็นมาตรฐานการสื่อสารฐานข้อมูลที่ ANSI รองรับ มากที่สุด เวอร์ชันล่าสุด– SQL-99 แม้ว่า มาตรฐานใหม่ SQL-200n อยู่ระหว่างการพัฒนาแล้ว ฐานข้อมูลส่วนใหญ่ปฏิบัติตามมาตรฐาน ANSI-92 อย่างแน่นหนา มีการพูดคุยกันมากมายเกี่ยวกับการแนะนำเพิ่มเติม มาตรฐานที่ทันสมัยแต่ผู้จำหน่ายฐานข้อมูลเชิงพาณิชย์กำลังเปลี่ยนจากแนวคิดนี้ไปพร้อมกับแนวคิดใหม่ในการจัดเก็บข้อมูลที่เก็บไว้ เกือบทุกฐานข้อมูลใช้บางส่วน ชุดที่ไม่ซ้ำใครไวยากรณ์แม้ว่าจะคล้ายกับมาตรฐาน ANSI มากก็ตาม ในกรณีส่วนใหญ่ ไวยากรณ์นี้เป็นส่วนขยายของมาตรฐานพื้นฐาน แม้ว่าจะมีกรณีที่ไวยากรณ์นี้ให้ผลลัพธ์ที่แตกต่างกันสำหรับฐานข้อมูลที่แตกต่างกัน เป็นความคิดที่ดีเสมอที่จะตรวจสอบเอกสารประกอบของฐานข้อมูล โดยเฉพาะอย่างยิ่งหากคุณได้รับผลลัพธ์ที่ไม่คาดคิด

หากคุณยังใหม่กับ SQL มีแนวคิดพื้นฐานบางประการที่คุณต้องเข้าใจ

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

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

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

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

หนึ่งใน การดำเนินงานที่สำคัญซึ่งดำเนินการเมื่อทำงานกับข้อมูลคือการเลือกข้อมูลที่จัดเก็บไว้ในฐานข้อมูล เมื่อต้องการทำเช่นนี้ ผู้ใช้ต้องดำเนินการแบบสอบถาม

ตอนนี้เรามาดูประเภทหลักของการสืบค้นฐานข้อมูลที่เน้นการจัดการข้อมูลภายในฐานข้อมูล เพื่อวัตถุประสงค์ของเรา ตัวอย่างทั้งหมดมีให้ใน SQL มาตรฐานเพื่อให้เหมาะกับสภาพแวดล้อมใดๆ

ประเภทของแบบสอบถามข้อมูล

การสืบค้นข้อมูลมีสี่ประเภทหลักใน SQL ซึ่งอยู่ภายใต้สิ่งที่เรียกว่า Data Manipulation Language (DML):
SELECT – เลือกแถวจากตาราง;
INSERT – เพิ่มแถวลงในตาราง
UPDATE – เปลี่ยนแถวในตาราง
DELETE – ลบแถวในตาราง

แต่ละคำถามเหล่านี้มี ผู้ประกอบการต่างๆและฟังก์ชันที่ใช้ในการดำเนินการบางอย่างกับข้อมูล แบบสอบถาม SELECT มีมากที่สุด จำนวนมากตัวเลือก นอกจากนี้ยังมี ประเภทเพิ่มเติมข้อความค้นหาที่ใช้ร่วมกับ SELECT เช่น JOIN และ UNION แต่สำหรับตอนนี้ เราจะเน้นเฉพาะคำถามพื้นฐานเท่านั้น

การใช้แบบสอบถาม SELECT เพื่อเลือกข้อมูลที่คุณต้องการ

เพื่อดึงข้อมูลที่เก็บไว้ในฐานข้อมูลมาใช้ เลือกแบบสอบถาม. การกระทำขั้นพื้นฐานแบบสอบถามนี้จำกัดอยู่เพียงตารางเดียว แม้ว่าจะมีการออกแบบที่อนุญาตให้สุ่มตัวอย่างจากหลายตารางพร้อมกันได้ เพื่อให้ได้แถวข้อมูลทั้งหมดสำหรับคอลัมน์เฉพาะ จะใช้แบบสอบถามลักษณะนี้:
เลือก column1, column2 จาก table_name;

นอกจากนี้คุณยังสามารถรับคอลัมน์ทั้งหมดจากตารางได้โดยใช้ ไวด์การ์ด «*»:
SELECT * จาก table_name;

สิ่งนี้มีประโยชน์หากคุณจะเลือกข้อมูลบางอย่าง สภาพที่ไหน- แบบสอบถามต่อไปนี้จะส่งกลับคอลัมน์ทั้งหมดจากทุกแถวที่ "column1" มีค่า "3":
SELECT * จาก table_name โดยที่ column1=3;

นอกจาก “=” (เท่ากับ) แล้ว ยังมีตัวดำเนินการตามเงื่อนไขต่อไปนี้:

คำสั่งแบบมีเงื่อนไข:
= เท่ากัน
<>ไม่เท่ากัน
> เพิ่มเติม
< Меньше
>= มากกว่าหรือเท่ากับ
<= Меньше или равно

นอกจากนี้ คุณสามารถใช้เงื่อนไข BITWEEN และ LIKE เพื่อเปรียบเทียบกับเงื่อนไข WHERE รวมถึงการรวมกันของตัวดำเนินการ AND และ OR
SELECT * FROM table_name WHERE ((อายุ >= 18) และ (นามสกุลระหว่าง 'Ivanov' และ 'Sidorov')) หรือบริษัท LIKE '%Motorola%';

การแปลภาษารัสเซียหมายถึงอะไร: เลือกคอลัมน์ทั้งหมดจากตาราง table_name โดยที่ค่าของคอลัมน์อายุมากกว่าหรือเท่ากับ 18 และค่าของคอลัมน์นามสกุลอยู่ในช่วงตัวอักษรตั้งแต่ Ivanov ถึง Sidorov รวมหรือค่า ของคอลัมน์ Company คือ Motorola

การใช้แบบสอบถาม INSERT เพื่อแทรกข้อมูลใหม่

แบบสอบถาม INSERT ใช้ในการสร้าง บรรทัดใหม่ข้อมูล. หากต้องการอัปเดตข้อมูลที่มีอยู่หรือช่องแถวว่าง คุณต้องใช้แบบสอบถาม UPDATE

ตัวอย่างไวยากรณ์แบบสอบถาม INSERT:
แทรกลงใน table_name (column1, column2, column3) ค่า ('data1', 'data2', 'data3');

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

เปลี่ยนไปแล้ว ข้อมูลที่มีอยู่ในฐานข้อมูลในลักษณะที่คล้ายกันมาก

อัปเดตแบบสอบถามและเงื่อนไข WHERE

UPDATE ใช้เพื่อเปลี่ยนค่าที่มีอยู่หรือปล่อยฟิลด์ในแถว ดังนั้นค่าใหม่จะต้องตรงกัน ประเภทที่มีอยู่ข้อมูลและให้ค่าที่ยอมรับได้ หากคุณไม่ต้องการเปลี่ยนค่าในทุกแถว คุณจะต้องใช้ WHERE clause
อัปเดต table_name SET column1 = 'data1', column2 = 'data2' โดยที่ column3 = 'data3';

คุณสามารถใช้ WHERE ในคอลัมน์ใดก็ได้ รวมถึงคอลัมน์ที่คุณต้องการเปลี่ยนแปลงด้วย ใช้เมื่อจำเป็นต้องแทนที่ค่าหนึ่งด้วยค่าอื่น
อัปเดต table_name SET FirstName = 'Vasily' โดยที่ FirstName = 'Vasily' และนามสกุล = 'Pupkin';

ระวัง! แบบสอบถาม DELETE จะลบทั้งแถว

แบบสอบถาม DELETE จะลบแถวออกจากฐานข้อมูลอย่างสมบูรณ์ หากคุณต้องการลบฟิลด์เดียว คุณต้องใช้คำขอ UPDATE และตั้งค่าฟิลด์นี้เป็นค่าที่จะคล้ายคลึงกับ NULL ในโปรแกรมของคุณ โปรดใช้ความระมัดระวังในการจำกัดแบบสอบถาม DELETE ของคุณให้อยู่ในส่วนคำสั่ง WHERE มิฉะนั้น คุณอาจสูญเสียเนื้อหาทั้งหมดของตาราง
ลบออกจาก table_name โดยที่ column1 = 'data1';

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

ตอนนี้คุณรู้แล้ว พื้นฐาน SQLคำขอ

SQL เป็นภาษาฐานข้อมูล และเราได้ครอบคลุมสิ่งที่สำคัญที่สุดและ คำสั่งพื้นฐานใช้ในการสืบค้นข้อมูล มีแนวคิดหลักๆ มากมายที่ไม่ครอบคลุม (เช่น SUM และ COUNT) แต่คำสั่งบางคำสั่งที่เราจัดการในรายการข้างต้นควรสนับสนุนให้คุณกระตือรือร้นและเจาะลึกเข้าไปในภาษาคิวรีที่ยอดเยี่ยมที่เรียกว่า 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 และ ORDER BY - เรียงลำดับ (เรียงลำดับ) แถว

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

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

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


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

ข้อความค้นหาถูกเขียนโดยไม่มีเครื่องหมายอัญประกาศตั้งแต่นั้นมา MySQL, เอ็มเอสเอสแอลและ โพสต์กรีพวกเขาแตกต่างกัน

แบบสอบถาม SQL: รับเขตข้อมูลที่ระบุ (จำเป็น) จากตาราง

เลือก id, country_title, count_people จาก table_name

เราได้รับรายการบันทึก: ทุกประเทศและประชากรของประเทศเหล่านั้น ชื่อของฟิลด์ที่ต้องระบุจะถูกระบุโดยคั่นด้วยเครื่องหมายจุลภาค

เลือก * จาก table_name

* หมายถึงทุกช่อง นั่นก็คือจะมีการแสดง ทุกอย่างอย่างแน่นอนเขตข้อมูล

แบบสอบถาม SQL: ส่งออกบันทึกจากตารางโดยไม่รวมรายการที่ซ้ำกัน

เลือกชื่อประเทศที่แตกต่างจาก table_name

เราได้รับรายการบันทึก: ประเทศที่ผู้ใช้ของเราอาศัยอยู่ อาจมีผู้ใช้จำนวนมากจากประเทศเดียว ในกรณีนี้ มันเป็นคำขอของคุณ

แบบสอบถาม SQL: การแสดงบันทึกจากตารางตามเงื่อนไขที่กำหนด

เลือกรหัส, country_title, city_title จาก table_name WHERE count_people>100000000

เราได้รับรายการบันทึก: ประเทศที่มีจำนวนผู้คนมากกว่า 100,000,000 คน

แบบสอบถาม SQL: การแสดงบันทึกจากตารางที่มีการเรียงลำดับ

เลือกรหัส city_title จาก table_name เรียงตาม city_title

เราได้รับรายการบันทึก: เมืองใน ลำดับตัวอักษร- ที่จุดเริ่มต้น A ในตอนท้าย Z

เลือกรหัส city_title จาก table_name เรียงตาม city_title DESC

เราได้รับรายการบันทึก: เมืองที่ตรงกันข้าม ( รายละเอียด) ตกลง. ที่จุดเริ่มต้นฉันในตอนท้ายก.

แบบสอบถาม SQL: การนับจำนวนบันทึก

เลือก COUNT(*) จาก table_name

เราได้รับจำนวน (จำนวน) ของบันทึกในตาราง ใน ในกรณีนี้ไม่มีรายการรายการ

แบบสอบถาม SQL: ส่งออกช่วงบันทึกที่ต้องการ

SELECT * จาก table_name จำกัด 2, 3

เราได้รับบันทึก 2 (วินาที) และ 3 (สาม) จากตาราง แบบสอบถามมีประโยชน์เมื่อสร้างการนำทางบนหน้าเว็บ

คำสั่ง SQL แบบมีเงื่อนไข

การแสดงบันทึกจากตารางตามเงื่อนไขที่กำหนดโดยใช้ตัวดำเนินการเชิงตรรกะ

แบบสอบถาม SQL: และการก่อสร้าง

เลือก id, city_title จาก table_name โดยที่ประเทศ = "รัสเซีย" และน้ำมัน = 1

เราได้รับรายการบันทึก: เมืองจากรัสเซีย และสามารถเข้าถึงน้ำมันได้ เมื่อใดควรใช้ตัวดำเนินการ และจากนั้นเงื่อนไขทั้งสองจะต้องตรงกัน

แบบสอบถาม SQL: หรือโครงสร้าง

เลือกรหัส city_title จาก table_name WHERE ประเทศ = "รัสเซีย" หรือประเทศ = "USA"

เราได้รับรายการบันทึก: ทุกเมืองจากรัสเซีย หรือสหรัฐอเมริกา เมื่อใดควรใช้ตัวดำเนินการ หรือดังนั้นอย่างน้อยหนึ่งเงื่อนไขจะต้องตรงกัน

แบบสอบถาม SQL: และไม่ใช่การก่อสร้าง

เลือก id, user_login จาก table_name โดยที่ประเทศ = "รัสเซีย" และไม่ใช่ count_comments<7

เราได้รับรายการบันทึก: ผู้ใช้ทั้งหมดจากรัสเซีย และใครทำ ไม่น้อย 7 ความคิดเห็น

แบบสอบถาม SQL: ในการก่อสร้าง (B)

เลือก id, user_login จาก table_name ประเทศไหนใน ("รัสเซีย", "บัลแกเรีย", "จีน")

เราได้รับรายการบันทึก: ผู้ใช้ทั้งหมดที่อาศัยอยู่ใน ( ใน) (รัสเซีย หรือบัลแกเรีย หรือจีน)

แบบสอบถาม SQL: ไม่ได้อยู่ในการก่อสร้าง

เลือก id, user_login จาก table_name ประเทศที่ไม่อยู่ใน ("รัสเซีย", "จีน")

เราได้รับรายการบันทึก: ผู้ใช้ทั้งหมดที่ไม่ได้อาศัยอยู่ใน ( ไม่เข้า) (รัสเซียหรือจีน)

แบบสอบถาม SQL: โครงสร้าง IS NULL (ค่าว่างหรือไม่ว่าง)

เลือก id, user_login จาก table_name โดยที่สถานะเป็น NULL

เราได้รับรายการบันทึก: ผู้ใช้ทั้งหมดที่ไม่ได้กำหนดสถานะ NULL เป็นปัญหาแยกต่างหาก ดังนั้นจึงมีการตรวจสอบแยกกัน

เลือก id, user_login จาก table_name โดยที่สถานะไม่เป็นโมฆะ

เราได้รับรายการบันทึก: ผู้ใช้ทั้งหมดที่มีการกำหนดสถานะ (NOT NULL)

แบบสอบถาม SQL: LIKE การก่อสร้าง

เลือก id, user_login จาก table_name โดยที่นามสกุล LIKE "Ivan%"

เราได้รับรายการบันทึก: ผู้ใช้ที่มีนามสกุลขึ้นต้นด้วยชุดค่าผสม "อีวาน" เครื่องหมาย % หมายถึงจำนวนอักขระใดๆ ก็ได้ หากต้องการค้นหาเครื่องหมาย % คุณต้องใช้ Escape “Ivan\%”

แบบสอบถาม SQL: ระหว่างการก่อสร้าง

เลือก id, user_login จาก table_name โดยที่เงินเดือนอยู่ระหว่าง 25,000 ถึง 50,000

เราได้รับรายการบันทึก: ผู้ใช้ที่ได้รับเงินเดือนตั้งแต่ 25,000 ถึง 50,000 รวมอยู่ด้วย

มีตัวดำเนินการเชิงตรรกะจำนวนมาก ดังนั้นควรศึกษาเอกสารประกอบของเซิร์ฟเวอร์ SQL โดยละเอียด

แบบสอบถาม SQL ที่ซับซ้อน

แบบสอบถาม SQL: รวมหลายแบบสอบถาม

(เลือก id, user_login จาก table_name1) UNION (เลือก id, user_login จาก table_name2)

เราได้รับรายชื่อ: ผู้ใช้ที่ลงทะเบียนในระบบตลอดจนผู้ใช้ที่ลงทะเบียนแยกต่างหากในฟอรัม ตัวดำเนินการ UNION สามารถรวมหลายแบบสอบถามได้ UNION ทำหน้าที่เหมือนกับ SELECT DISTINCT นั่นคือละทิ้งค่าที่ซ้ำกัน หากต้องการรับบันทึกทั้งหมด คุณต้องใช้ตัวดำเนินการ UNION ALL

แบบสอบถาม SQL: การนับค่าฟิลด์ MAX, MIN, SUM, AVG, COUNT

กำลังแสดงค่าตัวนับสูงสุดในตาราง:

เลือกสูงสุด (ตัวนับ) จาก table_name

ผลลัพธ์ของหนึ่ง ค่าตัวนับขั้นต่ำในตาราง:

เลือก MIN(ตัวนับ) จาก table_name

แสดงผลรวมของค่าตัวนับทั้งหมดในตาราง:

เลือก SUM (ตัวนับ) จาก table_name

การแสดงค่าตัวนับเฉลี่ยในตาราง:

เลือก AVG (ตัวนับ) จาก table_name

การแสดงจำนวนตัวนับในตาราง:

เลือก COUNT(ตัวนับ) จาก table_name

การแสดงจำนวนเมตรในอู่ซ่อมรถหมายเลข 1 ในตาราง:

SELECT COUNT(ตัวนับ) จาก table_name WHERE office="Workshop No. 1"

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

แบบสอบถาม SQL: การจัดกลุ่มระเบียน

เลือกทวีป SUM(country_area) จากประเทศ GROUP BY ทวีป

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

แบบสอบถาม SQL: การใช้หลายตารางผ่านนามแฝง

เลือก o.order_no, o.amount_paid, c.company จากคำสั่งซื้อ AS o ลูกค้า AS ด้วย WHERE o.custno=c.custno AND c.city="Tyumen"

เราได้รับรายการบันทึก: คำสั่งซื้อจากลูกค้าที่อาศัยอยู่ใน Tyumen เท่านั้น

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

เลือก o.order_no, o.amount_paid, z.company จากคำสั่งซื้อ AS o LEFT เข้าร่วมลูกค้า AS z ON (z.custno=o.custno)

แบบสอบถามย่อยที่ซ้อนกัน

SELECT * FROM table_name WHERE เงินเดือน = (SELECT MAX (เงินเดือน) จากพนักงาน)

เราได้รับหนึ่งบันทึก: ข้อมูลเกี่ยวกับผู้ใช้ที่มีเงินเดือนสูงสุด

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

คำสั่ง SQL เปลี่ยนแปลงข้อมูล

แบบสอบถาม SQL: INSERT

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

ตัวเลือก #1 คำแนะนำที่ใช้บ่อยคือ:

แทรกลงใน table_name (id, user_login) ค่า (1, "ivanov"), (2, "petrov")

ไปที่โต๊ะ " table_name"ผู้ใช้ 2 (สอง) รายจะถูกแทรกพร้อมกัน

ตัวเลือก #2 สะดวกกว่าในการใช้สไตล์:

แทรก table_name SET id=1, user_login="ivanov"; แทรก table_name SET id=2, user_login="petrov";

สิ่งนี้มีข้อดีและข้อเสีย

ข้อเสียเปรียบหลัก:

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

ข้อดีหลัก:

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

แบบสอบถาม SQL: อัปเดต

อัปเดต table_name SET user_login = "ivanov", user_surname = "Ivanov" โดยที่ id = 1

ในตาราง" table_name"ในบันทึกที่มีหมายเลข id=1 ค่าของฟิลด์ user_login และ user_surname จะถูกเปลี่ยนเป็นค่าที่ระบุ

แบบสอบถาม SQL: ลบ

ลบออกจาก table_name โดยที่ id=3

ในตาราง table_name บันทึกที่มีหมายเลข ID 3 จะถูกลบ

  1. ขอแนะนำให้เขียนชื่อฟิลด์ทั้งหมดด้วยตัวอักษรตัวเล็ก และหากจำเป็น ให้คั่นด้วยช่องว่างบังคับ “_” เพื่อให้เข้ากันได้กับภาษาการเขียนโปรแกรมต่างๆ เช่น Delphi, Perl, Python และ Ruby
  2. เขียนคำสั่ง SQL เป็นตัวพิมพ์ใหญ่เพื่อให้อ่านง่าย โปรดจำไว้เสมอว่าคนอื่นสามารถอ่านโค้ดได้หลังจากคุณ และเป็นไปได้มากว่าตัวคุณเองจะอ่านโค้ดได้หลังจากผ่านไประยะเวลาหนึ่ง
  3. ตั้งชื่อฟิลด์ด้วยคำนามก่อนแล้วตามด้วยการกระทำ ตัวอย่างเช่น: city_status, user_login, user_name
  4. พยายามหลีกเลี่ยงคำสงวนในภาษาต่างๆ ที่อาจทำให้เกิดปัญหาใน SQL, PHP หรือ Perl เช่น (ชื่อ, จำนวน, ลิงก์) ตัวอย่างเช่น: ลิงก์สามารถใช้ได้ใน MS SQL แต่สงวนไว้ใน MySQL

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

ดังนั้นในฐานข้อมูลฟอรั่มของเราจึงมีสามตาราง: ผู้ใช้ (ผู้ใช้) หัวข้อ (หัวข้อ) และโพสต์ (ข้อความ) และเราต้องการดูว่ามีข้อมูลใดบ้าง มีโอเปอเรเตอร์สำหรับสิ่งนี้ใน SQL เลือก- ไวยากรณ์สำหรับการใช้งานมีดังนี้:

เลือก what_select จากwhere_select;


แทนที่จะเป็น "what_select" เราต้องระบุชื่อของคอลัมน์ที่มีค่าที่เราต้องการดูหรือชื่อของหลายคอลัมน์โดยคั่นด้วยเครื่องหมายจุลภาคหรือเครื่องหมายดอกจัน (*) หมายถึงการเลือกคอลัมน์ทั้งหมดของตาราง . แทนที่จะเป็น "where_select" คุณควรระบุชื่อตาราง

ก่อนอื่น มาดูคอลัมน์ทั้งหมดจากตารางผู้ใช้กันก่อน:

เลือก * จากผู้ใช้;

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

เลือก id_user จากผู้ใช้;

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

เลือกชื่อ อีเมลจากผู้ใช้;

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

SELECT * จากหัวข้อ;

ตอนนี้เรามีเพียง 4 หัวข้อ แต่ถ้ามี 100 หัวข้อล่ะ? ฉันต้องการให้แสดงตามลำดับตัวอักษร มีคีย์เวิร์ดสำหรับสิ่งนี้ใน SQL สั่งซื้อโดยตามด้วยชื่อของคอลัมน์ที่จะใช้ในการเรียงลำดับ ไวยากรณ์มีดังนี้:

เลือก column_name จาก table_name เรียงลำดับตาม sort_column_name;



ตามค่าเริ่มต้น การเรียงลำดับจะเรียงลำดับจากน้อยไปหามาก แต่สามารถเปลี่ยนแปลงได้โดยการเพิ่มคำสำคัญ รายละเอียด

ตอนนี้ข้อมูลของเราถูกจัดเรียงจากมากไปน้อย

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

เปรียบเทียบผลลัพธ์กับผลลัพธ์ของแบบสอบถามก่อนหน้า

บ่อยครั้งเราไม่ต้องการข้อมูลทั้งหมดจากตาราง ตัวอย่างเช่น เราต้องการทราบว่าหัวข้อใดที่ผู้ใช้ sveta (id=4) สร้างขึ้น มีคีย์เวิร์ดสำหรับสิ่งนี้ใน SQL ที่ไหนไวยากรณ์สำหรับคำขอดังกล่าวเป็นดังนี้:

สำหรับตัวอย่างของเรา เงื่อนไขคือ ID ผู้ใช้ เช่น เราต้องการเฉพาะแถวที่มีคอลัมน์ id_author มี 4 (รหัสผู้ใช้ sveta):

หรือเราต้องการทราบว่าใครเป็นคนสร้างธีม "จักรยาน":

แน่นอนว่าจะสะดวกกว่าหากชื่อของเขาแสดงแทน ID ของผู้เขียน แต่ชื่อจะถูกเก็บไว้ในตารางอื่น ในบทเรียนต่อๆ ไป เราจะได้เรียนรู้วิธีเลือกข้อมูลจากหลายตาราง ในระหว่างนี้ เรามาดูกันว่าเงื่อนไขใดบ้างที่สามารถตั้งค่าได้โดยใช้คีย์เวิร์ด WHERE

ผู้ดำเนินการ คำอธิบาย
= (เท่ากับ) เลือกค่าที่เท่ากับค่าที่ระบุ

ตัวอย่าง:

SELECT * จากหัวข้อ WHERE id_author=4;

ผลลัพธ์:

> (เพิ่มเติม) เลือกค่าที่มากกว่าที่ระบุ

ตัวอย่าง:

SELECT * จากหัวข้อ WHERE id_author>2;

ผลลัพธ์:

< (меньше) เลือกค่าที่น้อยกว่าที่ระบุ

ตัวอย่าง:

SELECT * จากหัวข้อโดยที่ id_author
ผลลัพธ์:

>= (มากกว่าหรือเท่ากับ) เลือกค่าที่มากกว่าและเท่ากับค่าที่ระบุ

ตัวอย่าง:

SELECT * จากหัวข้อ WHERE id_author>=2;

ผลลัพธ์:

<= (меньше или равно) เลือกค่าที่น้อยกว่าและเท่ากับค่าที่ระบุ

ตัวอย่าง:

SELECT * จากหัวข้อโดยที่ id_author
ผลลัพธ์:

!= (ไม่เท่ากัน) มีการเลือกค่าที่ไม่เท่ากับค่าที่ระบุ

ตัวอย่าง:

SELECT * จากหัวข้อ WHERE id_author!=1;

ผลลัพธ์:

ไม่เป็นโมฆะ เลือกแถวที่มีค่าในช่องที่ระบุ

ตัวอย่าง:

SELECT * จากหัวข้อโดยที่ id_author ไม่เป็นโมฆะ;

ผลลัพธ์:

เป็นโมฆะ เลือกแถวที่ไม่มีค่าในช่องที่ระบุ

ตัวอย่าง:

SELECT * จากหัวข้อโดยที่ id_author เป็นโมฆะ;

ผลลัพธ์:

ชุดว่าง - ไม่มีบรรทัดดังกล่าว

ระหว่าง (ระหว่าง) มีการเลือกค่าระหว่างค่าที่ระบุ

ตัวอย่าง:

SELECT * จากหัวข้อโดยที่ id_author ระหว่าง 1 และ 3;

ผลลัพธ์:

IN (มีค่าอยู่) เลือกค่าที่สอดคล้องกับค่าที่ระบุ

ตัวอย่าง:

SELECT * จากหัวข้อ WHERE id_author IN (1, 4);

ผลลัพธ์:

NOT IN (ไม่มีค่า) มีการเลือกค่าอื่นนอกเหนือจากที่ระบุ

ตัวอย่าง:

SELECT * จากหัวข้อโดยที่ id_author ไม่ได้อยู่ใน (1, 4);

ผลลัพธ์:

ชอบ (การแข่งขัน) มีการเลือกค่าที่ตรงกับรูปแบบ

ตัวอย่าง:

SELECT * จากหัวข้อ WHERE topic_name LIKE "led%";

ผลลัพธ์:

เมตาอักขระที่เป็นไปได้สำหรับตัวดำเนินการ LIKE จะกล่าวถึงด้านล่าง

ไม่ชอบ (ไม่ตรงกัน) มีการเลือกค่าที่ไม่ตรงกับรูปแบบ

ตัวอย่าง:

SELECT * จากหัวข้อโดยที่ topic_name ไม่เหมือน "led%";

ผลลัพธ์:

LIKE ตัวดำเนินการเมตาอักขระ

การค้นหาโดยใช้อักขระเมตาสามารถทำได้ในช่องข้อความเท่านั้น

meta character ที่พบบ่อยที่สุดคือ % - หมายถึงสัญลักษณ์ใดๆ ตัวอย่างเช่น หากเราต้องการค้นหาคำที่ขึ้นต้นด้วยตัวอักษร "vel" เราจะเขียน LIKE "vel%" และหากเราต้องการค้นหาคำที่มีอักขระ "club" เราก็จะเขียน LIKE "% คลับ%" ตัวอย่างเช่น:

meta character ที่ใช้กันทั่วไปอีกตัวหนึ่งคือ _ - ต่างจาก % ซึ่งหมายถึงอักขระน้อยหรือไม่มีเลย ขีดล่างหมายถึงอักขระหนึ่งตัวเท่านั้น ตัวอย่างเช่น:

ให้ความสนใจกับช่องว่างระหว่าง meta character และ "fish" หากคุณข้ามไป คำขอจะไม่ทำงานเพราะว่า เมตาตัวละคร _ หมายถึงอักขระหนึ่งตัวเท่านั้น และการเว้นวรรคก็เป็นอักขระด้วย

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