Ventanas.  virus  Cuadernos.  Internet.  oficina.  Utilidades.  Conductores

SQL - Lección 3. Crear tablas y llenarlas con información

Entonces, nos familiarizamos con los tipos de datos, ahora mejoraremos las tablas para nuestro foro. Vamos a desglosarlos primero. Y comencemos con la tabla de usuarios. Tiene 4 columnas:

Id_user: valores enteros, por lo que el tipo será int, limitémoslo a 10 caracteres: int (10).
name es un valor de cadena varchar, limitémoslo a 20 caracteres: varchar (20).
email es un valor de cadena varchar, limitémoslo a 50 caracteres - varchar(50).
contraseña - valor de cadena varchar, limitémoslo a 15 caracteres - varchar (15).

Todos los valores de campo son obligatorios, por lo que debe agregar NO tipo NULO.

id_user int(10) NO NULO
nombre varchar (20) NO NULO
correo electrónico varchar (50) NO NULO

La primera columna, como recordará del modelo conceptual de nuestra base de datos, es la clave principal (es decir, sus valores son únicos e identifican de manera única un registro). Es posible seguir la singularidad por su cuenta, pero no es racional. Hay un atributo especial en SQL para esto: AUTOINCREMENTO, que al acceder a la tabla para añadir datos, calcula el valor máximo de esta columna, aumenta en 1 el valor resultante y lo pone en la columna. Por lo tanto, se genera automáticamente un número único en esta columna y, por lo tanto, el tipo NOT NULL es redundante. Entonces, asignemos un atributo a una columna con una clave principal:


nombre varchar (20) NO NULO
correo electrónico varchar (50) NO NULO
contraseña varchar (15) NO NULO

Ahora debemos especificar que el campo id_user es la clave principal. Para hacer esto, SQL usa palabra clave CLAVE PRIMARIA(), el nombre del campo clave se indica entre paréntesis. Hagamos cambios:

id_usuario int(10) AUTO_INCREMENTO
nombre varchar (20) NO NULO
correo electrónico varchar (50) NO NULO
contraseña varchar (15) NO NULO
CLAVE PRINCIPAL (id_usuario)

Entonces, la tabla está lista y su versión final se ve así:

Crear usuarios de tabla (
id_usuario int(10) INCREMENTO_AUTO,
nombre varchar (20) NO NULO,
correo electrónico varchar (50) NO NULO,
contraseña varchar (15) NO NULO,
CLAVE PRINCIPAL (id_usuario)
);

Ahora tratemos la segunda tabla: temas (temas). Argumentando de manera similar, tenemos los siguientes campos:



id_autor int(10) NO NULO
CLAVE PRINCIPAL (id_topic)

Pero en nuestro modelo de base de datos, el campo id_author es una clave externa, es decir solo puede tener valores que estén en el campo id_user de la tabla de usuarios. Para especificar esto en SQL hay una palabra clave CLAVE EXTERNA(), que tiene la siguiente sintaxis:

CLAVE EXTERNA (column_name_which_is_foreign_key) REFERENCES parent_table_name (parent_column_name);

Especifiquemos que id_author es una clave externa:

id_topic int(10) INCREMENTO_AUTO
topic_name varchar(100) NO NULO
id_autor int(10) NO NULO
CLAVE PRINCIPAL (id_topic)
CLAVE EXTRANJERA (id_autor) REFERENCIAS usuarios (id_usuario)

La tabla está lista, y su versión final se ve así:

Crear temas de tabla (
id_topic int(10) INCREMENTO_AUTO,
topic_name varchar(100) NO NULO,

CLAVE PRINCIPAL (id_topic),
CLAVE EXTRANJERA (id_autor) REFERENCIAS usuarios (id_usuario)
);

Queda la última tabla: publicaciones (mensajes). Todo es similar aquí, solo dos claves foráneas:

Crear publicaciones en la tabla (
id_post int(10) INCREMENTO_AUTO,
texto del mensaje NO NULO,
id_autor int(10) NO NULO,
id_topic int(10) NO NULO,
CLAVE PRIMARIA (id_post),
CLAVE EXTRANJERA (id_autor) REFERENCIAS usuarios (id_usuario),
CLAVE EXTRANJERA (id_topic) REFERENCIAS temas (id_topic)
);

