คำถามติดแท็ก sql

Structured Query Language (SQL) เป็นภาษาสำหรับการจัดการข้อมูลในระบบการจัดการฐานข้อมูลเชิงสัมพันธ์ แท็กนี้สำหรับคำถามเกี่ยวกับการเขียนโปรแกรม SQL ทั่วไป ไม่ใช่สำหรับ Microsoft SQL Server (สำหรับสิ่งนี้ให้ใช้แท็ก sql-server) และไม่อ้างถึงภาษาเฉพาะของ SQL ด้วยตนเอง

14
SQL มีความสำคัญหรือไม่ถ้าฉันรู้ว่ากรอบ ORM นั้นดี? [ปิด]
ฉันไม่มีประสบการณ์ร้ายแรงใน SQL และฉันก็เกลียดที่จะเขียน SQL แทน LINQ ฉันมีความสุขมากกับ ORM จากนายจ้างและมุมมองของภาคมันเป็นสิ่งสำคัญที่จะรู้ SQL? ฉันต้องเป็นผู้เชี่ยวชาญในเรื่องนี้หรือไม่? บริษัท ที่ต้องการ SQL บริสุทธิ์มากกว่ากรอบ ORM เป็น "ไดโนเสาร์" ในโลกแห่งการเขียนโปรแกรมหรือไม่?

12
ทำไมฐานข้อมูลเชิงสัมพันธ์ไม่สนับสนุนข้อมูลที่ส่งคืนในรูปแบบที่ซ้อนกัน?
สมมติว่าฉันกำลังสร้างบล็อกที่ฉันต้องการโพสต์และแสดงความคิดเห็น ดังนั้นฉันจึงสร้างสองตารางตาราง 'โพสต์' ที่มีคอลัมน์ 'id' จำนวนเต็มโดยอัตโนมัติและตาราง 'ความคิดเห็น' ที่มีคีย์ต่างประเทศ 'post_id' จากนั้นฉันต้องการเรียกใช้สิ่งที่อาจเป็นคิวรีที่พบบ่อยที่สุดของฉันซึ่งก็คือเรียกโพสต์และความคิดเห็นทั้งหมด ค่อนข้างใหม่สำหรับฐานข้อมูลเชิงสัมพันธ์วิธีที่ปรากฏชัดเจนที่สุดสำหรับฉันคือการเขียนแบบสอบถามที่มีลักษณะดังนี้: SELECT id, content, (SELECT * FROM comments WHERE post_id = 7) AS comments FROM posts WHERE id = 7 ซึ่งจะให้ ID และเนื้อหาของโพสต์ที่ฉันต้องการพร้อมกับแถวความคิดเห็นที่เกี่ยวข้องทั้งหมดที่บรรจุอย่างเป็นระเบียบในอาร์เรย์ (การแสดงแบบซ้อนที่คุณต้องการใช้ใน JSON) แน่นอนว่า SQL และฐานข้อมูลเชิงสัมพันธ์ไม่ทำงานเช่นนี้และสิ่งที่ใกล้เคียงที่สุดที่พวกเขาจะได้รับก็คือการเข้าร่วมระหว่าง 'โพสต์' และ 'ความคิดเห็น' ซึ่งจะส่งคืนข้อมูลซ้ำซ้อนที่ไม่จำเป็นจำนวนมาก ในทุก ๆ แถว) ซึ่งหมายความว่าเวลาในการประมวลผลจะถูกใช้ทั้งในฐานข้อมูลเพื่อรวมเข้าด้วยกันและบน ORM ของฉันเพื่อแยกวิเคราะห์และเลิกทำทั้งหมด แม้ว่าฉันจะสั่งให้ ORM …
46 database  sql  rdbms  query 

4
ทำไมระหว่างของ SQL รวมมากกว่าเปิดครึ่ง?
Semi-open (หรือ Half-Open, Half-Closed , Half-Bounded ) ช่วงเวลา ( [a,b)ซึ่งxเป็นของ iff ช่วงเวลาa <= x < b) เป็นเรื่องธรรมดาในการเขียนโปรแกรมเนื่องจากมีคุณสมบัติที่สะดวกมากมาย ใครสามารถเสนอเหตุผลที่อธิบายว่าทำไม SQL BETWEENใช้ช่วงปิด ( [a,b])? นี่คือ esp ไม่สะดวกสำหรับวันที่ ทำไมคุณถึงBETWEENทำตัวแบบนี้
45 sql 

9
ใช้คำหลักเข้าร่วมหรือไม่
แบบสอบถาม SQL ต่อไปนี้เหมือนกัน: SELECT column1, column2 FROM table1, table2 WHERE table1.id = table2.id; SELECT column1, column2 FROM table1 JOIN table2 ON table1.id = table2.id; และแน่นอนส่งผลให้มีแผนแบบสอบถามเดียวกันในทุก DBMS ที่ฉันเคยลอง แต่บ่อยครั้งที่ฉันอ่านหรือฟังความคิดเห็นที่หนึ่งดีกว่าอีกแน่นอน ตามธรรมชาติแล้วคำกล่าวอ้างเหล่านี้จะไม่ได้รับการยืนยัน ที่ที่ฉันทำงานรุ่นที่สองดูเหมือนจะเป็นที่ชื่นชอบของนักพัฒนาส่วนใหญ่คนอื่น ๆ และฉันก็เลยชอบสไตล์นั้นเพื่อลดความประหลาดใจ แต่ในใจของฉันฉันกำลังคิดถึงคนแรก (เพราะนั่นคือวิธีที่ฉันเรียนรู้มาตั้งแต่แรก) หนึ่งในรูปแบบเหล่านี้ดีกว่าที่อื่นอย่างมีวัตถุประสงค์ ถ้าไม่มีเหตุผลใดที่จะใช้อีกแบบหนึ่ง
45 sql  coding-style 

9
ฐานข้อมูลเชิงสัมพันธ์อะไรที่ได้รับจากการตั้งค่าชนิดข้อมูลที่กำหนดไว้ล่วงหน้าสำหรับแต่ละคอลัมน์
ฉันกำลังทำงานกับฐานข้อมูล SQL อยู่ในขณะนี้และสิ่งนี้ทำให้ฉันสงสัยอยู่เสมอ แต่การค้นหาของ Google ไม่ได้เกิดอะไรขึ้น: ทำไมประเภทข้อมูลที่เข้มงวด ฉันเข้าใจว่าทำไมคุณต้องการมีไม่กี่ชนิดข้อมูลที่แตกต่างกันตัวอย่างเช่นวิธีการแตกต่างระหว่างข้อมูลที่เป็นข้อความธรรมดาไบนารีและเป็นสิ่งสำคัญ แทนที่จะเก็บข้อมูลไบนารี 1 และ 0s เป็นข้อความธรรมดาตอนนี้ฉันเข้าใจว่ามันมีประสิทธิภาพมากกว่าในการจัดเก็บข้อมูลไบนารีเป็นรูปแบบของตัวเอง แต่สิ่งที่ฉันไม่เข้าใจคือสิ่งที่ประโยชน์คือการมีประเภทข้อมูลที่แตกต่างกันมากมาย : ทำไมmediumtext, longtextและtext? ทำไมdecimal, floatและint? เป็นต้น ประโยชน์ของการบอกฐานข้อมูลคืออะไร "จะมีเพียง 256 ไบต์ของข้อมูลข้อความธรรมดาในรายการในคอลัมน์นี้" หรือ "คอลัมน์นี้สามารถมีรายการข้อความได้ถึง 16,777,215 ไบต์" มันเป็นผลประโยชน์ด้านประสิทธิภาพหรือไม่? ถ้าใช่ทำไมรู้ขนาดของรายการก่อนมือช่วยประสิทธิภาพ? หรือค่อนข้างเป็นอย่างอื่นทั้งหมด?

9
เหตุใดจึงควรใช้ระบบไฟล์สำหรับบันทึกแทน RDBMS
คำถามควรชัดเจนจากชื่อ ตัวอย่างเช่น Apache บันทึกการเข้าถึงและบันทึกข้อผิดพลาดในไฟล์แทน RDBMS ไม่ว่าจะมีการใช้งานขนาดใหญ่หรือขนาดเล็กเพียงใดก็ตาม สำหรับ RDMS เราเพียงแค่ต้องเขียนแบบสอบถาม SQL และมันจะทำงานในขณะที่สำหรับไฟล์ที่เราต้องตัดสินใจในรูปแบบเฉพาะแล้วเขียน regex หรืออาจจะแยกวิเคราะห์เพื่อจัดการกับพวกเขา และสิ่งเหล่านั้นอาจล้มเหลวในกรณีพิเศษหากไม่ได้รับการดูแลที่ดี ดูเหมือนว่าทุกคนจะชอบระบบไฟล์เพื่อบำรุงรักษาบันทึก ฉันไม่ได้ลำเอียงกับวิธีการใด ๆ เหล่านี้ แต่ฉันอยากจะรู้ว่าทำไมมันถึงมีประสบการณ์เช่นนี้ มันคือความเร็วหรือการบำรุงรักษาหรืออย่างอื่น?

