Cyber Security · मराठी आवृत्ती
Subqueries: query च्या आत query
Subquery म्हणजे दुसऱ्या query मध्ये वापरलेली query. समजण्यासाठी “आतल्या result चा बाहेर उपयोग” असं म्हणा; optimizer प्रत्यक्ष execution वेगळं करू शकतो आणि correlated subquery बाहेरच्या row वर अवलंबून असते.
-- students who paid more than the average
SELECT name, fees_paid FROM students
WHERE fees_paid > (SELECT AVG(fees_paid) FROM students);
-- students enrolled in 'Ethical Hacking'
SELECT name FROM students
WHERE student_id IN (
SELECT student_id FROM enrollments
WHERE course_id = (SELECT course_id FROM courses WHERE course_name = 'Ethical Hacking')
);
-- EXISTS: students with at least one score above 85
SELECT s.name FROM students s
WHERE EXISTS (SELECT 1 FROM enrollments e WHERE e.student_id = s.student_id AND e.score > 85);
-- subquery in FROM (derived table)
SELECT city, total FROM (
SELECT city, SUM(fees_paid) AS total FROM students GROUP BY city
) AS t WHERE total > 20000;
पहिली query average fees पेक्षा जास्त भरलेले students घेते. दुसरी Ethical Hacking course च्या enrollments मधून students शोधते; inner scalar course query ला एकच row मिळणं अपेक्षित आहे. Course names unique नसल्यास अनेक rows मिळू शकतात. तिसरी EXISTS ने score>85 असलेला किमान एक enrollment शोधते. शेवटची FROM मधली derived table city totals तयार करते आणि बाहेर total filter करते.
Security मध्ये उपयोग
Blind SQL injection मध्ये vulnerable query ला yes/no प्रश्न जोडून data बद्दल माहिती काढण्याचा प्रयत्न होतो. Source मधला उदाहरणार्थ AND (SELECT SUBSTRING(password,1,1) FROM users LIMIT 1) = 'a' हा concept दाखवतो. हा authorized training संदर्भ आहे. Production बचावासाठी input “cleaning” वर एकटं अवलंबून न राहता parameterized queries, आवश्यक validation आणि मर्यादित DB permissions वापरा.
Practice
Subquery ने highest score असलेले student(s) शोधा; ties असतील तर सर्व दाखवा. NOT IN वापरून enrollment नसलेले courses शोधा. Subquery मध्ये NULL course_id असू शकतो का तपासा—NOT IN सोबत NULL आल्यास unexpected empty result मिळू शकतो; NULL वगळणे किंवा NOT EXISTS हा पर्याय समजून घ्या.
Chapter recap
- OS योग्य MySQL/MariaDB install; unnecessary network exposure बंद.
- CREATE DATABASE, USE, CREATE TABLE, DESCRIBE आणि explicit-column INSERT.
- SELECT/WHERE, ORDER BY/LIMIT, DISTINCT आणि aliases.
- LIKE wildcards, IN, inclusive BETWEEN, IS NULL.
- Aggregates/GROUP BY; WHERE rows वर, HAVING groups वर.
- INNER/LEFT/RIGHT/self JOIN आणि IN/EXISTS/derived subqueries.
- SQL concepts समजले की injection errors समजतात; app code मध्ये input आणि SQL structure वेगळे ठेवा.
पुढच्या chapter मध्ये data बदलणं, keys, constraints आणि users पाहू.