--- title: (ฝึก PE v.2 2 คน กับ Bot ASR) ห้องเรียนสกลฯ หลักการและระบบการจัดการฐานข้อมูล อ.เกวลี 3 ม.ค. 66 นาโน,ปลา subtitle: date: วันจันทร์ที่ 20 มีนาคม 2566 เวลา 13.00 น. --- (ข้อความสดจากระบบถอดความเสียงพูดทางไกล) (อาจารย์เกวลี) โอเคค่ะ เดี๋ยวเริ่มเลยละกันนะคะ วันนี้จะเป็นบทที่ 7 หลังปีใหม่สไลด์จะไม่เยอะนะคะ นิดเดียว แล้วก็วันนี้ไม่มีการบ้าน ไม่มีการบ้าน เฉพาะอาทิตย์นี้เท่านั้นนะคะ ให้ปีใหม่ บทนี้นะคะ จะเป็นเกี่ยวกับพีชคณิตเชิงสัมพันธ์วิชาคณิตเชิงสัมพันธ์ก็จะเป็นกระบวนการโดยใช้คณิตศาสตร์อย่างง่ายนะคะ ที่เอามาเป็นตัวกระทำในการจัดการฐานข้อมูลของเราด้วย โดยพีชคณิตเชิงสัมพันธ์ หรือว่าเป็นเกี่ยวกับโครงสร้างในการ Query ข้อมูล ก็คือการการข้อมูลของเรานะคะ จะเป็นการกระทำที่เกิดขึ้นกับตาราง หรือความสัมพันธ์นะคะ ที่เราสร้างตารางใหม่ขึ้นมาะคะ มันจะเป็นแบบจำลองของการกระทำต่าง ๆ ที่อาจจะเกิดขึ้นกับข้อมูลในฐานข้อมูลของเรานะคะ ซึ่งส่วนมากจะเป็นการกระทำพื้นฐานนะคะ โดยมันจะมีอยู่ 2 กลุ่ม คือแบบดั้งเดิม กับแบบพิเศษ จะเป็นอย่างละ 4 ตัวนะคะ แบบดั้งเดิมก่อนนะคะ ภาษาอังกฤษก็คือ Traditional นะคะ ก็จะเป็นการกระทำที่เกิดขึ้นกับตารางหรือความสัมพันธ์ โดยอาศัยทฤษฎีของเซต ซึ่งเราเคยเรียนเซตมาแล้วในวิชาคณิตศาสตร์นะคะ โดยที่ตารางหรือความสัมพันธ์ที่เกิดขึ้นนี่ จะมีการกระทำนะคะ ต้องมี Attribute ก็คือในตารางจะต้องมีข้อมูลเกิดขึ้น เช่นตาราง นักศึกษาก็จะมี Attribute หรือว่าข้อมูลที่เรามีก็คือชื่อนามสกุลเป็นต้น การกระทำของกลุ่มที่เป็นแบบดั้งเดิมจะมีอยู่ 4 อย่าง มี product มี Unionมี อินเตอร์เซคแล้วก็มีประเด็น วันนี้จะต้องเป็นภาษาอังกฤษเพราะว่าคำสั่งในระบบจัดการฐานข้อมูลก็จะเป็นภาษาอังกฤษ ประมาณนี้นะคะ อันแรก Product นะคะ เป็นการกระทำที่ให้มันแสดงข้อมูลทุก ๆ บรรทัด หรือทุก ๆ Record ที่เรามีที่สามารถเป็นไปได้โดยการจับคู่ผลคูณ Cartesian นี่ก็เป็นคณิตศาสตร์อย่างง่ายคำสั่งของภาษาที่ใช้ในการจัดการฐานข้อมูลจะ ใช้คำว่า "Times" นะคะ T-i-m-e-s รูปแบบของมันก็คือในกรอบสี่เหลี่ยมนะคะ ก็คือเอาเองกับบีมันมาคูณกัน เดี๋ยวจะมีตัวอย่างให้ดู อย่างเช่นตัวอย่างนะคะ เดี๋ยวอาจารย์เขียนให้ดูก่อน เมื่อกี้ a กับ B นี่ ถ้าคำสั่ง product หรือคำสั่งค่าในฐานข้อมูลในระบบจัดการฐานข้อมูล ใช้คำสั่ง Time เอาทุกตัวเป็นไปได้มาคูณ กัน a คูณ x a คูณ y ใช่ไหมคะ ตัวนี้ ตัวนี้ B x X B x Y คำสั่งนี้จริง ๆ จับคู่ทุกตัวที่เป็นไปได้นะคะ อันนี้จะยังง่ายอยู่ ยังไงอยู่ยังอีกเหมือนในตัวอย่างค่ะ มีตาราง A ตาราง B สั่งให้มันคุณกานต์ก็คือเป็น a time B ผลลัพธ์ที่ได้ก็จะเป็นทุกตัวที่ a กับ B มันสามารถจับคู่กันได้นะคะ คำสั่งนี้จะง่าย มันก็คือ 3 * 3 ได้ 9 ต้องได้ 9 Records 9 แถวนั้่นเองถ้าจะเช็กแนวข้อสอบ ก็ไม่ออกนะนะคะ อันนี้ยังง่ายอยู่ ต่อมา การ Union อันนี้ก็เป็นทฤษฎีเซตเหมือนกันก็จะเป็นการรวมกันของข้อมูล 2 ตารางหรือว่า 2 Relation เพื่อแสดงข้อมูลทุก ๆ เรื่องของเรื่องคือทุก ๆ แถว ในรูปแบบของยูเนี่ยนตามทฤษฎีของเซต คำสั่งก็คือ Union นะคะ a Union b คือเอา A กับบีมารวมกันตัวนี้มีตาราง a กับตาราง B ทฤษฎีเซตของยูเนี่ยนนะคะ จะสังเกตได้ว่าข้อมูลมันมีข้อมูลซ้ำกัน อย่างข้อมูล s1 ตาราง A ก็มี ตาราง B ก็มี ตามทฤษฎียูเนี่ยนนะคะ ถ้ามันซ้ำกันเราก็เอามาแค่ข้อมูลเดียว จะเห็นว่าจากสี Record ก็คือสีแถวข้อมูลนะคะ แต่ว่าอันเนี้ยกำลังเอกก็มี ตาราง Bก็มีมันซ้ำกันเราจะนับเป็นแค่ 1 ข้อมูลเท่านั้นนะคะ พอมันเอามา Union กันข้อมูลจาก 4บรรทัดจะเหลือแค่ 3 บรรทัดเพราะว่า s1 ไม่มีทั้ง 2 ตารางก็คือ a b เลย Union นะคะ ส่วนที่ทับซ้อนกันก็เอาแค่ข้อมูลเดียว Intersection ก็ตามทฤษฎีเซตเหมือนกันค่ะ มันจะเป็นการกระทำเพื่อแสดงข้อมูลของตารางหรือ Record เล็กคอร์ที่ปรากฏอยู่ทั้ง 2 ตาราง ที่มันทับซ้อนกันนั่นแหละในรูปแบบของ intersection ตามทฤษฎีของเซต คำสั่งก็คือ INTERSECT ให้ a INTERSECT b ตัวอย่างตารางเดิมเลยค่ะ ให้ A กับ B ข้อมูลไหนที่ทับซ้อนกัน คือข้อมูล s1 มันมีทั้ง 2 ตาราง ตาราง A กับกระบี่ เราจะแสดงผลเฉพาะตารางที่มันทับซ้อนกันเท่านั้นเพราะฉะนั้นคำสั่งA INTERSECT B จะมีผลลัพธ์แค่ 1 record เท่านั้น ก็คือทฤษฎีของเซตนะคะ ต่อมา Differenceเรามก็เป็นการกระทำเพื่อแสดงข้อมูลของแถวนั้น ๆ ที่ปรากฏอยู่ในตาราง 1 แปลตาราง 1 ไม่มีนะคะ ก็คืออะไรก็ตามที่อยู่ในตารางนั้น แต่ไม่อยู่กับอีกตาราง 1 คำสั่งที่ใช้คือคำสั่ง MINUS แต่เป็นภาษาไทยคือเครื่องหมายลบแล้วนี่ ไม่เอาอย่างเช่นที่อยู่ใน a แต่ไม่อยู่ใน B เมื่เหมือนตัวที่ทำไฮไลท์สีเหลืองไว้ไปนั่งดื่มด้วยค่ะ ให้คำสั่ง A MINUS B อะไรที่อยู่ในเอเชียไม่อยู่ในบีอันนี้ไม่ใช่แน่นอนเพราะ s1 มีทั้ง a ทั้ง B เพราะฉะนั้น MINUS B ก็จะเป็น S4 ในทางกลับกันค่ะ B MINUSก็คืออยู่ในบีแต่ไม่อยู่ใน Aอยู่ดี ๆ S2 S1 ไม่ได้ s1 อยู่ในเองเหมือนกันในทางกลับกันจะเป็นแบบนี้นะคะ ขึ้นอยู่กับว่าเราจะเอาข้อมูลจากตารางไหนเราจะเอาข้อมูลในวันข้างหน้าถ้าอยู่ใน a ไม่อยู่ใน B จะเป็นแบบนี้ จะเขียนแบบนี้นะคะ แต่ถ้าอยู่ใน B ไม่อยู่ใน a ก็จะเขียนขึ้นต้นด้วย B นำหน้าแบบนี้ ไม่ใช่ว่าทุกตารางจะชื่อเองกับบีนะคะ แล้วแต่ว่าตารางที่นักศึกษาได้ทำ มันชื่อตารางอะไร อย่างเช่นตาราง Student Student แล้วก็ MINUS A ก็ได้นะคะ อยู่ในตาราง student แต่ไม่อยู่ในร้าน Address ว่าไปนะคะ ต่อมาจะเป็นตัวดำเนินการแบบพิเศษนะคะ เป็น Special ซึ่งมันจะแตกต่างจากรูปแบบการทำงานของเซต โดยทั่วไปนะคะ โดยการกระทำของกลุ่มที่จะเป็น Special หรือแบบพิเศษนี่ ไม่จำเป็นจะต้องมีจำนวน Attribute เท่ากัน Attribute คืออะไร คือตัวนี้ คอลัมน์นะคะ ถ้าเป็นแบบ Credit analyst นี่ คอลัมน์ทั้ง 2 ตาราง 13 ตารางต้องเท่ากันเท่านั้น ถ้าเป็น Special คือ คอลัมน์หรือ senior ไม่จำเป็นจะต้องมีจำนวนเท่ากันไม่จำเป็น ซึ่งคำสั่งพวกนี้นี่ จะถูกเรียกใช้บ่อย เพราะว่าฐานข้อมูล ข้อมูลอาจจะมีตารางที่บรรจุอยู่ อาจจะมีรูปแบบที่แตกต่างกันไปนะคะ โดยถึงแม้มันจะไม่มี Attribute ที่เท่ากัน ไม่เท่ากันนั่นแหละ แต่ Attributeของทั้ง 2 ตารางจะถูกนำมาใช้จะต้องมีเงื่อนไข ต้องมีชื่อโดเมนของข้อมูลชื่อเดียวกัน ชื่อคอลัมน์เดียวกันอาจจะเป็นชื่อตารางใด ๆ ในตารางนั้น อาจจะมีอีกตารางหนึ่งมี 8 คอแต่จะต้องมีสิ่งที่เราจะเอามาดำเนินการนี่ ชื่อคอลัมน์จะต้องเหมือนกันนะคะ คำสั่งจะมีอยู่ 4 คำสั่งด้วยกัน อันแรกคำสั่งRestrict หรือถ้าในระบบจัดการฐานข้อมูลภาษาที่ใช้ภาษา SQL เราจะใช้คำสั่งเรียกว่า Select oะคะ เดี๋ยวประมาณอีก 2 สัปดาห์ 0tต้องได้พิมพ์ ลองทำโค้ดภาษา SQL ดู ซึ่งการกระทำเพื่อแสดงข้อมูลใน Record ของตารางนั้น ๆ จะต้องตรงตามเงื่อนไขที่ระบุเงื่อนไขที่ใช้จะใช้คำว่า WHERE นะคะ เช่น A WHERE X operator Y อันนี้เป็นต้นนะคะ เดี๋ยวตอนที่เราทำโปรแกรมจริง ๆ นี่ นักศึกษาจะเห็นภาพได้เข้าใจมากกว่านี้ อันนี้เป็นแค่การเกริ่นก่อนเฉย ๆ นะคะ ว่าเราจะต้องเจอคำสั่งพิเศษอะไรบ้าง ในการจัดการฐานข้อมูล ตัวอย่างเดิมค่ะ ตาราง a กับ b ตัวอย่างอาจารย์อาจจะเห็นว่าเอ๊ะ Column มันก็ยังเท่ากันนี่ แต่ก็เพื่อให้เห็นภาพที่ชัดเจนนะคะ อาจารย์จะเลยจะยังยกตัวอย่างเป็นแบบนี้ก่อน พอใช้คำสั่ง Select หรือ Restrict นะคะ จะต้องมาคู่กับคำว่าเสมอ อย่างเช่น ขึ้นต้นด้วยดีก็คือในตาราง B ให้ดูที่เงื่อนไข ตรงนี้แปลว่าชื่อเมืองนะคะ ในตาราง B ค่าของ Column City อันไหนที่มีค่าเท่ากับ Chai Nat เราก็ดูเลยค่ะ ตาราง B City Chai Nat นะคะ พอดีว่า City เท่ากับชัยนาทผลลัพธ์ที่ได้จะต้องแสดงผลลัพธ์ของTF2 ทั้งหมดนะคะ เงื่อนไข ก็คือในตาราง B จังหวัดข้อมูลอะไรที่มีข้อมูลว่าชัยนาท เราต้องยกมาทั้งหมดมาแสดงผล ต่อมา เป็น Projectนะคะ ก็จะเป็นการเลือกข้อมูลทุก ๆ แถว โดยเลือกมาเพียงแค่บางคอลัมน์ เช่นอาจารย์อยากดูแค่รหัสนักศึกษากับชื่อ ก็แสดงผลแค่ชื่อกับรหัสนักศึกษา โดยที่ในตารางข้อมูลศึกษาอาจจะมีคอลัมน์ประมาณ 20 คอลัมน์ก็ได้ แต่อาจารย์อยากดูแค่ 2 คอลัมน์นี้เท่านั้น เราจะใช้คำสั่งที่เกี่ยวข้องกับการเรียกดูข้อมูล คือ มันจะเป็นคำสั่งเกี่ยวกับการทำ Project นั่นเอง รูปแบบคำสั่งก็จะขึ้นต้นด้วยชื่อตารา ง แล้วตามด้วยเงื่อนไขนะคะ ตารางเดิมค่ะ ตารางเดิม คำสั่ง A ในวงเล็บ SName กับ Age นะคะ ก็คืออธิบายคือเอาข้อมูลในตาราง a เท่านั้น อยู่ใน Column Sname และคอลัมน์ผลลัพธ์ที่ได้แสดงผลแค่นี้จากตอนแรกมันมีแค่ 14 คอลัมน์ใช่ไหมคะ 1 2 3 4 อาจารย์ให้แสดงผลแค่ s name กับ age เท่านั้น นี่คือการทํางานของคําสั่ง project เผื่อจะมีเป็นร้อยคนละมาจากไหนจะเรียกดูแค่คอลัมน์ที่เราสนใจ เราจะใช้คำสั่ง projectนะคะ เดี๋ยวภาษาโปรแกรมยังมีอีกเยอะค่ะ นี่แค่ตัวอย่างคร่าว ๆ ก่อนนะ หรืออย่างเช่น ผลลัพธ์ทำไมมันโชว์แค่รหัส s1 คำสั่งที่จะต้องใช้คืออะไร เงื่อนไขของคำสั่งคือดูในตาราง B นะคะ โดยค่าของคอลัมน์ Cityมีค่าเท่ากับ Bangkok แล้วให้แสดงผลเฉพาะ S# เท่านั้น คือ อยากรู้แค่รหัสมีเมืองที่อยู่ในเมืองกรุงเทพฯ นะคะ ก็โชว์แค่ s1 เท่านั้น จากเมื่อก่อนนี้เรียกว่า Where City = bangkok ปกติแล้วมันแสดงข้อมูลทุก ๆ คนใช่ไหมคะ แต่ถ้าอาจารย์กำหนดให้มาแสดงแค่คอลัมน์ใดคอลัมน์หนึ่งเท่านั้น ก็สามารถทำได้ความสามารถของคำสั่ง project ประมาณคำสั่ง Join ค่ะ จะเป็นการกระทำเพื่อแสดงข้อมูลที่เป็นไปได้ทั้งหมด ซึ่งเกิดจากการเชื่อมโยงข้อมูลของ 2 ตารางขึ้นไป โดยที่กำหนดค่าคอลัมน์หรือว่า Attribute อยู่ที่เหมือนกัน อาจจะเป็นคอลัมเดียวหรือมากกว่าก็ได้นะคะ แต่ที่สำคัญคือคอลัมน์จะต้องชื่อเหมือนกันโดเมนของข้อมูลต้องเท่ากัน รูปแบบคำสั่งก็คือ A Join B มาดูตัวอย่างกัน Join นะคะ จะคล้าย ๆ กับ Union แต่เงื่อไขคือจะต้องมี Domain หรือว่า Column ที่เท่ากันถึงจะ ได้นะคะ อย่างตัวนี้มี 2 คอลัมมี 2 คอลัมน์รายการข้อมูลที่ทันซ้อนกัน จะอยู่ในรูปแบบคล้าย ๆ กับคำสั่ง UNION นะคะ เช่น ตัวนี้คำสั่งจอยมีอะไรที่เหมือนกัน City ใช่ไหมคะ A JOIN B อันนี้มี 6 คอลัมน์นะคะ 1 2 ตัวนี้ City เหมือนกัน แต่เนื่องจาก Attribute ที่มีคำว่า City เหมือนกันนี่ มันจะต้องดูพิจารณาใน Record ของรหัสด้วย เพราะฉะนั้น ถ้ามันเกินมามันเกินแล้วต้องทำข้อมูลซ้ำให้เกิดขึ้นอันนี้ก็จะเป็นอีก รูปแบบหนึ่งของการทำงาน คือ เติมข้อมูลเข้าไปนะคะ เพื่อให้ผลลัพธ์ที่ได้ในทุก ๆ Record นะคะ มีค่าAttribute ก็คือที่เท่ากันเดี๋ยวนี้เราจะไปดูอีกทีหนึ่งนะคะ ในตอนที่เราทำตัวโปรแกรมเลย ต่อมาจะเป็นการแสดงข้อมูลจาก 2 Relation โดยที่ Relหรือว่าทั้งสองตารางเนี่ยมีแอตทริบิวต์หรือรอบมีคอลัมน์เนี่ยอย่างน้อย 1 คอลัมน์ที่เหมือนกันผลลัพธ์จากคอลัมน์นะคะ จากตารางที่มีจำนวนอธิบายมากกว่านี่ จะถูกจับคู่คอลัมน์หนึ่งที่มีคอลัมน์ของตารางที่มีคอลัมน์น้อยกว่า คำสั่งรูปแบบก็คือ A DIVIDED BY B มันจะเป็นคล้าย ๆ กับการหารนะคะ คำสั่งตัวนี้ การเป็นตัวหารนะคะ ต้องเป็น Sub set ของตัวตั้ง ก็คือในตัวตั้งมี a ไหม มี มี b ไหม มี ไหมมี รับทุกตัวคือตัวที่แมทกับตัวหารอะไรบ้าง ที่อยู่ใน มี มีแค่ X C มีแค่ x เพราะฉะนั้น สิ่งที่เอา ABC หารได้ครบทุกตัวมีแค่ x ตัวเดียว ก็คือตรงตามเงื่อนไขทั้งหมดนะคะ เราอาจจะมีการตั้งเงื่อนไขมา แล้วมีแค่ X ตัวเดียวเท่านั้น ที่เข้าตรงทุกเงื่อนไข 3 เงื่อนไขที่เราตั้งไว้ อันนี้จะใช้ตอนที่เราค้นหาข้อมูลอย่างเช่นใน Google นะคะ อาจารย์อยากได้กระเป๋าสีแดง มี 6 ล้อลาก เงื่อนไขอยากได้กระเป๋าสีแดง มี 6 ล้อ อาจจะมีผลลัพธ์ที่ตรงตามเงื่อนไขที่อาจารย์ต้องการแค่อย่างเดียวเท่านั้น เป็นต้น นะคะ เป็นต้น อย่างเช่น ตัวอย่าง มีข้อมูลนะคะ ในตาราง A มีข้อมูลตามนี้ ตาราง B มีคอลัมน์เดียว คือ ตัวนี้ p2 ให้A DIVIDED BY B ก็คือมีข้อมูล P2 อยู่ในชุดข้อมูลอะไรบ้าง ของ A2 อันนี้ P2 อันนี้ P2 เพราะฉะนั้น ผลลัพธ์ที่ได้จะมีแค่ 2 Record เท่านั้น ที่มี P2 อยู่ด้วย อันนี้เข้าใจยัง ตรงตามเงื่อนไข ถ้าเพิ่มอีก มี B P1 P2 P3 P6 S2 มีแค่นี้มีส่ง S4 มีแค่นี้ไม่ตรงมีที่ตรงแค่ s1 เท่านั้น ที่เอา B ทุกตัว หารได้ลงตัว อันนี้คือหลักการนะคะ ปัญหานั่นแหละ ต้องหาลงตัวนะคะ วันนี้จะประมาณนี้ เพราะว่าเดี๋ยวอาจจะให้เช็กโปรแกรมค่ะ เนื้อหาจะมีแค่นี้ เดี๋ยวจะเช็กในห้อง Lab ว่าโปรแกรมที่จะใช้สมบูรณ์หรือเปล่า ก็วันนี้ก็น่าจะเนื้อหตะประมาณนี้ค่ะ เพราะเดี๋ยวจะให้เช็กโปรแกรมในห้องเรียนนะคะ เนื้อหานิดหนึงเพราะว่าหลังปีใหม่ขอเช็คโปรแกรมก่อนสัปดาห์หน้าอาจจะเริ่มใช้โปรแกรม อาทิตย์นี้ก็เลยเดี๋ยวเนื้อหาจะหมดเท่านี้ เดี๋ยวเรามาเช็กดูว่าห้องเรียนเราใช้โปรแกรมได้หรือเปล่านะคะ วันนี้ก็ขอบคุณล่ามกับขอบคุณถอดความด้วยนะคะ ประมาณนี้ค่ะ เพราะว่าเดี๋ยวเช็คห้องแลปก่อนขอบคุณมากค่ะ