If you’re reading this, it’s likely that you’ve acquired an understanding of basic SELECT and FROM clauses. It’s also likely upon doing so, you have uncovered a hard truth: to solve many real-world problems, sourcing of data from multiple tables is required. This is where the JOIN clause comes into play.
The JOIN clause allows you to combine rows from two or more tables based on one or more related columns within the tables. Within this clause, instructions for combining the rows from the respective tables is required. These instructions will be specified within an ON clause by providing the table names, related column, and condition(s) required. It’s important to note there are six join types: CROSS, FULL, LEFT, INNER, RIGHT, and SELF. When the type is not explicitly mentioned, it is understood to be an INNER JOIN. For the purposes of this discussion and to first examine the most commonly used join type, we’ll consider the default join type, INNER and use the JOIN keyword alone. I’ve created separate pages dedicated to discussing each join type. To jump to those dedicated pages, use the links below or expand the JOINs section of the SQL Fundamentals sub-menu and choose the desired page.
CROSS JOIN
FULL JOIN
LEFT JOIN
INNER JOIN
RIGHT JOIN
SELF JOIN
JOINs can be confusing without a concrete example including data, visuals, and a real-world problem, so let’s introduce those before continuing further.
Example Data
In our example, there exists two tables, employees and jobs. The employees table contains one row per employee and within each row, data associated with the employee is stored. Similarly, the jobs table contains one row per job and within each row, data associated with the job is stored. For clarity, I’ve provided each table’s structure and example data below. The schema, corresponding tables, and data can be found at livesql.oracle.com.
Employees
| employee_id | first_name | last_name | phone_number | hire_date | job_id | salary | commission_pct | manager_id | department_id | |
|---|---|---|---|---|---|---|---|---|---|---|
| 100 | Steven | King | SKING | 515.123.4567 | 17-Jun-03 | AD_PRES | 24000 | – | – | 90 |
| 101 | Neena | Kochhar | NKOCHHAR | 515.123.4568 | 21-Sep-05 | AD_VP | 17000 | – | 100 | 90 |
| 102 | Lex | De Haan | LDEHAAN | 515.123.4569 | 13-Jan-01 | AD_VP | 17000 | – | 100 | 90 |
| 103 | Alexander | Hunold | AHUNOLD | 590.423.4567 | 3-Jan-06 | IT_PROG | 9000 | – | 102 | 60 |
| 104 | Bruce | Ernst | BERNST | 590.423.4568 | 21-May-07 | IT_PROG | 6000 | – | 103 | 60 |
| 105 | David | Austin | DAUSTIN | 590.423.4569 | 25-Jun-05 | IT_PROG | 4800 | – | 103 | 60 |
| 106 | Valli | Pataballa | VPATABAL | 590.423.4560 | 5-Feb-06 | IT_PROG | 4800 | – | 103 | 60 |
| 107 | Diana | Lorentz | DLORENTZ | 590.423.5567 | 7-Feb-07 | IT_PROG | 4200 | – | 103 | 60 |
| 108 | Nancy | Greenberg | NGREENBE | 515.124.4569 | 17-Aug-02 | FI_MGR | 12008 | – | 101 | 100 |
| 109 | Daniel | Faviet | DFAVIET | 515.124.4169 | 16-Aug-02 | FI_ACCOUNT | 9000 | – | 108 | 100 |
| 110 | John | Chen | JCHEN | 515.124.4269 | 28-Sep-05 | FI_ACCOUNT | 8200 | – | 108 | 100 |
| 111 | Ismael | Sciarra | ISCIARRA | 515.124.4369 | 30-Sep-05 | FI_ACCOUNT | 7700 | – | 108 | 100 |
| 112 | Jose Manuel | Urman | JMURMAN | 515.124.4469 | 7-Mar-06 | FI_ACCOUNT | 7800 | – | 108 | 100 |
| 113 | Luis | Popp | LPOPP | 515.124.4567 | 7-Dec-07 | FI_ACCOUNT | 6900 | – | 108 | 100 |
| 114 | Den | Raphaely | DRAPHEAL | 515.127.4561 | 7-Dec-02 | PU_MAN | 11000 | – | 100 | 30 |
| 115 | Alexander | Khoo | AKHOO | 515.127.4562 | 18-May-03 | PU_CLERK | 3100 | – | 114 | 30 |
| 116 | Shelli | Baida | SBAIDA | 515.127.4563 | 24-Dec-05 | PU_CLERK | 2900 | – | 114 | 30 |
| 117 | Sigal | Tobias | STOBIAS | 515.127.4564 | 24-Jul-05 | PU_CLERK | 2800 | – | 114 | 30 |
| 118 | Guy | Himuro | GHIMURO | 515.127.4565 | 15-Nov-06 | PU_CLERK | 2600 | – | 114 | 30 |
| 119 | Karen | Colmenares | KCOLMENA | 515.127.4566 | 10-Aug-07 | PU_CLERK | 2500 | – | 114 | 30 |
| 120 | Matthew | Weiss | MWEISS | 650.123.1234 | 18-Jul-04 | ST_MAN | 8000 | – | 100 | 50 |
| 121 | Adam | Fripp | AFRIPP | 650.123.2234 | 10-Apr-05 | ST_MAN | 8200 | – | 100 | 50 |
| 122 | Payam | Kaufling | PKAUFLIN | 650.123.3234 | 1-May-03 | ST_MAN | 7900 | – | 100 | 50 |
| 123 | Shanta | Vollman | SVOLLMAN | 650.123.4234 | 10-Oct-05 | ST_MAN | 6500 | – | 100 | 50 |
| 124 | Kevin | Mourgos | KMOURGOS | 650.123.5234 | 16-Nov-07 | ST_MAN | 5800 | – | 100 | 50 |
| 125 | Julia | Nayer | JNAYER | 650.124.1214 | 16-Jul-05 | ST_CLERK | 3200 | – | 120 | 50 |
| 126 | Irene | Mikkilineni | IMIKKILI | 650.124.1224 | 28-Sep-06 | ST_CLERK | 2700 | – | 120 | 50 |
| 127 | James | Landry | JLANDRY | 650.124.1334 | 14-Jan-07 | ST_CLERK | 2400 | – | 120 | 50 |
| 128 | Steven | Markle | SMARKLE | 650.124.1434 | 8-Mar-08 | ST_CLERK | 2200 | – | 120 | 50 |
| 129 | Laura | Bissot | LBISSOT | 650.124.5234 | 20-Aug-05 | ST_CLERK | 3300 | – | 121 | 50 |
| 130 | Mozhe | Atkinson | MATKINSO | 650.124.6234 | 30-Oct-05 | ST_CLERK | 2800 | – | 121 | 50 |
| 131 | James | Marlow | JAMRLOW | 650.124.7234 | 16-Feb-05 | ST_CLERK | 2500 | – | 121 | 50 |
| 132 | TJ | Olson | TJOLSON | 650.124.8234 | 10-Apr-07 | ST_CLERK | 2100 | – | 121 | 50 |
| 133 | Jason | Mallin | JMALLIN | 650.127.1934 | 14-Jun-04 | ST_CLERK | 3300 | – | 122 | 50 |
| 134 | Michael | Rogers | MROGERS | 650.127.1834 | 26-Aug-06 | ST_CLERK | 2900 | – | 122 | 50 |
| 135 | Ki | Gee | KGEE | 650.127.1734 | 12-Dec-07 | ST_CLERK | 2400 | – | 122 | 50 |
| 136 | Hazel | Philtanker | HPHILTAN | 650.127.1634 | 6-Feb-08 | ST_CLERK | 2200 | – | 122 | 50 |
| 137 | Renske | Ladwig | RLADWIG | 650.121.1234 | 14-Jul-03 | ST_CLERK | 3600 | – | 123 | 50 |
| 138 | Stephen | Stiles | SSTILES | 650.121.2034 | 26-Oct-05 | ST_CLERK | 3200 | – | 123 | 50 |
| 139 | John | Seo | JSEO | 650.121.2019 | 12-Feb-06 | ST_CLERK | 2700 | – | 123 | 50 |
| 140 | Joshua | Patel | JPATEL | 650.121.1834 | 6-Apr-06 | ST_CLERK | 2500 | – | 123 | 50 |
| 141 | Trenna | Rajs | TRAJS | 650.121.8009 | 17-Oct-03 | ST_CLERK | 3500 | – | 124 | 50 |
| 142 | Curtis | Davies | CDAVIES | 650.121.2994 | 29-Jan-05 | ST_CLERK | 3100 | – | 124 | 50 |
| 143 | Randall | Matos | RMATOS | 650.121.2874 | 15-Mar-06 | ST_CLERK | 2600 | – | 124 | 50 |
| 144 | Peter | Vargas | PVARGAS | 650.121.2004 | 9-Jul-06 | ST_CLERK | 2500 | – | 124 | 50 |
| 145 | John | Russell | JRUSSEL | 011.44.1344.429268 | 1-Oct-04 | SA_MAN | 14000 | 0.4 | 100 | 80 |
| 146 | Karen | Partners | KPARTNER | 011.44.1344.467268 | 5-Jan-05 | SA_MAN | 13500 | 0.3 | 100 | 80 |
| 147 | Alberto | Errazuriz | AERRAZUR | 011.44.1344.429278 | 10-Mar-05 | SA_MAN | 12000 | 0.3 | 100 | 80 |
| 148 | Gerald | Cambrault | GCAMBRAU | 011.44.1344.619268 | 15-Oct-07 | SA_MAN | 11000 | 0.3 | 100 | 80 |
| 149 | Eleni | Zlotkey | EZLOTKEY | 011.44.1344.429018 | 29-Jan-08 | SA_MAN | 10500 | 0.2 | 100 | 80 |
| 150 | Peter | Tucker | PTUCKER | 011.44.1344.129268 | 30-Jan-05 | SA_REP | 10000 | 0.3 | 145 | 80 |
| 151 | David | Bernstein | DBERNSTE | 011.44.1344.345268 | 24-Mar-05 | SA_REP | 9500 | 0.25 | 145 | 80 |
| 152 | Peter | Hall | PHALL | 011.44.1344.478968 | 20-Aug-05 | SA_REP | 9000 | 0.25 | 145 | 80 |
| 153 | Christopher | Olsen | COLSEN | 011.44.1344.498718 | 30-Mar-06 | SA_REP | 8000 | 0.2 | 145 | 80 |
| 154 | Nanette | Cambrault | NCAMBRAU | 011.44.1344.987668 | 9-Dec-06 | SA_REP | 7500 | 0.2 | 145 | 80 |
| 155 | Oliver | Tuvault | OTUVAULT | 011.44.1344.486508 | 23-Nov-07 | SA_REP | 7000 | 0.15 | 145 | 80 |
| 156 | Janette | King | JKING | 011.44.1345.429268 | 30-Jan-04 | SA_REP | 10000 | 0.35 | 146 | 80 |
| 157 | Patrick | Sully | PSULLY | 011.44.1345.929268 | 4-Mar-04 | SA_REP | 9500 | 0.35 | 146 | 80 |
| 158 | Allan | McEwen | AMCEWEN | 011.44.1345.829268 | 1-Aug-04 | SA_REP | 9000 | 0.35 | 146 | 80 |
| 159 | Lindsey | Smith | LSMITH | 011.44.1345.729268 | 10-Mar-05 | SA_REP | 8000 | 0.3 | 146 | 80 |
| 160 | Louise | Doran | LDORAN | 011.44.1345.629268 | 15-Dec-05 | SA_REP | 7500 | 0.3 | 146 | 80 |
| 161 | Sarath | Sewall | SSEWALL | 011.44.1345.529268 | 3-Nov-06 | SA_REP | 7000 | 0.25 | 146 | 80 |
| 162 | Clara | Vishney | CVISHNEY | 011.44.1346.129268 | 11-Nov-05 | SA_REP | 10500 | 0.25 | 147 | 80 |
| 163 | Danielle | Greene | DGREENE | 011.44.1346.229268 | 19-Mar-07 | SA_REP | 9500 | 0.15 | 147 | 80 |
| 164 | Mattea | Marvins | MMARVINS | 011.44.1346.329268 | 24-Jan-08 | SA_REP | 7200 | 0.1 | 147 | 80 |
| 165 | David | Lee | DLEE | 011.44.1346.529268 | 23-Feb-08 | SA_REP | 6800 | 0.1 | 147 | 80 |
| 166 | Sundar | Ande | SANDE | 011.44.1346.629268 | 24-Mar-08 | SA_REP | 6400 | 0.1 | 147 | 80 |
| 167 | Amit | Banda | ABANDA | 011.44.1346.729268 | 21-Apr-08 | SA_REP | 6200 | 0.1 | 147 | 80 |
| 168 | Lisa | Ozer | LOZER | 011.44.1343.929268 | 11-Mar-05 | SA_REP | 11500 | 0.25 | 148 | 80 |
| 169 | Harrison | Bloom | HBLOOM | 011.44.1343.829268 | 23-Mar-06 | SA_REP | 10000 | 0.2 | 148 | 80 |
| 170 | Tayler | Fox | TFOX | 011.44.1343.729268 | 24-Jan-06 | SA_REP | 9600 | 0.2 | 148 | 80 |
| 171 | William | Smith | WSMITH | 011.44.1343.629268 | 23-Feb-07 | SA_REP | 7400 | 0.15 | 148 | 80 |
| 172 | Elizabeth | Bates | EBATES | 011.44.1343.529268 | 24-Mar-07 | SA_REP | 7300 | 0.15 | 148 | 80 |
| 173 | Sundita | Kumar | SKUMAR | 011.44.1343.329268 | 21-Apr-08 | SA_REP | 6100 | 0.1 | 148 | 80 |
| 174 | Ellen | Abel | EABEL | 011.44.1644.429267 | 11-May-04 | SA_REP | 11000 | 0.3 | 149 | 80 |
| 175 | Alyssa | Hutton | AHUTTON | 011.44.1644.429266 | 19-Mar-05 | SA_REP | 8800 | 0.25 | 149 | 80 |
| 176 | Jonathon | Taylor | JTAYLOR | 011.44.1644.429265 | 24-Mar-06 | SA_REP | 8600 | 0.2 | 149 | 80 |
| 177 | Jack | Livingston | JLIVINGS | 011.44.1644.429264 | 23-Apr-06 | SA_REP | 8400 | 0.2 | 149 | 80 |
| 178 | Kimberely | Grant | KGRANT | 011.44.1644.429263 | 24-May-07 | SA_REP | 7000 | 0.15 | 149 | – |
| 179 | Charles | Johnson | CJOHNSON | 011.44.1644.429262 | 4-Jan-08 | SA_REP | 6200 | 0.1 | 149 | 80 |
| 180 | Winston | Taylor | WTAYLOR | 650.507.9876 | 24-Jan-06 | SH_CLERK | 3200 | – | 120 | 50 |
| 181 | Jean | Fleaur | JFLEAUR | 650.507.9877 | 23-Feb-06 | SH_CLERK | 3100 | – | 120 | 50 |
| 182 | Martha | Sullivan | MSULLIVA | 650.507.9878 | 21-Jun-07 | SH_CLERK | 2500 | – | 120 | 50 |
| 183 | Girard | Geoni | GGEONI | 650.507.9879 | 3-Feb-08 | SH_CLERK | 2800 | – | 120 | 50 |
| 184 | Nandita | Sarchand | NSARCHAN | 650.509.1876 | 27-Jan-04 | SH_CLERK | 4200 | – | 121 | 50 |
| 185 | Alexis | Bull | ABULL | 650.509.2876 | 20-Feb-05 | SH_CLERK | 4100 | – | 121 | 50 |
| 186 | Julia | Dellinger | JDELLING | 650.509.3876 | 24-Jun-06 | SH_CLERK | 3400 | – | 121 | 50 |
| 187 | Anthony | Cabrio | ACABRIO | 650.509.4876 | 7-Feb-07 | SH_CLERK | 3000 | – | 121 | 50 |
| 188 | Kelly | Chung | KCHUNG | 650.505.1876 | 14-Jun-05 | SH_CLERK | 3800 | – | 122 | 50 |
| 189 | Jennifer | Dilly | JDILLY | 650.505.2876 | 13-Aug-05 | SH_CLERK | 3600 | – | 122 | 50 |
| 190 | Timothy | Gates | TGATES | 650.505.3876 | 11-Jul-06 | SH_CLERK | 2900 | – | 122 | 50 |
| 191 | Randall | Perkins | RPERKINS | 650.505.4876 | 19-Dec-07 | SH_CLERK | 2500 | – | 122 | 50 |
| 192 | Sarah | Bell | SBELL | 650.501.1876 | 4-Feb-04 | SH_CLERK | 4000 | – | 123 | 50 |
| 193 | Britney | Everett | BEVERETT | 650.501.2876 | 3-Mar-05 | SH_CLERK | 3900 | – | 123 | 50 |
| 194 | Samuel | McCain | SMCCAIN | 650.501.3876 | 1-Jul-06 | SH_CLERK | 3200 | – | 123 | 50 |
| 195 | Vance | Jones | VJONES | 650.501.4876 | 17-Mar-07 | SH_CLERK | 2800 | – | 123 | 50 |
| 196 | Alana | Walsh | AWALSH | 650.507.9811 | 24-Apr-06 | SH_CLERK | 3100 | – | 124 | 50 |
| 197 | Kevin | Feeney | KFEENEY | 650.507.9822 | 23-May-06 | SH_CLERK | 3000 | – | 124 | 50 |
| 198 | Donald | OConnell | DOCONNEL | 650.507.9833 | 21-Jun-07 | SH_CLERK | 2600 | – | 124 | 50 |
| 199 | Douglas | Grant | DGRANT | 650.507.9844 | 13-Jan-08 | SH_CLERK | 2600 | – | 124 | 50 |
| 200 | Jennifer | Whalen | JWHALEN | 515.123.4444 | 17-Sep-03 | AD_ASST | 4400 | – | 101 | 10 |
| 201 | Michael | Hartstein | MHARTSTE | 515.123.5555 | 17-Feb-04 | MK_MAN | 13000 | – | 100 | 20 |
| 202 | Pat | Fay | PFAY | 603.123.6666 | 17-Aug-05 | MK_REP | 6000 | – | 201 | 20 |
| 203 | Susan | Mavris | SMAVRIS | 515.123.7777 | 7-Jun-02 | HR_REP | 6500 | – | 101 | 40 |
| 204 | Hermann | Baer | HBAER | 515.123.8888 | 7-Jun-02 | PR_REP | 10000 | – | 101 | 70 |
| 205 | Shelley | Higgins | SHIGGINS | 515.123.8080 | 7-Jun-02 | AC_MGR | 12008 | – | 101 | 110 |
| 206 | William | Gietz | WGIETZ | 515.123.8181 | 7-Jun-02 | AC_ACCOUNT | 8300 | – | 205 | 110 |
Jobs
| job_id | job_title | min_salary | max_salary |
|---|---|---|---|
| AD_PRES | President | 20080 | 40000 |
| AD_VP | Administration Vice President | 15000 | 30000 |
| AD_ASST | Administration Assistant | 3000 | 6000 |
| FI_MGR | Finance Manager | 8200 | 16000 |
| FI_ACCOUNT | Accountant | 4200 | 9000 |
| AC_MGR | Accounting Manager | 8200 | 16000 |
| AC_ACCOUNT | Public Accountant | 4200 | 9000 |
| SA_MAN | Sales Manager | 10000 | 20080 |
| SA_REP | Sales Representative | 6000 | 12008 |
| PU_MAN | Purchasing Manager | 8000 | 15000 |
| PU_CLERK | Purchasing Clerk | 2500 | 5500 |
| ST_MAN | Stock Manager | 5500 | 8500 |
| ST_CLERK | Stock Clerk | 2008 | 5000 |
| SH_CLERK | Shipping Clerk | 2500 | 5500 |
| IT_PROG | Programmer | 4000 | 10000 |
| MK_MAN | Marketing Manager | 9000 | 15000 |
| MK_REP | Marketing Representative | 4000 | 9000 |
| HR_REP | Human Resources Representative | 4000 | 9000 |
| PR_REP | Public Relations Representative | 4500 | 10500 |
Real-world Problem
Build a report containing each employee’s ID, job ID, job title, salary, and the minimum and maximum salary associated with the employee’s job.
Let’s now return to developing an understanding on JOINs and how this concept will help you solve the real-world problem above.
JOINs Continued
Based on the example data above, the columns required in the report are spread out across two tables, employees and jobs. These tables have a related column, job ID. This is not a coincidence. The tables have been purposely designed this way to minimize redundancy and permit the lookup of each employee’s job ID and data associated with each job within the jobs table. This is known as a primary key–foreign key relationship. The job ID serves as a primary key in the jobs table and as a foreign key in the employees table. Additionally, each job ID within the jobs table can be found within zero or more rows in the employees table and each employee’s job ID can be found within exactly one row in the jobs table. The plain English translation is an employee is assigned one and only one job and a job is assigned to zero or more employees. We’ll take advantage of this relationship in solving the example problem.
Solving the Problem Using JOINs
We’ll combine the two tables’ rows using the JOIN and ON clauses. The basic syntax for the JOIN clause is below.
schema_1.table_1 JOIN schema_2.table_2
By replacing the tables on the left and right side of the JOIN keyword, we have the following:
hr.employees JOIN hr.jobs
The next step is to specify the condition or criteria for combining the rows from each table in the ON clause. The basic syntax for the ON clause is below.
ON schema_1.table_1.column_1 = schema_2.table_2.column_2
For our problem, we are interested in retrieving the details associated with each employee’s job ID value. Therefore, we’ll combine the rows from the employees and jobs tables based on matching job ID values by specifying so in the ON clause.
ON hr.employees.job_id = hr.jobs.job_id
As a result of the joining operation, each employee’s associated job details from the jobs table are accessible within the rows. The code and corresponding output is below.
SELECT
hr.employees.*,
hr.jobs.*
FROM
hr.employees
JOIN
hr.jobs
ON hr.employees.job_id = hr.jobs.job_id;
| employee_id | first_name | last_name | phone_number | hire_date | job_id | salary | commission_pct | manager_id | department_id | job_id | job_title | min_salary | max_salary | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 206 | William | Gietz | WGIETZ | 515.123.8181 | 7-Jun-02 | AC_ACCOUNT | 8300 | – | 205 | 110 | AC_ACCOUNT | Public Accountant | 4200 | 9000 |
| 205 | Shelley | Higgins | SHIGGINS | 515.123.8080 | 7-Jun-02 | AC_MGR | 12008 | – | 101 | 110 | AC_MGR | Accounting Manager | 8200 | 16000 |
| 200 | Jennifer | Whalen | JWHALEN | 515.123.4444 | 17-Sep-03 | AD_ASST | 4400 | – | 101 | 10 | AD_ASST | Administration Assistant | 3000 | 6000 |
| 100 | Steven | King | SKING | 515.123.4567 | 17-Jun-03 | AD_PRES | 24000 | – | – | 90 | AD_PRES | President | 20080 | 40000 |
| 102 | Lex | De Haan | LDEHAAN | 515.123.4569 | 13-Jan-01 | AD_VP | 17000 | – | 100 | 90 | AD_VP | Administration Vice President | 15000 | 30000 |
| 101 | Neena | Kochhar | NKOCHHAR | 515.123.4568 | 21-Sep-05 | AD_VP | 17000 | – | 100 | 90 | AD_VP | Administration Vice President | 15000 | 30000 |
| 110 | John | Chen | JCHEN | 515.124.4269 | 28-Sep-05 | FI_ACCOUNT | 8200 | – | 108 | 100 | FI_ACCOUNT | Accountant | 4200 | 9000 |
| 109 | Daniel | Faviet | DFAVIET | 515.124.4169 | 16-Aug-02 | FI_ACCOUNT | 9000 | – | 108 | 100 | FI_ACCOUNT | Accountant | 4200 | 9000 |
| 113 | Luis | Popp | LPOPP | 515.124.4567 | 7-Dec-07 | FI_ACCOUNT | 6900 | – | 108 | 100 | FI_ACCOUNT | Accountant | 4200 | 9000 |
| 111 | Ismael | Sciarra | ISCIARRA | 515.124.4369 | 30-Sep-05 | FI_ACCOUNT | 7700 | – | 108 | 100 | FI_ACCOUNT | Accountant | 4200 | 9000 |
| 112 | Jose Manuel | Urman | JMURMAN | 515.124.4469 | 7-Mar-06 | FI_ACCOUNT | 7800 | – | 108 | 100 | FI_ACCOUNT | Accountant | 4200 | 9000 |
| 108 | Nancy | Greenberg | NGREENBE | 515.124.4569 | 17-Aug-02 | FI_MGR | 12008 | – | 101 | 100 | FI_MGR | Finance Manager | 8200 | 16000 |
| 203 | Susan | Mavris | SMAVRIS | 515.123.7777 | 7-Jun-02 | HR_REP | 6500 | – | 101 | 40 | HR_REP | Human Resources Representative | 4000 | 9000 |
| 103 | Alexander | Hunold | AHUNOLD | 590.423.4567 | 3-Jan-06 | IT_PROG | 9000 | – | 102 | 60 | IT_PROG | Programmer | 4000 | 10000 |
| 104 | Bruce | Ernst | BERNST | 590.423.4568 | 21-May-07 | IT_PROG | 6000 | – | 103 | 60 | IT_PROG | Programmer | 4000 | 10000 |
| 107 | Diana | Lorentz | DLORENTZ | 590.423.5567 | 7-Feb-07 | IT_PROG | 4200 | – | 103 | 60 | IT_PROG | Programmer | 4000 | 10000 |
| 106 | Valli | Pataballa | VPATABAL | 590.423.4560 | 5-Feb-06 | IT_PROG | 4800 | – | 103 | 60 | IT_PROG | Programmer | 4000 | 10000 |
| 105 | David | Austin | DAUSTIN | 590.423.4569 | 25-Jun-05 | IT_PROG | 4800 | – | 103 | 60 | IT_PROG | Programmer | 4000 | 10000 |
| 201 | Michael | Hartstein | MHARTSTE | 515.123.5555 | 17-Feb-04 | MK_MAN | 13000 | – | 100 | 20 | MK_MAN | Marketing Manager | 9000 | 15000 |
| 202 | Pat | Fay | PFAY | 603.123.6666 | 17-Aug-05 | MK_REP | 6000 | – | 201 | 20 | MK_REP | Marketing Representative | 4000 | 9000 |
| 204 | Hermann | Baer | HBAER | 515.123.8888 | 7-Jun-02 | PR_REP | 10000 | – | 101 | 70 | PR_REP | Public Relations Representative | 4500 | 10500 |
| 116 | Shelli | Baida | SBAIDA | 515.127.4563 | 24-Dec-05 | PU_CLERK | 2900 | – | 114 | 30 | PU_CLERK | Purchasing Clerk | 2500 | 5500 |
| 115 | Alexander | Khoo | AKHOO | 515.127.4562 | 18-May-03 | PU_CLERK | 3100 | – | 114 | 30 | PU_CLERK | Purchasing Clerk | 2500 | 5500 |
| 117 | Sigal | Tobias | STOBIAS | 515.127.4564 | 24-Jul-05 | PU_CLERK | 2800 | – | 114 | 30 | PU_CLERK | Purchasing Clerk | 2500 | 5500 |
| 118 | Guy | Himuro | GHIMURO | 515.127.4565 | 15-Nov-06 | PU_CLERK | 2600 | – | 114 | 30 | PU_CLERK | Purchasing Clerk | 2500 | 5500 |
| 119 | Karen | Colmenares | KCOLMENA | 515.127.4566 | 10-Aug-07 | PU_CLERK | 2500 | – | 114 | 30 | PU_CLERK | Purchasing Clerk | 2500 | 5500 |
| 114 | Den | Raphaely | DRAPHEAL | 515.127.4561 | 7-Dec-02 | PU_MAN | 11000 | – | 100 | 30 | PU_MAN | Purchasing Manager | 8000 | 15000 |
| 148 | Gerald | Cambrault | GCAMBRAU | 011.44.1344.619268 | 15-Oct-07 | SA_MAN | 11000 | 0.3 | 100 | 80 | SA_MAN | Sales Manager | 10000 | 20080 |
| 147 | Alberto | Errazuriz | AERRAZUR | 011.44.1344.429278 | 10-Mar-05 | SA_MAN | 12000 | 0.3 | 100 | 80 | SA_MAN | Sales Manager | 10000 | 20080 |
| 146 | Karen | Partners | KPARTNER | 011.44.1344.467268 | 5-Jan-05 | SA_MAN | 13500 | 0.3 | 100 | 80 | SA_MAN | Sales Manager | 10000 | 20080 |
| 145 | John | Russell | JRUSSEL | 011.44.1344.429268 | 1-Oct-04 | SA_MAN | 14000 | 0.4 | 100 | 80 | SA_MAN | Sales Manager | 10000 | 20080 |
| 149 | Eleni | Zlotkey | EZLOTKEY | 011.44.1344.429018 | 29-Jan-08 | SA_MAN | 10500 | 0.2 | 100 | 80 | SA_MAN | Sales Manager | 10000 | 20080 |
| 155 | Oliver | Tuvault | OTUVAULT | 011.44.1344.486508 | 23-Nov-07 | SA_REP | 7000 | 0.15 | 145 | 80 | SA_REP | Sales Representative | 6000 | 12008 |
| 156 | Janette | King | JKING | 011.44.1345.429268 | 30-Jan-04 | SA_REP | 10000 | 0.35 | 146 | 80 | SA_REP | Sales Representative | 6000 | 12008 |
| 157 | Patrick | Sully | PSULLY | 011.44.1345.929268 | 4-Mar-04 | SA_REP | 9500 | 0.35 | 146 | 80 | SA_REP | Sales Representative | 6000 | 12008 |
| 158 | Allan | McEwen | AMCEWEN | 011.44.1345.829268 | 1-Aug-04 | SA_REP | 9000 | 0.35 | 146 | 80 | SA_REP | Sales Representative | 6000 | 12008 |
| 159 | Lindsey | Smith | LSMITH | 011.44.1345.729268 | 10-Mar-05 | SA_REP | 8000 | 0.3 | 146 | 80 | SA_REP | Sales Representative | 6000 | 12008 |
| 160 | Louise | Doran | LDORAN | 011.44.1345.629268 | 15-Dec-05 | SA_REP | 7500 | 0.3 | 146 | 80 | SA_REP | Sales Representative | 6000 | 12008 |
| 161 | Sarath | Sewall | SSEWALL | 011.44.1345.529268 | 3-Nov-06 | SA_REP | 7000 | 0.25 | 146 | 80 | SA_REP | Sales Representative | 6000 | 12008 |
| 179 | Charles | Johnson | CJOHNSON | 011.44.1644.429262 | 4-Jan-08 | SA_REP | 6200 | 0.1 | 149 | 80 | SA_REP | Sales Representative | 6000 | 12008 |
| 163 | Danielle | Greene | DGREENE | 011.44.1346.229268 | 19-Mar-07 | SA_REP | 9500 | 0.15 | 147 | 80 | SA_REP | Sales Representative | 6000 | 12008 |
| 164 | Mattea | Marvins | MMARVINS | 011.44.1346.329268 | 24-Jan-08 | SA_REP | 7200 | 0.1 | 147 | 80 | SA_REP | Sales Representative | 6000 | 12008 |
| 165 | David | Lee | DLEE | 011.44.1346.529268 | 23-Feb-08 | SA_REP | 6800 | 0.1 | 147 | 80 | SA_REP | Sales Representative | 6000 | 12008 |
| 166 | Sundar | Ande | SANDE | 011.44.1346.629268 | 24-Mar-08 | SA_REP | 6400 | 0.1 | 147 | 80 | SA_REP | Sales Representative | 6000 | 12008 |
| 167 | Amit | Banda | ABANDA | 011.44.1346.729268 | 21-Apr-08 | SA_REP | 6200 | 0.1 | 147 | 80 | SA_REP | Sales Representative | 6000 | 12008 |
| 168 | Lisa | Ozer | LOZER | 011.44.1343.929268 | 11-Mar-05 | SA_REP | 11500 | 0.25 | 148 | 80 | SA_REP | Sales Representative | 6000 | 12008 |
| 169 | Harrison | Bloom | HBLOOM | 011.44.1343.829268 | 23-Mar-06 | SA_REP | 10000 | 0.2 | 148 | 80 | SA_REP | Sales Representative | 6000 | 12008 |
| 170 | Tayler | Fox | TFOX | 011.44.1343.729268 | 24-Jan-06 | SA_REP | 9600 | 0.2 | 148 | 80 | SA_REP | Sales Representative | 6000 | 12008 |
| 171 | William | Smith | WSMITH | 011.44.1343.629268 | 23-Feb-07 | SA_REP | 7400 | 0.15 | 148 | 80 | SA_REP | Sales Representative | 6000 | 12008 |
| 172 | Elizabeth | Bates | EBATES | 011.44.1343.529268 | 24-Mar-07 | SA_REP | 7300 | 0.15 | 148 | 80 | SA_REP | Sales Representative | 6000 | 12008 |
| 173 | Sundita | Kumar | SKUMAR | 011.44.1343.329268 | 21-Apr-08 | SA_REP | 6100 | 0.1 | 148 | 80 | SA_REP | Sales Representative | 6000 | 12008 |
| 174 | Ellen | Abel | EABEL | 011.44.1644.429267 | 11-May-04 | SA_REP | 11000 | 0.3 | 149 | 80 | SA_REP | Sales Representative | 6000 | 12008 |
| 175 | Alyssa | Hutton | AHUTTON | 011.44.1644.429266 | 19-Mar-05 | SA_REP | 8800 | 0.25 | 149 | 80 | SA_REP | Sales Representative | 6000 | 12008 |
| 176 | Jonathon | Taylor | JTAYLOR | 011.44.1644.429265 | 24-Mar-06 | SA_REP | 8600 | 0.2 | 149 | 80 | SA_REP | Sales Representative | 6000 | 12008 |
| 177 | Jack | Livingston | JLIVINGS | 011.44.1644.429264 | 23-Apr-06 | SA_REP | 8400 | 0.2 | 149 | 80 | SA_REP | Sales Representative | 6000 | 12008 |
| 178 | Kimberely | Grant | KGRANT | 011.44.1644.429263 | 24-May-07 | SA_REP | 7000 | 0.15 | 149 | – | SA_REP | Sales Representative | 6000 | 12008 |
| 154 | Nanette | Cambrault | NCAMBRAU | 011.44.1344.987668 | 9-Dec-06 | SA_REP | 7500 | 0.2 | 145 | 80 | SA_REP | Sales Representative | 6000 | 12008 |
| 153 | Christopher | Olsen | COLSEN | 011.44.1344.498718 | 30-Mar-06 | SA_REP | 8000 | 0.2 | 145 | 80 | SA_REP | Sales Representative | 6000 | 12008 |
| 152 | Peter | Hall | PHALL | 011.44.1344.478968 | 20-Aug-05 | SA_REP | 9000 | 0.25 | 145 | 80 | SA_REP | Sales Representative | 6000 | 12008 |
| 151 | David | Bernstein | DBERNSTE | 011.44.1344.345268 | 24-Mar-05 | SA_REP | 9500 | 0.25 | 145 | 80 | SA_REP | Sales Representative | 6000 | 12008 |
| 150 | Peter | Tucker | PTUCKER | 011.44.1344.129268 | 30-Jan-05 | SA_REP | 10000 | 0.3 | 145 | 80 | SA_REP | Sales Representative | 6000 | 12008 |
| 162 | Clara | Vishney | CVISHNEY | 011.44.1346.129268 | 11-Nov-05 | SA_REP | 10500 | 0.25 | 147 | 80 | SA_REP | Sales Representative | 6000 | 12008 |
| 184 | Nandita | Sarchand | NSARCHAN | 650.509.1876 | 27-Jan-04 | SH_CLERK | 4200 | – | 121 | 50 | SH_CLERK | Shipping Clerk | 2500 | 5500 |
| 185 | Alexis | Bull | ABULL | 650.509.2876 | 20-Feb-05 | SH_CLERK | 4100 | – | 121 | 50 | SH_CLERK | Shipping Clerk | 2500 | 5500 |
| 186 | Julia | Dellinger | JDELLING | 650.509.3876 | 24-Jun-06 | SH_CLERK | 3400 | – | 121 | 50 | SH_CLERK | Shipping Clerk | 2500 | 5500 |
| 187 | Anthony | Cabrio | ACABRIO | 650.509.4876 | 7-Feb-07 | SH_CLERK | 3000 | – | 121 | 50 | SH_CLERK | Shipping Clerk | 2500 | 5500 |
| 188 | Kelly | Chung | KCHUNG | 650.505.1876 | 14-Jun-05 | SH_CLERK | 3800 | – | 122 | 50 | SH_CLERK | Shipping Clerk | 2500 | 5500 |
| 189 | Jennifer | Dilly | JDILLY | 650.505.2876 | 13-Aug-05 | SH_CLERK | 3600 | – | 122 | 50 | SH_CLERK | Shipping Clerk | 2500 | 5500 |
| 190 | Timothy | Gates | TGATES | 650.505.3876 | 11-Jul-06 | SH_CLERK | 2900 | – | 122 | 50 | SH_CLERK | Shipping Clerk | 2500 | 5500 |
| 191 | Randall | Perkins | RPERKINS | 650.505.4876 | 19-Dec-07 | SH_CLERK | 2500 | – | 122 | 50 | SH_CLERK | Shipping Clerk | 2500 | 5500 |
| 192 | Sarah | Bell | SBELL | 650.501.1876 | 4-Feb-04 | SH_CLERK | 4000 | – | 123 | 50 | SH_CLERK | Shipping Clerk | 2500 | 5500 |
| 193 | Britney | Everett | BEVERETT | 650.501.2876 | 3-Mar-05 | SH_CLERK | 3900 | – | 123 | 50 | SH_CLERK | Shipping Clerk | 2500 | 5500 |
| 194 | Samuel | McCain | SMCCAIN | 650.501.3876 | 1-Jul-06 | SH_CLERK | 3200 | – | 123 | 50 | SH_CLERK | Shipping Clerk | 2500 | 5500 |
| 195 | Vance | Jones | VJONES | 650.501.4876 | 17-Mar-07 | SH_CLERK | 2800 | – | 123 | 50 | SH_CLERK | Shipping Clerk | 2500 | 5500 |
| 196 | Alana | Walsh | AWALSH | 650.507.9811 | 24-Apr-06 | SH_CLERK | 3100 | – | 124 | 50 | SH_CLERK | Shipping Clerk | 2500 | 5500 |
| 197 | Kevin | Feeney | KFEENEY | 650.507.9822 | 23-May-06 | SH_CLERK | 3000 | – | 124 | 50 | SH_CLERK | Shipping Clerk | 2500 | 5500 |
| 198 | Donald | OConnell | DOCONNEL | 650.507.9833 | 21-Jun-07 | SH_CLERK | 2600 | – | 124 | 50 | SH_CLERK | Shipping Clerk | 2500 | 5500 |
| 199 | Douglas | Grant | DGRANT | 650.507.9844 | 13-Jan-08 | SH_CLERK | 2600 | – | 124 | 50 | SH_CLERK | Shipping Clerk | 2500 | 5500 |
| 180 | Winston | Taylor | WTAYLOR | 650.507.9876 | 24-Jan-06 | SH_CLERK | 3200 | – | 120 | 50 | SH_CLERK | Shipping Clerk | 2500 | 5500 |
| 181 | Jean | Fleaur | JFLEAUR | 650.507.9877 | 23-Feb-06 | SH_CLERK | 3100 | – | 120 | 50 | SH_CLERK | Shipping Clerk | 2500 | 5500 |
| 182 | Martha | Sullivan | MSULLIVA | 650.507.9878 | 21-Jun-07 | SH_CLERK | 2500 | – | 120 | 50 | SH_CLERK | Shipping Clerk | 2500 | 5500 |
| 183 | Girard | Geoni | GGEONI | 650.507.9879 | 3-Feb-08 | SH_CLERK | 2800 | – | 120 | 50 | SH_CLERK | Shipping Clerk | 2500 | 5500 |
| 132 | TJ | Olson | TJOLSON | 650.124.8234 | 10-Apr-07 | ST_CLERK | 2100 | – | 121 | 50 | ST_CLERK | Stock Clerk | 2008 | 5000 |
| 143 | Randall | Matos | RMATOS | 650.121.2874 | 15-Mar-06 | ST_CLERK | 2600 | – | 124 | 50 | ST_CLERK | Stock Clerk | 2008 | 5000 |
| 142 | Curtis | Davies | CDAVIES | 650.121.2994 | 29-Jan-05 | ST_CLERK | 3100 | – | 124 | 50 | ST_CLERK | Stock Clerk | 2008 | 5000 |
| 141 | Trenna | Rajs | TRAJS | 650.121.8009 | 17-Oct-03 | ST_CLERK | 3500 | – | 124 | 50 | ST_CLERK | Stock Clerk | 2008 | 5000 |
| 140 | Joshua | Patel | JPATEL | 650.121.1834 | 6-Apr-06 | ST_CLERK | 2500 | – | 123 | 50 | ST_CLERK | Stock Clerk | 2008 | 5000 |
| 125 | Julia | Nayer | JNAYER | 650.124.1214 | 16-Jul-05 | ST_CLERK | 3200 | – | 120 | 50 | ST_CLERK | Stock Clerk | 2008 | 5000 |
| 126 | Irene | Mikkilineni | IMIKKILI | 650.124.1224 | 28-Sep-06 | ST_CLERK | 2700 | – | 120 | 50 | ST_CLERK | Stock Clerk | 2008 | 5000 |
| 127 | James | Landry | JLANDRY | 650.124.1334 | 14-Jan-07 | ST_CLERK | 2400 | – | 120 | 50 | ST_CLERK | Stock Clerk | 2008 | 5000 |
| 128 | Steven | Markle | SMARKLE | 650.124.1434 | 8-Mar-08 | ST_CLERK | 2200 | – | 120 | 50 | ST_CLERK | Stock Clerk | 2008 | 5000 |
| 129 | Laura | Bissot | LBISSOT | 650.124.5234 | 20-Aug-05 | ST_CLERK | 3300 | – | 121 | 50 | ST_CLERK | Stock Clerk | 2008 | 5000 |
| 130 | Mozhe | Atkinson | MATKINSO | 650.124.6234 | 30-Oct-05 | ST_CLERK | 2800 | – | 121 | 50 | ST_CLERK | Stock Clerk | 2008 | 5000 |
| 131 | James | Marlow | JAMRLOW | 650.124.7234 | 16-Feb-05 | ST_CLERK | 2500 | – | 121 | 50 | ST_CLERK | Stock Clerk | 2008 | 5000 |
| 144 | Peter | Vargas | PVARGAS | 650.121.2004 | 9-Jul-06 | ST_CLERK | 2500 | – | 124 | 50 | ST_CLERK | Stock Clerk | 2008 | 5000 |
| 133 | Jason | Mallin | JMALLIN | 650.127.1934 | 14-Jun-04 | ST_CLERK | 3300 | – | 122 | 50 | ST_CLERK | Stock Clerk | 2008 | 5000 |
| 134 | Michael | Rogers | MROGERS | 650.127.1834 | 26-Aug-06 | ST_CLERK | 2900 | – | 122 | 50 | ST_CLERK | Stock Clerk | 2008 | 5000 |
| 135 | Ki | Gee | KGEE | 650.127.1734 | 12-Dec-07 | ST_CLERK | 2400 | – | 122 | 50 | ST_CLERK | Stock Clerk | 2008 | 5000 |
| 136 | Hazel | Philtanker | HPHILTAN | 650.127.1634 | 6-Feb-08 | ST_CLERK | 2200 | – | 122 | 50 | ST_CLERK | Stock Clerk | 2008 | 5000 |
| 137 | Renske | Ladwig | RLADWIG | 650.121.1234 | 14-Jul-03 | ST_CLERK | 3600 | – | 123 | 50 | ST_CLERK | Stock Clerk | 2008 | 5000 |
| 138 | Stephen | Stiles | SSTILES | 650.121.2034 | 26-Oct-05 | ST_CLERK | 3200 | – | 123 | 50 | ST_CLERK | Stock Clerk | 2008 | 5000 |
| 139 | John | Seo | JSEO | 650.121.2019 | 12-Feb-06 | ST_CLERK | 2700 | – | 123 | 50 | ST_CLERK | Stock Clerk | 2008 | 5000 |
| 124 | Kevin | Mourgos | KMOURGOS | 650.123.5234 | 16-Nov-07 | ST_MAN | 5800 | – | 100 | 50 | ST_MAN | Stock Manager | 5500 | 8500 |
| 123 | Shanta | Vollman | SVOLLMAN | 650.123.4234 | 10-Oct-05 | ST_MAN | 6500 | – | 100 | 50 | ST_MAN | Stock Manager | 5500 | 8500 |
| 122 | Payam | Kaufling | PKAUFLIN | 650.123.3234 | 1-May-03 | ST_MAN | 7900 | – | 100 | 50 | ST_MAN | Stock Manager | 5500 | 8500 |
| 121 | Adam | Fripp | AFRIPP | 650.123.2234 | 10-Apr-05 | ST_MAN | 8200 | – | 100 | 50 | ST_MAN | Stock Manager | 5500 | 8500 |
| 120 | Matthew | Weiss | MWEISS | 650.123.1234 | 18-Jul-04 | ST_MAN | 8000 | – | 100 | 50 | ST_MAN | Stock Manager | 5500 | 8500 |
You’ll notice that the output includes more columns than are required to meet the reporting requirements. To adhere to the best practice of retrieving the minimal amount of data to solve a problem or address a task, I’ve adjusted the code slightly to retrieve only the data we need. The updated code and output follow.
SELECT
hr.employees.employee_id,
hr.employees.job_id,
hr.jobs.job_title,
hr.employees.salary,
hr.jobs.min_salary,
hr.jobs.max_salary
FROM
hr.employees
JOIN
hr.jobs
ON hr.employees.job_id = hr.jobs.job_id;
| employee_id | job_id | job_title | salary | min_salary | max_salary |
|---|---|---|---|---|---|
| 206 | AC_ACCOUNT | Public Accountant | 8300 | 4200 | 9000 |
| 205 | AC_MGR | Accounting Manager | 12008 | 8200 | 16000 |
| 200 | AD_ASST | Administration Assistant | 4400 | 3000 | 6000 |
| 100 | AD_PRES | President | 24000 | 20080 | 40000 |
| 102 | AD_VP | Administration Vice President | 17000 | 15000 | 30000 |
| 101 | AD_VP | Administration Vice President | 17000 | 15000 | 30000 |
| 110 | FI_ACCOUNT | Accountant | 8200 | 4200 | 9000 |
| 109 | FI_ACCOUNT | Accountant | 9000 | 4200 | 9000 |
| 113 | FI_ACCOUNT | Accountant | 6900 | 4200 | 9000 |
| 111 | FI_ACCOUNT | Accountant | 7700 | 4200 | 9000 |
| 112 | FI_ACCOUNT | Accountant | 7800 | 4200 | 9000 |
| 108 | FI_MGR | Finance Manager | 12008 | 8200 | 16000 |
| 203 | HR_REP | Human Resources Representative | 6500 | 4000 | 9000 |
| 103 | IT_PROG | Programmer | 9000 | 4000 | 10000 |
| 104 | IT_PROG | Programmer | 6000 | 4000 | 10000 |
| 107 | IT_PROG | Programmer | 4200 | 4000 | 10000 |
| 106 | IT_PROG | Programmer | 4800 | 4000 | 10000 |
| 105 | IT_PROG | Programmer | 4800 | 4000 | 10000 |
| 201 | MK_MAN | Marketing Manager | 13000 | 9000 | 15000 |
| 202 | MK_REP | Marketing Representative | 6000 | 4000 | 9000 |
| 204 | PR_REP | Public Relations Representative | 10000 | 4500 | 10500 |
| 116 | PU_CLERK | Purchasing Clerk | 2900 | 2500 | 5500 |
| 115 | PU_CLERK | Purchasing Clerk | 3100 | 2500 | 5500 |
| 117 | PU_CLERK | Purchasing Clerk | 2800 | 2500 | 5500 |
| 118 | PU_CLERK | Purchasing Clerk | 2600 | 2500 | 5500 |
| 119 | PU_CLERK | Purchasing Clerk | 2500 | 2500 | 5500 |
| 114 | PU_MAN | Purchasing Manager | 11000 | 8000 | 15000 |
| 148 | SA_MAN | Sales Manager | 11000 | 10000 | 20080 |
| 147 | SA_MAN | Sales Manager | 12000 | 10000 | 20080 |
| 146 | SA_MAN | Sales Manager | 13500 | 10000 | 20080 |
| 145 | SA_MAN | Sales Manager | 14000 | 10000 | 20080 |
| 149 | SA_MAN | Sales Manager | 10500 | 10000 | 20080 |
| 155 | SA_REP | Sales Representative | 7000 | 6000 | 12008 |
| 156 | SA_REP | Sales Representative | 10000 | 6000 | 12008 |
| 157 | SA_REP | Sales Representative | 9500 | 6000 | 12008 |
| 158 | SA_REP | Sales Representative | 9000 | 6000 | 12008 |
| 159 | SA_REP | Sales Representative | 8000 | 6000 | 12008 |
| 160 | SA_REP | Sales Representative | 7500 | 6000 | 12008 |
| 161 | SA_REP | Sales Representative | 7000 | 6000 | 12008 |
| 179 | SA_REP | Sales Representative | 6200 | 6000 | 12008 |
| 163 | SA_REP | Sales Representative | 9500 | 6000 | 12008 |
| 164 | SA_REP | Sales Representative | 7200 | 6000 | 12008 |
| 165 | SA_REP | Sales Representative | 6800 | 6000 | 12008 |
| 166 | SA_REP | Sales Representative | 6400 | 6000 | 12008 |
| 167 | SA_REP | Sales Representative | 6200 | 6000 | 12008 |
| 168 | SA_REP | Sales Representative | 11500 | 6000 | 12008 |
| 169 | SA_REP | Sales Representative | 10000 | 6000 | 12008 |
| 170 | SA_REP | Sales Representative | 9600 | 6000 | 12008 |
| 171 | SA_REP | Sales Representative | 7400 | 6000 | 12008 |
| 172 | SA_REP | Sales Representative | 7300 | 6000 | 12008 |
| 173 | SA_REP | Sales Representative | 6100 | 6000 | 12008 |
| 174 | SA_REP | Sales Representative | 11000 | 6000 | 12008 |
| 175 | SA_REP | Sales Representative | 8800 | 6000 | 12008 |
| 176 | SA_REP | Sales Representative | 8600 | 6000 | 12008 |
| 177 | SA_REP | Sales Representative | 8400 | 6000 | 12008 |
| 178 | SA_REP | Sales Representative | 7000 | 6000 | 12008 |
| 154 | SA_REP | Sales Representative | 7500 | 6000 | 12008 |
| 153 | SA_REP | Sales Representative | 8000 | 6000 | 12008 |
| 152 | SA_REP | Sales Representative | 9000 | 6000 | 12008 |
| 151 | SA_REP | Sales Representative | 9500 | 6000 | 12008 |
| 150 | SA_REP | Sales Representative | 10000 | 6000 | 12008 |
| 162 | SA_REP | Sales Representative | 10500 | 6000 | 12008 |
| 184 | SH_CLERK | Shipping Clerk | 4200 | 2500 | 5500 |
| 185 | SH_CLERK | Shipping Clerk | 4100 | 2500 | 5500 |
| 186 | SH_CLERK | Shipping Clerk | 3400 | 2500 | 5500 |
| 187 | SH_CLERK | Shipping Clerk | 3000 | 2500 | 5500 |
| 188 | SH_CLERK | Shipping Clerk | 3800 | 2500 | 5500 |
| 189 | SH_CLERK | Shipping Clerk | 3600 | 2500 | 5500 |
| 190 | SH_CLERK | Shipping Clerk | 2900 | 2500 | 5500 |
| 191 | SH_CLERK | Shipping Clerk | 2500 | 2500 | 5500 |
| 192 | SH_CLERK | Shipping Clerk | 4000 | 2500 | 5500 |
| 193 | SH_CLERK | Shipping Clerk | 3900 | 2500 | 5500 |
| 194 | SH_CLERK | Shipping Clerk | 3200 | 2500 | 5500 |
| 195 | SH_CLERK | Shipping Clerk | 2800 | 2500 | 5500 |
| 196 | SH_CLERK | Shipping Clerk | 3100 | 2500 | 5500 |
| 197 | SH_CLERK | Shipping Clerk | 3000 | 2500 | 5500 |
| 198 | SH_CLERK | Shipping Clerk | 2600 | 2500 | 5500 |
| 199 | SH_CLERK | Shipping Clerk | 2600 | 2500 | 5500 |
| 180 | SH_CLERK | Shipping Clerk | 3200 | 2500 | 5500 |
| 181 | SH_CLERK | Shipping Clerk | 3100 | 2500 | 5500 |
| 182 | SH_CLERK | Shipping Clerk | 2500 | 2500 | 5500 |
| 183 | SH_CLERK | Shipping Clerk | 2800 | 2500 | 5500 |
| 132 | ST_CLERK | Stock Clerk | 2100 | 2008 | 5000 |
| 143 | ST_CLERK | Stock Clerk | 2600 | 2008 | 5000 |
| 142 | ST_CLERK | Stock Clerk | 3100 | 2008 | 5000 |
| 141 | ST_CLERK | Stock Clerk | 3500 | 2008 | 5000 |
| 140 | ST_CLERK | Stock Clerk | 2500 | 2008 | 5000 |
| 125 | ST_CLERK | Stock Clerk | 3200 | 2008 | 5000 |
| 126 | ST_CLERK | Stock Clerk | 2700 | 2008 | 5000 |
| 127 | ST_CLERK | Stock Clerk | 2400 | 2008 | 5000 |
| 128 | ST_CLERK | Stock Clerk | 2200 | 2008 | 5000 |
| 129 | ST_CLERK | Stock Clerk | 3300 | 2008 | 5000 |
| 130 | ST_CLERK | Stock Clerk | 2800 | 2008 | 5000 |
| 131 | ST_CLERK | Stock Clerk | 2500 | 2008 | 5000 |
| 144 | ST_CLERK | Stock Clerk | 2500 | 2008 | 5000 |
| 133 | ST_CLERK | Stock Clerk | 3300 | 2008 | 5000 |
| 134 | ST_CLERK | Stock Clerk | 2900 | 2008 | 5000 |
| 135 | ST_CLERK | Stock Clerk | 2400 | 2008 | 5000 |
| 136 | ST_CLERK | Stock Clerk | 2200 | 2008 | 5000 |
| 137 | ST_CLERK | Stock Clerk | 3600 | 2008 | 5000 |
| 138 | ST_CLERK | Stock Clerk | 3200 | 2008 | 5000 |
| 139 | ST_CLERK | Stock Clerk | 2700 | 2008 | 5000 |
| 124 | ST_MAN | Stock Manager | 5800 | 5500 | 8500 |
| 123 | ST_MAN | Stock Manager | 6500 | 5500 | 8500 |
| 122 | ST_MAN | Stock Manager | 7900 | 5500 | 8500 |
| 121 | ST_MAN | Stock Manager | 8200 | 5500 | 8500 |
| 120 | ST_MAN | Stock Manager | 8000 | 5500 | 8500 |
Breaking Down the Solution
In the SELECT clause, the columns required to meet the reporting requirements are specified. Each of these columns are fully qualified by including the schema and table names (e.g., hr.employees.job_id). This is important as the job ID column is available in both tables. An error will result if the job ID column is included in the SELECT clause without including the name of the table it’s being sourced from. When parsing the query, the RDBMS doesn’t know which job ID column is being referenced without additional information such as the table name and possibly even the schema name in instances where this table and column exist across multiple schemas. The JOIN clause includes the tables of interest. The ON clause specifies to only combine rows from each table where the job ID value in the employee table row matches the job ID value in the jobs table row. In other words, if the employee’s job ID value can be found in the jobs table, then combine the employee’s row with the row in the jobs table where the matching job ID is found.
If you are having trouble following the explanation above and are familiar with the VLOOKUP (vertical lookup) function in excel, then please see the “Microsoft Excel Equivalent Operation” section at the end of this page.
Non-matching Job ID Values
Previously, I mentioned each job ID value in the employees table matches exactly one value in the jobs table, resulting in a guaranteed successful match and combining of employee and job rows. However, if this was not the case and it was possible for an employee to have a job ID value not existing in the jobs table, then the result of the join operation would effectively filter out those employees with non-matching job ID values. The same goes for those jobs stored in rows in the jobs table where the job ID value doesn’t exist in the employees table. That is, no employees are assigned that specific job. This is the intended result of the default join type, INNER JOIN. To modify the behavior of the join operation, you’ll need to become familiar with the other join types. Those join types and links to a discussion on each of them can be found at the beginning of this page.
Microsoft Excel Equivalent Operation
In my experience, teaching users to combine rows from multiple tables using SQL is easier when they’ve performed a similar operation using other programming languages or software. This has been especially true for users familiar with the Microsoft Excel function, VLOOKUP. Learners familiar with this function can largely focus on how to perform the task rather than on understanding the task itself.
In our example task, the employees and jobs tables can be thought of as merely separate worksheets within an excel workbook. To combine the rows in the employees worksheet with those found in the jobs worksheet, a vertical lookup can be performed on the common column, job ID. The table array used in the lookup will be a data range in the jobs worksheet, starting with the job ID and extending to the column of interest, say job title. Provided the correct column index is provided for the job title column in the jobs table, the value returned in each row will be the job title corresponding to the employee’s job ID value. Like the JOIN operation covered above, the job ID value in each row within the employees worksheet is searched for within the jobs worksheet. If the job ID is found, then the values associated with each job ID can be accessed. Otherwise, #N/A is returned, indicating a match could not be found.