Tenga en cuenta que una tabla puede tener varias claves externas y solo puede haber una clave principal en MySQL. En la primera lección, eliminamos nuestra base de datos del foro, es hora de crearla nuevamente.

lanzamos servidor mysql(Inicio - Programas - MySQL - Mi servidor SQL 5.1 - MySQL Command Line Client), ingrese una contraseña, cree una base de datos de foro (create database forum;), selecciónala para usarla (use forum;) y crea nuestras tres tablas:

Tenga en cuenta que un comando se puede escribir en varias líneas usando la tecla Intro (MySQL sustituye automáticamente un carácter de nueva línea ->), y solo después de que el separador (punto y coma) presione la tecla Intro, la consulta se ejecutará.

Recuerde, si hace algo mal, siempre puede descartar una tabla o toda la base de datos usando la instrucción DROP. arreglar algo en línea de comando extremadamente inconveniente, por lo que a veces (especialmente en etapa inicial) es más fácil escribir consultas en algún editor, como el Bloc de notas, y luego copiarlas y pegarlas en el cuadro negro.

Entonces, las tablas se crean para asegurarse de esto, recordemos el equipo. mostrar tablas:

Y finalmente, veamos la estructura de nuestra última tabla de publicaciones:

Ahora los significados de todos los campos de la estructura, excepto el campo DEFAULT, quedan claros. Este es el campo de valor predeterminado. Podríamos especificar un valor predeterminado para alguna columna (o para todas). Por ejemplo, si tuviéramos un campo llamado "Casado\Casado" y de tipo ENUM ("sí", "no"), entonces tendría sentido convertir uno de los valores en el valor predeterminado. La sintaxis sería:

Enumeración casada ("sí", "no") NOT NULL predeterminado ("sí")

Aquellos. esta palabra clave se escribe con un espacio después del tipo de datos y el valor predeterminado se indica entre paréntesis.

Pero volvamos a nuestras mesas. Ahora necesitamos ingresar datos en nuestras tablas. En los sitios web, generalmente ingresa información en algunos formularios html, luego un script en algún idioma (php, java ...) extrae estos datos del formulario y los ingresa a la base de datos. Lo hace por medio de una consulta SQL para ingresar datos en la base de datos. Todavía no sabemos cómo escribir scripts en php, pero ahora aprenderemos cómo enviar consultas SQL para ingresar datos.

Para ello se utiliza el operador INSERTAR. La sintaxis se puede utilizar de dos maneras. La primera opción se utiliza para ingresar datos en todos los campos de la tabla:

INSERTAR EN VALORES de table_name ("first_column_value", "second_column_value", ..., "last_column_value");


Intentemos llenar nuestra tabla de usuarios con los siguientes valores:

INSERTAR EN LOS VALORES de los usuarios ("1","sergey"," [correo electrónico protegido]", "1111");

La segunda opción se utiliza para ingresar datos en algunos campos de la tabla:

INSERT INTO nombre_tabla ("nombre_columna", "nombre_columna") VALUES ("valor_primera_columna", "valor_segundo_columna");


En nuestra tabla de usuarios, todos los campos son obligatorios, pero nuestro primer campo tiene la palabra clave - AUTO_INCREMENT (es decir, se completa automáticamente), por lo que podemos omitir esta columna:

INSERTAR EN USUARIOS (nombre, email, contraseña) VALORES ("valera", " [correo electrónico protegido]", "2222");

Si tuviéramos campos con el tipo NULL, es decir opcional, también podríamos ignorarlos. Pero si intenta dejar vacío el campo con el valor NOT NULL, el servidor emitirá un mensaje de error y no cumplirá con la solicitud. Además, al ingresar datos, el servidor verifica las relaciones entre las tablas. Por lo tanto, no puede completar un campo que sea una clave externa con un valor que no esté en la tabla relacionada. Verificará esto ingresando datos en las dos tablas restantes.

