ฉันได้เห็นข้อความค้นหามากมายด้วยบางสิ่งดังต่อไปนี้
Select 1
From table
สิ่งนี้1
หมายความว่าอย่างไรมันจะถูกประหารชีวิตอย่างไรและมันจะกลับมาอย่างไร
นอกจากนี้ในสถานการณ์ประเภทใดสามารถใช้สิ่งนี้ได้ไหม
ฉันได้เห็นข้อความค้นหามากมายด้วยบางสิ่งดังต่อไปนี้
Select 1
From table
สิ่งนี้1
หมายความว่าอย่างไรมันจะถูกประหารชีวิตอย่างไรและมันจะกลับมาอย่างไร
นอกจากนี้ในสถานการณ์ประเภทใดสามารถใช้สิ่งนี้ได้ไหม
คำตอบ:
SELECT 1 FROM TABLE_NAME
หมายถึง "ส่งคืน 1 จากตาราง" มันค่อนข้างไม่มีมาตรฐานในตัวเองดังนั้นโดยปกติจะใช้กับWHERE
และบ่อยครั้งEXISTS
(เช่น @gbn notes นี่ไม่ใช่วิธีปฏิบัติที่ดีที่สุด แต่เป็นเรื่องธรรมดาพอที่จะสังเกตแม้ว่ามันจะไม่มีความหมายจริงๆก็ตาม ( ที่กล่าวว่าฉันจะใช้เพราะคนอื่นใช้มันและมัน "ชัดเจนมากขึ้น" ทันทีแน่นอนว่าอาจเป็นไก่ที่มีความหนืดกับปัญหาไข่ แต่โดยทั่วไปฉันไม่ได้อาศัย)
SELECT * FROM TABLE1 T1 WHERE EXISTS (
SELECT 1 FROM TABLE2 T2 WHERE T1.ID= T2.ID
);
โดยทั่วไปดังกล่าวข้างต้นจะกลับมาทุกอย่างจากตารางที่ 1 ซึ่งมีหมายเลขตรงกันจากตารางที่ 2 (นี่เป็นตัวอย่างที่วางแผนไว้อย่างเห็นได้ชัด แต่ผมเชื่อว่ามันบ่งบอกถึงความคิด. ส่วนตัวผมอาจจะทำข้างต้นเป็นSELECT * FROM TABLE1 T1 WHERE ID IN (SELECT ID FROM TABLE2);
ขณะที่ผมมองว่าเป็นไกลออกไปชัดเจนกว่าผู้อ่านเว้นแต่จะมีเหตุผลที่น่าสนใจไม่ให้)
จริงๆแล้วมีบางกรณีที่ฉันลืมไปจนถึงตอนนี้ ในกรณีที่คุณพยายามกำหนดค่าที่มีอยู่ในฐานข้อมูลจากภาษาภายนอกบางครั้งSELECT 1 FROM TABLE_NAME
จะถูกใช้ สิ่งนี้ไม่ได้ให้ประโยชน์อย่างมีนัยสำคัญมากกว่าการเลือกคอลัมน์เดี่ยว ๆ แต่ขึ้นอยู่กับการนำไปใช้งานมันอาจให้ผลกำไรที่สูงกว่าการทำSELECT *
เพียงเพราะมันมักจะเป็นกรณีที่คอลัมน์เพิ่มเติมที่ DB ส่งกลับไปยังภาษา โครงสร้างซึ่งหมายความว่าจะมีเวลามากขึ้น
...EXISTS (SELECT 1...
select 1 from table
จะส่งคืนค่าคงที่ 1 สำหรับทุกแถวของตาราง มันมีประโยชน์เมื่อคุณต้องการตรวจสอบอย่างถูกว่าบันทึกตรงกับwhere
ส่วนคำสั่งและ / หรือของjoin
คุณ
ถ้าคุณหมายถึงสิ่งที่ชอบ
SELECT * FROM AnotherTable
WHERE EXISTS (SELECT 1 FROM table WHERE...)
แล้วมันก็เป็นตำนานที่1
ดีกว่า
SELECT * FROM AnotherTable
WHERE EXISTS (SELECT * FROM table WHERE...)
1
หรือ*
ในที่มีอยู่จะถูกละเว้นและคุณสามารถเขียนนี้ตามหน้า 191 ของ ANSI SQL 1992 มาตรฐาน :
SELECT * FROM AnotherTable
WHERE EXISTS (SELECT 1/0 FROM table WHERE...)
exists (select 1/0
ทำงานเหมือนเครื่องราง
มันทำในสิ่งที่มันบอก - มันจะคืนค่าจำนวนเต็ม 1 เสมอมันใช้เพื่อตรวจสอบว่าระเบียนที่ตรงกับที่คุณมีอยู่หรือไม่
select 1 from table
ใช้โดยฐานข้อมูลบางอย่างเป็นแบบสอบถามเพื่อทดสอบการเชื่อมต่อเพื่อดูว่ายังมีชีวิตอยู่หรือไม่มักใช้เมื่อดึงหรือคืนการเชื่อมต่อไปยัง / จากกลุ่มการเชื่อมต่อ
แม้ว่ามันจะไม่เป็นที่รู้จักกันอย่างกว้างขวางแบบสอบถามสามารถมีHAVING
ประโยคโดยไม่มีGROUP BY
ข้อ
ในกรณีดังกล่าวHAVING
จะมีการใช้อนุประโยคทั้งชุด เห็นได้ชัดว่าSELECT
ประโยคไม่สามารถอ้างถึงคอลัมน์ใด ๆ มิฉะนั้นคุณจะ (แก้ไข) ได้รับข้อผิดพลาด "คอลัมน์ไม่ถูกต้องในการเลือกเพราะมันไม่มีอยู่ใน GROUP BY" เป็นต้น
ดังนั้นจึงต้องใช้ค่าตามตัวอักษร(เนื่องจาก SQL ไม่อนุญาตให้มี resultset ที่มีคอลัมน์ศูนย์ - ทำไม?!) และใช้ค่าตามตัวอักษร 1 ( INTEGER
) เป็นปกติ: ถ้าHAVING
คำสั่งย่อยประเมินTRUE
แล้ว resultset จะเป็นหนึ่งแถวที่มีหนึ่ง คอลัมน์แสดงค่า 1 มิฉะนั้นคุณจะได้รับชุดที่ว่างเปล่า
ตัวอย่าง: เพื่อค้นหาว่าคอลัมน์มีค่าแตกต่างกันมากกว่าหนึ่งค่าหรือไม่:
SELECT 1
FROM tableA
HAVING MIN(colA) < MAX(colA);
SELECT MIN(colA) < MAX(colA) FROM tableA
หรือไม่
หากต้องการเจาะจงมากขึ้นเล็กน้อยคุณต้องใช้สิ่งนี้เพื่อทำ
SELECT 1 FROM MyUserTable WHERE user_id = 33487
แทนที่จะทำ
SELECT * FROM MyUserTable WHERE user_id = 33487
เพราะคุณไม่สนใจที่จะดูผลลัพธ์ การขอหมายเลข 1 นั้นง่ายมากสำหรับฐานข้อมูล (เนื่องจากไม่ต้องทำการค้นหาใด ๆ )
หากคุณไม่ทราบว่ามีข้อมูลใด ๆ ในตารางของคุณหรือไม่คุณสามารถใช้แบบสอบถามต่อไปนี้:
SELECT cons_value FROM table_name;
สำหรับตัวอย่าง:
SELECT 1 FROM employee;
ดังนั้นเราจึงใช้แบบสอบถาม SQL นี้เพื่อทราบว่ามีข้อมูลใด ๆ ในตาราง & จำนวนแถวที่ระบุว่ามีกี่แถวในตารางนี้
ซึ่งหมายความว่าคุณต้องการค่า " 1 " เป็นเอาต์พุตหรือเวลาส่วนใหญ่ที่ใช้เป็นแบบสอบถามภายในเนื่องจากเหตุผลบางอย่างที่คุณต้องการคำนวณคิวรีด้านนอกตามผลลัพธ์ของคิวรีด้านใน .. ไม่ใช่ทุกครั้งที่คุณใช้1แต่คุณ มีค่าเฉพาะบางอย่าง ...
สิ่งนี้จะให้ผลลัพธ์เป็นค่า 1 ในแบบคงที่
หากคุณเพียงต้องการตรวจสอบความจริงหรือเท็จตามส่วนคำสั่ง WHERE ให้เลือก 1 จากตารางโดยที่เงื่อนไขเป็นวิธีที่ถูกที่สุด
ฉันเห็นมันมักจะใช้ในการฉีด SQL เช่น:
www.urlxxxxx.com/xxxx.asp?id=99 union select 1,2,3,4,5,6,7,8,9 from database;
ตัวเลขเหล่านี้สามารถใช้ในการเดาตำแหน่งฐานข้อมูลที่มีอยู่และเดาชื่อคอลัมน์ของฐานข้อมูลที่คุณระบุและค่าของตาราง
ง่าย ๆ หมายความว่าคุณกำลังดึงข้อมูลคอลัมน์แรกจากตาราง ,,,, หมายถึงเลือก Emply_num, Empl_no จากพนักงาน ที่นี่คุณใช้เลือก 1 จากพนักงาน นั่นหมายความว่าคุณกำลังดึงคอลัมน์ Emply_num ขอบคุณ
เหตุผลก็คืออีกหนึ่งอย่างน้อยสำหรับ MySQL นี่คือจากคู่มือ MySQL
InnoDB คำนวณค่าดัชนีความเป็นหัวใจสำหรับตารางในครั้งแรกที่เข้าถึงตารางหลังจากเริ่มต้นแทนที่จะเก็บค่าดังกล่าวไว้ในตาราง ขั้นตอนนี้อาจใช้เวลามากในระบบที่แบ่งข้อมูลออกเป็นหลาย ๆ ตาราง เนื่องจากโอเวอร์เฮดนี้ใช้กับการดำเนินการเปิดตารางเริ่มต้นเท่านั้นเพื่อ "อุ่นเครื่อง" ตารางสำหรับใช้ในภายหลังเข้าถึงได้ทันทีหลังจากเริ่มต้นด้วยการออกคำสั่งเช่น SELECT 1 จาก tbl_name LIMIT 1
ใช้เพื่อความสะดวกกับ IF EXISTS () มิฉะนั้นคุณสามารถไปกับ
select * from [table_name]
รูปภาพในกรณีของ 'IF EXISTS' เราแค่ต้องรู้ว่าแถวที่มีเงื่อนไขที่ระบุนั้นมีอยู่หรือไม่ไม่สำคัญว่าเนื้อหาของแถวนั้นคืออะไร
select 1 from Users
โค้ดตัวอย่างด้านบนส่งคืนหมายเลข ของแถวเท่ากับไม่มี จากผู้ใช้ที่มี 1 ในคอลัมน์เดียว