ภาษา SQL

เริ่มโพสต์โดย เทอร์โบบูสเตอร์, 05 ก.ค. 2006, 14:53 น.

0 สมาชิก และ 1 บุคคลทั่วไป กำลังเปิดอ่านโพสต์นี้

Soris0ri

Las Noches Rubicundior

JΛNΣ

table User
id    name       sex_id
1     Knot          1
2     Ann           2
3     Kor            1
4     Sorisori      NULL
5     NULL         2
6     NULL         3
7     Gums       3

table Sex
id     Sex
1      Male
2      Female
5      Unknow

select u.name, s.sex from User u inner join Sex s on u.sex_id = s.id
ได้
Knot     Male
Ann     Female
Kor     Male
Null     Female

select u.name, s.sex from User u left join Sex s on u.sex_id = s.id
ได้
Knot     Male
Ann         Female
Kor          Male
Sorisori    NULL
NULL    Female
NULL    NULL
Gums    NULL

select u.name, s.sex from User u right join Sex s on u.sex_id = s.id
ได้
Knot     Male
Kor         Male
Ann        Female
NULL    Female
NULL    Unkonw


จำง่ายๆ
inner join : จะเอามาเฉพาะ record ที่เข้าเงื่อนไขเท่านั้น
left join : เอาข้อมูลทั้งหมดของ table User มาไว้ก่อน แล้วลิสต์ข้อมูลจาก table Sex ที่ตรงเงื่อนไขมาวางต่อท้าย (จะเห็นว่า เอามาทุก record ของ table User แม้ว่า sex_id จะเป็น Null ก็ตาม)
right join : เอาข้อมูลทั้งหมดของ table Sex มาไว้ก่อน แล้วลิสต์ข้อมูลจาก table User ที่ตรงเงื่อนไขมาวางไว้ข้างหน้า


นานๆ วิชาการที เขียนตั้งนาน ไม่รู้เข้าใจกันรึเปล่า  :30a: :30a:

โต

คุยอะไรกัน  :30:
select * from ... where ... โลดด. .ด . ด :56:

JΛNΣ

เคยเจอ SQL ที่ทำงานเก่า
query เดียว ยาวมากกกก ลองก๊อบมาใส่ word ได้เกือบ 2 หน้า   :30:

กากก่อเกรียนนู้บ

 :07: ขอบคุณพี่เจนมากๆ ครับ  :46:
ในที่สุดก็เข้าใจ..

ว่าแต่ทำไม inner join มันได้ผลลัพธ์แค่นั้นอะครับ?

เอ๊ะ หรือว่า เพราะ sex_id ไม่มีในตาราง sex ครับ?

กวางจ้ะ

#125
อ้างคำพูดจาก: นายก่อ เมื่อ 17 ก.พ. 2009, 18:43 น.
ว่าแต่ทำไม inner join มันได้ผลลัพธ์แค่นั้นอะครับ?

เอ๊ะ หรือว่า เพราะ sex_id ไม่มีในตาราง sex ครับ?
ถูกต้องนะคร้าบ

อ้างคำพูดจาก: JanΣ เมื่อ 17 ก.พ. 2009, 18:05 น.
select u.name, s.sex from User u inner join Sex s on u.sex_id = s.id

** ดูในเงื่อนไขดี ๆ อ่ะจะจับจุดได้จ้ะ

กากก่อเกรียนนู้บ

 :07: อ๊ะ มองข้าม..
ขอบคุณครับๆๆ  :46:

บวกให้พี่เจนกะพี่กวางครับ  :42:

☼ แอนมินิ ☼

นั่นแหละๆ แบบที่พี่เจนกับกวางอธิบายเลย  :33:

น็อต

เคลียร์เลยครับพี่เจน  :12:

อย่างงี้ที่ผมเขียนไป มิน่าถึงมี row เกินที่ที่มันควรจะเป็น (เลยแก้ปัญหาเฉพาะหน้าด้วยการใช้ WHERE ดัก)

ต้องเปลี่ยนมาใช้ INNER แล้ว

ขอบคุณมากครับ  :46:
.. What you think, you are ..

~ZephyR~

#129
inner join
natural join
join


สามอันข้างต้น คืออันเดียวกันหมดเลยครับ ต่างกันอยู่นิดหน่อย

inner join -> ชื่อนี้ มาจาก outer join นั่นแหละ ครับ มันจะได้สอดคล้องกันหน่อย

ตัวอย่างครับ (เอามาจากพี่เอ)
อ้างคำพูดจาก: เอา เมื่อ 16 ก.พ. 2009, 19:50 น.
select p.name, p.surname, s.sex_type
from personal p
  inner join sex s
  on (p.sex_id = s.sex_id)

natural join -> การ join แบบธรรมชาติ อันนี้ไม่ต้องใส่อะไรเลย ตัว dbms จะจัดการ
เชื่อมตารางโดยใช้ field (หรือ attribute) ตัวเดียวกันในการ join. ให้เอง

ตัวอย่างครับ
อ้างอิงselect p.name, p.surname, s.sex_type
from personal p
  natural join sex s <<< เห็นว่า ไม่ต้องมี on (p.sex_id = s.sex_id) แล้วชื่อจะตั้งหรือไม่ตั้งก็ได้

join -> เขียนให้เหลือสั้นๆ เฉยๆ ใช้เหมือน inner join เลยครับ

ตัวอย่างครับ
อ้างอิงselect p.name, p.surname, s.sex_type
from personal p
  join sex s
  on (p.sex_id = s.sex_id)

