Python SQLite – Cláusula JOIN

En este artículo, analizamos la cláusula JOIN en SQLite usando el módulo sqlite3 en Python. Pero al principio, veamos un breve resumen sobre cómo unirse en SQLite.

Unirse a la cláusula

 Una cláusula JOIN combina los registros de dos tablas sobre la base de atributos comunes. Los diferentes tipos de unión son los siguientes:

  • INNER JOIN (OR JOIN) – Da los registros que tienen atributos comunes en ambas tablas.
  • UNIÓN IZQUIERDA: proporciona todos los registros de la tabla de la izquierda y solo los registros comunes de la tabla de la derecha.
  • RIGHT JOIN: proporciona todos los registros de la tabla de la derecha y solo los registros comunes de la tabla de la izquierda.
  • FULL OUTER JOIN: proporciona todos los registros cuando hay un atributo común en la tabla izquierda o derecha.
  • CROSS JOIN: proporciona registros de una tabla con todos los demás registros de otra tabla.

Nota: 

  • A diferencia de otros tipos de uniones, no incluye una condición de unión.

Crear una base de datos

Aquí, crearemos una base de datos simple con dos tablas Advisor (AdvisorID, AdvisorName) y Student (StudentID, StudentName, AdvisorID) donde AdvisorID de la tabla Student es la clave externa que hace referencia a AdvisorID de la tabla Advisor.

Python3

# Import required libraries
import sqlite3
  
# Connect to SQLite database
# New file created if it doesn't already exist
conn = sqlite3.connect(r'C:\Users\SQLite\Geeks.db')
  
# Create cursor object
cursor = conn.cursor()
  
# Create and populate tables
cursor.executescript('''
CREATE TABLE Advisor(
AdvisorID INTEGER NOT NULL,
AdvisorName TEXT NOT NULL,
PRIMARY KEY(AdvisorID)
);
  
CREATE TABLE Student(
StudentID NUMERIC NOT NULL,
StudentName NUMERIC NOT NULL,
AdvisorID INTEGER,
FOREIGN KEY(AdvisorID) REFERENCES Advisor(AdvisorID),
PRIMARY KEY(StudentID)
);
  
INSERT INTO Advisor(AdvisorID, AdvisorName) VALUES
(1,"John Paul"), 
(2,"Anthony Roy"), 
(3,"Raj Shetty"),
(4,"Sam Reeds"),
(5,"Arthur Clintwood");
  
INSERT INTO Student(StudentID, StudentName, AdvisorID) VALUES
(501,"Geek1",1),
(502,"Geek2",1),
(503,"Geek3",3),
(504,"Geek4",2),
(505,"Geek5",4),
(506,"Geek6",2),
(507,"Geek7",2),
(508,"Geek8",3),
(509,"Geek9",NULL),
(510,"Geek10",1);
  
''')
  
#Commit changes to database
conn.commit()
  
# Closing the connection
conn.close()

Mesas creadas:

Mesa de asesores

Mesa de Estudiante

Ahora, realicemos diferentes tipos de unión en la base de datos creada anteriormente.

UNIR INTERNAMENTE 

Unión interna también representada como unión que da los registros que tienen atributos comunes en ambas tablas.

Sintaxis:

   SELECCIONAR columnas

   DESDE la tabla1

   [INTERIOR] ÚNETE a la tabla2

   ON tabla1.columna = tabla2.columna;

La palabra clave INNER es opcional

Python3

# Import required libraries
import sqlite3
  
# Connect to SQLite database
conn = sqlite3.connect(r'C:\Users\SQLite\Geeks.db')
  
# Create cursor object
cursor = conn.cursor()
  
# Query for INNER JOIN
sql = '''SELECT StudentID, StudentName, AdvisorName 
FROM Student 
INNER JOIN Advisor
ON Student.AdvisorID = Advisor.AdvisorID;'''
  
# Executing the query
cursor.execute(sql)
  
# Fetching rows from the result table
result = cursor.fetchall()
for row in result:
    print(row)
  
# Closing the connection
conn.close()

Producción:

UNIRSE A LA IZQUIERDA 

Proporciona todos los registros de la tabla de la izquierda y solo los registros comunes de la tabla de la derecha.

Sintaxis:

  SELECCIONAR columnas

  DESDE la tabla1

  IZQUIERDA [EXTERIOR] UNIRSE table2 

  ON tabla1.columna = tabla2.columna;

La palabra clave OUTER es opcional

Python3

# Import required libraries
import sqlite3
  
# Connect to SQLite database
conn = sqlite3.connect(r'C:\Users\SQLite\Geeks.db')
  