Pero primero, agreguemos información sobre algunos usuarios más. Para agregar varias líneas a la vez, solo necesita enumerar los corchetes con valores separados por comas:

Ahora agreguemos datos a la segunda tabla: temas. Todo es igual, pero debemos recordar que los valores en el campo id_autor deben estar presentes en la tabla de usuarios (usuarios):

Ahora intentemos agregar otro tema, pero con un id_author que no está en la tabla de usuarios (dado que solo agregamos 5 usuarios a la tabla de usuarios, id=6 no existe):

El servidor da error y dice que no puede ingresar tal línea, porque el campo de clave externa tiene un valor que no está en la tabla de usuarios relacionados.

Ahora agreguemos algunas filas a la tabla de publicaciones (mensajes), recordando que tenemos 2 claves externas, es decir El id_author y id_topic que ingresaremos deben estar presentes en sus tablas asociadas:

Así que tenemos 3 tablas que tienen datos. Surge la pregunta: cómo ver qué datos se almacenan en las tablas. Esto es lo que haremos en la próxima lección.

Trabajar con bases de datos está directamente relacionado con el cambio de tablas y los datos que contienen. Pero antes de iniciar las acciones, se debe crear la tabla. Para automatizar este proceso, hay un especial: "CREAR TABLA".

¡Lo primero!

Antes de tratar con el proceso de creación de tablas usando el comando "CREATE TABLE" de MS SQL, vale la pena detenerse en lo que necesita saber antes de usar la función.

En primer lugar, debe encontrar un nombre para la tabla: debe ser único en comparación con otros en la base de datos y seguir algunas reglas. El nombre debe comenzar con una letra (a-z), seguido de letras, números y guiones bajos, y la frase resultante no debe ser palabra reservada. La longitud del nombre de la tabla no debe exceder los 18 caracteres.

Una vez que haya decidido el nombre, debe desarrollar una estructura: proponga nombres para las columnas, piense en el tipo de datos que se usa en ellas y qué campos deben completarse. También vale la pena definir inmediatamente los campos de claves primarias y externas, así como las posibles restricciones en los valores de los datos.

Los matices restantes de la tabla se pueden corregir fácilmente, por lo que en la etapa de creación de la tabla es posible que no estén completamente pensados.

Sintaxis

Habiendo desarrollado la estructura de la tabla, puede proceder a su creación. Esto es bastante fácil de hacer usando la función SQL "CREATE TABLE". En él, el usuario debe especificar el nombre de la tabla inventada anteriormente y la lista de columnas, indicando el tipo y el nombre de cada una de ellas. La sintaxis de la función es la siguiente:

CREAR TABLA nombre_tabla
((tipo de datos nombre_columna …| restricción_tabla)
[,(tipo de datos nombre_columna …| restricción_tabla)]…)

Los argumentos utilizados en la construcción de una función significan lo siguiente:

  • table_name - nombre de la tabla
  • column_name - nombre de la columna
  • tipo de datos - el tipo de datos utilizado en este campo
  • DEFAULT es la expresión utilizada en la columna predeterminada.

También es posible utilizar dos argumentos de función más:

  • colum_constraint - parámetros de columna
  • table_constraint - parámetros de la tabla

En ellos, el usuario puede especificar las restricciones requeridas para el trabajo o las condiciones para llenar la tabla.

Características de la creación de tablas.

Al escribir una consulta con una función, a veces es necesario establecer reglas para completar los campos. Para hacer esto, debe agregar atributos de funciones especiales que definan un conjunto particular de condiciones.

Para determinar si una celda puede contener un valor vacío, después de especificar el nombre y el tipo de columna, se debe escribir una de las palabras clave: NULL (puede haber valores vacíos) o NOT NULL (el campo debe ser llenado).

A la hora de crear una tabla, en la mayoría de los casos es necesario unificar cada registro para evitar tener dos idénticos. Para esto, la numeración de líneas se usa con mayor frecuencia. Y, para no requerir que el usuario conozca el último número disponible en la tabla, basta con especificar la columna de clave principal en la función "CREAR TABLA" escribiendo la palabra clave "Clave principal" después del campo correspondiente. La mayoría de las veces, es por la clave principal que las tablas se unen entre sí.