หรือ

อ้างอิงselect p.name, p.surname, s.sex_type
from personal p
  join sex s
  using sex_id



อ๊ะ ลืมไป
natural join เนี่ย จะใช้ได้ ชื่อ field จะต้องเหมือนกันนะครับ
อย่าง sex_id ก็ต้องเป็น sex_id ทั้ง 2 ตาราง


เอ๊ะ แล้วถ้าชื่อไม่เหมือนกันทำยังไง???

ไม่ยากครับใช้ join หรือ inner join นั่นแหละ
เช่นใน รีเลชัน personal เป็น SexID แล้วใน รีเลชัน sex เป็น sex_id
ก็จะได้แบบนี้

อ้างอิงselect p.name, p.surname, s.sex_type
from personal p
  join sex s
  on (p.SexID = s.sex_id)


นึกเพิ่มได้อีกหน่อย

left join กับ right join จริงๆ คือตัวเดียวกัน และมักใช้ left join เพราะใช้สะดวกกว่า

(ยืมข้อมูลจากลุงเจน หน่อยนะครับ)
อ้างคำพูดจาก: JanΣ เมื่อ 17 ก.พ. 2009, 18:05 น.
select u.name, s.sex from User u right join Sex s on u.sex_id = s.id

หรือ เลี่ยงไปใช้ left join เพียงอย่างเดียว

select u.name, s.sex from Sex s left join User u on s.id = u.sex_id
ได้
Knot     Male
Kor         Male
Ann        Female
NULL    Female
NULL    Unkonw

เกือบลืมไปเลยว่าเคยแนะนำตัว

pitchapron

ใครก็ได้ช่วยหน่อยนะคะ เพราะว่าสร้างเว็บไม่เป็นค่ะท่าน...  :02:

กากก่อเกรียนนู้บ

อ้างคำพูดจาก: สตอเบอร์รี่จัง เมื่อ 27 เม.ย. 2009, 14:00 น.
ใครก็ได้ช่วยหน่อยนะคะ เพราะว่าสร้างเว็บไม่เป็นค่ะท่าน...  :02:

:34: สร้างเว็บไม่เป็น แล้วมันเกี่ยวอะไรกับ SQL เหรอครับ

Earthchie

สับสนกะ MySQL แน่ๆเลยครับ
ชื่อ Earth ครับ เรียกเอิดก็ได้ | Earthchie's Blog

พราว (ก็พราวแหละ)

แอบมาเชียร์เล็กนิ่มนิสนึงค่ะ

MS SQL SERVER EXPRESS จัดว่าเป็น opensource และใน
SQL SERVER EXPRESS 2008 R2 ขยายขีดจำกัดออกมาเป็น
CPU 1 Core ,RAM 1GB ,DB SIZE 10 GB ซึ่งพอเพียงสำหรับ องค์กรขนาดเล็กจนถึงปริ่มๆจะใหญ่ได้ค่ะ

เดิมชอบ MySQL เพราะเหตุผลข้อเดียวคือ Open source (หนูเปิดแหล่งนะคะ) แต่กลับลำมาใช้ SQL SERVER
เพราะเมื่อระบบใหญ่บิ้กๆเราก็ถูกบังคับให้ซื้อ Enterprise solution ซึ่งก็แพงพอกัน แต่เจ้า SQL SERVER
ดีกว่าที่อุปกรณ์เสริม อย่าง integrate service ที่ทำตัวเองเป็นจุดศูนย์กลางดึงข้อมูลจากแหล่งอื่น
มาบริหารเอง เช่นจาก MySQL server ,Oracle server ,XML หรือกระทั่ง Text file
หรือ report service ที่ใช้ทำรายงาน และมี feature เสริมอีกเยอะค่ะ

ความแตกต่างจะยิ่งมากเมื่อเขียน query ซับซ้อนเยอะๆ
เพราะเจ้า SQL SERVER เราเขียน code .net ยัดเข้าเสริมเป็น CLR STORE PROC
เข้าใจว่า ORACLE ทำได้ แต่ใน MySQL ยังเป็นไม่ได้ค่ะ

และในการเขียน Bussiness app หนีไม่พ้นจะต้องติดต่อกับฐานข้อมูล
ในบางกรณีหากย้าย code มาเขียนที่ SQL Statement
จะเขียน code โดยรวม สั้นลง เร็วขึ้น และเสถียรมากกว่าค่ะ

อีกอย่างเรื่อง ORM เจ้านี่ก้อเหมือนกับ tecnology อื่นๆที่ไม่ใช่ยาครอบจักรวาล
มันทำเรื่องยากๆเป็นเรื่องง่ายในบางเรื่อง แต่ก็ทำเรื่องง่ายๆหลายเรื่องเป็นเรื่องโคตรจะยากไปเหมือนกัน
เช่น เรื่องง่าย เพิ่ม/แก้ไข/ลบ ข้อมูลหลาย record ตามเงื่อนไข ใน ORM ต้องมานั่งวนลูปเอาช้ามากค่ะ
แต่ถ้าเป็น SQL แบบเดิม แทบจะจบในบรรทัดเดียว แต่ใน ORM ก็ยังยอมให้รัน STORE PROC อยู่
ฉะนั้นการเรียนรู้ SQL Statement ยังจำเป็นยิ่งกว่าจำเป็นด้วยมั้งคะ









icez

ที่ไหนสอนมาครับ MS SQL Express เป็น OpenSource เนี่ย

= ='

SMF 2.1.7 © 2026, Simple Machines