마체테 MySQL(Cheatsheet) 레벨 2
CONSULTAS MÚLTIPLES CON UNION Y UNION 모두
Este tipo de Consultas nos permite unir los datos de dos o más tablas, con las únicas condiciones de que estas tengan la misma cantidad de columnas y que estas tengan los mismos tipos de datos. En este caso tenemos dos tablas de canciones de diferente genero 뮤지컬:
canciones_rock
+------------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+--------------+------+-----+---------+-------+
| nombre_cancion | varchar(200) | YES | | NULL | |
| banda | varchar(200) | YES | | NULL | |
| reproducciones_cancion | int | YES | | NULL | |
+------------------------+--------------+------+-----+---------+-------+
y canciones_trap
+------------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+--------------+------+-----+---------+-------+
| nombre_cancion | varchar(200) | YES | | NULL | |
| artisa_cancion | varchar(200) | YES | | NULL | |
| reproducciones_cancion | int | YES | | NULL | |
+------------------------+--------------+------+-----+---------+-------+
Como vemos tienen tablas parecidas, pero no son exactamente iguales. Lo único que es igual es el número de columnas y los tipos de datos aceptados, por lo que podemos hacer Consultas con union:
SELECT * FROM canciones_trap UNION SELECT * FROM canciones_rock;
결과:
+----------------+-----------------+------------------------+
| nombre_cancion | artista_cancion | reproducciones_cancion |
+----------------+-----------------+------------------------+
| Colocao | Nicki Nicole | 2600334 |
| Bounce | Cazzu | 844334 |
| Atrevido | Trueno | 3454334 |
| Seek & Destroy | Metallica | 1888 |
| Breaking Away | Sumo | 102634 |
| London Calling | The Clash | 452634 |
| Control | Joy Division | 2252634 |
+----------------+-----------------+------------------------+
El único problema de usar solo UNION es que si queremos ver los datos en su totalidad(repetidos) no los va a mostrar, pero para eso tenemos la sentencia UNION ALL
SELECT * FROM canciones_trap UNION ALL SELECT * FROM canciones_rock;
결과:
+----------------+-----------------+------------------------+
| nombre_cancion | artista_cancion | reproducciones_cancion |
+----------------+-----------------+------------------------+
| Colocao | Nicki Nicole | 2600334 |
| Bounce | Cazzu | 844334 |
| Atrevido | Trueno | 3454334 |
| Colocao | Nicki Nicole | 2600334 |
| Seek & Destroy | Metallica | 1888 |
| Breaking Away | Sumo | 102634 |
| London Calling | The Clash | 452634 |
| Control | Joy Division | 2252634 |
+----------------+-----------------+------------------------+
CONSULTAS MULTITABLA CON 조인
nos permite asociar y hacer Consultas multitabla entre dos o más tablas a través de un campo en común como requisito에 가입하세요.
Veamos unos ejemplos, tenemos la tabla usuarios que contiene los usuarios registrados en el sistema, y también tenemos la tabla pedidos que는 los pedidos que hacen los usuarios a diferentes comercios(simulación de aplicacion tipo Rappi, PedidosYa 등..)
Las dos tablas están relacionadas por un campo, en este caso es el campo de id del usuario, id en tabla usuarios y id_usuario en tabla de pedidos:
평소
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| nombre | varchar(30) | YES | | NULL | |
| apellido | varchar(30) | YES | | NULL | |
| edad | int | YES | | NULL | |
| id | int | NO | PRI | NULL | auto_increment |
+----------+-------------+------+-----+---------+----------------+
페디도스
+-----------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+--------------+------+-----+---------+----------------+
| producto_pedido | varchar(200) | YES | | NULL | |
| comercio | varchar(200) | YES | | NULL | |
| id_usuario | int | YES | | NULL | |
| id | int | NO | PRI | NULL | auto_increment |
+-----------------+--------------+------+-----+---------+----------------+
Entonces nosotros queremos obtener los pedidos que hicieron los usuarios hasta ahora, tendríamos que hacerlo de la siguiente manera:
SELECT nombre, producto_pedido, comercio, id_usuario FROM usuarios INNER JOIN pedidos ON usu
arios.id = pedidos.id_usuario;
Primero seleccionamos los campos a los que queremos acceder(Puede ser de uno o más tablas), luego seleccionamos las tablas a las que vamos a pedir estos datos y con INNER JOIN seleccionamos la segunda tabla, por último a través de ON vamos a indicar cual es la columna con la que se relacionan las tablas.
결과:
+----------+---------------------+-----------------------+------------+
| nombre | producto_pedido | comercio | id_usuario |
+----------+---------------------+-----------------------+------------+
| Nahuel | Pepsi | KiosKito | 1 |
| Javier | Milanesa con papas | El rey de la milanesa | 3 |
| Nahuel | Papas Lays | 26HS | 1 |
| Francisco | Papas Lays | 26HS | 6 |
| Leticia | Pizza de Muzzarella | Pizza Vegana | 4 |
| Melisa | Cerveza Patagonia | Cervecera Lacerv | 8 |
+----------+---------------------+-----------------------+------------+
También podemos abreviar las tablas de la siguiente manera y obtener el mismo resultado:
SELECT nombre, producto_pedido, comercio, id_usuario FROM usuarios u INNER JOIN pedidos p ON u.id = p.id_usuario;
LEFT JOIN: 왼쪽 조인 nos permite hacer una Consulta entre dos tablas o más, y en el caso de que no exista datos o 우연의 일치 entre la tabla izquierda(la prima que declaramos) y la tabla derecha(la segunda) mantendrá los datos de la tabla izquierda y mostrará null en todos o en algunos campos en los que no haya 우연의 일치, acá podemos ver una imagen que Representativea su funcionalidad:
SELECT nombre,producto_pedido, comercio, id_usuario FROM usuarios LEFT JOIN pedidos ON usuarios.id = pedidos.id_usuario;
결과:
+----------+---------------------+-----------------------+------------+
| nombre | producto_pedido | comercio | id_usuario |
+----------+---------------------+-----------------------+------------+
| Nahuel | Papas Lays | 26HS | 1 |
| Nahuel | Pepsi | KiosKito | 1 |
| Kevin | NULL | NULL | NULL |
| Javier | Milanesa con papas | El rey de la milanesa | 3 |
| Leticia | Pizza de Muzzarella | Pizza Vegana | 4 |
| Lorena | NULL | NULL | NULL |
| Francisco | Papas Lays | 26HS | 6 |
| Franco | NULL | NULL | NULL |
| Melisa | Cerveza Patagonia | Cervecera Lacerv | 8 |
+----------+---------------------+-----------------------+------------+
Como podemos ver nuestra Consulta mantuvo todos los nombres de los usuarios(tabla izquierda), y nos trajo los datos del pedido con valores null, esto quiere decir que esos usuarios no realizaron pedidos
RIGHT JOIN: Funciona de la misma manera que LEFT JOIN pero invertido, mantenemos todas las columnas de la tabla derecha y si hay 우연의 일치 con la tabla izquierda se van a mostrar, en el caso de que no la haya se mostrarán los valores de ese campo LEFT JOIN에 대해 LEFT JOIN을 사용하지 않고 null을 입력하면 다음과 같은 기능을 사용할 수 있습니다.
SELECT nombre,producto_pedido, comercio, id_usuario FROM usuarios RIGHT JOIN pedidos ON usuarios.id = pedidos.id_usuario;
결과:
+----------+---------------------+-----------------------+------------+
| nombre | producto_pedido | comercio | id_usuario |
+----------+---------------------+-----------------------+------------+
| Nahuel | Pepsi | KiosKito | 1 |
| Javier | Milanesa con papas | El rey de la milanesa | 3 |
| Nahuel | Papas Lays | 26HS | 1 |
| Francisco | Papas Lays | 26HS | 6 |
| Leticia | Pizza de Muzzarella | Pizza Vegana | 4 |
| Melisa | Cerveza Patagonia | Cervecera Lacerv | 8 |
+----------+---------------------+-----------------------+------------+
Como se puede ver, mantenemos todos los datos de la tabla derecha y cada pedido concurrent con un nombre, por lo que solo van a salir los pedidos realizados.
Reference
이 문제에 관하여(마체테 MySQL(Cheatsheet) 레벨 2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/nahuelsegovia/machete-mysql-cheatsheet-level-2-2b2p
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
+------------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+--------------+------+-----+---------+-------+
| nombre_cancion | varchar(200) | YES | | NULL | |
| banda | varchar(200) | YES | | NULL | |
| reproducciones_cancion | int | YES | | NULL | |
+------------------------+--------------+------+-----+---------+-------+
+------------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+--------------+------+-----+---------+-------+
| nombre_cancion | varchar(200) | YES | | NULL | |
| artisa_cancion | varchar(200) | YES | | NULL | |
| reproducciones_cancion | int | YES | | NULL | |
+------------------------+--------------+------+-----+---------+-------+
SELECT * FROM canciones_trap UNION SELECT * FROM canciones_rock;
+----------------+-----------------+------------------------+
| nombre_cancion | artista_cancion | reproducciones_cancion |
+----------------+-----------------+------------------------+
| Colocao | Nicki Nicole | 2600334 |
| Bounce | Cazzu | 844334 |
| Atrevido | Trueno | 3454334 |
| Seek & Destroy | Metallica | 1888 |
| Breaking Away | Sumo | 102634 |
| London Calling | The Clash | 452634 |
| Control | Joy Division | 2252634 |
+----------------+-----------------+------------------------+
SELECT * FROM canciones_trap UNION ALL SELECT * FROM canciones_rock;
+----------------+-----------------+------------------------+
| nombre_cancion | artista_cancion | reproducciones_cancion |
+----------------+-----------------+------------------------+
| Colocao | Nicki Nicole | 2600334 |
| Bounce | Cazzu | 844334 |
| Atrevido | Trueno | 3454334 |
| Colocao | Nicki Nicole | 2600334 |
| Seek & Destroy | Metallica | 1888 |
| Breaking Away | Sumo | 102634 |
| London Calling | The Clash | 452634 |
| Control | Joy Division | 2252634 |
+----------------+-----------------+------------------------+
nos permite asociar y hacer Consultas multitabla entre dos o más tablas a través de un campo en común como requisito에 가입하세요.
Veamos unos ejemplos, tenemos la tabla usuarios que contiene los usuarios registrados en el sistema, y también tenemos la tabla pedidos que는 los pedidos que hacen los usuarios a diferentes comercios(simulación de aplicacion tipo Rappi, PedidosYa 등..)
Las dos tablas están relacionadas por un campo, en este caso es el campo de id del usuario, id en tabla usuarios y id_usuario en tabla de pedidos:
평소
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| nombre | varchar(30) | YES | | NULL | |
| apellido | varchar(30) | YES | | NULL | |
| edad | int | YES | | NULL | |
| id | int | NO | PRI | NULL | auto_increment |
+----------+-------------+------+-----+---------+----------------+
페디도스
+-----------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+--------------+------+-----+---------+----------------+
| producto_pedido | varchar(200) | YES | | NULL | |
| comercio | varchar(200) | YES | | NULL | |
| id_usuario | int | YES | | NULL | |
| id | int | NO | PRI | NULL | auto_increment |
+-----------------+--------------+------+-----+---------+----------------+
Entonces nosotros queremos obtener los pedidos que hicieron los usuarios hasta ahora, tendríamos que hacerlo de la siguiente manera:
SELECT nombre, producto_pedido, comercio, id_usuario FROM usuarios INNER JOIN pedidos ON usu
arios.id = pedidos.id_usuario;
Primero seleccionamos los campos a los que queremos acceder(Puede ser de uno o más tablas), luego seleccionamos las tablas a las que vamos a pedir estos datos y con INNER JOIN seleccionamos la segunda tabla, por último a través de ON vamos a indicar cual es la columna con la que se relacionan las tablas.
결과:
+----------+---------------------+-----------------------+------------+
| nombre | producto_pedido | comercio | id_usuario |
+----------+---------------------+-----------------------+------------+
| Nahuel | Pepsi | KiosKito | 1 |
| Javier | Milanesa con papas | El rey de la milanesa | 3 |
| Nahuel | Papas Lays | 26HS | 1 |
| Francisco | Papas Lays | 26HS | 6 |
| Leticia | Pizza de Muzzarella | Pizza Vegana | 4 |
| Melisa | Cerveza Patagonia | Cervecera Lacerv | 8 |
+----------+---------------------+-----------------------+------------+
También podemos abreviar las tablas de la siguiente manera y obtener el mismo resultado:
SELECT nombre, producto_pedido, comercio, id_usuario FROM usuarios u INNER JOIN pedidos p ON u.id = p.id_usuario;
LEFT JOIN: 왼쪽 조인 nos permite hacer una Consulta entre dos tablas o más, y en el caso de que no exista datos o 우연의 일치 entre la tabla izquierda(la prima que declaramos) y la tabla derecha(la segunda) mantendrá los datos de la tabla izquierda y mostrará null en todos o en algunos campos en los que no haya 우연의 일치, acá podemos ver una imagen que Representativea su funcionalidad:
SELECT nombre,producto_pedido, comercio, id_usuario FROM usuarios LEFT JOIN pedidos ON usuarios.id = pedidos.id_usuario;
결과:
+----------+---------------------+-----------------------+------------+
| nombre | producto_pedido | comercio | id_usuario |
+----------+---------------------+-----------------------+------------+
| Nahuel | Papas Lays | 26HS | 1 |
| Nahuel | Pepsi | KiosKito | 1 |
| Kevin | NULL | NULL | NULL |
| Javier | Milanesa con papas | El rey de la milanesa | 3 |
| Leticia | Pizza de Muzzarella | Pizza Vegana | 4 |
| Lorena | NULL | NULL | NULL |
| Francisco | Papas Lays | 26HS | 6 |
| Franco | NULL | NULL | NULL |
| Melisa | Cerveza Patagonia | Cervecera Lacerv | 8 |
+----------+---------------------+-----------------------+------------+
Como podemos ver nuestra Consulta mantuvo todos los nombres de los usuarios(tabla izquierda), y nos trajo los datos del pedido con valores null, esto quiere decir que esos usuarios no realizaron pedidos
RIGHT JOIN: Funciona de la misma manera que LEFT JOIN pero invertido, mantenemos todas las columnas de la tabla derecha y si hay 우연의 일치 con la tabla izquierda se van a mostrar, en el caso de que no la haya se mostrarán los valores de ese campo LEFT JOIN에 대해 LEFT JOIN을 사용하지 않고 null을 입력하면 다음과 같은 기능을 사용할 수 있습니다.
SELECT nombre,producto_pedido, comercio, id_usuario FROM usuarios RIGHT JOIN pedidos ON usuarios.id = pedidos.id_usuario;
결과:
+----------+---------------------+-----------------------+------------+
| nombre | producto_pedido | comercio | id_usuario |
+----------+---------------------+-----------------------+------------+
| Nahuel | Pepsi | KiosKito | 1 |
| Javier | Milanesa con papas | El rey de la milanesa | 3 |
| Nahuel | Papas Lays | 26HS | 1 |
| Francisco | Papas Lays | 26HS | 6 |
| Leticia | Pizza de Muzzarella | Pizza Vegana | 4 |
| Melisa | Cerveza Patagonia | Cervecera Lacerv | 8 |
+----------+---------------------+-----------------------+------------+
Como se puede ver, mantenemos todos los datos de la tabla derecha y cada pedido concurrent con un nombre, por lo que solo van a salir los pedidos realizados.
Reference
이 문제에 관하여(마체테 MySQL(Cheatsheet) 레벨 2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/nahuelsegovia/machete-mysql-cheatsheet-level-2-2b2p텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)