หน้า: 1 2 3 4 [5] 6 7 8 9 10 11 12
 
ผู้เขียน หัวข้อ: ภาษา SQL  (อ่าน 101988 ครั้ง)
0 สมาชิก และ 1 ขาจร กำลังดูหัวข้อนี้


พรุ่งนี้จะมาแปะนะ  กรี๊ดดดดด
บันทึกการเข้า

เราจะต้องการอะไรมากมายไปกว่า อะไรมากมาย
รออ่านด้วยคนครับ หน้ามึน
บันทึกการเข้า

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


ลืมไปแล้วว่าจะเอาอะไรมาแปะ  ไอ้มืดหมี
บันทึกการเข้า

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



โห่  โวย
บันทึกการเข้า

Las Noches Rubicundior

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

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

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


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

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

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

จบครับ  ไหว้

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

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

 ไอ้มืดหมี
บันทึกการเข้า

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


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




สัญลักษณ์

เหมือนเวลาเสิร์ชในดอสใช้ ? แทนตัวที่เป็นอะไรก็ได้ในตำแหน่งนั้นๆที่ไม่ได้ fix
« แก้ไขครั้งสุดท้าย: 17 พ.ย. 2007, 04:03 น. โดย Sorisori » บันทึกการเข้า

Las Noches Rubicundior


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

ประมาณนั้น เลยเรื่องสัญลักษณ์  เจ๋ง
บันทึกการเข้า

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

เรียนด้วย กรี๊ดดดดด
บันทึกการเข้า

E entao pergunta Se eu estou em paz E eu digo sim, i feel wonderful tonight
งั้นสอนสดๆ เลย ละกัน

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

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


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

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

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

จบครับ  ไหว้

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

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

 ไอ้มืดหมี
ขอเสริมจากคุณเอจ้า..

วิธี 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
« แก้ไขครั้งสุดท้าย: 22 ม.ค. 2008, 11:40 น. โดย ลูกน้องซานตาครอส » บันทึกการเข้า


อ่า  หื่น

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

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

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

เอาละครับเข้าเรื่อง คำสั่งวันนี้คือ 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 ลาก่อนครับ  เอือม

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

เราจะต้องการอะไรมากมายไปกว่า อะไรมากมาย
แปะครับ
ตามมาอ่านเรื่อยๆนะ  เกย์ออก
บันทึกการเข้า

50 levels avaliable, 22 secrets levels avaliable :P
วันนี้จะมาสอนเรื่อง pagination ครับ pagination แปลว่าการแบ่งหน้า เผื่อเอาไป google อย่างอื่นต่อในภายภาคหน้า

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

เมืองไทยน่าอยู่นะ...


รู้แค่นี้ละครับ  อืมมมมห์
บันทึกการเข้า

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

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

เห็นเค้ากำลังคุยกันเรื่องนี้เหมือนกัน เกย์ออก
บันทึกการเข้า
ลองดูนี่ครับ http://www.codenone.com/node/698

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

แอบอ้าง
ตัวอย่างในการใช้ 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

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

เมืองไทยน่าอยู่นะ...
หน้า: 1 2 3 4 [5] 6 7 8 9 10 11 12
 
 
Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2007, Simple Machines | Thai language by ThaiSMF Valid XHTML 1.0! Valid CSS!