(อาจารย์เกวลี) เดี๋ยวเริ่มเลยแล้วกันนะคะ วันนี้จะเป็นบทที่ 7 หลังปีใหม่ สไลด์จะไม่เยอะนะคะ นิดเดียว แล้วก็วันนี้ไม่มีการบ้านนะคะ ไม่มีการบ้าน เฉพาะอาทิตย์นี้เท่านั้นนะคะ ถือว่าให้ปีใหม่ บทนี้นะคะจะเป็นเกี่ยวกับพีชคณิตเชิงสัมพันธ์ก็จะเป็นกระบวนการ โดยใช้คณิตศาสตร์อย่างง่ายนะคะที่เอามา เป็นตัวกระทำในการจัดการฐานข้อมูลของเราด้วย โดยพีชคณิตเชิงสัมพันธ์นะคะ หรือว่าเป็นเกี่ยวกับโครงสร้างในการ Query ข้อมูล ก็คือการจัดการข้อมูลของเรานะคะ จะเป็นการกระทำที่เกิดขึ้นกับตารางหรือความสัมพันธ์นะคะ ที่เราสร้างตารางใหม่ขึ้นมานะคะ มันจะเป็นแบบจำลองของการกระทำต่าง ๆ ที่อาจจะเกิดขึ้น กับข้อมูลในฐานข้อมูลของเรานะคะ ซึ่งส่วนมากจะเป็นการกระทำพื้นฐานนะคะ โดยมันจะมีอยู่ 2 กลุ่มคือแบบดั้งเดิมกับแบบพิเศษ จะเป็นอย่างละ 4 ตัวนะคะ แบบดั้งเดิมก่อนนะคะ ภาษาอังกฤษก็คือ Traditional นะคะ ก็จะเป็นการกระทำที่เกิดขึ้นกับตารางหรือความสัมพันธ์ โดยอาศัยทฤษฎีของเซต ซึ่งเราเคยเรียนเซตมาแล้วในวิชาคณิตศาสตร์นะคะ โดยที่ตารางหรือความสัมพันธ์ที่เกิดขึ้นนี่ จะมีการกระทำนะคะ จะต้องมี Attribute ก็คือในตารางจะต้องมีข้อมูลเกิดขึ้นใช่ไหมคะ เช่นตารางนักศึกษา ก็จะมี Attribute หรือว่าข้อมูลที่เรามีก็คือ รหัสนักศึกษาชื่อนามสกุล เป็นต้นนะคะ การกระทำของกลุ่มที่เป็นแบบดั้งเดิมนะคะ จะมีอยู่ 4 อย่าง มี Product มี Union มี Intersection แล้วก็ Difference อันนี้จะต้องเป็นภาษาอังกฤษนะคะ เพราะว่าคำสั่งในระบบจัดการฐานข้อมูล ก็จะเป็นภาษาอังกฤษประมาณนี้นะคะ อันแรก Product นะคะ เป็นการกระทำที่ให้มันแสดงข้อมูลทุก ๆ บรรทัด หรือทุก ๆ Record ที่เรามีนะคะ ที่สามารถเป็นไปได้โดยการจับคู่แบบผลคูณ Cartesian นะคะ อันนี้ก็เป็นคณิตศาสตร์อย่างง่ายนะคะ คำสั่งของภาษาที่ใช้ในการจัดการฐานข้อมูลจะใช้คำว่า TIMES นะคะ T-I-M-E-S รูปแบบของมันก็คือในกรอบสี่เหลี่ยมนะคะ A TIMES B ก็คือเอา A กับ B มันมาคูณกันนะคะ เดี๋ยวจะมีตัวอย่างให้ดู อย่างเช่น ตัวอย่างนะคะ เดี๋ยวอาจารย์เขียนให้ดูก่อน เมื่อกี้ A กับ B A B ถ้าคำสั่ง Product หรือคำสั่งถ้าในฐาน... ในระบบจัดการฐานข้อมูลนี่ใช้คำสั่ง TIMES ก็คือเอาทุกตัวที่เป็นไปได้มาคูณกัน a คูณ x a คูณ y ใช่ไหมคะ ตัวนี้ ๆ b คูณ x คูณ y ก็จะเป็น bx by cx cy คำสั่งนี้จะง่ายนะคะ ก็คือ จับคู่ทุกตัวที่เป็นไปได้ นะคะ อันนี้จะยังง่ายอยู่ ตัวอย่างอีกนะคะ เหมือนในตัวอย่างค่ะ มีตาราง A นะคะ มีตาราง B นะคะ ถ้าสั่งให้มันคูณกันก็คือเป็น A TIMES B ผลลัพธ์ที่ได้ ก็จะเป็นทุกตัวที่ A กับ B มันสามารถจับคู่กันได้นะคะ คำสั่งนี้จะง่าย มันก็คือ 3 x 3 ได้ 9 ต้องได้ 9 Record 9 แถวนั่นเองนะคะ ถ้าจะเช็ก ในข้อสอบก็มีออกนะ นะคะ อันนี้ยังง่ายอยู่ ต่อมา การ Union อันนี้ก็เป็นทฤษฎีเซตเหมือนกันนะคะ ก็จะเป็นการรวมกันของข้อมูล 2 ตารางหรือว่า 2 Relation นะคะ เพื่อแสดงข้อมูลทุก ๆ Record ก็คือทุก ๆ แถว ในรูปแบบของ Union ตามทฤษฎีของเซต คำสั่งก็คือ UNION นะคะ A UNION B ก็คือเอา A กับ B มารวมกันนะ อย่างเช่นตัวนี้ มีตาราง A กับตาราง B ทฤษฎีเซตของ Union นะคะ จะสังเกตได้ว่าข้อมูลมันมีข้อมูลซ้ำกัน อย่างข้อมูล S1 ตาราง A ก็มี ตาราง B ก็มี ตามทฤษฎี Union นะคะ ถ้ามันซ้ำกันเราก็เอามาแค่ข้อมูลเดียวนะคะ จะเห็นว่าจาก 4 Record ก็คือ 4 แถวข้อมูลนะคะ แต่ว่าอันนี้ ตาราง A ก็มี ตาราง B ก็มีมันซ้ำกัน เราจะนับเป็นแค่ 1 ข้อมูลเท่านั้นนะคะ พอมันเอามา Union กัน ข้อมูลจาก 4 บรรทัดจะเหลือแค่ 3 บรรทัดเพราะว่า S1 มันมีอยู่ทั้ง 2 ตารางก็คือ A กับ B เลย ตามทฤษฎี Union นะคะ ส่วนที่ทับซ้อนกันก็เอาแค่ข้อมูลเดียว ต่อมา Intersection ก็ตามทฤษฎีเซตเหมือนกันค่ะ มันจะเป็นการกระทำเพื่อแสดงข้อมูลของตารางหรือ Record นะคะ ที่ปรากฏอยู่ทั้ง 2 ตาราง ที่มันทับซ้อนกันนั่นแหละนะคะ ในรูปแบบของ Intersection ตามทฤษฎีของเซต คำสั่งก็คือ INTERSECT นะคะ ให้ A INTERSECT B นะคะ ตัวอย่างจากตารางเดิมเลยค่ะ A กับ B ข้อมูลไหนที่ทับซ้อนกัน คือข้อมูล S1 มันมีทั้ง 2 ตาราง ตาราง A กับตาราง B เราจะแสดงผลเฉพาะตารางที่มันทับซ้อนกันเท่านั้น นะคะ เพราะฉะนั้นคำสั่ง A INTERSECT B จะมีผลลัพธ์แค่ 1 Record เท่านั้นก็คือ S1 ตามทฤษฎีของเซตนะคะ ต่อมา Difference นะคะ ก็เป็นการกระทำเพื่อแสดงข้อมูลของแถวนั้น ๆ ที่ปรากฏอยู่ในตารางหนึ่ง แต่อีกตารางหนึ่งไม่มีนะคะ ก็คือ อะไรก็ตามที่อยู่ในตารางนั้น แต่ไม่อยู่กับอีกตารางหนึ่ง คำสั่งที่ใช้คือคำสั่ง MINUS แปลเป็นภาษาไทยก็คือเครื่องหมายลบนั่นเอง ไม่เอานะคะ อย่างเช่น A MINUS B ก็คืออยู่ใน A แต่ไม่อยู่ใน B นะคะ ก็คือเหมือนตัวที่อาจารย์ทำไฮไลท์สีเหลืองไว้นะ ตารางเดิมเลยค่ะ ให้คำสั่ง A MINUS B อะไรที่อยู่ใน A แต่ไม่อยู่ใน B อันนี้ไม่ใช่แน่นอน เพราะ S1 มีทั้ง A ทั้ง B เพราะฉะนั้น A MINUS B ก็จะเป็น S4 ในทางกลับกันค่ะ B MINUS A ก็คืออยู่ใน B แต่ไม่อยู่ใน A นะคะ อยู่ใน B ก็คือ S2 เพราะว่า S1 ไม่ได้ S1 อยู่ใน A เหมือนกันนะคะ ในทางกลับกันจะเป็นแบบนี้นะคะ ขึ้นอยู่กับว่า เราจะเอาข้อมูลจากตารางไหน เราจะเอาข้อมูลมันไว้ข้างหน้านะคะ ถ้าอยู่ใน A ไม่อยู่ใน B จะเป็นแบบนี้ จะเขียนแบบนี้นะคะ แต่ถ้าอยู่ใน B ไม่อยู่ใน A ก็จะเขียนขึ้นด้วย B นำหน้าแบบนี้นะคะ ไม่ใช่ว่าทุกตารางจะชื่อ A กับ B นะคะ แล้วแต่ว่าตารางที่นักศึกษาได้ทำ มันชื่อตารางอะไร อย่างเช่น ตาราง Student Student แล้วก็ MINUS Address ก็ได้นะคะ อยู่ในตาราง Student แต่ไม่อยู่ในตาราง Address ก็ว่าไปนะคะ ต่อมาจะเป็นตัวดำเนินการแบบพิเศษนะคะเป็น Special ซึ่งมันจะแตกต่างจากรูปแบบการทำงานของเซตโดยทั่วไปนะคะ โดยการกระทำของกลุ่มที่จะเป็น Special หรือแบบพิเศษนี่ ไม่จำเป็นจะต้องมีจำนวน Attribute เท่ากัน Attribute คืออะไร Attribute คือตัวนี้ คอลัมน์นะคะ ถ้าเป็นแบบ Traditional Set นี่ คอลัมน์ทั้ง 2 ตารางหรือ 3 ตารางต้องเท่ากัน เท่านั้นนะคะ แต่ถ้าเป็น Special คือ คอลัมน์หรือ Attribute นี่ ไม่จำเป็นจะต้องมีจำนวนเท่ากันนะคะ ไม่จำเป็น ซึ่งคำสั่งพวกนี้นี่จะถูกเรียกใช้บ่อย เพราะว่าฐานข้อมูลแต่ละฐานข้อมูล อาจจะมีตารางที่บรรจุอยู่ มีรูปแบบที่แตกต่างกันไปนะคะ โดยถึงแม้มันจะไม่มี Attribute ที่เท่ากันก็คือคอลัมน์มันไม่เท่ากันนั่นแหละนะคะ แต่ Attribute ของทั้ง 2 ตารางจะถูกนำมาใช้ จะต้องมีเงื่อนไขนะคะ จะต้องมีชื่อ Domain ของข้อมูลชื่อเดียวกัน ก็คือชื่อคอลัมน์เดียวกัน อาจจะเป็นชื่อตารางใด ๆ ในตารางนั้นอาจจะมี 10 คอลัมน์ อีกตารางหนึ่งมี 8 คอลัมน์ แต่จะต้องมีสิ่งที่เราจะเอามาดำเนินการนี่ ชื่อคอลัมน์จะต้องเหมือนกันนะคะ คำสั่งจะมีอยู่ 4 คำสั่งด้วยกัน อันแรกคำสั่ง Restrict หรือถ้าในระบบจัดการฐานข้อมูลภาษาที่ใช้ภาษา SQL เราจะใช้คำสั่งเรียกว่า Select นะคะ เดี๋ยวประมาณอีก 2 สัปดาห์ จะต้องได้พิมพ์ ลองทำโค้ดภาษา SQL ดูนะคะ ซึ่งการกระทำเพื่อแสดงข้อมูลใน Record ของตารางนั้น ๆ จะต้องตรงตามเงื่อนไขที่ระบุนะคะ เงื่อนไขที่ใช้จะใช้คำว่า WHERE นะคะ เช่น A WHERE X operator Y อันนี้เป็นต้นนะคะ แต่เดี๋ยวตอนที่เราทำ ในโปรแกรมจริง ๆ นี่ นักศึกษาจะเห็นภาพได้เข้าใจมากกว่านี้ อันนี้เป็นแค่การเกริ่นก่อนเฉย ๆ นะคะว่า เราจะต้องเจอคำสั่งพิเศษอะไรบ้างในการจัดการฐานข้อมูล นะคะ ตัวอย่างเดิมค่ะ ตาราง A กับ B นะคะ ในตัวอย่างอาจารย์อาจจะเห็นว่าเอ๊ะคอลัมน์มันก็ยังเท่ากันนี่ แต่ก็เพื่อให้เห็นภาพได้ชัดเจนนะคะ อาจารย์จะเลยจะยังยกตัวอย่างเป็นแบบนี้ก่อน พอใช้คำสั่ง Select หรือ Restrict นะคะ จะต้องมาคู่กับคำว่า WHERE เสมอ อย่างเช่น ขึ้นต้นด้วย B ก็คือในตาราง B ให้ดูที่เงื่อนไข CITY CITY คือตรงนี้ แปลว่าชื่อเมืองนะคะ ในตาราง B ค่าของคอลัมน์ City อันไหนที่มีค่าเท่ากับ Chai Nat เราก็ดูเลยค่ะ ตาราง B City Chai Nat นะคะ พอเราพิมพ์ B WHERE CITY = ‘Chai Nat’ ผลลัพธ์ที่ได้จะต้องแสดงผลลัพธ์ของ Record ที่ S2 ทั้งหมด นะคะ เพราะว่าเงื่อนไขก็คือ ในตาราง B จังหวัด ข้อมูลอะไรที่มีข้อมูลว่า ‘Chai Nat’ นะคะ เราต้องยกมาทั้งหมดมาแสดงผล ต่อมาเป็น Project นะคะ ก็จะเป็นการเลือกข้อมูลทุก ๆ แถว โดยเลือกมาเพียงแค่บางคอลัมน์ เช่นอาจารย์อยากดูแค่รหัสนักศึกษากับชื่อ ก็แสดงผลแค่ชื่อกับรหัสนักศึกษา โดยที่ในตารางข้อมูลนักศึกษาอาจจะมีคอลัมน์ประมาณ 20 คอลัมน์ก็ได้ แต่อาจารย์อยากดูแค่ 2 คอลัมน์นี้เท่านั้น เราจะใช้คำสั่งที่เกี่ยวข้องกับการเรียกดูข้อมูล คือมันจะเป็นคำสั่งเกี่ยวกับการทำ Project นั่นเองนะคะ รูปแบบคำสั่งก็จะขึ้นต้นด้วยชื่อตารางแล้วตามด้วยเงื่อนไขนะคะ ตารางเดิมค่ะ ตารางเดิม คำสั่ง A ในวงเล็บ SName กับ Age นะคะ ก็คือ อธิบายก็คือ เอาข้อมูลในตาราง A เท่านั้น อยู่ในคอลัมน์ SName และคอลัมน์ Age ผลลัพธ์ที่ได้จะแสดงผลแค่นี้ จากตอนแรกมันมีแค่ มันมี 4 คอลัมน์ใช่ไหมคะ 1 2 3 4 อาจารย์ให้แสดงผลแค่ SName กับ Age เท่านั้น อันนี้คือการทำงานของคำสั่ง Project นะคะ คืออาจจะมีเป็นร้อย ๆ คอลัมน์ อาจารย์อาจจะเรียกดูแค่ คอลัมน์ที่อาจารย์สนใจ เราจะใช้คำสั่ง Project นะคะ เดี๋ยวภาษาโปรแกรมยังมีอีกเยอะค่ะ อันนี้แค่ตัวอย่างคร่าว ๆ ก่อนนะ หรืออย่างเช่น เอ๊ะ ผลลัพธ์ทำไมมันโชว์แค่รหัส S1 คำสั่งที่จะต้องใช้คืออะไร เงื่อนไขของคำสั่งคือ ดูในตาราง B นะคะ โดยค่าของคอลัมน์ City มีค่าเท่ากับ Bangkok แล้วให้แสดงผลเฉพาะ S# เท่านั้น คืออยากรู้แค่รหัสที่มีเมืองที่อยู่ในเมืองกรุงเทพฯ นะคะ ก็โชว์แค่ S1 เท่านั้น จากเมื่อก่อนนี้ที่อาจารย์บอกว่า WHERE CITY = Bangkok ปกติแล้วมันแสดงข้อมูลทุกทุกคอลัมน์ใช่ไหมคะ แต่ถ้าอาจารย์กำหนดให้มันแสดงแค่คอลัมน์ใดคอลัมน์หนึ่งเท่านั้น ก็สามารถทำได้นะคะ อันนี้คือความสามารถของคำสั่ง Project ต่อมาคำสั่ง Join ค่ะ จะเป็นการกระทำเพื่อแสดงข้อมูลที่เป็นไปได้ทั้งหมด ซึ่งเกิดจากการเชื่อมโยงข้อมูลของ 2 ตารางขึ้นไป โดยที่กำหนดค่าคอลัมน์หรือว่า Attribute ที่เหมือนกัน อาจจะเป็นคอลัมน์เดียวหรือมากกว่าก็ได้นะคะ แต่ที่สำคัญคือคอลัมน์จะต้องชื่อเหมือนกัน Domain ของข้อมูลต้องเท่ากัน รูปแบบคำสั่งก็คือ A Join B นะคะ มาดูตัวอย่างกัน Join นะคะ จะคล้าย ๆ กับ Union นะคะ แต่เงื่อนไขคือ จะต้องมี Domain หรือว่าคอลัมน์ที่เท่ากันถึงจะ Join ได้ นะคะ อย่างตัวนี้มี 2 คอลัมน์ อันนี้มี 2 คอลัมน์ พอ Join กันข้อมูลที่ทับซ้อนกัน จะอยู่ในรูปแบบคล้าย ๆ กับคำสั่ง Union นะคะ อย่างเช่นตัวนี้ คำสั่ง Join มีอะไรที่เหมือนกัน มี City ใช่ไหมคะ A Join B อันนี้มี 6 คอลัมน์นะคะ 1 2 ตัวนี้นะคะ City เหมือนกัน แต่เนื่องจาก Attribute ที่มีคำว่า City เหมือนกันนี่ มันจะต้องดูพิจารณาใน Record ของรหัสด้วยนะคะ เพราะฉะนั้นถ้ามันเกินมานะคะ มันเกินเราจะต้องทำข้อมูลซ้ำให้เกิดขึ้น อันนี้ก็จะเป็นอีกรูปแบบหนึ่งของการทำงานคือเติมข้อมูลเข้าไปนะคะ เพื่อให้ผลลัพธ์ที่ได้นี้ทุก ๆ Record นะคะ มีค่า Attribute ก็คือที่เท่ากัน เดี๋ยวอันนี้เราจะไปดูอีกทีหนึ่งนะคะ ในตอนที่เราทำตัวโปรแกรมเลย ต่อมาจะเป็นการแสดงข้อมูลจาก 2 Relation นะคะ โดยที่ Relation หรือว่าทั้ง 2 ตารางนี่ มี Attribute หรือว่ามีคอลัมน์นี่ อย่างน้อย 1 คอลัมน์ที่เหมือนกันนะคะ ผลลัพธ์จากคอลัมน์นะคะ จากตารางที่มีจำนวน Attribute มากกว่านี่ จะถูกจับคู่นะคะ กับอีกคอลัมน์หนึ่งที่อีกคอลัมน์ของตารางที่มีคอลัมน์น้อยกว่านะคะ คำสั่งรูปแบบก็คือ A DEVIDED BY B มันจะเป็นคล้าย ๆ กับการหารนะคะ คำสั่งตัวนี้ การเป็นตัวหารนะคะ จะต้องเป็น Sub set ของตัวตั้งนะคะ ก็คือในตัวตั้ง มี a ไหม มี มี b ไหม มี มี c ไหม มี นะคะ ผลลัพธ์ทุกตัวคือตัวที่ Match กับตัวหาร อะไรบ้างที่อยู่ใน A นะคะ A มี x y z B มีแค่ x C มีแค่ x เพราะฉะนั้น สิ่งที่เอา a b c หารได้ครบทุกตัว มีแค่ x ตัวเดียว ก็คือตรงตามเงื่อนไขทั้งหมดนะคะ เราอาจจะมีการตั้งเงื่อนไขมา แล้วมีแค่ x ตัวเดียวเท่านั้นที่เข้าตรงทุกเงื่อนไข 3 เงื่อนไขที่เราต้องตั้งไว้ หลักการนี้จะใช้ตอนที่เราค้นหาข้อมูลอย่างเช่นใน Google นะคะ อาจารย์อยากได้กระเป๋าสีแดง มี 6 ล้อลาก เงื่อนไข อยากได้กระเป๋าสีแดง มีล้อ 6 ล้อ อาจจะมีผลลัพธ์ที่ตรงตามเงื่อนไขที่อาจารย์ต้องการแค่อย่างเดียวเท่านั้น เป็นต้นนะคะ เป็นต้น เช่นตัวอย่าง มีข้อมูลนะคะ ในตาราง A มีข้อมูลตามนี้ ตาราง B มีคอลัมน์เดียวคือตัวนี้ P2 ให้ A DEVIDED BY B ก็คือ มีข้อมูล P2 อยู่ในชุดข้อมูลอะไรบ้างของ A อันนี้ P2 อันนี้ P2 เพราะฉะนั้นผลลัพธ์ที่ได้จะมีแค่ 2 Record เท่านั้น ที่มี P2 อยู่ด้วยนะคะ อันนี้ก็จะยังตรงตามเงื่อนไขนะคะ ถ้าเพิ่มอีกนะคะ B P1 P2 P3 P6 S2 มีแค่นี้ ไม่ตรง S3 มีแค่นี้ ไม่ตรง S4 มีแค่นี้ ไม่ตรง มีที่ตรงแค่ S1 เท่านั้นที่เอา B ทุกตัวหารได้ลงตัว อันนี้คือหลักการนะคะ ก็คือการหารนั่นแหละ ต้องหารลงตัวนะคะ วันนี้จะประมาณนี้เพราะว่าเดี๋ยว อาจจะให้เช็กโปรแกรมค่ะล่าม เนื้อหาจะมีแค่นี้ เดี๋ยวจะเช็กในห้องแล็บว่า โปรแกรมที่จะใช้สมบูรณ์หรือเปล่า ก็วันนี้ก็น่าจะเนื้อหาจะประมาณนี้ค่ะเพราะเดี๋ยวจะให้เช็กโปรแกรมในห้องเรียนนะคะ ก็เลยสั้นนิดหนึ่ง เพราะว่าหลังปีใหม่ขอเช็กโปรแกรมก่อน สัปดาห์หน้าอาจจะเริ่มใช้โปรแกรม อาทิตย์นี้ก็เลยเดี๋ยว เนื้อหาจะหมดเท่านี้ แล้วเดี๋ยวเรามาเช็กดูว่าห้องเรียนเราใช้โปรแกรมได้หรือเปล่านะคะ วันนี้ก็ขอบคุณล่ามค่ะ กับขอบคุณถอดความด้วยนะคะประมาณนี้ค่ะ เพราะว่าเดี๋ยวเช็กห้องแล็บก่อน ขอบคุณมากค่ะ [สิ้นสุดการถอดความ]