Joining three or more tables in SQL

There may occur some situations sometimes where data needs to be fetched from three or more tables. This article deals with two approaches to achieve it.

Creating three tables:

  1. student
  2. marks
  3. details

Note: Click on image if not clear to view in bigger size.

Table 1: student

create table student(s_id int primary key, 
                      s_name varchar(20));

insert into student values(1, 'Jack');
insert into student values(2, 'Rithvik');
insert into student values(3, 'Jaspreet');
insert into student values(4, 'Praveen');
insert into student values(5, 'Bisa');
insert into student values(6, 'Suraj');

Table 2: marks

create table marks(school_id int primary key, s_id int, 
                       score int, status varchar(20));

insert into marks values(1004, 1, 23, 'fail');
insert into marks values(1008, 6, 95, 'pass');
insert into marks values(1012, 2, 97, 'pass');
insert into marks values(1016, 7, 67, 'pass'); 
insert into marks values(1020, 3, 100, 'pass');
insert into marks values(1025, 8, 73, 'pass');
insert into marks values(1030, 4, 88, 'pass');
insert into marks values(1035, 9,  13, 'fail');
insert into marks values(1040, 5,  16, 'fail');
insert into marks values(1050, 10, 53, 'pass');

Table 3: details

create table details(address_city varchar(20), email_ID varchar(20), 
                      school_id int, accomplishments varchar(50));

insert into details values('Banglore',  '[email protected]', 
                                1020, 'ACM ICPC selected');
insert into details values('Hyderabad', '[email protected]', 
                                1030, 'Geek of the month');
insert into details values('Delhi',     '[email protected]', 
                                    1012, 'IOI finalist');
insert into details values('Chennai',   '[email protected]', 
                                 1111, 'Geek of the year');
insert into details values('Banglore', ' [email protected]',
                                 1008, 'IMO finalist');
insert into details values('Mumbai',    '[email protected]',
                                  2211, 'Made a robot');
insert into details values('Ahmedabad', '[email protected]',
                               1172, 'Code Jam finalist');
insert into details values('Jaipur',    '[email protected]',
                                   1972, 'KVPY finalist');

Two approaches to join three or more tables:
1. Using joins in sql to join the table:
The same logic is applied which is done to join 2 tables i.e. minimum number of join statements to join n tables are (n-1).

select s_name, score, status, address_city, email_id,
accomplishments from student s inner join marks m on
s.s_id = m.s_id inner join details d on 
d.school_id = m.school_id;


2. Using parent-child relationship:
This is rather an interesting approach. Create column X as primary key in one table and as foreign key in another table (i.e creating a parent-child relationship).
Let’s look in the tables created:
s_id is the primary key in student table and is foreign key in marks table. (student (parent) – marks(child)).
school_id is the primary key in marks table and foreign key in details table. (marks(parent) – details(child)).


select s_name, score, status, address_city, 
email_id, accomplishments from student s, 
marks m, details d where s.s_id = m.s_id and 
m.school_id = d.school_id;


This article is attributed to GeeksforGeeks.org

leave a comment



load comments

Subscribe to Our Newsletter