La propiedad de clave externa "CLAVE EXTERNA" se utiliza para proporcionar un vínculo con la clave principal. Al especificar esta propiedad para una columna, puede asegurarse de que este campo contenga un valor que coincida con uno de los que se encuentran en la columna de clave principal de la misma tabla o de otra. De esta manera, se puede asegurar la consistencia de los datos.

Para proporcionar una comprobación con respecto a un conjunto o definición determinados, utilice el atributo CHECK. Se escribe en último lugar en la lista de argumentos de función y tiene algún valor como parámetro privado. expresión booleana. Con su ayuda, puede limitar la lista de valores posibles, por ejemplo, usando solo las letras "M" y "F" en el campo "Género" de la tabla.

Además de los presentados, la función tiene muchos más atributos específicos, pero se usan con mucha menos frecuencia en la práctica.

Ejemplos

Para comprender completamente cómo funciona la función, vale la pena considerar en la práctica cómo funciona CREATE TABLE (SQL). El siguiente ejemplo crea la tabla que se muestra en la figura:

CREAR TABLA Personalizado
(ID CHAR(10) NOT NULL Clave principal,
Nombre_personalizado CHAR(20),
dirección_personalizadaCHAR(30),
CHAR ciudad_personalizada(20),
Custom_CountryCHAR(20),
ArcDateCHAR(20))

Como puede ver, el parámetro de la posible ausencia de un valor en la celda (NULL) se puede omitir, ya que se usa por defecto.

Si necesitaba guardar el conjunto de datos resultante devuelto por una consulta SQL, entonces este artículo será de su interés, ya que consideraremos instrucción SELECCIONAR EN, con el que puedes crear una nueva tabla en Microsoft SQL Server y llenarla con el resultado consulta SQL.

Comenzaremos, por supuesto, describiendo la declaración SELECT INTO en sí, y luego pasaremos a los ejemplos.

instrucción SELECT INTO en Transact-SQL

SELECCIONAR EN- una declaración en el lenguaje en T-SQL, que crea una nueva tabla e inserta las filas resultantes de la consulta SQL en ella. Estructura de la tabla, es decir el número y los nombres de las columnas, así como los tipos de datos y las propiedades de nulabilidad, se basarán en columnas ( expresiones) especificado en la lista de selección de origen en la instrucción SELECT. Por lo general, la declaración SELECT INTO se usa para combinar datos en una tabla de varias tablas, vistas, incluidos algunos datos calculados.

La declaración SELECT INTO requiere el permiso CREATE TABLE en la base de datos en la que se creará la nueva tabla.

La instrucción SELECT INTO tiene dos argumentos:

  • new_table es el nombre de la nueva tabla;
  • grupo de archivos - grupo de archivos. Si no se proporciona ningún argumento, se utiliza el grupo de archivos predeterminado. Esta función está disponible a partir de Microsoft SQL Server 2017.

