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

1b Queries

Uploaded by

subikshajh
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
4 views

1b Queries

Uploaded by

subikshajh
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 5

-- Creating Students Table

CREATE TABLE Students3 (


student_id INT PRIMARY KEY,
student_name VARCHAR(100),
gender VARCHAR(10),
dob DATE,
District VARCHAR(100)
);

-- Creating Programmes Table


CREATE TABLE Programmes (
programme_id INT PRIMARY KEY,
programme_name VARCHAR(50)
);

-- Creating Subjects Table


CREATE TABLE Subjects1 (
subject_id INT PRIMARY KEY,
subject_name VARCHAR(100),
programme_id INT,
FOREIGN KEY (programme_id) REFERENCES Programmes(programme_id)
);

-- Creating Teachers Table


CREATE TABLE Teachers1 (
teacher_id INT PRIMARY KEY,
teacher_name VARCHAR(100)
);

-- Creating TeachingAssignments Table


CREATE TABLE TeachingAssignments1 (
assignment_id INT PRIMARY KEY,
teacher_id INT,
subject_id INT,
FOREIGN KEY (teacher_id) REFERENCES Teachers1(teacher_id),
FOREIGN KEY (subject_id) REFERENCES Subjects1(subject_id)
);

-- Creating Marks Table


CREATE TABLE Marks1 (
mark_id INT PRIMARY KEY,
student_id INT,
subject_id INT,
marks_obtained FLOAT,
FOREIGN KEY (student_id) REFERENCES Students3(student_id),
FOREIGN KEY (subject_id) REFERENCES Subjects1(subject_id)
);

-- Creating Fees1 Table


CREATE TABLE Fees1 (
fee_id INT PRIMARY KEY,
student_id INT,
amount_paid DECIMAL(10, 2),
payment_date DATE,
FOREIGN KEY (student_id) REFERENCES Students3(student_id)
);
----------------------------------------------------------------------------------------------------------------------------
*QUERIES AND THEIR ANSWERS*

1. SELECT student_name FROM Students3


WHERE student_id NOT IN (SELECT student_id FROM Fees1);

2. SELECT s.student_name, sub.subject_name, m.marks_obtained FROM Marks1 m


JOIN Students3 s ON m.student_id = s.student_id
JOIN Subjects1 sub ON m.subject_id = sub.subject_id
WHERE m.marks_obtained > 10 ORDER BY sub.subject_name DESC;

3. SELECT student_name FROM Students3


WHERE gender = 'Female' AND District = 'Chennai';
4. SELECT s.student_name, ROUND((SUM(m.marks_obtained) /
(SELECT SUM(max_marks) FROM Subjects
WHERE programme_id = p.programme_id)) * 100, 2) as percentage
FROM Marks m
JOIN Students s ON m.student_id = s.student_id
JOIN Programmes p ON s.programme_id = p.programme_id
GROUP BY s.student_id HAVING percentage > 75;

5. SELECT student_name, district, dob


FROM Students3
WHERE (TRUNC(SYSDATE) - dob) / 365 > 19;

6. SELECT sub.subject_name FROM TeachingAssignments1 ta


JOIN Subjects1 sub ON ta.subject_id = sub.subject_id
JOIN Teachers1 t ON ta.teacher_id = t.teacher_id
WHERE t.teacher_name = 'Teacher Name';

7. SELECT p.programme_name, s.student_name, SUM(m.marks_obtained) as total_marks


FROM Marks1 m
JOIN Students3 s ON m.student_id = s.student_id
JOIN Programmes1 p ON s.programme_id = p.programme_id
GROUP BY p.programme_id, s.student_id
ORDER BY total_marks DESC
LIMIT 1;

8. SELECT s.student_name, p.programme_name, SUM(f.amount_paid) as total_paid


FROM Fees1 f
JOIN Students3 s ON f.student_id = s.student_id
JOIN Programmes1 p ON s.programme_id = p.programme_id
GROUP BY s.student_id;
*TRIGGER*
9. CREATE OR REPLACE TRIGGER prevent_dml_on_sundays
BEFORE INSERT OR UPDATE OR DELETE ON EMPLOYEE
FOR EACH ROW
DECLARE
current_day VARCHAR2(9);
BEGIN
-- Get the current day of the week
SELECT TO_CHAR(SYSDATE, 'Day') INTO current_day FROM dual;
-- Trim any extra spaces available for day names
current_day := TRIM(current_day);

-- Check whether today is Sunday


IF current_day = 'Sunday' THEN
RAISE_APPLICATION_ERROR(-20001, 'DML operations are not allowed on Sundays.');
END IF;
END;

*CURSOR* (PL/ SQL)


10 . CREATE OR REPLACE PROCEDURE find_top_3_scores AS
CURSOR top_scores_cursor IS
SELECT student_id, score
FROM (
SELECT student_id, score
FROM EXAMINATION
ORDER BY score DESC
)
WHERE ROWNUM <= 3;

v_student_id EXAMINATION.student_id%TYPE;
v_score EXAMINATION.score%TYPE;
BEGIN
-- Open the cursor
OPEN top_scores_cursor;

-- Fetch the top 3 scores and display them


LOOP
FETCH top_scores_cursor INTO v_student_id, v_score;
EXIT WHEN top_scores_cursor%NOTFOUND;

DBMS_OUTPUT.PUT_LINE('Student ID: ' || v_student_id || ', Score: ' || v_score);


END LOOP;

-- Close the cursor


CLOSE top_scores_cursor;
END;

--CREATE EXAMINATION TABLE


CREATE TABLE EXAMINATION (
student_id NUMBER,
score NUMBER
);

--INSERT EXAMINATION TABLE


INSERT INTO EXAMINATION (student_id, score) VALUES (1, 95);
INSERT INTO EXAMINATION (student_id, score) VALUES (2, 92);
INSERT INTO EXAMINATION (student_id, score) VALUES (3, 89);
INSERT INTO EXAMINATION (student_id, score) VALUES (4, 85);
INSERT INTO EXAMINATION (student_id, score) VALUES (5, 80);

You might also like