ภาษา SQL

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

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

ยุนเอ



พรุ่งนี้จะมาแปะนะ  :25:
เราจะต้องการอะไรมากมายไปกว่า อะไรมากมาย

ÐзέρŞήợẅŜ

รออ่านด้วยคนครับ :01:
เพียง คำพูดคำสูดท้าย  จะรักแค่เธอไปจนวันตาย...
แนะนำตัว                     bij evol

ยุนเอ



ลืมไปแล้วว่าจะเอาอะไรมาแปะ  :31:
เราจะต้องการอะไรมากมายไปกว่า อะไรมากมาย

Soris0ri

Las Noches Rubicundior

ยุนเอ


งั้นสอนสดๆ เลย ละกัน

ถ้าบางทีเราจะ query data บางส่วนของคำนั้นๆ เช่น

id    |     data
1     |     hello
2     |     love
3     |     Jubz


เราอยากรู้ว่าคำที่มีตัว e อยู่ใน data มีกี่อัน

เราจะ query ดังนี้

select *
from tableName
where data LIKE '%e%'

จบครับ  :46:

ปล. ข้อควรระวังจะด้วย
ถ้าเรารับ parameter มาจากภายนอกจะต้องเขียนดังนี้

select *
from tableName
where data LIKE '%' + @query_parameter  + '%'

:31:
เราจะต้องการอะไรมากมายไปกว่า อะไรมากมาย

Soris0ri

#65
อ้างคำพูดจาก: ซ้อซั้ว เมื่อ 17 พ.ย. 2007, 03:37 น.
เราอยากรู้ว่าคำที่มีตัว e อยู่ใน data มีกี่อัน


มีกี่คำ  :09: รึแสดงเป็นจำนวนตัวอี




สัญลักษณ์

เหมือนเวลาเสิร์ชในดอสใช้ ? แทนตัวที่เป็นอะไรก็ได้ในตำแหน่งนั้นๆที่ไม่ได้ fix
Las Noches Rubicundior

ยุนเอ



กี่ Row อะเฟิร์น 

ประมาณนั้น เลยเรื่องสัญลักษณ์  :12:
เราจะต้องการอะไรมากมายไปกว่า อะไรมากมาย

โตน


เรียนด้วย :25:
E entao pergunta Se eu estou em paz E eu digo sim, i feel wonderful tonight

กวางจ้ะ

#68
อ้างคำพูดจาก: คุณเอ เมื่อ 17 พ.ย. 2007, 03:37 น.
งั้นสอนสดๆ เลย ละกัน

ถ้าบางทีเราจะ query data บางส่วนของคำนั้นๆ เช่น

id    |     data
1     |     hello
2     |     love
3     |     Jubz


เราอยากรู้ว่าคำที่มีตัว e อยู่ใน data มีกี่อัน

เราจะ query ดังนี้

select *
from tableName
where data LIKE '%e%'

จบครับ  :46:

ปล. ข้อควรระวังจะด้วย
ถ้าเรารับ parameter มาจากภายนอกจะต้องเขียนดังนี้

select *
from tableName
where data LIKE '%' + @query_parameter  + '%'

:31:
ขอเสริมจากคุณเอจ้า..

วิธี apply นะคะ
ก็ เอาไปใช้ในการ search หาได้
เช่น สมมติว่าเรามีข้อมูลชื่อลูกค้าอยู่ใน database ทีนี้เราจะหาข้อมูลลูกค้าคนนึง
จำได้คลับคล้ายคลับคลาว่าขึ้นต้นด้วย "สม"
เราก็ค้นแบบนี้นะคะ

"select * from tablename where fieldname like 'สม%'";

ก็จะแสดงชื่อคนที่ขึ้นต้นด้วยคำว่า "สม" นะคะ
ฉะนั้นตัวอย่างนี้ ถ้าเกิดดันมีคนชื่อที่ประกอบด้วยคำว่า "สม" อยู่ในชื่อ แต่ไม่ได้ขึ้นต้นด้วยคำว่า "สม" ก็จะไม่แสดงค่ะ
จากตัวอย่าง % ก็จะแทนด้วยคำว่าใด ๆ หรืออื่น ๆ ที่เรานึกไม่ออก