# Create cursor object
cursor = conn.cursor()
  
# Query for LEFT JOIN
sql = '''SELECT StudentID, StudentName, AdvisorName 
FROM Student 
LEFT JOIN Advisor
USING(AdvisorID) ;'''
  
# Executing the query
cursor.execute(sql)
  
# Fetching rows from the result table
result = cursor.fetchall()
for row in result:
    print(row)
  
# Closing the connection
conn.close()

Dado que el nombre de la columna (AdvisorID) de las tablas unidas es el mismo, se puede usar la cláusula USING(AdvisorID) en lugar de ON Student.AdvisorID = Advisor.AdvisorID.

Producción:

UNIÓN DERECHA

Proporciona todos los registros de la tabla de la derecha y solo los registros comunes de la tabla de la izquierda. Como se mencionó anteriormente, SQLite no es compatible directamente con RIGHT JOIN. Sin embargo, se puede emular usando LEFT JOIN cambiando las posiciones de la tabla de estudiantes y asesores.

Sintaxis:

  SELECCIONAR columnas

  DESDE la tabla1

  DERECHO [EXTERIOR] ÚNETE table2

  ON tabla1.columna = tabla2.columna;

La palabra clave OUTER es opcional

Python3

# Import required libraries
import sqlite3
  
# Connect to SQLite database
conn = sqlite3.connect(r'C:\Users\SQLite\Geeks.db')
  
# Create cursor object
cursor = conn.cursor()
  
# Query for RIGHT JOIN
sql = '''SELECT StudentID, StudentName, AdvisorName 
FROM Advisor 
LEFT JOIN Student
USING(AdvisorID);'''
  
# Executing the query
cursor.execute(sql)
  
# Fetching rows from the result table
result = cursor.fetchall()
for row in result:
    print(row)
  
# Closing the connection
conn.close()

Producción:

UNIÓN EXTERNA COMPLETA

Proporciona todos los registros cuando hay un atributo común en la tabla izquierda o derecha. Como se mencionó anteriormente, SQLite no admite directamente FULL OUTER JOIN. Sin embargo, se puede emular usando LEFT JOIN. En esta consulta, la segunda instrucción SELECT cambia las posiciones de la tabla de estudiantes y asesores. La cláusula UNION ALL conserva las filas duplicadas del resultado de ambas consultas SELECT. Y la cláusula WHERE en la segunda instrucción SELECT elimina filas que ya estaban incluidas en el conjunto de resultados de la primera instrucción SELECT.

Sintaxis:

  SELECCIONAR columnas

  DESDE la tabla1

  COMPLETO [EXTERIOR] ÚNETE table2

  ON tabla1.columna = tabla2.columna;

La palabra clave OUTER es opcional

Python3

# Import required libraries
import sqlite3
  
# Connect to SQLite database
conn = sqlite3.connect(r'C:\Users\SQLite\Geeks.db')
  
# Create cursor object
cursor = conn.cursor()
  
# Query for FULL OUTER JOIN
sql = '''SELECT StudentID, StudentName, AdvisorName 
FROM Student 
LEFT JOIN Advisor
USING(AdvisorID)
UNION ALL
SELECT StudentID, StudentName, AdvisorName 
FROM Advisor 
LEFT JOIN Student
USING(AdvisorID)
WHERE Student.AdvisorID IS NULL;'''
  
# Executing the query
cursor.execute(sql)
  
# Fetching rows from the result table
result = cursor.fetchall()
for row in result:
    print(row)
  
# Closing the connection
conn.close()

Producción:

UNIÓN CRUZADA 

Combina todos los registros de una tabla con todos los demás registros de otra tabla, es decir, crea un producto cartesiano de registros de las tablas combinadas.

Sintaxis:

  SELECCIONAR columnas 

  DESDE la tabla1

  Tabla 2 DE UNIÓN CRUZADA;

Python3

# Import required libraries
import sqlite3
  
# Connect to SQLite database
conn = sqlite3.connect(r'C:\Users\SQLite\Geeks.db')
  
# Create cursor object
cursor = conn.cursor()
  
# Query for CROSS JOIN
sql = '''SELECT StudentID, StudentName, AdvisorName 
FROM Student 
CROSS JOIN Advisor;'''
  
# Executing the query
cursor.execute(sql)
  
# Fetching rows from the result table
result = cursor.fetchall()
for row in result:
    print(row)
  
# Closing the connection
conn.close()

Producción:

Publicación traducida automáticamente

Artículo escrito por akshisaxena y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *