Problema:
Le gustaría crear una nueva tabla en una base de datos con datos definidos por una consulta SQL.
Ejemplo:
Nos gustaría crear la tabla gamer basado en una consulta SQL. En esta consulta, seleccionamos datos de otra tabla llamada championship presentado a continuación.
| id | jugador | puntuación | fecha_de_campeonato |
|---|---|---|---|
| 1 | alicia | 14 | 2020-08-10 |
| 2 | supervisor | 10 | 2020-09-28 |
| 3 | hombre feliz | 0 | 2020-08-10 |
| 4 | lucas | 6 | 2020-08-10 |
| 5 | oli | 12 | 2020-08-10 |
| 6 | gran jugador | 7 | 2020-09-12 |
En la base de datos, creemos una nueva tabla llamada gamer que almacenará datos en todas las columnas definidas en la tabla championship (id , gamer , score y championship_date ).
Solución 1:
CREATE TABLE gamer AS SELECT * FROM championship;
Discusión:
Si desea crear una nueva tabla, el primer paso es usar CREATE TABLE cláusula y el nombre de la nueva tabla (en nuestro ejemplo:gamer ). Luego, usa el AS palabra clave y proporcione un SELECT instrucción que selecciona datos para la nueva tabla. En nuestro ejemplo, seleccionamos todas las columnas de la tabla championship utilizando el asterisco (*). El conjunto de resultados muestra todos los registros en la tabla championship .
Sin embargo, si desea crear una tabla con solo un subconjunto de registros, puede especificar la consulta seleccionada como en el ejemplo a continuación.
Solución 2:
CREATE TABLE gamer AS SELECT gamer, score, championship_date FROM championship WHERE championship_date <= 2020-08-10;
Aquí está el conjunto de resultados:
| jugador | puntuación | fecha_de_campeonato |
|---|---|---|
| alicia | 14 | 2020-08-10 |
| hombre feliz | 0 | 2020-08-10 |
| lukas | 6 | 2020-08-10 |
| oli | 12 | 2020-08-10 |
El SELECT la consulta recupera solo los registros con una championship_date fecha igual o anterior a 2020-08-10 (WHERE championship_date <= 2020-08-10 ). La nueva tabla almacena menos columnas que en el ejemplo anterior (SELECT gamer, score, championship_date ) sin la columna id .
Una solución similar a este problema es utilizar SELECT INTO cláusula para crear una nueva tabla y copiar datos de otra tabla. Echa un vistazo al código:
Solución 3:
SELECT gamer, score, championship_date INTO gamer FROM championship WHERE championship_date <= 2020-08-10;
La tabla resultante es la misma. Tenga en cuenta que esta construcción no está presente en el estándar SQL. En este comando SQL, primero escribimos SELECT , luego la lista de columnas, luego la palabra clave INTO , y finalmente el nombre de la nueva tabla que queremos crear. A continuación, puede agregar WHERE y otras cláusulas SQL como GROUP BY o HAVING para filtrar registros para la nueva tabla.