w3resource

SQL Exercise: Patients with their doctors and medications

SQL hospital Database: Exercise-20 with Solution

20. From the following tables, write a SQL query to identify patients who have made an advanced appointment. Return Patient name as "Patient", Physician name as "Physician" and Medication name as "Medication".

Sample table: patient
    ssn    |       name        |      address       |  phone   | insuranceid | pcp
-----------+-------------------+--------------------+----------+-------------+-----
 100000001 | John Smith        | 42 Foobar Lane     | 555-0256 |    68476213 |   1
 100000002 | Grace Ritchie     | 37 Snafu Drive     | 555-0512 |    36546321 |   2
 100000003 | Random J. Patient | 101 Omgbbq Street  | 555-1204 |    65465421 |   2
 100000004 | Dennis Doe        | 1100 Foobaz Avenue | 555-2048 |    68421879 |   3
Sample table: prescribes
 physician |  patient  | medication |        date         | appointment | dose
-----------+-----------+------------+---------------------+-------------+------
         1 | 100000001 |          1 | 2008-04-24 10:47:00 |    13216584 | 5
         9 | 100000004 |          2 | 2008-04-27 10:53:00 |    86213939 | 10
         9 | 100000004 |          2 | 2008-04-30 16:53:00 |             | 5
Sample table: physician
 employeeid |       name        |           position           |    ssn
------------+-------------------+------------------------------+-----------
          1 | John Dorian       | Staff Internist              | 111111111
          2 | Elliot Reid       | Attending Physician          | 222222222
          3 | Christopher Turk  | Surgical Attending Physician | 333333333
          4 | Percival Cox      | Senior Attending Physician   | 444444444
          5 | Bob Kelso         | Head Chief of Medicine       | 555555555
          6 | Todd Quinlan      | Surgical Attending Physician | 666666666
          7 | John Wen          | Surgical Attending Physician | 777777777
          8 | Keith Dudemeister | MD Resident                  | 888888888
          9 | Molly Clock       | Attending Psychiatrist       | 999999999
Sample table: medication
 code |     name     |         brand         | description
------+--------------+-----------------------+-------------
    1 | Procrastin-X | X                     | N/A
    2 | Thesisin     | Foo Labs              | N/A
    3 | Awakin       | Bar Laboratories      | N/A
    4 | Crescavitin  | Baz Industries        | N/A
    5 | Melioraurin  | Snafu Pharmaceuticals | N/A

Sample Solution:

-- SELECTing patient name, physician name, and medication name where appointment is not NULL
SELECT t.name AS "Patient",
       p.name AS "Physician",
       m.name AS "Medication"
-- FROM patient table aliased as t
FROM patient t
-- INNER JOIN with prescribes table aliased as s based on patient's SSN
JOIN prescribes s ON s.patient = t.ssn
-- INNER JOIN with physician table aliased as p based on physician's employeeid
JOIN physician p ON s.physician = p.employeeid
-- INNER JOIN with medication table aliased as m based on medication code
JOIN medication m ON s.medication = m.code
-- WHERE clause filters results where appointment is not NULL
WHERE s.appointment IS NOT NULL;

Sample Output:

  Patient   |  Physician  |  Medication
------------+-------------+--------------
 John Smith | John Dorian | Procrastin-X
 Dennis Doe | Molly Clock | Thesisin
(2 rows)

Explanation:

The said query in SQL that returns information about medications prescribed to patients during their appointments, including the patient's name, the physician's name, and the medication name.

The query performs a join between the 'patient', 'prescribes', 'physician', and 'medication' tables, based on their relational columns.

The 'prescribes' and 'patient' tables are joins based on the patient and ssn columns, the 'prescribes' and 'physician tables are joins based on the physician and employeeid columns, and the 'medication ' and the 'prescribes' and 'medication' tables are joins based on the medication and code columns.

The included WHERE clause filters the results by medications that were prescribed during appointments. This is determined by checking whether the appointment identifier in the 'prescribes' table is not NULL.

Practice Online


E R Diagram of Hospital Database:

E R Diagram: SQL Hospital Database.

Have another way to solve this solution? Contribute your code (and comments) through Disqus.

Previous SQL Exercise: Names of patients, their doctors, and medications.
Next SQL Exercise: Find patients without an appointment.

What is the difficulty level of this exercise?

Test your Programming skills with w3resource's quiz.



Follow us on Facebook and Twitter for latest update.