Advertisement
Guest User

Untitled

a guest
Jun 13th, 2018
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 6.32 KB | None | 0 0
  1. ------CREATING TABLES
  2.  
  3. CREATE TABLE Patient(
  4.     idPatient INTEGER NOT NULL,
  5.     FirstName VARCHAR2(30) NOT NULL,
  6.     LastName VARCHAR2(40) NOT NULL,
  7.     DateOfBirth DATE NOT NULL,
  8.     CONSTRAINT Patient_pk PRIMARY KEY (idPatient)
  9. );
  10.  
  11. CREATE TABLE Appointment (
  12.     idAppointment INTEGER NOT NULL,
  13.     idPatient INTEGER NOT NULL,
  14.     idDoctor INTEGER NOT NULL,
  15.     "Date" DATE NOT NULL,
  16.     price NUMBER(10,2) NOT NULL,
  17.     Description VARCHAR2(250),
  18.     CONSTRAINT Appointment_pk PRIMARY KEY (idAppointment)
  19. );
  20. CREATE TABLE  Doctor (
  21.     idDoctor INTEGER NOT NULL,
  22.     FirstName VARCHAR2(30) NOT NULL,
  23.     LastName VARCHAR2(40) NOT NULL,
  24.     Salary NUMBER(10,2) NOT NULL,
  25.     idSpecialization INTEGER NOT NULL,
  26.     CONSTRAINT Doctor_pk PRIMARY KEY (idDoctor)
  27. );
  28.  
  29. CREATE TABLE Specialization (
  30.     idSpecialization INTEGER NOT NULL,
  31.     Name VARCHAR(50) NOT NULL,
  32.     CONSTRAINT Specialization_pk PRIMARY KEY (idSpecialization)
  33. );
  34.  
  35. ALTER TABLE Appointment ADD CONSTRAINT Appointment_Patient
  36.     FOREIGN KEY (idPatient)
  37.     REFERENCES Patient (idPatient);
  38.    
  39. ALTER TABLE Appointment ADD CONSTRAINT Appointment_Doctor
  40.     FOREIGN KEY (idDoctor)
  41.     REFERENCES Doctor (idDoctor);
  42.    
  43. ALTER TABLE Doctor ADD CONSTRAINT Doctor_Specialization
  44.     FOREIGN KEY (idSpecialization)
  45.     REFERENCES Specialization (idSpecialization);
  46.    
  47. ------INSERTING VALUES
  48.  
  49. INSERT INTO Patient VALUES (1,'Mike','Wazowsky',TO_DATE('01/01/1989','DD/MM/YYYY'));
  50. INSERT INTO Patient VALUES (2,'John','Kovalsky',TO_DATE('02/03/1976','DD/MM/YYYY'));
  51. INSERT INTO Patient VALUES (3,'Anna','Bukowska',TO_DATE('23/11/1965','DD/MM/YYYY'));
  52. INSERT INTO Patient VALUES (4,'Chris','Cornell',TO_DATE('12/05/1983','DD/MM/YYYY'));
  53. INSERT INTO Patient VALUES (5,'Sara','Longfield',TO_DATE('04/02/1999','DD/MM/YYYY'));
  54. INSERT INTO Patient VALUES (6,'Tom','Tomson',TO_DATE('11/02/2003','DD/MM/YYYY'));
  55. INSERT INTO Patient VALUES (7,'John','Johnson',TO_DATE('31/12/2000','DD/MM/YYYY'));
  56. INSERT INTO Patient VALUES (8,'Alex','Schneider',TO_DATE('16/04/1989','DD/MM/YYYY'));
  57. INSERT INTO Patient VALUES (9,'John','Boddom',TO_DATE('10/01/2018','DD/MM/YYYY'));
  58. INSERT INTO Patient VALUES (10,'Rose','Moet',TO_DATE('21/03/2018','DD/MM/YYYY'));
  59.  
  60.  
  61. INSERT INTO Specialization VALUES (1,'Dentist');
  62. INSERT INTO Specialization VALUES (2,'Urologist');
  63. INSERT INTO Specialization VALUES (3,'Anasthesiologist');
  64. INSERT INTO Specialization VALUES (4,'Allergist');
  65. INSERT INTO Specialization VALUES (5,'Neurologist');
  66. INSERT INTO Specialization VALUES (6,'Nephrologist');
  67. INSERT INTO Specialization VALUES (7,'Gynecologist');
  68.  
  69.  
  70. INSERT INTO Doctor VALUES (1,'Tameka', 'Neese',4000,1);
  71. INSERT INTO Doctor VALUES (2,'Lilla', 'Molinaro',4200,2);
  72. INSERT INTO Doctor VALUES (3,'Dorian', 'Yates',4400,2);
  73. INSERT INTO Doctor VALUES (4,'Little', 'Pump',5000,3);
  74. INSERT INTO Doctor VALUES (5,'Kendrick', 'Lamar',4200,3);
  75. INSERT INTO Doctor VALUES (6,'Gazzy', 'Garcia',3800,4);
  76. INSERT INTO Doctor VALUES (7,'Lilla', 'Second',4200,5);
  77. INSERT INTO Doctor VALUES (8,'Goerge', 'Miller',5000,5);
  78. INSERT INTO Doctor VALUES (9,'Kasia', 'Mlokosiewicz',3500,5);
  79. INSERT INTO Doctor VALUES (10,'Charlie', 'Charlie',4600,6);
  80. INSERT INTO Doctor VALUES (11,'Martha', 'Molinaro',4200,7);
  81.  
  82. INSERT INTO Appointment VALUES (1,1,1,TO_DATE('11/01/2011', 'DD/MM/YYYY'),100,NULL);
  83. INSERT INTO Appointment VALUES (2,2,1,TO_DATE('13/12/2013', 'DD/MM/YYYY'),100,NULL);
  84. INSERT INTO Appointment VALUES (3,2,2,TO_DATE('12/11/2014', 'DD/MM/YYYY'),120,NULL);
  85. INSERT INTO Appointment VALUES (4,2,3,TO_DATE('13/05/2015', 'DD/MM/YYYY'),90,NULL);
  86. INSERT INTO Appointment VALUES (5,2,4,TO_DATE('11/01/2013', 'DD/MM/YYYY'),300,NULL);
  87. INSERT INTO Appointment VALUES (6,3,4,TO_DATE('13/02/2011', 'DD/MM/YYYY'),250,NULL);
  88. INSERT INTO Appointment VALUES (7,3,4,TO_DATE('13/05/2010', 'DD/MM/YYYY'),100,NULL);
  89. INSERT INTO Appointment VALUES (8,4,5,TO_DATE('11/11/2009', 'DD/MM/YYYY'),100,NULL);
  90. INSERT INTO Appointment VALUES (9,4,6,TO_DATE('03/03/2011', 'DD/MM/YYYY'),100,NULL);
  91. INSERT INTO Appointment VALUES (10,5,7,TO_DATE('05/06/2011', 'DD/MM/YYYY'),100,NULL);
  92. INSERT INTO Appointment VALUES (11,6,7,TO_DATE('11/11/2013', 'DD/MM/YYYY'),120,NULL);
  93. INSERT INTO Appointment VALUES (12,7,8,TO_DATE('12/03/2010', 'DD/MM/YYYY'),150,NULL);
  94. INSERT INTO Appointment VALUES (13,7,8,TO_DATE('01/10/2010', 'DD/MM/YYYY'),200,NULL);
  95. INSERT INTO Appointment VALUES (14,7,9,TO_DATE('01/01/2016', 'DD/MM/YYYY'),100,NULL);
  96. INSERT INTO Appointment VALUES (15,7,10,TO_DATE('02/11/2010', 'DD/MM/YYYY'),200,NULL);
  97. INSERT INTO Appointment VALUES (16,8,10,TO_DATE('04/04/2012', 'DD/MM/YYYY'),150,NULL);
  98. INSERT INTO Appointment VALUES (17,9,10,TO_DATE('11/02/2016', 'DD/MM/YYYY'),120,NULL);
  99. INSERT INTO Appointment VALUES (18,10,11,TO_DATE('31/12/2011', 'DD/MM/YYYY'),200,NULL);
  100.  
  101. -----QUERIES
  102.  
  103. --1. List names of the patients born in the year 2018.
  104. --The result must contain first name and last name in one column, labeled "Patient". Sort results in ascending order of first names.
  105.  
  106. SELECT p.firstname || ' ' || p.lastname "Patient" FROM patient p
  107. WHERE EXTRACT(YEAR FROM p.dateofbirth) = 2018
  108. ORDER BY p.firstname;
  109.  
  110. --2. List all appointments in the following form: patients’ first name, patients’ last name, doctors’ first name, doctor's last name.
  111.     --Result set must contain patients without any appointments.
  112. SELECT a.idappointment, p.firstname, p.lastname, d.firstname, d.lastname FROM appointment a right join patient p ON a.idpatient = p.idpatient
  113.                                                                                              join doctor d ON a.iddoctor = d.iddoctor;
  114.  
  115. --3. For each specialization, find number of doctors and their average salary.
  116. SELECT s.name, COUNT(d.iddoctor), AVG(d.salary) FROM specialization s join doctor d ON s.idspecialization = d.IDSPECIALIZATION
  117. GROUP BY s.name;
  118.  
  119. --4. Find number of appointments for each doctor in 2013. Results must additionally contain doctors’ first and last name.
  120.    --Exclude dentists (specialization) and doctors who had less than five appointments.
  121. SELECT DISTINCT d0.firstname,d0.lastname, (SELECT COUNT(a.idappointment) FROM appointment a join doctor d ON a.iddoctor = d.iddoctor WHERE d.iddoctor = d0.iddoctor)
  122. FROM doctor d0 join specialization s ON d0.idspecialization = s.idspecialization
  123.                  join appointment a0 ON d0.iddoctor = a0.iddoctor
  124.   WHERE s.name <> 'Dentist';
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement