0% found this document useful (0 votes)
1 views

advance queries

The document outlines the creation of two SQL tables, 'students' and 'marks', along with sample data insertion. It includes various SQL queries to retrieve and analyze student performance, such as calculating total marks, identifying top performers, and assigning grades and remarks based on scores. Additionally, it covers attendance status and scholarship eligibility based on total marks.
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
1 views

advance queries

The document outlines the creation of two SQL tables, 'students' and 'marks', along with sample data insertion. It includes various SQL queries to retrieve and analyze student performance, such as calculating total marks, identifying top performers, and assigning grades and remarks based on scores. Additionally, it covers attendance status and scholarship eligibility based on total marks.
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 5

1.

students
2. marks

✅ Step 1: Create the Tables

-- Create the 'students' table


CREATE TABLE students (
student_id INT PRIMARY KEY,
name VARCHAR(50),
class VARCHAR(10)
);

-- Create the 'marks' table


CREATE TABLE marks (
mark_id INT PRIMARY KEY,
student_id INT,
subject VARCHAR(50),
marks INT,
FOREIGN KEY (student_id) REFERENCES students(student_id)
);

✅ Step 2: Insert Sample Data


sql

-- Insert data into 'students'


INSERT INTO students VALUES (1, 'Alice', '9A');
INSERT INTO students VALUES (2, 'Bob', '9A');
INSERT INTO students VALUES (3, 'Charlie', '9B');

-- Insert data into 'marks'


INSERT INTO marks VALUES (101, 1, 'Math', 85);
INSERT INTO marks VALUES (102, 1, 'English', 78);
INSERT INTO marks VALUES (103, 2, 'Math', 92);
INSERT INTO marks VALUES (104, 3, 'English', 88);

✅ Step 3: Queries Using Both Tables


🔸 1. Get all students with their marks

SELECT students.name, students.class, marks.subject, marks.marks


FROM students
INNER JOIN marks ON students.student_id = marks.student_id;
🔸 2. Get total marks of each student

SELECT students.name, SUM(marks.marks) AS total_marks


FROM students
JOIN marks ON students.student_id = marks.student_id
GROUP BY students.name;
🔸 3. Get students who scored more than 80 in any subject

SELECT students.name, marks.subject, marks.marks


FROM students
JOIN marks ON students.student_id = marks.student_id
WHERE marks.marks > 80;
🔸 4. List students who didn’t appear for Math

SELECT name
FROM students
WHERE student_id NOT IN (
SELECT student_id FROM marks WHERE subject = 'Math'
);
5. Show average marks per subject
SELECT subject, AVG(marks) AS average_marks
FROM marks
GROUP BY subject;

🔸 6. Show student names who scored below 80 in any subject

SELECT students.name, marks.subject, marks.marks


FROM students
JOIN marks ON students.student_id = marks.student_id
WHERE marks.marks < 80;

🔸 7. Display all students, even if they don’t have any marks yet
(LEFT JOIN)

SELECT students.name, marks.subject, marks.marks


FROM students
LEFT JOIN marks ON students.student_id = marks.student_id;

🔸 8. Display only those students who don’t have any marks


ql

SELECT students.name
FROM students
LEFT JOIN marks ON students.student_id = marks.student_id
WHERE marks.mark_id IS NULL;

🔸 9. Rank students by their total marks (DESC order)


(Using ORDER BY and GROUP BY)

SELECT students.name, SUM(marks.marks) AS total


FROM students
JOIN marks ON students.student_id = marks.student_id
GROUP BY students.name
ORDER BY total DESC;

🔸 10. Count how many subjects each student appeared in

SELECT students.name, COUNT(marks.subject) AS subject_count


FROM students
JOIN marks ON students.student_id = marks.student_id
GROUP BY students.name;

🔸 11. Get subject-wise highest marks and the student(s) who got it

SELECT m.subject, s.name, m.marks


FROM marks m
JOIN students s ON m.student_id = s.student_id
WHERE (m.subject, m.marks) IN (
SELECT subject, MAX(marks)
FROM marks
GROUP BY subject
);

🔸 12. Use CASE to assign grades based on marks

SELECT s.name, m.subject, m.marks,


CASE
WHEN m.marks >= 90 THEN 'A+'
WHEN m.marks >= 75 THEN 'A'
WHEN m.marks >= 60 THEN 'B'
ELSE 'C'
END AS grade
FROM students s
JOIN marks m ON s.student_id = m.student_id;

🔸 13. Assign Remarks Based on Marks


sql
CopyEdit
SELECT s.name, m.subject, m.marks,
CASE
WHEN m.marks >= 90 THEN 'Excellent'
WHEN m.marks >= 75 THEN 'Very Good'
WHEN m.marks >= 60 THEN 'Good'
WHEN m.marks >= 40 THEN 'Needs Improvement'
ELSE 'Fail'
END AS remarks
FROM students s
JOIN marks m ON s.student_id = m.student_id;

🔸 14. Pass or Fail Status


