Cyber Security · मराठी आवृत्ती
JOINs: वेगवेगळ्या tables मधला data जोडा
या page मध्ये
Student चं नाव students मध्ये, course नाव courses मध्ये आणि score enrollments मध्ये आहे. योग्य common keys वापरून JOIN केल्यावर एकत्र result मिळतो.
INNER JOIN only matching rows in both tables
LEFT JOIN all rows from the left table + matches (NULL if none)
RIGHT JOIN all rows from the right table + matches
CROSS JOIN every row with every row (rarely needed)
SELF JOIN a table joined with itself
-- INNER: who is enrolled in what, with score
SELECT s.name, c.course_name, e.score
FROM enrollments e
JOIN students s ON s.student_id = e.student_id
JOIN courses c ON c.course_id = e.course_id
ORDER BY s.name;
-- LEFT: all students, even those in no course (Raja shows NULL)
SELECT s.name, e.course_id
FROM students s
LEFT JOIN enrollments e ON e.student_id = s.student_id;
-- students who have NO enrollment
SELECT s.name FROM students s
LEFT JOIN enrollments e ON e.student_id = s.student_id
WHERE e.enroll_id IS NULL;
-- RIGHT: all courses, even with no students
SELECT c.course_name, e.student_id
FROM enrollments e
RIGHT JOIN courses c ON c.course_id = e.course_id;
-- SELF JOIN: pairs of students from the same city
SELECT a.name, b.name, a.city
FROM students a JOIN students b ON a.city = b.city AND a.student_id < b.student_id;
- INNER JOIN: दोन्हीकडे match असलेले rows.
- LEFT JOIN: left side चे सर्व rows; right match नसेल तर तिथल्या columns मध्ये NULL.
- RIGHT JOIN: right side चे सर्व rows आणि उपलब्ध matches.
- CROSS JOIN: प्रत्येक row सोबत प्रत्येक row.
- SELF JOIN: एकाच table ला दोन aliases देऊन जोडणे.
Examples मध्ये enrollment सहित student/course/score; सर्व students आणि Raja च्या missing enrollment साठी NULL; enrollment नसलेले students; रिकाम्या courses सहित सर्व courses; आणि एकाच city मधल्या student pairs आहेत. Self join मधलं a.student_id < b.student_id self-pair आणि उलट duplicate pairs टाळतं.
MySQL मध्ये थेट FULL OUTER JOIN syntax नसल्यामुळे गरजेनुसार LEFT/RIGHT branches combine करतात. UNION duplicates काढतो; duplicate multiplicity राखायची असल्यास योग्य anti-match आणि UNION ALL pattern लागतो. फक्त दोन पूर्ण branches अंधपणे जोडू नका.
Security मध्ये उपयोग
UNION दोन compatible query results एकत्र करतो. Vulnerable SQL मध्ये त्याचा दुसऱ्या table मधला data आणण्यासाठी गैरवापर होऊ शकतो. Column count/type compatibility या concepts मुळे पुढच्या lab मधले errors समजतात; app मध्ये prepared parameters आणि least privilege ठेवा.
Practice
प्रत्येक course चा enrolled student count दाखवा; zero enrollment courses सोडू नका. मग एकापेक्षा जास्त courses मध्ये असलेले students शोधा. LEFT JOIN count करताना missing right row साठी COUNT(*) आणि COUNT(e.enroll_id) वेगळे परिणाम देतील, ते तपासा.