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:
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