8
โดเมนขับเคลื่อนการออกแบบรูปแบบต่อต้าน SQL หรือไม่
ฉันกำลังดำน้ำในการออกแบบที่ขับเคลื่อนด้วยโดเมน (DDD) และในขณะที่ฉันไปลึกมากขึ้นในนั้นมีบางสิ่งที่ฉันไม่ได้รับ ตามที่ฉันเข้าใจแล้วประเด็นหลักคือการแยก Domain Logic (Business Logic) จาก Infrastructure (DB, File System ฯลฯ ) สิ่งที่ฉันสงสัยคือจะเกิดอะไรขึ้นเมื่อฉันมีข้อความค้นหาที่ซับซ้อนมากเช่นแบบสอบถามการคำนวณทรัพยากรวัสดุ ในประเภทของแบบสอบถามที่คุณทำงานกับการดำเนินการชุดใหญ่ประเภทของสิ่งที่ SQL ได้รับการออกแบบมาสำหรับ ทำการคำนวณเหล่านั้นภายใน Domain Layer และทำงานกับชุดจำนวนมากในนั้นก็เหมือนกับการทิ้งเทคโนโลยี SQL การคำนวณเหล่านี้ในโครงสร้างพื้นฐานไม่สามารถเกิดขึ้นได้เช่นกันเพราะรูปแบบ DDD ช่วยให้สามารถเปลี่ยนแปลงโครงสร้างพื้นฐานได้โดยไม่ต้องเปลี่ยน Domain Layer และรู้ว่า MongoDB ไม่มีความสามารถเช่น SQL Server ที่ไม่สามารถเกิดขึ้นได้ นั่นเป็นข้อผิดพลาดของรูปแบบ DDD หรือไม่?

7
ทริกเกอร์ของ SQL และเมื่อใดหรือเมื่อใดที่จะไม่ใช้
เมื่อฉันเรียนรู้เกี่ยวกับ SQL มาก่อนฉันมักจะบอกให้ใช้เฉพาะทริกเกอร์หากคุณต้องการและเลือกที่จะใช้ขั้นตอนการจัดเก็บแทนถ้าเป็นไปได้ โชคไม่ดีที่ตอนนี้ (ไม่กี่ปีที่ผ่านมาดี) ฉันไม่ได้อยากรู้อยากเห็นและใส่ใจเกี่ยวกับปัจจัยพื้นฐานเหมือนตอนนี้ฉันไม่เคยถามเหตุผลว่าทำไม ชุมชนมีความเห็นอย่างไรในเรื่องนี้? มันเป็นเพียงการตั้งค่าส่วนตัวของใครบางคนหรือควรหลีกเลี่ยงการเรียก (เช่นเคอร์เซอร์) เว้นแต่จะมีเหตุผลที่ดีสำหรับพวกเขา
43 sql 

6
ฉันจะทำให้คิวรี SQL ที่ซับซ้อนเขียนง่ายขึ้นได้อย่างไร [ปิด]
ฉันพบว่ามันยากมากที่จะเขียนแบบสอบถาม SQL ที่ซับซ้อนที่เกี่ยวข้องกับการรวมในหลาย ๆ ตาราง (อย่างน้อย 3-4) และเกี่ยวข้องกับเงื่อนไขซ้อนหลาย ข้อความค้นหาที่ฉันถูกขอให้เขียนนั้นอธิบายได้ง่ายด้วยประโยคสองสามประโยค แต่อาจต้องใช้รหัสที่หลอกลวง ฉันค้นหาตัวเองบ่อยครั้งโดยใช้มุมมองชั่วคราวเพื่อเขียนข้อความค้นหาเหล่านี้ซึ่งดูเหมือนว่าเป็นเรื่องเล็ก ๆ น้อย ๆ คุณสามารถให้เคล็ดลับใดที่ฉันสามารถใช้เพื่อทำให้การสืบค้นที่ซับซ้อนเหล่านี้ง่ายขึ้น โดยเฉพาะอย่างยิ่งฉันจะแยกแบบสอบถามเหล่านี้ออกเป็นขั้นตอนที่ฉันต้องใช้เพื่อเขียนรหัส SQL ได้อย่างไร โปรดทราบว่าฉันเป็น SQL ฉันกำลังถูกขอให้เขียนเป็นส่วนหนึ่งของการบ้านสำหรับหลักสูตรฐานข้อมูลดังนั้นฉันไม่ต้องการซอฟต์แวร์ที่จะทำงานให้ฉัน ฉันต้องการเข้าใจรหัสที่ฉันเขียน รายละเอียดทางเทคนิคเพิ่มเติม: ฐานข้อมูลโฮสต์บนเซิร์ฟเวอร์ PostgreSQL ที่รันบนเครื่องโลคัล ฐานข้อมูลมีขนาดเล็กมาก: มีไม่เกินเจ็ดตารางและตารางที่ใหญ่ที่สุดมีน้อยกว่าประมาณ 50 แถว เคียวรี SQL กำลังถูกส่งผ่านไปยังเซิร์ฟเวอร์โดยผ่าน LibreOffice Base
42 sql  tips  query 