SELECT s.name, m.subject, m.marks,
CASE
WHEN m.marks >= 40 THEN 'Pass'
ELSE 'Fail'
END AS result
FROM students s
JOIN marks m ON s.student_id = m.student_id;

🔸 15. Add Grade Category and Result Together


SELECT s.name, m.subject, m.marks,
CASE
WHEN m.marks >= 90 THEN 'A+ - Pass'
WHEN m.marks >= 75 THEN 'A - Pass'
WHEN m.marks >= 60 THEN 'B - Pass'
WHEN m.marks >= 40 THEN 'C - Pass'
ELSE 'F - Fail'
END AS grade_result
FROM students s
JOIN marks m ON s.student_id = m.student_id;

🔸 16. Classify Subjects as 'Core' or 'Elective'

Assume:

 Core subjects: Math, English


 Elective subjects: Others

SELECT s.name, m.subject, m.marks,


CASE
WHEN m.subject IN ('Math', 'English') THEN 'Core'
ELSE 'Elective'
END AS subject_type
FROM students s
JOIN marks m ON s.student_id = m.student_id;

🔸 17. Combine Grade, Remarks, and Subject Type


SELECT s.name, m.subject, m.marks,
CASE
WHEN m.marks >= 90 THEN 'A+'
WHEN m.marks >= 75 THEN 'A'
WHEN m.marks >= 60 THEN 'B'
WHEN m.marks >= 40 THEN 'C'
ELSE 'F'
END AS grade,
CASE
WHEN m.subject IN ('Math', 'English') THEN 'Core'
ELSE 'Elective'
END AS subject_category
FROM students s
JOIN marks m ON s.student_id = m.student_id;

🔸 18. Identify Topper Students in Each Subject (Using Subquery + CASE)


SELECT s.name, m.subject, m.marks,
CASE
WHEN m.marks = (
SELECT MAX(m2.marks)
FROM marks m2
WHERE m2.subject = m.subject
)
THEN 'Topper'
ELSE 'Normal'
END AS performance
FROM students s
JOIN marks m ON s.student_id = m.student_id;

19. Give Bonus Marks Based on Performance


SELECT s.name, m.subject, m.marks,
CASE
WHEN m.marks >= 90 THEN m.marks + 5
WHEN m.marks >= 75 THEN m.marks + 3
ELSE m.marks
END AS adjusted_marks
FROM students s
JOIN marks m ON s.student_id = m.student_id;

🔸 20. Categorize Students Based on Total Marks


SELECT s.name,
SUM(m.marks) AS total_marks,
CASE
WHEN SUM(m.marks) >= 250 THEN 'Outstanding'
WHEN SUM(m.marks) >= 200 THEN 'Good'
WHEN SUM(m.marks) >= 150 THEN 'Average'
ELSE 'Needs Improvement'
END AS category
FROM students s
JOIN marks m ON s.student_id = m.student_id
GROUP BY s.name;

🔸 21. Identify Failing Subjects for Each Student


SELECT s.name, m.subject, m.marks,
CASE
WHEN m.marks < 40 THEN 'Failing'
ELSE 'Pass'
END AS status
FROM students s
JOIN marks m ON s.student_id = m.student_id;

🔸 22. Assign Letter Grades Based on Subject-Wise Performance


SELECT s.name, m.subject, m.marks,
CASE
WHEN m.marks BETWEEN 90 AND 100 THEN 'A'
WHEN m.marks BETWEEN 75 AND 89 THEN 'B'
WHEN m.marks BETWEEN 60 AND 74 THEN 'C'
WHEN m.marks BETWEEN 40 AND 59 THEN 'D'
ELSE 'F'
END AS letter_grade
FROM students s
JOIN marks m ON s.student_id = m.student_id;

🔸 23. Give Feedback Based on Marks and Subject


SELECT s.name, m.subject, m.marks,
CASE
WHEN m.subject = 'Math' AND m.marks < 50 THEN 'Needs more practice'
WHEN m.subject = 'English' AND m.marks < 50 THEN 'Improve grammar'
ELSE 'Satisfactory'
END AS feedback
FROM students s
JOIN marks m ON s.student_id = m.student_id;

🔸 24. Mark Attendance Status Based on Marks (Assumption)

(If marks are NULL, assume student was absent)

SELECT s.name, m.subject,


CASE
WHEN m.marks IS NULL THEN 'Absent'
ELSE 'Present'
END AS attendance_status
FROM students s
LEFT JOIN marks m ON s.student_id = m.student_id;

🔸 25. Give Scholarships Based on Total Marks


SELECT s.name, SUM(m.marks) AS total_marks,
CASE
WHEN SUM(m.marks) >= 270 THEN 'Full Scholarship'
WHEN SUM(m.marks) >= 220 THEN 'Half Scholarship'
ELSE 'No Scholarship'
END AS scholarship_status
FROM students s
JOIN marks m ON s.student_id = m.student_id
GROUP BY s.name;

You might also like