เอาไปดัดแปลงอีกอย่างหนึ่งสำหรับคนที่ต้องการหาช่วงเวลา
แล้วดันตั้ง doctype เป็น varchar หรือ char ก็สามารถเอา % ไป apply ใช้ได้เช่นกันค่ะ
(สำหรับคนที่ไม่ได้ set เป็น timestamp, date, datetime)

ตัวอย่าง อยากได้รายชื่อคนที่เกิดในช่วงเดือน มกราคม - กันยายน ปีไหนหรือวันที่ไหนก็ได้

1. สังเกตในฐานข้อมูลของตัวเองก่อนว่า เขาเก็บข้อมูลไว้รูปแบบไหน
เช่น บางทีเก็บวันเดือนปีเป็น ปี-เดือน-วัน หรือบางที่ก็เก็บเป็น ปี-วัน-เดือน
อาจจะใช้เครื่องหมาย : แทน - หรือใช้เลขกี่หลักในการแทนวันเดือนปี ใช้ปีค.ศ. หรือปี พ.ศ. ก็ต้องสังเกตดี ๆ นะคะ

2. เมื่อทราบรูปแบบแล้วก็ให้ลองเขียนคำสั่งค้นหาค่ะ
(สมมติตัวอย่างข้อมูลใน database เก็บเป็น 1993-01-22)
อย่างโจทย์บอกว่า อยากได้คนเกิดช่วงเดือนมกราคม - มีนาคม ก็ต้องเป็น เดือน 01 ถึง 03

คำสั่งก็จะเป็น >> "select * from tablename where birthday like '%-01-%' or birthday like '%-02-%' or birthday like '%-03-%'";

แปลคำสั่ง
select แปลว่า เลือก
* แปลว่า ทุก ๆ field
from แปลว่า จาก
tablename แปลว่า ชื่อตารางที่เราต้องการให้เลือก
where แปลว่า ตามเงื่อนไขที่
birthday แปลว่า ชื่อ field ที่เก็บข้อมูลวันเกิดไว้
like แปลว่า เหมือนหรือคล้าย
'%-01-%' แปลว่า คนที่เกิดเดือน 01 คือเดือนมกราคม ปีไหน วันที่เท่าไหร่ก็ได้
or แปลว่า หรือ
'%-02-%' แปลว่า คนที่เกิดเดือน 02 คือเดือนกุมภาพันธ์ ปีไหน วันที่เท่าไหร่ก็ได้
or แปลว่า หรือ
'%-03-%' แปลว่า คนที่เกิดเดือน 03 คือเดือนมีนาคม ปีไหน วันที่เท่าไหร่ก็ได้

ก็จะแสดงรายชื่อคนที่เกิดตั้งแต่เดือนมกราคม - มีนาคมให้ดูจ้า


ส่วนใครที่โชคดี set doctype เป็น date หรือ datetime ก็แค่ใส่
"select * from tablename where birthday between '%-01-01%' ... '%-03-31%'";
แปลค่ะ
between แปลว่า ระหว่าง
'%-01-01' แปลว่า ระยะเวลาเริ่มหา ปีใด ๆ ก็ได้ เดือน 1 วันที่ 1
... ไม่แน่ใจว่าใช้คำนี้ หรือใช้คำว่า to หรือ , หรือ and กันแน่ ใครลองคำสั่งนี้แล้วได้ผลยังไงมาแจ้งด้วยนะคะ
'%-03-31' แปลว่า ระยะเวลาสิ้นสุดที่จะหา คือ ปีใด ๆ ก็ได้ เืดือน 3 วันที่ 31

ยุนเอ



อ่า  :04:

วันนี้จะมาสอนเรื่อง pagination ครับ pagination แปลว่าการแบ่งหน้า เผื่อเอาไป google อย่างอื่นต่อในภายภาคหน้า

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

สำหรับแฟนๆ Visual Studio คงไม่ประสบปัญหาเหล่านี้ เพราะเพียงคลิกเดียวก็จบ  :07:

เอาละครับเข้าเรื่อง คำสั่งวันนี้คือ Limit ครับ


