마체테 MySQL(Cheatsheet) 레벨 2

29334 단어
Continuando con el post anterior, vamos a código:

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.

좋은 웹페이지 즐겨찾기