6
ทำไมไม่ส่งคืนวันที่เป็นสตริงจากฐานข้อมูล
ในเว็บแอปพลิเคชันทั่วไปวันที่จะถูกดึงจากเลเยอร์ฐานข้อมูลที่พิมพ์อย่างรุนแรง (เช่นใน c # เป็น System.DateTime ซึ่งตรงกันข้ามกับ System.String) เมื่อวันที่จะต้องแสดงเป็นสตริง (เช่นแสดงบนหน้า) การแปลงจาก DateTime เป็นสตริงจะทำในชั้นนำเสนอ ทำไมนี้ ทำไมการแปลง DateTime ให้เป็นสตริงในระดับฐานข้อมูลจึงเป็นเรื่องที่ไม่ดี ดูการอภิปรายที่ร้อนแรงในการแชทและคำถามเดิมที่เริ่มต้นสิ่งเหล่านี้ทั้งหมด

6
เหตุใด SQL จึงไม่สามารถปรับโครงสร้างได้อีก [ปิด]
ทุกคนรู้ว่านักพัฒนาใหม่เขียนฟังก์ชันที่ยาวนาน ในขณะที่คุณก้าวหน้าคุณจะดีขึ้นเมื่อแบ่งรหัสของคุณออกเป็นชิ้นเล็ก ๆ และประสบการณ์สอนคุณค่าของการทำเช่นนั้น ป้อน SQL ใช่วิธีคิด SQL เกี่ยวกับโค้ดนั้นแตกต่างจากวิธีคิดขั้นตอนเกี่ยวกับโค้ด แต่หลักการนี้ดูเหมือนว่าใช้ได้ สมมติว่าฉันมีแบบสอบถามที่ใช้แบบฟอร์ม: select * from subQuery1 inner join subQuerry2 left join subquerry3 left join join subQuery4 ใช้ ID หรือวันที่เป็นต้น คิวรีย่อยเหล่านั้นซับซ้อนและอาจมีคิวรีย่อยของตนเอง ในบริบทการเขียนโปรแกรมอื่น ๆ ฉันจะคิดว่าตรรกะสำหรับเคียวรีย่อยที่ซับซ้อน 1-4 อยู่ในแนวเดียวกันกับแบบสอบถามหลักของฉันที่รวมพวกเขาทั้งหมด ดูเหมือนตรงไปตรงมาว่าเคียวรีย่อยเหล่านั้นควรถูกกำหนดเป็นมุมมองเหมือนพวกมันจะเป็นฟังก์ชันถ้าฉันกำลังเขียนโค้ดโพรซีเดอร์ เหตุใดจึงไม่ปฏิบัติกันทั่วไป ทำไมผู้คนจึงเขียนแบบสอบถาม SQL แบบเสาหินยาวเหล่านี้บ่อยๆ เหตุใด SQL จึงไม่สนับสนุนการใช้มุมมองที่กว้างขวางเช่นเดียวกับการเขียนโปรแกรมตามขั้นตอนสนับสนุนการใช้ฟังก์ชันที่กว้างขวาง (ในสภาพแวดล้อมแบบองค์กรจำนวนมากการสร้างมุมมองไม่ใช่สิ่งที่ทำได้ง่ายมีคำขอและการอนุมัติที่จำเป็นลองนึกภาพหากโปรแกรมเมอร์ประเภทอื่นต้องส่งคำขอทุกครั้งที่สร้างฟังก์ชัน!) ฉันคิดถึงคำตอบที่เป็นไปได้สามข้อ: นี่เป็นเรื่องปกติอยู่แล้วและฉันกำลังทำงานกับคนที่ไม่มีประสบการณ์ โปรแกรมเมอร์ที่มีประสบการณ์ไม่ได้เขียน SQL ที่ซับซ้อนเพราะพวกเขาต้องการที่จะแก้ปัญหาการประมวลผลข้อมูลอย่างหนักด้วยรหัสขั้นตอน อื่น ๆ …

3
ตารางอ้างอิงตนเองดีหรือไม่ดี [ปิด]
การเป็นตัวแทนของตำแหน่งทางภูมิศาสตร์ภายในแอปพลิเคชันการออกแบบตัวแบบข้อมูลอ้างอิงนั้นเสนอทางเลือกที่ชัดเจนสองทาง (หรืออาจมากกว่านั้น) ตารางหนึ่งที่มีคอลัมน์ parent_id อ้างอิงตนเอง uk - london (london parent id = UK id) หรือสองตารางที่มีความสัมพันธ์แบบหนึ่งต่อหลายโดยใช้คีย์ต่างประเทศ การตั้งค่าของฉันสำหรับตารางอ้างอิงตัวเองหนึ่งตารางเนื่องจากช่วยให้ขยายขอบเขตได้ง่ายตามต้องการ โดยทั่วไปแล้วคนออกไปจากตารางอ้างอิงตนเองหรือว่าพวกเขา A-OK?

3
ทำไมเราต้องใส่ N ก่อนสตริงใน Microsoft SQL Server
ฉันเรียนรู้ T-SQL จากตัวอย่างที่ฉันเห็นการแทรกข้อความในvarchar()เซลล์ฉันสามารถเขียนเฉพาะสตริงที่จะแทรก แต่สำหรับnvarchar()เซลล์ตัวอย่างทุก ๆ คำนำหน้าสตริงด้วยตัวอักษร N ฉันลองใช้แบบสอบถามต่อไปนี้บนตารางที่มีnvarchar()แถวและทำงานได้ดีดังนั้นคำนำหน้า N จึงไม่จำเป็น: insert into [TableName] values ('Hello', 'World') เหตุใดสตริงจึงถูกนำหน้าด้วย N ในทุกตัวอย่างที่ฉันเห็น ข้อดีหรือข้อเสียของการใช้คำนำหน้านี้คืออะไร

11
มีข้อแตกต่างที่เป็นสาระสำคัญระหว่างข้อความค้นหาที่เข้าร่วมโดย WHERE ส่วนคำสั่งและแบบสอบถามโดยใช้ JOIN จริงหรือไม่
ในLearn SQL the Hard Way (แบบฝึกหัดที่หก)ผู้แต่งนำเสนอแบบสอบถามต่อไปนี้: SELECT pet.id, pet.name, pet.age, pet.dead FROM pet, person_pet, person WHERE pet.id = person_pet.pet_id AND person_pet.person_id = person.id AND person.first_name = "Zed"; แล้วพูดต่อไปว่า: จริงๆแล้วมีวิธีอื่น ๆ ในการรับข้อความค้นหาประเภทนี้เพื่อเรียกว่า "เข้าร่วม" ฉันกำลังหลีกเลี่ยงแนวคิดเหล่านี้ในตอนนี้เพราะพวกเขาสับสนอย่างบ้าคลั่ง เพียงแค่ใช้วิธีนี้ในการเข้าร่วมตารางในตอนนี้และไม่สนใจคนที่พยายามบอก [คุณ] ว่านี่ช้ากว่าหรือ "ชนชั้นต่ำ" มันเป็นเรื่องจริงเหรอ? ทำไมหรือทำไมไม่?
32 sql 

2
ประวัติของการออกเสียงของ SQL อย่างไม่เป็นทางการคืออะไร?
SQL ออกเสียงอย่างเป็นทางการว่า / /skjuːˈɛl / like "SQL" ตามที่ระบุใน Beaulieu, Alan (เมษายน 2009) Mary E. Treseler เอ็ด การเรียนรู้ SQL (2nd ed.) Sebastapol, CA, USA: O'Reilly ไอ 978-0-596-52083-0 แต่บ่อยครั้งที่มันถูกออกเสียง / ˈsiːkwəl / เช่น "ผลสืบเนื่อง" ประวัติศาสตร์ของการออกเสียงครั้งที่สองนี้คืออะไร?
32 sql  history 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.