A veces pueden ocurrir algunas situaciones en las que es necesario obtener datos de tres o más tablas. Este artículo trata de dos enfoques para lograrlo.
Ejemplo:
Creación de tres tablas:
- alumno
- marcas
- detalles
Nota: Haga clic en la imagen si no está clara para ver en tamaño más grande.
Mesa 1: estudiante
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');
Tabla 2: marcas
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');
Tabla 3: detalles
create table details(address_city varchar(20), email_ID varchar(20), school_id int, accomplishments varchar(50)); insert into details values('Banglore', 'jsingh@geeks.com', 1020, 'ACM ICPC selected'); insert into details values('Hyderabad', 'praveen@geeks.com', 1030, 'Geek of the month'); insert into details values('Delhi', 'rithvik@geeks.com', 1012, 'IOI finalist'); insert into details values('Chennai', 'om@geeks.com', 1111, 'Geek of the year'); insert into details values('Banglore', ' suraj@geeks.com', 1008, 'IMO finalist'); insert into details values('Mumbai', 'sasukeh@geeks.com', 2211, 'Made a robot'); insert into details values('Ahmedabad', 'itachi@geeks.com', 1172, 'Code Jam finalist'); insert into details values('Jaipur', 'kumar@geeks.com', 1972, 'KVPY finalist');
Dos enfoques para unir tres o más tablas:
1. Usar uniones en sql para unir la tabla:
se aplica la misma lógica que se hace para unir 2 tablas, es decir, el número mínimo de declaraciones de unión para unir n tablas es (n-1) .
Consulta:
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. Uso de la relación padre-hijo :
Este es un enfoque bastante interesante. Cree la columna X como clave principal en una tabla y como clave externa en otra tabla (es decir, creando una relación padre-hijo).
Veamos las tablas creadas:
s_id es la clave principal en la tabla de estudiantes y es la clave externa en la tabla de calificaciones. (estudiante (padre) – marcas (hijo)) .
school_id es la clave principal en la tabla de calificaciones y la clave externa en la tabla de detalles. (marcas (padre) – detalles (hijo)) .
Consulta:
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;