Problema:
Le gustaría crear una nueva tabla con datos copiados de otra tabla.
Ejemplo:
Nuestra base de datos tiene una tabla llamada product con datos en las siguientes columnas:id (clave principal), name , category y price .
| id | nombre | categoría | precio |
|---|---|---|---|
| 105 | rosa | flor | 5,70 |
| 108 | escritorio | muebles | 120,00 |
| 115 | tulipán | flor | 6,50 |
| 123 | girasol | flor | 7,50 |
| 145 | guitarra | música | 300,00 |
| 155 | orquídea | flor | 9,50 |
| 158 | flauta | música | 156,00 |
En la base de datos, creemos una nueva tabla llamada florist que almacenará las siguientes columnas:id , name y price . Estas columnas provienen de la tabla product pero solo de la categoría flor .
Es importante tener en cuenta que estamos creando una nueva tabla. La mesa florist no existe en esta base de datos.
La estructura CREAR TABLA COMO SELECCIONAR
Para crear una nueva tabla a partir de otra tabla, puede usar CREATE TABLE AS SELECT . Esta construcción es SQL estándar. Mire el código SQL a continuación:
Solución 1:
CREATE TABLE florist AS SELECT * FROM product WHERE category = ’flower’;
Aquí está el resultado de la consulta:
| id | nombre | categoría | precio |
|---|---|---|---|
| 105 | rosa | flor | 5,70 |
| 115 | tulipán | flor | 6,50 |
| 123 | girasol | flor | 7,50 |
| 155 | orquídea | flor | 9,50 |
Usando CREATE TABLE , puede crear una nueva tabla copiando datos de otra tabla. En este caso, primero usamos CREATE TABLE cláusula con el nombre de la nueva tabla (en nuestro ejemplo:florist ), a continuación escribimos AS y el SELECT consulta con los nombres de las columnas (en nuestro ejemplo:* ), y luego escribimos FROM seguido del nombre de la tabla de la que se recopilan los datos (en nuestro ejemplo:product ). Luego, puede usar cualquier cláusula SQL:WHERE , GROUP BY , HAVING , etc.
La nueva mesa florist contendrá la definición de las columnas del product tabla (id , name , category y price ). El número de filas está limitado mediante el uso de una cláusula WHERE, filtrando los registros para recuperar solo datos de la categoría flor .
La estructura SELECT INTO
Otra solución es usar SELECT INTO . Esta sintaxis es SQL no estándar, pero es compatible con muchas bases de datos populares.
Solución 2:
SELECT id, name, price INTO florist FROM product WHERE category=’flower’;
Aquí está el resultado:
| id | nombre | precio |
|---|---|---|
| 105 | rosa | 5,70 |
| 115 | tulipán | 6,50 |
| 123 | girasol | 7,50 |
| 155 | orquídea | 9,50 |
Discusión:
Si desea crear una nueva tabla basada en la estructura y los datos de otra tabla, puede utilizar SELECT INTO cláusula. Primero, escribe un SELECT cláusula seguida de una lista de columnas (en nuestro ejemplo:id , name y price ) de la tabla existente (en nuestro ejemplo:product ).
Observe que hay más columnas en la tabla product . Solo seleccionamos las columnas que nos interesan.
A continuación, utilice la palabra clave INTO con el nombre de la nueva tabla que desea crear (en nuestro ejemplo:florist ). Luego, escribe la palabra clave FROM con el nombre de la tabla existente (en nuestro ejemplo:product ).
Si desea seleccionar filas filtradas de la tabla, use WHERE cláusula. Después de WHERE , escribe las condiciones para filtrar los datos (en nuestro ejemplo:WHERE category=’flower’ ).
En este ejemplo, estamos creando una nueva tabla florist que tiene menos columnas que la tabla product (la diferencia es la categoría de la columna). Esta nueva tabla también tiene menos filas, solo las filas con la categoría flor .
Por supuesto, si desea crear una tabla usando todas las columnas de la otra tabla, puede usar * en lugar de enumerar las columnas después de SELECT . Vea el siguiente ejemplo:
Solución 2:
SELECT * INTO florist FROM product WHERE category=’flower’;
Aquí está el resultado:
| id | nombre | categoría | precio |
|---|---|---|---|
| 105 | rosa | flor | 5,70 |
| 115 | tulipán | flor | 6,50 |
| 123 | girasol | flor | 7,50 |
| 155 | orquídea | flor | 9,50 |
Usando SELECT INTO es una manera fácil de crear una nueva tabla basada en una tabla existente en la base de datos.