อ้างอิงSELECT * FROM `your_table` LIMIT 0, 10

เลขตัวหน้าคือจุดตั้งต้น   เลขตัวหลังคือจะแสดงกี่ rows จากจุดตั้งต้น

เพราะฉะนั้นจะแปลได้ว่า แสดง สิบข้อมูลแรก จากการ query ด้วยคำสั่งนี้  SELECT * FROM `your_table`

การเอาไปใช้จริงๆ คือ

การเซท ค่าสองค่าในหน้าเว็บ คือ
- เลขหน้า (page)
- จำนวนที่จะแสดงต่อหน้า (items per page)

โดยเขียน sql รอไว้ดังนี้ " LIMIT (page*items per page), (items per page)  "

แล้วเอาไปแปะต่อท้าย คำสั่งที่เราจะ query ครับ

ส่วนการเขียนโค๊ดอื่นๆ นอกเหนือจาก sql ลาก่อนครับ  :39:

แต่ google เอาก็จะเจอโค๊ด นะครับ หวังว่าจะเป็นประโยชน์บ้าง จุ๊บๆ  :27:
เราจะต้องการอะไรมากมายไปกว่า อะไรมากมาย

i-poon

แปะครับ
ตามมาอ่านเรื่อยๆนะ  :27:
50 levels avaliable, 22 secrets levels avaliable :P

unowen

อ้างคำพูดจาก: คุณเอ เมื่อ 03 มี.ค. 2008, 01:02 น.
วันนี้จะมาสอนเรื่อง pagination ครับ pagination แปลว่าการแบ่งหน้า เผื่อเอาไป google อย่างอื่นต่อในภายภาคหน้า

:27:  เท่าที่รู้ LIMIT ไม่ใช่ standard SQL นี่ครับ
แนะนำ pagination ของ DBMS อื่นq และแบบที่ใช้เป็นสากลได้ทุก DBMS ด้วยสิครับ
เมืองไทยน่าอยู่นะ...

ยุนเอ



รู้แค่นี้ละครับ  :52:
เราจะต้องการอะไรมากมายไปกว่า อะไรมากมาย

เบียร์

อ้างคำพูดจาก: unowen เมื่อ 11 มี.ค. 2008, 18:24 น.
:27:  เท่าที่รู้ LIMIT ไม่ใช่ standard SQL นี่ครับ
แนะนำ pagination ของ DBMS อื่นq และแบบที่ใช้เป็นสากลได้ทุก DBMS ด้วยสิครับ

ลองดูนี่ครับ http://www.codenone.com/node/698

เห็นเค้ากำลังคุยกันเรื่องนี้เหมือนกัน :27:

unowen

อ้างคำพูดจาก: iNfected เมื่อ 11 มี.ค. 2008, 18:41 น.
ลองดูนี่ครับ http://www.codenone.com/node/698

เห็นเค้ากำลังคุยกันเรื่องนี้เหมือนกัน :27:

อ้างอิงตัวอย่างในการใช้ Limit แบบ ของ MSSOL (เฉพาะ MSSQL 2005)

WITH Salesman as(
SELECT c.FirstName, c.LastName, ROW_NUMBER() OVER(ORDER BY SalesYTD DESC) AS 'Row Number', s.SalesYTD, a.PostalCode
FROM Sales.SalesPerson s JOIN Person.Contact c on s.SalesPersonID = c.ContactID
JOIN Person.Address a ON a.AddressID = c.ContactID)
SELECT FirstName, LastName SalesYID, PostalCode
FROM Salesman
WHERE [Row Number] Between 1 and 10000 ---- Limit x, y

:27: ขอบคุณครับ  :46:
อ่านแล้วมึนๆแฮะ  คล้ายๆกับ subquery ใน oracle
แต่ใช้ built-in function คนละตัว  :09:
แล้วไอ้ ROW_NUMBER() OVER(ORDER BY SalesYTD DESC) AS 'Row Number' นี่คือการสร้าง sorting index หรือครับ  :09:
เมืองไทยน่าอยู่นะ...

SMF 2.1.7 © 2026, Simple Machines