Puntos importantes sobre la sentencia SELECT INTO

  • La instrucción se puede utilizar para crear una tabla en el servidor actual; no se admite la creación de una tabla en un servidor remoto;
  • Puede llenar una nueva tabla con datos tanto de la base de datos actual y del servidor actual como de otra base de datos o de un servidor remoto. Por ejemplo, especifique el nombre completo de la base de datos en el formulario base de datos.esquema.nombre_tabla o en el caso de un servidor remoto, servidor_vinculado.base de datos.esquema.nombre_tabla;
  • Una columna de identidad en una tabla nueva no hereda la propiedad IDENTITY si: la declaración contiene una combinación (JOIN, UNION), una cláusula GROUP BY, una función agregada, también si la columna de identidad es parte de una expresión, proviene de un control remoto fuente de datos, o aparece más de una vez en una opción de lista. En todo casos similares la columna de identidad no hereda la propiedad IDENTITY y se crea como NOT NULL;
  • Una declaración SELECT INTO no puede crear una tabla particionada, incluso si la tabla de origen está particionada;
  • Puede especificar una tabla normal como una tabla nueva, así como una tabla temporal, pero no puede especificar una variable de tabla o un parámetro con valores de tabla;
  • Una columna calculada, si hay una en la lista de selección de la declaración SELECT INTO, se vuelve normal en la nueva tabla, es decir no computable;
  • SELECT INTO no se puede usar con una cláusula COMPUTE;
  • Al utilizar SELECT INTO, los índices, las restricciones y los disparadores no se transfieren a una nueva tabla, deben crearse adicionalmente, después de ejecutar la declaración, si son necesarios;
  • La cláusula ORDER BY no garantiza que las filas de la nueva tabla se insertarán en el orden especificado.
  • El atributo FILESTREAM no se transfiere a la nueva tabla. Los BLOB de FILESTREAM en la nueva tabla serán BLOB varbinary(max) y tendrán un límite de 2 GB;
  • La cantidad de datos escritos en el registro de transacciones durante las operaciones SELECT INTO depende del modelo de recuperación. Bases de datos que utilizan el modelo de recuperación de registro masivo, y modelo sencillo, las operaciones masivas, que incluyen SELECT INTO, se registran mínimamente. Como resultado, una instrucción SELECT INTO puede ser más eficiente que instrucciones separadas para crear una tabla y una instrucción INSERT para llenarla con datos.

SELECCIONAR EN Ejemplos

Ejecutaré todos los ejemplos en Microsoft SQL Server 2016 Express DBMS.

Datos iniciales

Para empezar, creemos dos tablas y llenémoslas con datos, combinaremos estas tablas en los ejemplos.

CREAR TABLA TestTable( IDENTIDAD(1,1) NO NULO, NO NULO, (100) NO NULO, NULO) ON GO CREAR TABLA TestTable2( IDENTIDAD(1,1) NO NULO, (100) NO NULO) ON GO INSERTAR EN TestTable VALORES (1,"Teclado", 100), (1, "Ratón", 50), (2, "Teléfono", 300) IR A INSERTAR EN TestTable2 VALORES (" Componentes de la computadora"), ("Dispositivos móviles") IR SELECCIONAR * DESDE TestTable SELECCIONAR * DESDE TestTable2

Ejemplo 1: creación de una tabla con una declaración SELECT INTO con combinación de datos

Imaginemos que necesitamos fusionar dos tablas y almacenar el resultado en una nueva tabla ( por ejemplo, necesitamos obtener productos con el nombre de la categoría a la que pertenecen).

Operación SELECT INTO SELECT T1.ProductId, T2.CategoryName, T1.ProductName, T1.Price INTO TestTable3 FROM TestTable T1 LEFT JOIN TestTable2 T2 ON T1.CategoryId = T2.CategoryId --Selección de datos de una nueva tabla SELECT * FROM TestTable3


Como resultado, creamos una tabla llamada TestTable3 y la llenamos con los datos combinados.

Ejemplo 2: creación de una tabla temporal con la instrucción SELECT INTO con agrupación de datos

Ahora digamos que necesitamos datos agrupados, por ejemplo, información sobre la cantidad de productos en una determinada categoría, mientras que necesitamos almacenar estos datos en una tabla temporal, por ejemplo, usaremos esta información solo en declaraciones SQL, por lo que no es necesario crear una tabla completa.

Cree una tabla temporal (#TestTable) usando SELECT INTO SELECT T2.CategoryName, COUNT(T1.ProductId) AS CntProduct INTO #TestTable FROM TestTable T1 LEFT JOIN TestTable2 T2 ON T1.CategoryId = T2.CategoryId GROUP BY T2.CategoryName -- Obtener datos de una tabla temporal SELECT * FROM #TestTable


Como puede ver, logramos crear una tabla temporal #TestTable y llenarla con datos agrupados.

Así que usted y yo examinamos la declaración SELECT INTO en el lenguaje T-SQL, en mi libro "The Way of the T-SQL Programmer" hablo en detalle sobre todas las construcciones. T-SQL (recomiendo leer), ¡y eso es todo por ahora!

Si nota un error, seleccione un fragmento de texto y presione Ctrl + Enter
COMPARTIR: