diff --git a/AI/benchenina_souhaib/tp1_solution.sql b/AI/benchenina_souhaib/tp1_solution.sql new file mode 100644 index 0000000..601499b --- /dev/null +++ b/AI/benchenina_souhaib/tp1_solution.sql @@ -0,0 +1,173 @@ + +-- use the command "cat AI/benchenina_souhaib/tp1_solution.sql | ./sqlite3 dbtp.db" in the terminal to creat the tables of the first exercice + +-- making the skema first + + +CREATE TABLE Professors ( + professor_id INTEGER PRIMARY KEY AUTOINCREMENT, + first_name TEXT NOT NULL, + last_name TEXT NOT NULL, + department TEXT +); + + +CREATE TABLE Students ( + student_id INTEGER PRIMARY KEY AUTOINCREMENT, + first_name TEXT NOT NULL, + last_name TEXT NOT NULL, + email TEXT UNIQUE, + enrollment_date DATE DEFAULT CURRENT_DATE +); + + +CREATE TABLE Courses ( + course_id INTEGER PRIMARY KEY AUTOINCREMENT, + course_name TEXT NOT NULL, + credits INTEGER CHECK (credits > 0), + professor_id INTEGER, + FOREIGN KEY (professor_id) REFERENCES Professors(professor_id) +); + + +CREATE TABLE Enrollments ( + enrollment_id INTEGER PRIMARY KEY AUTOINCREMENT, + student_id INTEGER, + course_id INTEGER, + FOREIGN KEY (student_id) REFERENCES Students(student_id), + FOREIGN KEY (course_id) REFERENCES Courses(course_id) +); + + +CREATE TABLE Grades ( + grade_id INTEGER PRIMARY KEY AUTOINCREMENT, + enrollment_id INTEGER, + score REAL CHECK (score >= 0 AND score <= 20), + term TEXT, + FOREIGN KEY (enrollment_id) REFERENCES Enrollments(enrollment_id) +); + + +-- putting in all the people now + + +-- insterting the 6 techers +INSERT INTO Professors (first_name, last_name, department) VALUES +('Ahmed', 'Mansour', 'Computer Science'), +('Fatima', 'Zahra', 'Mathematics'), +('Omar', 'Al-Fayed', 'Physics'), +('Layla', 'Hassan', 'Computer Science'), +('Youssef', 'Berrada', 'Engineering'), +('Amira', 'Said', 'Mathematics'); + + +-- adding the 8 stundents +INSERT INTO Students (first_name, last_name, email) VALUES +('Yassine', 'Idrissi', 'yassine@univ.ma'), +('Khadija', 'Amrani', 'khadija@univ.ma'), +('Mustafa', 'Alami', 'mustafa@univ.ma'), +('Sanaa', 'Tazi', 'sanaa@univ.ma'), +('Hamza', 'Bennis', 'hamza@univ.ma'), +('Zineb', 'Toumi', 'zineb@univ.ma'), +('Walid', 'Kabbaj', 'walid@univ.ma'), +('Meryem', 'Fassi', 'meryem@univ.ma'); + + + +-- the 7 lessons +INSERT INTO Courses (course_name, credits, professor_id) VALUES +('Database Systems', 4, 1), +('Calculus I', 3, 2), +('Quantum Physics', 4, 3), +('Software Engineering', 4, 4), +('Data Structures', 4, 1), +('Linear Algebra', 3, 6), +('Thermodynamics', 3, 5); + + +-- the 15 signs ups +INSERT INTO Enrollments (student_id, course_id) VALUES +(1,1), (1,2), (2,1), (2,4), (3,1), (3,5), (4,2), (4,3), (5,4), (5,5), (6,6), (6,7), (7,1), (8,2), (8,7); + + +-- lastly the 12 marks +INSERT INTO Grades (enrollment_id, score, term) VALUES +(1, 18.5, 'Fall'), (2, 14.0, 'Fall'), (3, 16.0, 'Fall'), (4, 12.5, 'Fall'), +(5, 19.0, 'Fall'), (6, 15.5, 'Fall'), (7, 13.0, 'Fall'), (8, 17.5, 'Fall'), +(9, 11.0, 'Fall'), (10, 14.5, 'Fall'), (11, 16.5, 'Fall'), (12, 18.0, 'Fall'); + + + +-- here are the 30 quaries + + +-- just basic ones first +SELECT * FROM Students; + +SELECT first_name, last_name FROM Professors; + +SELECT course_name, credits FROM Courses WHERE credits > 3; + +SELECT * FROM Students WHERE enrollment_date > '2024-01-01'; + +SELECT DISTINCT department FROM Professors; + + + +-- joining tables together +SELECT s.first_name, c.course_name FROM Students s JOIN Enrollments e ON s.student_id = e.student_id JOIN Courses c ON e.course_id = c.course_id; + +SELECT c.course_name, p.last_name FROM Courses c JOIN Professors p ON c.professor_id = p.professor_id; + +SELECT s.first_name, g.score FROM Students s JOIN Enrollments e ON s.student_id = e.student_id JOIN Grades g ON e.enrollment_id = g.enrollment_id; + +SELECT p.first_name, c.course_name FROM Professors p LEFT JOIN Courses c ON p.professor_id = c.professor_id; + +SELECT s.first_name, s.last_name, c.course_name, g.score FROM Students s JOIN Enrollments e ON s.student_id = e.student_id JOIN Courses c ON e.course_id = c.course_id JOIN Grades g ON e.enrollment_id = g.enrollment_id; + + + +-- maths and counting +SELECT AVG(score) FROM Grades; + +SELECT COUNT(*) FROM Students; +SELECT department, COUNT(*) FROM Professors GROUP BY department; + +SELECT course_id, COUNT(*) FROM Enrollments GROUP BY course_id; + +SELECT MAX(score) FROM Grades; + + +-- sorting and filters +SELECT * FROM Students ORDER BY last_name ASC; + +SELECT * FROM Courses WHERE credits BETWEEN 3 AND 4; + +SELECT * FROM Students WHERE email LIKE '%@univ.ma'; + +SELECT * FROM Grades WHERE score >= 10; +SELECT student_id, COUNT(*) FROM Enrollments GROUP BY student_id HAVING COUNT(*) > 1; + + + +-- fancy subquaries +SELECT * FROM Students WHERE student_id IN (SELECT student_id FROM Enrollments WHERE course_id = 1); + +SELECT * FROM Courses WHERE professor_id = (SELECT professor_id FROM Professors WHERE last_name = 'Mansour'); + +SELECT first_name FROM Students WHERE student_id IN (SELECT student_id FROM Enrollments JOIN Grades USING(enrollment_id) WHERE score > 16); + +SELECT * FROM Professors WHERE professor_id NOT IN (SELECT professor_id FROM Courses); + +SELECT course_name FROM Courses WHERE credits = (SELECT MAX(credits) FROM Courses); + + +-- bits and bobs at the end +UPDATE Grades SET score = 20 WHERE score > 19; +SELECT s.first_name, AVG(g.score) FROM Students s JOIN Enrollments e ON s.student_id = e.student_id JOIN Grades g ON e.enrollment_id = g.enrollment_id GROUP BY s.student_id; + +SELECT term, COUNT(*) FROM Grades GROUP BY term; + +SELECT * FROM Students WHERE student_id NOT IN (SELECT student_id FROM Enrollments); + +SELECT department FROM Professors GROUP BY department HAVING COUNT(*) > 1; \ No newline at end of file diff --git a/AI/benchenina_souhaib/tp2_solution.sql b/AI/benchenina_souhaib/tp2_solution.sql new file mode 100644 index 0000000..a7c9532 --- /dev/null +++ b/AI/benchenina_souhaib/tp2_solution.sql @@ -0,0 +1,194 @@ +-- use the command "cat AI/benchenina_souhaib/tp2_solution.sql | ./sqlite3 dbtp.db" in the terminal to creat the tables of the first exercice +-- making the hospital tables now + +CREATE TABLE Doctors ( + doctor_id INTEGER PRIMARY KEY AUTOINCREMENT, + first_name TEXT NOT NULL, + last_name TEXT NOT NULL, + specialization TEXT, + department TEXT, + phone TEXT +); + + +CREATE TABLE Patients ( + patient_id INTEGER PRIMARY KEY AUTOINCREMENT, + first_name TEXT NOT NULL, + last_name TEXT NOT NULL, + date_of_birth DATE, + gender TEXT, + address TEXT, + phone TEXT +); + + +CREATE TABLE Appointments ( + appointment_id INTEGER PRIMARY KEY AUTOINCREMENT, + patient_id INTEGER, + doctor_id INTEGER, + appointment_date DATETIME NOT NULL, + reason TEXT, + status TEXT DEFAULT 'Scheduled', + FOREIGN KEY (patient_id) REFERENCES Patients(patient_id), + FOREIGN KEY (doctor_id) REFERENCES Doctors(doctor_id) +); + + +CREATE TABLE Medications ( + medication_id INTEGER PRIMARY KEY AUTOINCREMENT, + name TEXT NOT NULL, + dosage TEXT, + description TEXT +); + + +CREATE TABLE Prescriptions ( + prescription_id INTEGER PRIMARY KEY AUTOINCREMENT, + appointment_id INTEGER, + medication_id INTEGER, + instructions TEXT, + FOREIGN KEY (appointment_id) REFERENCES Appointments(appointment_id), + FOREIGN KEY (medication_id) REFERENCES Medications(medication_id) +); + + +-- putting in the data... hope I didnt miss anyone + + +-- adding the 6 docctors +INSERT INTO Doctors (first_name, last_name, specialization, department, phone) VALUES +('Hicham', 'El-Guerrouj', 'Cardiology', 'Internal Medicine', '0611223344'), +('Nawal', 'El-Moutawakel', 'Pediatrics', 'Children Unit', '0622334455'), +('Said', 'Aouita', 'Neurology', 'Neurological Sciences', '0633445566'), +('Nesrine', 'Slama', 'General Medicine', 'Emergency', '0644556677'), +('Mehdi', 'Benatia', 'Orthopedics', 'Surgery', '0655667788'), +('Hakim', 'Ziyech', 'Dermatology', 'Outpatient', '0666778899'); + + + +-- adding the 8 patiennts +INSERT INTO Patients (first_name, last_name, date_of_birth, gender, address, phone) VALUES +('Soufiane', 'Rahimi', '1996-06-02', 'Male', 'Casablanca', '0701020304'), + +('Brahim', 'Diaz', '1999-08-03', 'Male', 'Tangier', '0702030405'), +('Salma', 'Amani', '1992-04-15', 'Female', 'Rabat', '0703040506'), +('Fatima', 'Tagnaout', '1999-01-20', 'Female', 'Agadir', '0704050607'), +('Achraf', 'Hakimi', '1998-11-04', 'Male', 'Madrid', '0705060708'), + +('Youssef', 'En-Nesyri', '1997-06-01', 'Male', 'Fes', '0706070809'), + +('Sofyan', 'Amrabat', '1996-08-21', 'Male', 'Florence', '0707080910'), +('Romain', 'SaΓ―ss', '1990-03-26', 'Male', 'Istanbul', '0708091011'); + + +-- setting up the 15 meets +INSERT INTO Appointments (patient_id, doctor_id, appointment_date, reason, status) VALUES +(1, 1, '2026-02-20 09:00:00', 'Chest pain', 'Completed'), +(2, 4, '2026-02-21 10:30:00', 'Flu symptoms', 'Scheduled'), +(3, 2, '2026-02-21 14:00:00', 'Child checkup', 'Scheduled'), +(4, 6, '2026-02-22 11:00:00', 'Skin rash', 'Scheduled'), +(5, 1, '2026-02-23 08:45:00', 'Heart follow-up', 'Scheduled'), +(6, 5, '2026-02-24 13:00:00', 'Knee injury', 'Completed'), +(7, 3, '2026-02-25 15:30:00', 'Headache', 'Scheduled'), +(8, 5, '2026-02-26 10:00:00', 'Back pain', 'Scheduled'), +(1, 4, '2026-02-27 09:15:00', 'General fatigue', 'Scheduled'), +(2, 1, '2026-02-28 11:30:00', 'Artery check', 'Scheduled'), + +(3, 2, '2026-03-01 14:45:00', 'Fever', 'Scheduled'), +(5, 5, '2026-03-02 16:00:00', 'Ankle sprain', 'Scheduled'), +(6, 6, '2026-03-03 09:00:00', 'Acne treatment', 'Scheduled'), +(7, 3, '2026-03-04 11:00:00', 'Nerve test', 'Scheduled'), +(8, 1, '2026-03-05 10:30:00', 'Blood pressure', 'Scheduled'); + + + +-- some pills and stuff +INSERT INTO Medications (name, dosage, description) VALUES +('Aspirin', '100mg', 'Blood thinner'), +('Paracetamol', '500mg', 'Pain reliever'), +('Amoxicillin', '250mg', 'Antibiotic'), +('Loratadine', '10mg', 'Antihistamine'); + + +INSERT INTO Prescriptions (appointment_id, medication_id, instructions) VALUES +(1, 1, 'Once daily after breakfast'), +(2, 2, 'Every 6 hours if fever'), +(6, 2, 'Twice daily for pain'), +(4, 4, 'Before bed'); + + + +-- the big list of quaries for the hospital + + +-- easy ones to start with +SELECT * FROM Patients; + +SELECT first_name, last_name FROM Doctors WHERE specialization = 'Cardiology'; + +SELECT * FROM Appointments WHERE status = 'Scheduled'; + +SELECT name FROM Medications ORDER BY name ASC; + +SELECT DISTINCT department FROM Doctors; + + + +-- looking across different tables +SELECT p.first_name, d.last_name, a.appointment_date FROM Patients p JOIN Appointments a ON p.patient_id = a.patient_id JOIN Doctors d ON a.doctor_id = d.doctor_id; + +SELECT a.appointment_id, m.name, pr.instructions FROM Appointments a JOIN Prescriptions pr ON a.appointment_id = pr.appointment_id JOIN Medications m ON pr.medication_id = m.medication_id; + +SELECT d.first_name, a.reason FROM Doctors d LEFT JOIN Appointments a ON d.doctor_id = a.doctor_id; + +SELECT p.first_name, a.status FROM Patients p JOIN Appointments a ON p.patient_id = a.patient_id WHERE a.doctor_id = 5; + +SELECT d.last_name, p.last_name FROM Doctors d JOIN Appointments a ON d.doctor_id = a.doctor_id JOIN Patients p ON a.patient_id = p.patient_id WHERE a.status = 'Completed'; + + + +-- counting and stuff +SELECT COUNT(*) FROM Patients; + +SELECT department, COUNT(*) FROM Doctors GROUP BY department; + +SELECT status, COUNT(*) FROM Appointments GROUP BY status; + +SELECT doctor_id, COUNT(*) FROM Appointments GROUP BY doctor_id HAVING COUNT(*) > 2; + +SELECT patient_id, COUNT(*) FROM Appointments GROUP BY patient_id; +SELECT AVG(strftime('%Y', 'now') - strftime('%Y', date_of_birth)) AS avg_age FROM Patients; + +SELECT MAX(appointment_date) FROM Appointments; + +SELECT specialization, COUNT(*) FROM Doctors GROUP BY specialization; + +SELECT COUNT(DISTINCT patient_id) FROM Appointments; +SELECT MIN(appointment_date) FROM Appointments WHERE status = 'Scheduled'; + + + +-- bit more complext ones +SELECT * FROM Patients WHERE patient_id IN (SELECT patient_id FROM Appointments WHERE doctor_id = 1); + +SELECT * FROM Doctors WHERE doctor_id NOT IN (SELECT doctor_id FROM Appointments); + +SELECT first_name FROM Patients WHERE patient_id IN (SELECT patient_id FROM Appointments WHERE reason LIKE '%pain%'); + +SELECT * FROM Medications WHERE medication_id IN (SELECT medication_id FROM Prescriptions); +SELECT * FROM Patients WHERE strftime('%Y', date_of_birth) > '1995'; + + + +-- final lot of quaries + + +SELECT * FROM Appointments WHERE appointment_date BETWEEN '2026-02-20' AND '2026-02-25'; + +UPDATE Appointments SET status = 'Completed' WHERE appointment_id = 2; +SELECT p.first_name, d.first_name, a.appointment_date FROM Patients p JOIN Appointments a ON p.patient_id = a.patient_id JOIN Doctors d ON a.doctor_id = d.doctor_id WHERE d.department = 'Internal Medicine'; + +SELECT * FROM Patients WHERE address = 'Casablanca' OR address = 'Tangier'; + + +SELECT d.first_name, COUNT(a.appointment_id) AS total FROM Doctors d JOIN Appointments a ON d.doctor_id = a.doctor_id GROUP BY d.doctor_id ORDER BY total DESC; \ No newline at end of file diff --git a/sqlite3.exe b/sqlite3.exe new file mode 100644 index 0000000..e935bee Binary files /dev/null and b/sqlite3.exe differ diff --git a/submissions/AI/README.md b/submissions/AI/README.md deleted file mode 100644 index f2bd62b..0000000 --- a/submissions/AI/README.md +++ /dev/null @@ -1,48 +0,0 @@ - -# πŸ“ Submissions - AI Specialty (Artificial Intelligence) - -## πŸ‘₯ students_AI - -### Expected structure - -Each student must create their own folder following this format: - -AI/ -β”œβ”€β”€ lastname_firstname/ -β”‚ β”œβ”€β”€ tp1_solutions.sql -β”‚ └── tp2_solutions.sql - -### Example - -AI/ -β”œβ”€β”€ benali_ahmed/ -β”‚ β”œβ”€β”€ tp1_solutions.sql -β”‚ └── tp2_solutions.sql -β”œβ”€β”€ kaddour_fatima/ -β”‚ β”œβ”€β”€ tp1_solutions.sql -β”‚ └── tp2_solutions.sql - -## How to submit? - -1. **Fork** this repository -2. Create your folder: submissions/AI/your_lastname_firstname/ -3. Add your solution files -4. Create a **Pull Request** with title: [AI] TP1 - LASTNAME Firstname - -## ⚠️ Important rules - -- Folder name: **lowercase**, **no spaces**, **no accents** -- Good: benali_ahmed -- Bad: Benali Ahmed, benali-ahmed -- Files: tp1_solutions.sql and tp2_solutions.sql -- Test your code before submission -- No plagiarism (automatic detection) - -## πŸ“Š Progress - -- **TP1 submitted:** 0/35 -- **TP2 submitted:** 0/35 - -*Last update: February 02, 2026* - -**Good luck! ** diff --git a/submissions/SS/README.md b/submissions/SS/README.md deleted file mode 100644 index 3054cff..0000000 --- a/submissions/SS/README.md +++ /dev/null @@ -1,111 +0,0 @@ -# πŸ“ Submissions - SS Specialty (Cyber Security) - -## students - -### Expected structure - -Each student must create a folder with their name containing 2 SQL files. - -**Folder name format:** `lastname_firstname/` -**Required files:** -- `tp1_solutions.sql` -- `tp2_solutions.sql` - -### Example - -**Student Riad MEZIANE creates:** -- Folder: `meziane_riad/` -- File 1: `meziane_riad/tp1_solutions.sql` -- File 2: `meziane_riad/tp2_solutions.sql` - -**Student Nadia TALEB creates:** -- Folder: `taleb_nadia/` -- File 1: `taleb_nadia/tp1_solutions.sql` -- File 2: `taleb_nadia/tp2_solutions.sql` - ---- - -## βœ… How to submit your work? - -### Step 1: Fork the repository -1. Click the **"Fork"** button at the top right of this page -2. GitHub will create a copy in your account - -### Step 2: Create your folder -1. In YOUR fork, go to `submissions/SS/` -2. Click **"Add file"** β†’ **"Create new file"** -3. Type: `your_lastname_firstname/tp1_solutions.sql` - - Example: `meziane_riad/tp1_solutions.sql` -4. Paste your SQL solutions -5. Click **"Commit new file"** -6. Repeat for `tp2_solutions.sql` - -### Step 3: Submit (Pull Request) -1. Go to your fork's main page -2. Click **"Contribute"** β†’ **"Open pull request"** -3. Title: `[SS] TP1 - MEZIANE Riad` -4. Click **"Create pull request"** - - **Done!** Your professor will receive your submission. - ---- - -## ⚠️ Important Rules - -### Folder naming -- Format: `lastname_firstname` -- All **lowercase** -- Use **underscore** `_` between lastname and firstname -- NO spaces -- NO accents or special characters -- NO hyphens `-` - -**Good examples:** -- `meziane_riad` -- `taleb_nadia` -- `cherif_kamel` - -**Bad examples:** -- `Meziane Riad` (has space and capital letters) -- `meziane-riad` (uses hyphen instead of underscore) -- `MezianeRiad` (no underscore, capital letters) -- `mΓ©ziane_riad` (has accents) - -### File naming -- `tp1_solutions.sql` (exactly this name) -- `tp2_solutions.sql` (exactly this name) - -### Code quality -- Test all queries before submitting -- Add comments to explain your logic -- Use proper SQL formatting -- **NO plagiarism** (automatic detection) - ---- - -## πŸ“Š Progress Tracking - -| Status | TP1 | TP2 | -|--------|-----|-----| -| Submitted | 0/35 | 0/35 | -| Under Review | 0/35 | 0/35 | -| Approved | 0/35 | 0/35 | - -*Last update: February 02, 2026* - ---- - -## πŸ“… Deadlines - -| Assignment | Due Date | Status | -|------------|----------|--------| -| TP1 | February 17, 2026 | Open | -| TP2 | March 17, 2026 | Open | - -⚠️ **No late submissions accepted** - ---- - ---- - -**Good luck! πŸš€**