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.