Consultas SQL simples para principiantes. Dedicado a verdaderos “Dummies” o MySQL para principiantes. Consultas SQL complejas

1 voto

Bienvenido a mi sitio de blogs. Hoy hablaremos sobre consultas SQL para principiantes. Algunos webmasters pueden tener alguna pregunta. ¿Por qué aprender SQL? ¿No es posible arreglárselas?

Resulta que esto no será suficiente para crear un proyecto de Internet profesional. Sql se utiliza para trabajar con bases de datos y crear aplicaciones para WordPress. Veamos cómo utilizar las consultas con más detalle.

Qué es

SQL es un lenguaje de consulta estructurado. Diseñado para determinar el tipo de datos, brindar acceso a los mismos y procesar información en cortos períodos de tiempo. Describe los componentes o algunos resultados que desea ver en el proyecto de Internet.

En pocas palabras, este lenguaje de programación le permite agregar, cambiar, buscar y mostrar información en la base de datos. La popularidad de mysql se debe a que se utiliza para crear proyectos dinámicos de Internet que se basan en una base de datos. Por tanto, para desarrollar un blog funcional, es necesario aprender este idioma.

¿Qué puede hacer?

El lenguaje sql te permite:

  • crear tablas;
  • cambiar para recibir y almacenar diversos datos;
  • combinar información en bloques;
  • proteger datos;
  • crear solicitudes en el acceso.

¡Importante! Una vez que comprenda SQL, podrá escribir aplicaciones para WordPress de cualquier complejidad.

que estructura

La base de datos consta de tablas que se pueden presentar como un archivo Excel.

Tiene un nombre, columnas y una fila con alguna información. Puede crear dichas tablas mediante ayuda sql solicitudes.

Lo que necesitas saber


Puntos clave para aprender SQL

Como se señaló anteriormente, las consultas se utilizan para procesar e ingresar nueva información en una base de datos que consta de tablas. Cada línea es entrada separada. Entonces, creemos una base de datos. Para hacer esto, escriba el comando:

Crear base de datos 'bazaname'

Escribimos el nombre de la base de datos en latín entre comillas. Intente encontrarle un nombre claro. No cree una base de datos como “111”, “www” y similares.

Después de crear la base de datos, instale:

ESTABLECER NOMBRES 'utf-8'

Esto es necesario para que el contenido del sitio se muestre correctamente.

Ahora creemos una tabla:

CREAR TABLA 'bazaname' . 'mesa' (

id INT(8) NO NULA CLAVE PRIMARIA AUTO_INCREMENT,

registro VARCHAR(10),

pasar VARCHAR(10),

fecha FECHA

En la segunda línea escribimos tres atributos. Veamos qué significan:

  • El atributo NOT NULL significa que la celda no estará vacía (el campo es obligatorio);
  • El valor AUTO_INCREMENT se completa automáticamente;
  • CLAVE PRIMARIA - clave primaria.

Cómo agregar información

Para llenar los campos de la tabla creada con valores, se utiliza la declaración INSERT. Escribimos las siguientes líneas de código:

INSERTAR EN 'tabla'

(iniciar sesión, contraseña, fecha) VALORES

('Vasa', '87654321', '2017-06-21 18:38:44');

Entre paréntesis indicamos los nombres de las columnas y, a continuación, los valores.

¡Importante! Mantenga la coherencia en los nombres y valores de las columnas.

Cómo actualizar la información

Para hacer esto, use el comando ACTUALIZAR. Veamos cómo cambiar la contraseña de usuario específico. Escribimos las siguientes líneas de código:

ACTUALIZAR 'tabla' SET pass = '12345678' DONDE id = '1'

Ahora cambie la contraseña '12345678'. Los cambios ocurren en la línea con “id”=1. Si no escribe el comando WHERE, todas las líneas cambiarán, no una específica.

Te recomiendo que compres el libro " SQL para tontos " Con su ayuda, podrás trabajar profesionalmente con la base de datos paso a paso. Toda la información está estructurada según el principio de simple a complejo y será bien percibida.

Cómo eliminar una entrada

Si escribió algo mal, corríjalo usando el comando BORRAR. Funciona igual que ACTUALIZAR. Escribimos el siguiente código:

ELIMINAR DE 'tabla' DONDE id = '1'

Información de muestreo

Para recuperar valores de la base de datos, use el comando SELECT. Escribimos el siguiente código:

SELECCIONE * DE 'tabla' DONDE id = '1'

EN en este ejemplo en la tabla, seleccione todos los campos disponibles. Esto sucede si ingresa un asterisco "*" en el comando. Si necesita seleccionar algún valor de muestra, escriba esto:

SELECCIONE el registro, pase DESDE la tabla DONDE id = '1'

Cabe señalar que la capacidad de trabajar con bases de datos no será suficiente. Para crear un proyecto de Internet profesional, deberá aprender a agregar datos de una base de datos a las páginas. Para ello, familiarícese con el lenguaje de programación web PHP. Te ayudará con esto curso genial de Mikhail Rusakov .


Eliminar una tabla

Ocurre mediante una solicitud DROP. Para ello escribiremos las siguientes líneas:

mesa DROP TABLE;

Mostrar un registro de una tabla según una condición específica

Considere este código:

SELECCIONE ID, país, ciudad DE la tabla DONDE personas>150000000

Mostrará registros de países con una población de más de ciento cincuenta millones.

Asociación

Es posible vincular varias tablas usando Join. Mira cómo funciona con más detalle en este vídeo:

PHP y MySQL

Una vez más quiero enfatizar que las solicitudes al crear un proyecto de Internet son algo común. Para usarlos en documentos PHP, siga el siguiente algoritmo:

  • Conéctese a la base de datos usando el comando mysql_connect();
  • Usando mysql_select_db() seleccionamos la base de datos deseada;
  • Procesamos la solicitud usando mysql_fetch_array();
  • Cierre la conexión con el comando mysql_close().

¡Importante! Trabajar con una base de datos no es difícil. Lo principal es redactar la solicitud correctamente.

Los webmasters principiantes lo pensarán. ¿Qué debería leer sobre este tema? Me gustaría recomendar el libro de Martin Graber " SQL para simples mortales " Está escrito de tal manera que los principiantes entenderán todo. Úselo como libro de referencia.

Pero esto es una teoría. ¿Cómo funciona esto en la práctica? En realidad, no solo es necesario crear un proyecto de Internet, sino también llevarlo al TOP de Google y Yandex. El curso en vídeo te ayudará con esto " Creación y promoción de sitios web. ».


Instrucciones en vídeo

¿Aún tienes preguntas? Mire el vídeo en línea para obtener más detalles.

Conclusión

Entonces, descubrir cómo escribir consultas SQL no es tan difícil como parece, pero cualquier webmaster debe hacerlo. Los cursos en vídeo descritos anteriormente ayudarán con esto. Suscríbete a mi grupo vkontakte para ser el primero en enterarte cuando aparezca nueva información interesante.

  • Tutorial

¿De qué se trata este tutorial?

Este tutorial es algo así como un “sello de mi memoria” en el lenguaje SQL (DDL, DML), es decir. Esta es información que se ha acumulado a lo largo del camino. actividad profesional y está constantemente almacenado en mi cabeza. Para mí, este es un mínimo suficiente que utilizo con mayor frecuencia cuando trabajo con bases de datos. Si es necesario utilizar construcciones SQL más completas, normalmente recurro a la biblioteca MSDN ubicada en Internet para obtener ayuda. En mi opinión, es muy difícil tener todo en la cabeza y no hay ninguna necesidad especial de ello. Pero conocer las estructuras básicas es muy útil, porque... son aplicables casi de la misma forma en muchas bases de datos relacionales, como Oracle, MySQL, Firebird. Las diferencias radican principalmente en los tipos de datos, que pueden diferir en detalles. No existen muchas construcciones SQL básicas y con la práctica constante se memorizan rápidamente. Por ejemplo, para crear objetos (tablas, restricciones, índices, etc.), basta con tener a mano un entorno de editor de texto (IDE) para trabajar con la base de datos, y no es necesario estudiar herramientas visuales diseñadas para trabajar con un tipo específico de base de datos (MS SQL, Oracle, MySQL, Firebird, ...). Esto también es conveniente porque todo el texto está frente a sus ojos y no necesita recorrer numerosas pestañas para crear, por ejemplo, un índice o una restricción. En trabajo permanente Con una base de datos, crear, cambiar y especialmente recrear un objeto usando scripts es muchas veces más rápido que si lo haces en modo visual. También en modo script (respectivamente, con el debido cuidado), es más fácil configurar y controlar las reglas para nombrar objetos (mi opinión subjetiva). Además, los scripts son convenientes de usar cuando los cambios realizados en una base de datos (por ejemplo, una prueba) deben transferirse de la misma forma a otra base de datos (productiva).

El lenguaje SQL se divide en varias partes, aquí miraré las 2 partes más importantes:
  • DML: lenguaje de manipulación de datos, que contiene las siguientes construcciones:
    • SELECCIONAR – selección de datos
    • INSERTAR – insertar nuevos datos
    • ACTUALIZACIÓN – actualización de datos
    • BORRAR – eliminar datos
    • FUSIONAR – fusión de datos
Porque Soy un practicante; habrá poca teoría como tal en este libro de texto y todas las construcciones se explicarán mediante ejemplos prácticos. Además, creo que un lenguaje de programación, y especialmente SQL, sólo se puede dominar mediante la práctica, experimentándolo uno mismo y entendiendo lo que sucede cuando se ejecuta tal o cual construcción.

Este libro de texto fue creado según el principio Paso a Paso, es decir. debe leerlo secuencialmente y preferiblemente seguir inmediatamente los ejemplos. Pero si en el camino necesita conocer un determinado comando con más detalle, utilice una búsqueda específica en Internet, por ejemplo, en la biblioteca MSDN.

al escribir este libro de texto Se utilizó la base de datos MS Servidor SQL versión 2014, utilicé MS SQL para ejecutar scripts Gestión de servidores Estudio (SSMS).

Brevemente sobre MS SQL Server Management Studio (SSMS)

SQL Server Management Studio (SSMS) es una utilidad para MicrosoftSQL Servidor para configurar, gestionar y administrar componentes de bases de datos. Esta utilidad contiene un editor de scripts (que usaremos principalmente) y un programa gráfico que trabaja con objetos y configuraciones del servidor. Principal herramienta SQL Server Management Studio es un Explorador de objetos que permite al usuario ver, recuperar y administrar objetos del servidor. Este texto está parcialmente tomado de Wikipedia.

Para crear un nuevo editor de secuencias de comandos, utilice el botón "Nueva consulta":

Para cambiar la base de datos actual puede utilizar la lista desplegable:

Para ejecutar un comando específico (o grupo de comandos), selecciónelo y presione el botón "Ejecutar" o la tecla "F5". Si actualmente solo hay un comando en el editor, o necesita ejecutar todos los comandos, entonces no necesita seleccionar nada.

Después de ejecutar scripts, especialmente aquellos que crean objetos (tablas, columnas, índices), para ver los cambios, use la actualización en el menú contextual resaltando el grupo apropiado (por ejemplo, Tablas), la tabla en sí o el grupo Columnas que contiene.

En realidad, eso es todo lo que necesitamos saber para completar los ejemplos que se dan aquí. El resto de la utilidad SSMS es fácil de aprender por tu cuenta.

una pequeña teoría

Una base de datos relacional (RDB, o en adelante en el contexto simplemente DB) es una colección de tablas interconectadas. En términos generales, una base de datos es un archivo en el que se almacenan datos de forma estructurada.

DBMS – Sistema de gestión de bases de datos, es decir Se trata de un conjunto de herramientas para trabajar con un tipo específico de base de datos (MS SQL, Oracle, MySQL, Firebird, ...).

Nota
Porque en la vida, en el habla coloquial, decimos principalmente: "Oracle DB", o incluso simplemente "Oracle", que en realidad significa "Oracle DBMS", luego, en el contexto de este libro de texto, a veces se utilizará el término DB. Por el contexto, creo que quedará claro de qué estamos hablando exactamente.

Una tabla es una colección de columnas. Las columnas también pueden llamarse campos o columnas; todas estas palabras se utilizarán como sinónimos expresando lo mismo.

La tabla es el objeto principal de RDB; todos los datos de RDB se almacenan fila por fila en las columnas de la tabla. Líneas y registros también son sinónimos.

Para cada tabla, así como para sus columnas, se especifican los nombres mediante los cuales se accede posteriormente.
El nombre del objeto (nombre de tabla, nombre de columna, nombre de índice, etc.) en MS SQL puede tener una longitud máxima de 128 caracteres.

Para referencia– en la base de datos ORACLE, los nombres de los objetos pueden tener una longitud máxima de 30 caracteres. Por lo tanto, para una base de datos específica, debe desarrollar sus propias reglas para nombrar objetos para cumplir con el límite de número de caracteres.

SQL es un lenguaje que le permite consultar una base de datos utilizando un DBMS. En un DBMS específico, el lenguaje SQL puede tener una implementación específica (su propio dialecto).

DDL y DML son un subconjunto del lenguaje SQL:

  • El lenguaje DDL se utiliza para crear y modificar la estructura de la base de datos, es decir. para crear/modificar/eliminar tablas y relaciones.
  • El lenguaje DML le permite manipular datos de tablas, es decir. con sus líneas. Le permite seleccionar datos de tablas, agregar nuevos datos a las tablas, así como actualizar y eliminar datos existentes.

En SQL, puede utilizar 2 tipos de comentarios (de una sola línea y de varias líneas):

comentario de una linea
Y

/* comentario multilínea */

En realidad, esto será suficiente para la teoría.

DDL: lenguaje de definición de datos

Por ejemplo, considere una tabla con datos sobre empleados, en una forma familiar para una persona que no sea programador:

EN en este caso las columnas de la tabla tienen los siguientes nombres: Número de personal, Nombre completo, Fecha de nacimiento, Correo electrónico, Cargo, Departamento.

Cada una de estas columnas se puede caracterizar por el tipo de datos que contiene:

  • Número de personal – entero
  • Nombre completo – cadena
  • Fecha de nacimiento - fecha
  • Correo electrónico – cadena
  • Posición - cadena
  • Departamento - línea
El tipo de columna es una característica que indica qué tipo de datos puede almacenar una columna determinada.

Para empezar, bastará con recordar sólo los siguientes tipos de datos básicos utilizados en MS SQL:

Significado Notación en MS SQL Descripción
Línea longitud variable varchar(N)
Y
nvarchar(N)
Usando el número N, podemos especificar la longitud máxima de cadena posible para la columna correspondiente. Por ejemplo, si queremos decir que el valor de la columna "Nombre" puede contener un máximo de 30 caracteres, entonces debemos configurarlo para escribir nvarchar(30).
La diferencia entre varchar y nvarchar es que varchar le permite almacenar cadenas en formato ASCII, donde un carácter ocupa 1 byte, y nvarchar almacena cadenas en formato Unicode, donde cada carácter ocupa 2 bytes.
El tipo varchar solo debe usarse si está 100% seguro de que este campo no necesitará almacenar caracteres Unicode. Por ejemplo, varchar se puede utilizar para almacenar direcciones de correo electrónico porque... normalmente contienen sólo caracteres ASCII.
Cadena de longitud fija carácter(N)
Y
ncar(N)
Este tipo se diferencia de una cadena de longitud variable en que si la longitud de la cadena es inferior a N caracteres, siempre se rellena por la derecha hasta una longitud de N con espacios y se almacena en la base de datos de esta forma, es decir, en la base de datos ocupa exactamente N caracteres (donde un carácter ocupa 1 byte para char y 2 bytes para nchar). En mi práctica, este tipo se usa muy raramente y, si se usa, se usa principalmente en el formato char(1), es decir. cuando un campo está definido por un solo carácter.
Entero entero este tipo nos permite utilizar sólo números enteros en la columna, tanto positivos como negativos. Como referencia (ahora esto no es tan relevante para nosotros), el rango de números que permite el tipo int es de -2,147,483,648 a 2,147,483,647. Generalmente este es el tipo principal que se usa para configurar identificadores.
numero real o real flotar En términos simples, estos son números que pueden contener un punto decimal (coma).
Fecha fecha Si la columna necesita almacenar solo la Fecha, que consta de tres componentes: Día, Mes y Año. Por ejemplo, 15/02/2014 (15 de febrero de 2014). Este tipo se puede utilizar para la columna “Fecha de ingreso”, “Fecha de nacimiento”, etc., es decir. en los casos en los que es importante para nosotros registrar solo la fecha, o cuando el componente de tiempo no es importante para nosotros y puede descartarse o si no se conoce.
Tiempo tiempo Este tipo se puede utilizar si la columna necesita almacenar solo datos de tiempo, es decir, Horas, Minutos, Segundos y Milisegundos. Por ejemplo, 17:38:31.3231603
Por ejemplo, “Hora de salida del vuelo” diaria.
Fecha y hora fecha y hora Este tipo le permite guardar simultáneamente la fecha y la hora. Por ejemplo, 15/02/2014 17:38:31.323
Por ejemplo, podría ser la fecha y hora de un evento.
Bandera poco Este tipo es conveniente para almacenar valores del formato "Sí"/"No", donde "Sí" se almacenará como 1 y "No" se almacenará como 0.

Además, el valor del campo, si no está prohibido, no se puede especificar para este propósito;

Para ejecutar los ejemplos, creemos una base de datos de prueba llamada Test.

Una base de datos simple (sin especificar parámetros adicionales) se puede crear ejecutando el siguiente comando:

CREAR BASE DE DATOS Prueba
Puedes eliminar la base de datos con el comando (debes tener mucho cuidado con este comando):

Prueba de caída de base de datos
Para cambiar a nuestra base de datos, puede ejecutar el comando:

Prueba de uso
Alternativamente, seleccione la base de datos de prueba de la lista desplegable en el área del menú SSMS. Cuando trabajo, suelo utilizar este método para cambiar entre bases de datos.

Ahora en nuestra base de datos podemos crear una tabla usando las descripciones tal como están, usando espacios y caracteres cirílicos:

CREAR TABLA [Empleados]([Número de personal] int, [Nombre] nvarchar(30), [Fecha de nacimiento] fecha, nvarchar(30), [Posición] nvarchar(30), [Departamento] nvarchar(30))
En este caso, tendremos que poner los nombres entre corchetes […].

Pero en la base de datos, para mayor comodidad, es mejor especificar todos los nombres de los objetos en latín y no utilizar espacios en los nombres. En MS SQL, en este caso, normalmente cada palabra comienza con mayúscula, por ejemplo, para el campo “Número de personal”, podríamos establecer el nombre Número de personal. También puede utilizar números en el nombre, por ejemplo, PhoneNumber1.

Nota
En algunos DBMS, el siguiente formato de denominación “NÚMERO_TELÉFONO” puede ser más preferible; por ejemplo, este formato se utiliza a menudo en la base de datos ORACLE; Naturalmente, al especificar un nombre de campo, es deseable que no coincida con las palabras clave utilizadas en el DBMS.

Por este motivo, puedes olvidarte de la sintaxis de los corchetes y eliminar la tabla [Empleados]:

MESA DE SALIDA [Empleados]
Por ejemplo, una tabla con empleados puede denominarse "Empleados" y sus campos pueden recibir los siguientes nombres:

  • ID – Número de personal (ID de empleado)
  • Nombre - nombre completo
  • Cumpleaños – Fecha de nacimiento
  • Correo electrónico – Correo electrónico
  • Posición - Posición
  • Departamento - Departamento
Muy a menudo, la palabra ID se utiliza para nombrar un campo de identificación.

Ahora creemos nuestra tabla:

CREAR TABLA Empleados(ID int, Nombre nvarchar(30), Fecha de cumpleaños, Correo electrónico nvarchar(30), Puesto nvarchar(30), Departamento nvarchar(30))
Para especificar las columnas requeridas, puede usar la opción NOT NULL.

Para una tabla existente, los campos se pueden redefinir usando los siguientes comandos:

Actualizar campo ID ALTER TABLE Empleados ALTER COLUMN ID int NOT NULL - actualizar campo Nombre ALTER TABLE Empleados ALTER COLUMN Nombre nvarchar(30) NOT NULL

Nota
El concepto general del lenguaje SQL sigue siendo el mismo para la mayoría de los DBMS (al menos, esto es lo que puedo juzgar de los DBMS con los que he trabajado). Las diferencias entre DDL en diferentes DBMS radican principalmente en los tipos de datos (aquí no solo pueden diferir sus nombres, sino también los detalles de su implementación), y los detalles mismos de la implementación del lenguaje SQL también pueden diferir ligeramente (es decir, el La esencia de los comandos es la misma, pero puede haber ligeras diferencias en el dialecto (ay, pero no existe un estándar único). poseer Conceptos básicos de SQL puedes cambiar fácilmente de un DBMS a otro, porque En este caso, solo necesitará comprender los detalles de la implementación de comandos en el nuevo DBMS, es decir en la mayoría de los casos, bastará con hacer una analogía.

Crear una tabla CREAR TABLA Empleados(ID int, -- en ORACLE el tipo int es el equivalente (envoltorio) para número(38) Nombre nvarchar2(30), -- nvarchar2 en ORACLE es equivalente a nvarchar en MS SQL Fecha de cumpleaños, Correo electrónico nvarchar2(30), Posición nvarchar2(30), Departamento nvarchar2(30)); -- actualizar los campos ID y Nombre (aquí se usa MODIFY(...) en lugar de ALTER COLUMN) ALTER TABLE Empleados MODIFY(ID int NOT NULL,Name nvarchar2(30) NOT NULL); -- agregando PK (en este caso la construcción tiene el mismo aspecto que en MS SQL, se mostrará a continuación) ALTER TABLE Employees ADD CONSTRAINT PK_Employees PRIMARY KEY(ID);
Para ORACLE existen diferencias en cuanto a la implementación del tipo varchar2; su codificación depende de la configuración de la base de datos y el texto se puede guardar, por ejemplo, en codificación UTF-8. Además, la longitud del campo en ORACLE se puede especificar tanto en bytes como en caracteres, para ello se utilizan opciones adicionales BYTE y CHAR, que se especifican después de la longitud del campo, por ejemplo:

NAME varchar2(30 BYTE): la capacidad del campo será de 30 bytes NAME varchar2(30 CHAR): la capacidad del campo será de 30 caracteres
La opción que se utilizará de forma predeterminada BYTE o CHAR, en el caso de simplemente especificar el tipo varchar2(30) en ORACLE, depende de la configuración de la base de datos y, a veces, se puede configurar en la configuración del IDE. En general, a veces es fácil confundirse, por lo que en el caso de ORACLE, si se usa el tipo varchar2 (y esto a veces se justifica aquí, por ejemplo, cuando se usa la codificación UTF-8), prefiero escribir explícitamente CHAR (ya que suele ser más conveniente calcular la longitud de la cadena en caracteres).

Pero en este caso, si ya hay algunos datos en la tabla, entonces para ejecutar correctamente los comandos es necesario que se completen los campos ID y Nombre en todas las filas de la tabla. Demostremos esto con un ejemplo: insertar datos en la tabla en los campos ID, Puesto y Departamento, esto se puede hacer con el siguiente script:

INSERTAR Empleados(ID,Posición,Departamento) VALORES (1000,N"Director",N"Administración"), (1001,N"Programador",N"TI"), (1002,N"Contable",N"Contabilidad" ), (1003,N"Programador senior",N"IT")
En este caso, el comando INSERT también generará un error, porque Al insertar, no especificamos el valor del campo Nombre requerido.
Si ya tuviéramos estos datos en la tabla original, entonces el comando "ALTER TABLE Employees ALTER COLUMN ID int NOT NULL" se ejecutaría exitosamente, y el comando "ALTER TABLE Employees ALTER COLUMN Name int NOT NULL" produciría un mensaje de error. que el campo Nombre contiene valores NULL (no especificados).

Agreguemos valores para el campo Nombre y completemos los datos nuevamente:


También puede utilizar la opción NOT NULL directamente al crear nueva mesa, es decir. en el contexto del comando CREATE TABLE.

Primero, elimine la tabla usando el comando:

MESA DE GOTA Empleados
Ahora creemos una tabla con las columnas ID y Nombre requeridas:

CREAR TABLA Empleados(ID int NOT NULL, Nombre nvarchar(30) NOT NULL, Fecha de cumpleaños, Correo electrónico nvarchar(30), Posición nvarchar(30), Departamento nvarchar(30))
También puede escribir NULL después del nombre de la columna, lo que significará que se permitirán valores NULL (no especificados), pero esto no es necesario, ya que esta característica está implícita de forma predeterminada.

Si, por el contrario, desea que una columna existente sea opcional, utilice la siguiente sintaxis de comando:

ALTER TABLE Empleados ALTER COLUMN Nombre nvarchar(30) NULL
O simplemente:

ALTER TABLE Empleados ALTER COLUMN Nombre nvarchar(30)
Con este comando también podemos cambiar el tipo de campo a otro tipo compatible, o cambiar su longitud. Por ejemplo, expandamos el campo Nombre a 50 caracteres:

ALTER TABLE Empleados ALTER COLUMN Nombre nvarchar(50)

clave primaria

Al crear una tabla, es deseable que tenga una columna única o un conjunto de columnas que sea único para cada una de sus filas; un registro puede identificarse de forma única mediante este valor único. Este valor se denomina clave principal de la tabla. Para nuestra tabla Empleados, un valor único podría ser la columna ID (que contiene el "Número de personal del empleado", aunque en nuestro caso este valor es único para cada empleado y no se puede repetir).

Puede crear una clave principal para una tabla existente usando el comando:

ALTER TABLE Empleados AGREGAR RESTRICCIÓN PK_Empleados CLAVE PRIMARIA (ID)
Donde "PK_Employees" es el nombre de la restricción responsable de la clave principal. Normalmente, la clave principal se denomina con el prefijo "PK_" seguido del nombre de la tabla.

Si la clave principal consta de varios campos, estos campos deben enumerarse entre paréntesis, separados por comas:

ALTER TABLE nombre_tabla AGREGAR RESTRICCIÓN nombre_restricción CLAVE PRIMARIA (campo1, campo2,…)
Vale la pena señalar que en MS SQL, todos los campos incluidos en la clave principal deben tener la característica NOT NULL.

La clave principal también se puede determinar directamente al crear una tabla, es decir en el contexto del comando CREATE TABLE. Borremos la tabla:

MESA DE GOTA Empleados
Y luego lo crearemos usando la siguiente sintaxis:

CREAR TABLA Empleados (ID int NOT NULL, Nombre nvarchar(30) NOT NULL, Fecha de cumpleaños, Correo electrónico nvarchar(30), Posición nvarchar(30), Departamento nvarchar(30), CONSTRAINT PK_Employees PRIMARY KEY(ID) - describe la PK después de todos los campos como limitación)
Después de la creación, complete la tabla con datos:

INSERTAR Empleados(ID,Posición,Departamento,Nombre) VALORES (1000,N"Director",N"Administración",N"Ivanov I.I."), (1001,N"Programador",N"IT",N" Petrov P.P." ), (1002,N"Contador",N"Contabilidad",N"Sidorov S.S."), (1003,N"Programador senior",N"IT",N"Andreev A. A.")
Si la clave principal de una tabla consta únicamente de los valores de una columna, puede utilizar la siguiente sintaxis:

CREAR TABLA Empleados(ID int NOT NULL CONSTRAINT PK_Employees PRIMARY KEY, -- especifique como característica del campo Nombre nvarchar(30) NOT NULL, Fecha de cumpleaños, Correo electrónico nvarchar(30), Posición nvarchar(30), Departamento nvarchar(30) )
De hecho, no es necesario especificar el nombre de la restricción, en cuyo caso se le asignará un nombre de sistema (como “PK__Employee__3214EC278DA42077”):

CREAR TABLA Empleados(ID int NOT NULL, Nombre nvarchar(30) NOT NULL, Fecha de cumpleaños, Correo electrónico nvarchar(30), Posición nvarchar(30), Departamento nvarchar(30), CLAVE PRIMARIA(ID))
O:

CREAR TABLA Empleados (ID int NOT NULL PRIMARY KEY, Nombre nvarchar(30) NOT NULL, Fecha de cumpleaños, Correo electrónico nvarchar(30), Posición nvarchar(30), Departamento nvarchar(30))
Pero recomendaría que para las tablas permanentes siempre especifiques explícitamente el nombre de la restricción, porque Con un nombre claramente especificado y comprensible, será más fácil manipularlo más adelante, por ejemplo, puedes eliminarlo:

ALTER TABLE Empleados DROP CONSTRAINT PK_Empleados
Pero tal sintaxis corta, sin especificar los nombres de las restricciones, es conveniente usarlo al crear tablas de bases de datos temporales (el nombre de la tabla temporal comienza con # o ##), que se eliminarán después de su uso.

resumamos

Hasta ahora hemos visto los siguientes comandos:
  • CREAR TABLA table_name (lista de campos y sus tipos, restricciones): se utiliza para crear una nueva tabla en la base de datos actual;
  • MESA DE CAÍDA table_name: se utiliza para eliminar una tabla de la base de datos actual;
  • ALTERAR TABLA nombre_tabla ALTERAR COLUMNA nombre_columna... – se utiliza para actualizar el tipo de columna o cambiar su configuración (por ejemplo, para establecer la característica NULL o NOT NULL);
  • ALTERAR TABLA nombre_tabla AÑADIR RESTRICCIÓN nombre_restricción CLAVE PRIMARIA(campo1, campo2,...): agregar una clave principal a una tabla existente;
  • ALTERAR TABLA nombre_tabla RESTRICCIÓN DE CAÍDA constraint_name: elimina una restricción de la tabla.

Un poco sobre mesas temporales.

Extracto de MSDN. Hay dos tipos de tablas temporales en MS SQL Server: local (#) y global (##). Las tablas temporales locales son visibles solo para sus creadores hasta que finaliza la sesión de conexión a la instancia de SQL Server cuando se crean por primera vez. Las tablas temporales locales se eliminan automáticamente después de que un usuario se desconecta de la instancia de SQL Server. Las tablas temporales globales son visibles para todos los usuarios durante cualquier sesión de conexión después de que se crean esas tablas y se eliminan cuando todos los usuarios que hacen referencia a esas tablas se desconectan de la instancia de SQL Server.

Las tablas temporales se crean en la base de datos del sistema tempdb, es decir Al crearlas no obstruimos la base de datos principal; de lo contrario, las tablas temporales son completamente idénticas a las tablas normales y también se pueden eliminar usando el comando DROP TABLE; Las tablas temporales locales (#) se utilizan con mayor frecuencia.

Para crear una tabla temporal, puede utilizar el comando CREATE TABLE:

CREAR TABLA #Temp(ID int, Nombre nvarchar(30))
Dado que una tabla temporal en MS SQL es similar a una tabla normal, también se puede eliminar usando el comando DROP TABLE:

TABLA DE CAÍDA #Temp

También puede crear una tabla temporal (como una tabla normal) y completarla inmediatamente con los datos devueltos por la consulta usando la sintaxis SELECT... INTO:

SELECCIONE ID, Nombre EN #Temp DE Empleados

Nota
La implementación de tablas temporales puede diferir en diferentes DBMS. Por ejemplo, en ORACLE y Firebird DBMS, la estructura de las tablas temporales debe determinarse de antemano mediante el comando CREATE GLOBAL TEMPORARY TABLE, indicando los detalles del almacenamiento de datos en ella, luego el usuario las ve entre las tablas principales y trabaja con ellas. como con una mesa normal.

Normalización de la base de datos: división en subtablas (directorios) e identificación de conexiones

Nuestra tabla de Empleados actual tiene la desventaja de que en los campos Puesto y Departamento el usuario puede ingresar cualquier texto, lo que en su mayoría está plagado de errores, ya que para un empleado simplemente puede indicar "TI" como departamento, y para un segundo empleado, para Por ejemplo, ingrese "Departamento de TI", el tercero tiene "TI". Como resultado, no quedará claro qué quiso decir el usuario, es decir. ¿Estos empleados son empleados del mismo departamento o el usuario se describió a sí mismo y son 3 departamentos diferentes? Además, en este caso no podremos agrupar correctamente los datos para algún informe, donde puede ser necesario mostrar el número de empleados por cada departamento.

La segunda desventaja es el volumen de almacenamiento de esta información y su duplicación, es decir. Para cada empleado se indica el nombre completo del departamento, lo que requiere espacio en la base de datos para almacenar cada carácter del nombre del departamento.

El tercer inconveniente es la dificultad de actualizar estos campos si el nombre de un puesto cambia, por ejemplo, si necesita cambiar el nombre del puesto "Programador" a "Programador Junior". En este caso tendremos que realizar cambios en cada fila de la tabla cuya Posición sea igual a “Programador”.

Para evitar estas deficiencias, se utiliza la llamada normalización de la base de datos, dividiéndola en subtablas y tablas de referencia. No es necesario adentrarse en la jungla de la teoría y estudiar qué son las formas normales; basta con comprender la esencia de la normalización.

Creemos 2 tablas de referencia “Posiciones” y “Departamentos”, llamemos a la primera Posiciones y a la segunda, respectivamente, Departamentos:

CREAR TABLA Posiciones(ID int IDENTITY(1,1) NOT NULL CONSTRAINT PK_Positions PRIMARY KEY, Nombre nvarchar(30) NOT NULL) CREATE TABLE Departamentos(ID int IDENTITY(1,1) NOT NULL CONSTRAINT PK_Departments PRIMARY KEY, Nombre nvarchar(30 ) NO NULO)
Tenga en cuenta que aquí utilizamos nueva opción IDENTIDAD, que dice que los datos de la columna ID se numerarán automáticamente, comenzando desde 1, en incrementos de 1, es decir Al agregar nuevos registros se les asignarán secuencialmente los valores 1, 2, 3, etc. Estos campos suelen denominarse de incremento automático. Una tabla solo puede tener un campo definido con la propiedad IDENTITY y, por lo general, aunque no necesariamente, ese campo es la clave principal de esa tabla.

Nota
En diferentes DBMS, la implementación de campos con un contador se puede realizar de forma diferente. En MySQL, por ejemplo, dicho campo se define mediante la opción AUTO_INCREMENT. En ORACLE y Firebird, esta funcionalidad anteriormente se podía emular usando SEQUENCE. Pero hasta donde yo sé, ORACLE ahora ha agregado la opción GENERADO COMO IDENTIDAD.

Completemos estas tablas automáticamente, según los datos actuales registrados en los campos Puesto y Departamento de la tabla Empleados:

Rellenamos el campo Nombre de la tabla Puestos con valores únicos del campo Puesto de la tabla Empleados INSERTAR Posiciones(Nombre) SELECCIONAR Puesto DISTINTO DE Empleados DONDE El puesto NO ES NULO: descartar registros para los que no se especifica el puesto
Hagamos lo mismo con la tabla Departamentos:

INSERTAR Departamentos (Nombre) SELECCIONAR Departamento DISTINTO DE Empleados DONDE El Departamento NO ES NULO
Si ahora abrimos las tablas de Puestos y Departamentos, veremos un conjunto numerado de valores para el campo ID:

SELECCIONAR * DESDE Posiciones

SELECCIONAR * DE Departamentos

Estas tablas ahora desempeñarán el papel de libros de referencia para la asignación de puestos y departamentos. Ahora nos referiremos a los ID de trabajos y departamentos. En primer lugar, creemos nuevos campos en la tabla Empleados para almacenar datos de identificación:

Agregue un campo para ID de puesto ALTER TABLE Empleados ADD PositionID int - agregue un campo para ID de departamento ALTER TABLE Empleados ADD DepartmentID int
El tipo de campos de referencia debe ser el mismo que en los directorios, en este caso es int.

También puedes agregar varios campos a la tabla a la vez con un comando, enumerando los campos separados por comas:

ALTER TABLE Empleados AGREGAR PositionID int, DepartmentID int
Ahora escribamos enlaces (restricciones de referencia - CLAVE EXTRANJERA) para estos campos para que el usuario no tenga la oportunidad de escribir en estos campos valores que no se encuentran entre los valores de ID que se encuentran en los directorios.

ALTER TABLA Empleados AGREGAR RESTRICCIÓN FK_Employees_PositionID CLAVE EXTRANJERA (PositionID) REFERENCIAS Posiciones (ID)
Y haremos lo mismo para el segundo campo:

ALTER TABLA Empleados AGREGAR RESTRICCIÓN FK_Employees_DepartmentID CLAVE EXTRANJERA(DepartamentoID) REFERENCIAS Departamentos(ID)
Ahora el usuario podrá ingresar solo valores de ID del directorio correspondiente en estos campos. En consecuencia, para poder utilizar un nuevo departamento o puesto, primero deberá agregar una nueva entrada al directorio correspondiente. Porque Los puestos y departamentos ahora se almacenan en directorios en una sola copia, por lo que para cambiar el nombre basta con cambiarlo solo en el directorio.

El nombre de una restricción de referencia suele ser un nombre compuesto, que consta del prefijo "FK_", seguido del nombre de la tabla y seguido de un guión bajo, seguido del nombre del campo que hace referencia al identificador de la tabla de referencia.

Un identificador (ID) suele ser un valor interno que se usa solo para relaciones y el valor que se almacena allí es completamente indiferente en la mayoría de los casos, por lo que no es necesario intentar deshacerse de los agujeros en la secuencia de números que surgen durante el trabajo. con la tabla, por ejemplo, después de eliminar registros del directorio.

ALTER TABLE tabla AGREGAR RESTRICCIÓN nombre_restricción CLAVE EXTRANJERA (campo1, campo2,…) REFERENCIAS tabla_referencia (campo1, campo2,…)
En este caso, en la tabla “reference_table”, la clave primaria está representada por una combinación de varios campos (campo1, campo2,...).

En realidad, ahora actualicemos los campos PositionID y DepartmentID con valores de ID de los directorios. Usemos el comando DML UPDATE para este propósito:

ACTUALIZAR e SET PositionID=(SELECCIONAR ID DE Posiciones DONDE Nombre=e.Posición), DepartmentID=(SELECCIONAR ID DE Departamentos DONDE Nombre=e.Departamento) DE Empleados e
Veamos qué sucede al ejecutar la solicitud:

SELECCIONAR * DE Empleados

Eso es todo, los campos PositionID y DepartmentID se llenan con los identificadores correspondientes a puestos y departamentos, los campos Puesto y Departamento ya no son necesarios en la tabla Empleados, puedes eliminar estos campos:

ALTER TABLA Empleados DROP COLUMN Puesto,Departamento
Ahora nuestra tabla se ve así:

SELECCIONAR * DE Empleados

IDENTIFICACIÓN Nombre Cumpleaños Correo electrónico ID de posición ID de departamento
1000 Ivánov I.I. NULO NULO 2 1
1001 Petrov P.P. NULO NULO 3 3
1002 Sidorov S.S. NULO NULO 1 2
1003 Andréyev A.A. NULO NULO 4 3

Aquellos. Finalmente nos deshicimos del almacenamiento de información redundante. Ahora, según los números de puesto y departamento, podemos determinar inequívocamente sus nombres utilizando los valores de las tablas de referencia:

SELECCIONE e.ID,e.Nombre,p.Nombre NombrePosición,d.Nombre NombreDepartamento DESDE Empleados e IZQUIERDA UNIRSE Departamentos d ON d.ID=e.DepartmentID LEFT JOIN Posiciones p ON p.ID=e.PositionID

En el inspector de objetos podemos ver todos los objetos creados para una tabla determinada. Desde aquí puede realizar diversas manipulaciones con estos objetos, por ejemplo, cambiarles el nombre o eliminarlos.

También vale la pena señalar que la tabla puede referirse a sí misma, es decir. puedes crear un enlace recursivo. Por ejemplo, agreguemos otro campo ManagerID a nuestra tabla con empleados, que indicará el empleado a quien este empleado reporta. Creemos un campo:

ALTER TABLE Empleados ADD ManagerID int
Este campo es válido valor NULO, el campo estará vacío si, por ejemplo, el empleado no tiene superiores.

Ahora creemos una CLAVE EXTRANJERA para la tabla Empleados:

ALTER TABLE Empleados AÑADIR RESTRICCIÓN FK_Employees_ManagerID CLAVE EXTRANJERA (ManagerID) REFERENCIAS Empleados (ID)
Ahora creemos un diagrama y veamos cómo se ven las relaciones entre nuestras tablas:

Como resultado, deberíamos ver la siguiente imagen (la tabla Empleados está conectada a las tablas Puestos y Departamentos, y también se refiere a sí misma):

Finalmente, vale decir que las claves de referencia pueden incluir opciones adicionales ON DELETE CASCADE y ON UPDATE CASCADE, que indican cómo comportarse al eliminar o actualizar un registro al que se hace referencia en la tabla de referencia. Si no se especifican estas opciones, no podremos cambiar el ID en la tabla del directorio para un registro al que se hace referencia desde otra tabla, y tampoco podremos eliminar dicho registro del directorio hasta que eliminemos todas las filas que hacen referencia a este registro. o actualicemos las referencias en estas líneas a un valor diferente.

Por ejemplo, recreemos la tabla especificando la opción ON DELETE CASCADE para FK_Employees_DepartmentID:

DROP TABLE Empleados CREAR TABLA Empleados (ID int NOT NULL, Nombre nvarchar(30), Fecha de cumpleaños, Correo electrónico nvarchar(30), ID de posición int, ID de departamento int, ID de gerente int, CONSTRAINT PK_Employees PRIMARY KEY (ID), CONSTRAINT FK_Employees_DepartmentID FOREIGN KEY(DepartmentID) ) REFERENCIAS Departamentos(ID) EN ELIMINAR CASCADA, RESTRICCIÓN FK_Employees_PositionID LLAVE EXTRANJERA(PositionID) REFERENCIAS Posiciones(ID), RESTRICCIÓN FK_Employees_ManagerID LLAVE EXTRANJERA (ManagerID) REFERENCIAS Empleados(ID)) INSERTAR Empleados (ID,Nombre,Cumpleaños,PosiciónID,DepartamentoID,Hombre agerID )VALUES (1000,N"Ivanov I.I.","19550219",2,1,NULL), (1001,N"Petrov P.P.","19831203",3,3,1003), (1002 ,N"Sidorov S.S. ","19760607",1,2,1000), (1003,N"Andreev A.A.","19820417",4,3,1000)
Eliminemos el departamento con ID 3 de la tabla Departamentos:

BORRAR Departamentos DONDE ID=3
Veamos los datos de la tabla Empleados:

SELECCIONAR * DE Empleados

IDENTIFICACIÓN Nombre Cumpleaños Correo electrónico ID de posición ID de departamento ID del administrador
1000 Ivánov I.I. 1955-02-19 NULO 2 1 NULO
1002 Sidorov S.S. 1976-06-07 NULO 1 2 1000

Como puede ver, también se eliminaron los datos del departamento 3 de la tabla Empleados.

La opción ON UPDATE CASCADE se comporta de manera similar, pero es efectiva al actualizar el valor de ID en el directorio. Por ejemplo, si cambiamos el ID de un puesto en el directorio de puestos, en este caso el ID de departamento en la tabla Empleados se actualizará al nuevo valor de ID que configuramos en el directorio. Pero en este caso simplemente no será posible demostrarlo, porque la columna ID de la tabla Departamentos tiene la opción IDENTIDAD, la cual no nos permitirá ejecutar la siguiente consulta (cambiar el ID del departamento 3 a 30):

ACTUALIZAR Departamentos SET ID=30 WHERE ID=3
Lo principal es comprender la esencia de estas 2 opciones EN ELIMINAR CASCADA y EN ACTUALIZAR CASCADA. Utilizo estas opciones muy raramente y recomiendo que piense detenidamente antes de especificarlas en una restricción de referencia, porque Si elimina accidentalmente una entrada de una tabla de directorio, esto puede generar grandes problemas y crear una reacción en cadena.

Restauremos el departamento 3:

Damos permiso para agregar/cambiar el valor IDENTITY SET IDENTITY_INSERT Departamentos ON INSERT Departamentos(ID,Nombre) VALUES(3,N"IT") - prohibimos agregar/cambiar el valor IDENTITY SET IDENTITY_INSERT Departamentos OFF
Borremos completamente la tabla Empleados usando el comando TRUNCATE TABLE:

TRUNCAR TABLA Empleados
Y nuevamente recargaremos los datos usando el comando INSERT anterior:

INSERTAR Empleados (ID, Nombre, Cumpleaños, ID de Posición, ID de Departamento, ID de Gerente)VALUES (1000,N"Ivanov I.I.","19550219",2,1,NULL), (1001,N"Petrov P.P." ,"19831203",3 ,3,1003), (1002,N"Sidorov S.S.","19760607",1,2,1000), (1003,N"Andreev A.A.","19820417" ,4,3,1000)

resumamos

Por el momento, se han agregado varios comandos DDL más a nuestro conocimiento:
  • Agregar la propiedad IDENTIDAD a un campo: le permite hacer que este campo se complete automáticamente (campo contador) para la tabla;
  • ALTERAR TABLA nombre_tabla AGREGAR list_of_fields_with_characteristics – le permite agregar nuevos campos a la tabla;
  • ALTERAR TABLA nombre_tabla COLUMNA DE GOTA list_fields – le permite eliminar campos de la tabla;
  • ALTERAR TABLA nombre_tabla AÑADIR RESTRICCIÓN nombre_restricción LLAVE EXTRANJERA(campos) REFERENCIAS table_reference (campos): le permite definir la relación entre la tabla y la tabla de referencia.

Otras restricciones: ÚNICA, PREDETERMINADA, VERIFICAR

Usando una restricción ÚNICA, puede decir que el valor de cada fila en un campo o conjunto de campos determinado debe ser único. En el caso de la tabla Empleados, podemos imponer dicha restricción en el campo Correo electrónico. Simplemente complete previamente el correo electrónico con valores si aún no están definidos:

ACTUALIZAR Empleados SET Email=" [correo electrónico protegido]" WHERE ID=1000 ACTUALIZAR Empleados SET Email=" [correo electrónico protegido]" WHERE ID=1001 ACTUALIZAR Empleados SET Email=" [correo electrónico protegido]" WHERE ID=1002 ACTUALIZAR Empleados SET Email=" [correo electrónico protegido]"DONDE ID=1003
Ahora puedes imponer una restricción de unicidad en este campo:

ALTER TABLE Empleados AGREGAR RESTRICCIÓN UQ_Employees_Email UNIQUE(Correo electrónico)
Ahora el usuario no podrá ingresar el mismo E-Mail para varios empleados.

Una restricción única generalmente recibe el siguiente nombre: primero viene el prefijo "UQ_", luego el nombre de la tabla y después del guión bajo el nombre del campo en el que se aplica esta restricción.

En consecuencia, si una combinación de campos debe ser única en el contexto de las filas de la tabla, los enumeramos separados por comas:

ALTER TABLE nombre_tabla AGREGAR RESTRICCIÓN nombre_restricción ÚNICO(campo1,campo2,…)
Al agregar una restricción DEFAULT al campo, podemos establecer un valor predeterminado que será sustituido si, al insertar nueva entrada este campo no aparecerá en la lista de campos del comando INSERT. Esta restricción se puede establecer directamente al crear la tabla.

Agreguemos un nuevo campo Fecha de contratación a la tabla Empleados y llamémoslo HireDate y digamos que el valor predeterminado para este campo será la fecha actual:

ALTER TABLE Empleados AGREGAR Fecha de contratación NO NULL DEFAULT SYSDATETIME()
O si la columna HireDate ya existe, se puede utilizar la siguiente sintaxis:

ALTER TABLA Empleados AGREGAR SYSDATETIME() PREDETERMINADO PARA HireDate
Aquí no especificé el nombre de la restricción, porque... En el caso de DEFAULT, tengo la opinión de que esto no es tan crítico. Pero si lo haces de buena manera, entonces creo que no necesitas ser perezoso y deberías establecer un nombre normal. Esto se hace de la siguiente manera:

ALTER TABLE Empleados AGREGAR RESTRICCIÓN DF_Employees_HireDate DEFAULT SYSDATETIME() FOR HireDate
Así es como de esta columna no existía antes, cuando lo agregue a cada registro, el valor de la fecha actual se insertará en el campo HireDate.

Al agregar una nueva entrada, la fecha actual también se insertará automáticamente, por supuesto, a menos que la establezcamos explícitamente, es decir. No lo indicaremos en la lista de columnas. Mostremos esto con un ejemplo sin especificar el campo HireDate en la lista de valores agregados:

INSERTAR Empleados(ID,Nombre,Correo electrónico)VALUES(1004,N"Sergeev S.S."," [correo electrónico protegido]")
Veamos qué pasó:

SELECCIONAR * DE Empleados

IDENTIFICACIÓN Nombre Cumpleaños Correo electrónico ID de posición ID de departamento ID del administrador Fecha de contratación
1000 Ivánov I.I. 1955-02-19 [correo electrónico protegido] 2 1 NULO 2015-04-08
1001 Petrov P.P. 1983-12-03 [correo electrónico protegido] 3 4 1003 2015-04-08
1002 Sidorov S.S. 1976-06-07 [correo electrónico protegido] 1 2 1000 2015-04-08
1003 Andréyev A.A. 1982-04-17 [correo electrónico protegido] 4 3 1000 2015-04-08
1004 Sergeyev S.S. NULO [correo electrónico protegido] NULO NULO NULO 2015-04-08

Verificación VERIFICAR restricción Se utiliza cuando es necesario verificar los valores insertados en el campo. Por ejemplo, impongamos esta restricción en el campo del número de personal, que para nosotros es un identificador de empleado (ID). con la ayuda esta limitación Digamos que los números de personal deben tener un valor de 1000 a 1999:

ALTER TABLE Empleados AGREGAR RESTRICCIÓN CK_Employees_ID CHECK(ID ENTRE 1000 Y 1999)
La restricción suele denominarse de la misma manera, primero con el prefijo “CK_”, luego el nombre de la tabla y el nombre del campo sobre el que se impone esta restricción.

Intentemos insertar un registro no válido para comprobar que la restricción funciona (deberíamos obtener el error correspondiente):

INSERTAR Empleados(ID,Correo electrónico) VALORES(2000," [correo electrónico protegido]")
Ahora cambiemos el valor insertado a 1500 y asegurémonos de que el registro esté insertado:

INSERTAR Empleados(ID,Correo electrónico) VALORES(1500," [correo electrónico protegido]")
También puede crear restricciones UNIQUE y CHECK sin especificar un nombre:

ALTER TABLE Empleados AÑADIR ÚNICO(Correo electrónico) ALTER TABLE Empleados AÑADIR CHECK(ID ENTRE 1000 Y 1999)
Pero no es muy buena practica y es mejor especificar el nombre de la restricción explícitamente, porque Para descubrir qué será más difícil más adelante, deberá abrir el objeto y observar de qué es responsable.

Con un buen nombre, se puede aprender mucha información sobre la restricción directamente de su nombre.

Y, en consecuencia, todas estas restricciones se pueden crear inmediatamente al crear una tabla, si aún no existe. Borremos la tabla:

MESA DE GOTA Empleados
Y lo recrearemos con todas las restricciones creadas con un comando CREATE TABLE:

CREAR TABLA Empleados (ID int NOT NULL, Nombre nvarchar(30), Fecha de cumpleaños, Correo electrónico nvarchar(30), ID de posición int, ID de departamento int, Fecha de contratación fecha NOT NULL DEFAULT SYSDATETIME(), -- para DEFAULT haré una excepción CONSTRAINT PK_Employees CLAVE PRIMARIA (ID), RESTRICCIÓN FK_Employees_DepartmentID CLAVE EXTRANJERA(IDDepartamento) REFERENCIAS Departamentos(ID), RESTRICCIÓN FK_Employees_PositionID CLAVE EXTRANJERA(IDDepartamento) REFERENCIAS Posiciones(ID), RESTRICCIÓN UQ_Employees_Email ÚNICA (correo electrónico), CONSTRAINT CK_Employees_ID CHECK (ID B ETWE EN 1000 Y 1999) )

INSERTAR Empleados (ID, Nombre, Cumpleaños, Correo electrónico, ID de puesto, ID de departamento) VALORES (1000,N"Ivanov I.I.","19550219"," [correo electrónico protegido]",2,1), (1001,N"Petrov P.P.","19831203"," [correo electrónico protegido]",3,3), (1002,N"Sidorov S.S.","19760607"," [correo electrónico protegido]",1,2), (1003,N"Andreev A.A.","19820417"," [correo electrónico protegido]",4,3)

Un poco sobre los índices creados al crear restricciones PRIMARY KEY y UNIQUE

Como puede ver en la captura de pantalla anterior, al crear las restricciones PRIMARY KEY y UNIQUE, se crearon automáticamente índices con los mismos nombres (PK_Employees y UQ_Employees_Email). De forma predeterminada, el índice para la clave principal se crea como CLUSTERED y para todos los demás índices como NONCLUSTERED. Vale la pena decir que el concepto de índice de clúster no está disponible en todos los DBMS. Una tabla sólo puede tener un índice CLUSTERED. CLUSTERED – significa que los registros de la tabla se ordenarán por este índice, también podemos decir que este índice tiene acceso directo a todos los datos de la tabla. Este es el índice principal de la tabla, por así decirlo. Para decirlo de manera aún más aproximada, se trata de un índice adjunto a una tabla. Un índice agrupado es una herramienta muy poderosa que puede ayudar con la optimización de consultas, pero recordemos esto por ahora. Si queremos indicarle al índice agrupado que no se use en la clave primaria, sino en otro índice, entonces al crear la clave primaria debemos especificar la opción NONCLUSTERED:

ALTER TABLE nombre_tabla AGREGAR RESTRICCIÓN nombre_restricción PRIMARY KEY NONCLUSTERED(campo1,campo2,…)
Por ejemplo, hagamos que el índice de restricción PK_Employees no esté agrupado y el índice de restricción UQ_Employees_Email esté agrupado. En primer lugar, eliminemos estas restricciones:

ALTER TABLE Empleados DROP CONSTRAINT PK_Employees ALTER TABLE Empleados DROP CONSTRAINT UQ_Employees_Email
Ahora vamos a crearlos con las opciones CLUSTERED y NONCLUSTERED:

ALTER TABLE Empleados AGREGAR RESTRICCIÓN PK_Employees PRIMARY KEY NONCLUSTERED (ID) ALTER TABLE Empleados AGREGAR RESTRICCIÓN UQ_Employees_Email ÚNICO CLUSTERED (Correo electrónico)
Ahora, al seleccionar de la tabla Empleados, veremos que los registros están ordenados por el índice agrupado UQ_Employees_Email:

SELECCIONAR * DE Empleados

IDENTIFICACIÓN Nombre Cumpleaños Correo electrónico ID de posición ID de departamento Fecha de contratación
1003 Andréyev A.A. 1982-04-17 [correo electrónico protegido] 4 3 2015-04-08
1000 Ivánov I.I. 1955-02-19 [correo electrónico protegido] 2 1 2015-04-08
1001 Petrov P.P. 1983-12-03 [correo electrónico protegido] 3 3 2015-04-08
1002 Sidorov S.S. 1976-06-07 [correo electrónico protegido] 1 2 2015-04-08

Anteriormente, cuando el índice agrupado era el índice PK_Employees, los registros se ordenaban por el campo ID de forma predeterminada.

Pero en este caso, esto es sólo un ejemplo que muestra la esencia de un índice agrupado, porque Lo más probable es que las consultas se realicen en la tabla Empleados utilizando el campo ID y, en algunos casos, tal vez, ella misma actúe como un directorio.

Para directorios, normalmente es aconsejable que el índice agrupado se construya a partir de la clave primaria, porque en las solicitudes solemos hacer referencia al identificador del directorio para obtener, por ejemplo, el nombre (Cargo, Departamento). Recordemos aquí lo que escribí anteriormente, que un índice agrupado tiene acceso directo a las filas de la tabla y, por lo tanto, podemos obtener el valor de cualquier columna sin gastos generales adicionales.

Es ventajoso aplicar un índice de conglomerados a los campos que se muestrean con mayor frecuencia.

A veces las tablas se crean con una clave basada en un campo sustituto; en este caso, puede resultar útil guardar la opción de índice CLUSTERED para un índice más adecuado y especificar la opción NONCLUSTERED al crear una clave primaria sustituta.

resumamos

En esta etapa, nos hemos familiarizado con todo tipo de restricciones, en su forma misma. en forma sencilla, que se crean mediante un comando como “ALTER TABLE nombre_tabla ADD CONSTRAINT nombre_restricción…”:
  • CLAVE PRIMARIA– clave primaria;
  • LLAVE EXTRANJERA– establecimiento de conexiones y seguimiento de la integridad referencial de los datos;
  • ÚNICO– le permite crear singularidad;
  • CONTROLAR– le permite garantizar la exactitud de los datos ingresados;
  • POR DEFECTO– le permite establecer un valor predeterminado;
  • También vale la pena señalar que todas las restricciones se pueden eliminar usando el comando " ALTERAR TABLA nombre_tabla RESTRICCIÓN DE CAÍDA nombre_restricción".
También tocamos parcialmente el tema de los índices y examinamos el concepto de cluster ( Agrupado) y no agrupados ( NO Agrupado) índice.

Crear índices independientes

Por independiente aquí nos referimos a índices que no se crean bajo la restricción PRIMARY KEY o UNIQUE.

Los índices en un campo o campos se pueden crear con el siguiente comando:

CREAR ÍNDICE IDX_Empleados_Nombre EN Empleados(Nombre)
También aquí puede especificar las opciones CLUSTERED, NONCLUSTERED, UNIQUE y también puede especificar la dirección de clasificación de cada campo individual ASC (predeterminado) o DESC:

CREAR ÍNDICE ÚNICO NO CLUSTERADO UQ_Employees_EmailDesc ON Empleados (DESC de correo electrónico)
Al crear un índice no agrupado, se puede omitir la opción NONCLUSTERED, porque está implícito de forma predeterminada y se muestra aquí simplemente para indicar la posición de la opción CLUSTERED o NONCLUSTERED en el comando.

Puede eliminar el índice con el siguiente comando:

DROP INDEX IDX_Employees_Name EN Empleados
Se pueden crear índices simples, así como restricciones, en el contexto del comando CREATE TABLE.

Por ejemplo, eliminemos la tabla nuevamente:

MESA DE GOTA Empleados
Y lo recrearemos con todas las restricciones e índices creados con un comando CREATE TABLE:

CREAR TABLA Empleados(ID int NOT NULL, Nombre nvarchar(30), Fecha de cumpleaños, Correo electrónico nvarchar(30), ID de posición int, ID de departamento int, Fecha de contratación fecha NO NULL CONSTRAINT DF_Employees_HireDate DEFAULT SYSDATETIME(), ManagerID int, CONSTRAINT PK_Employees PRIMARY KEY (ID ), CONSTRAINT FK_Employees_DepartmentID CLAVE EXTRANJERA (ID de departamento) REFERENCIAS Departamentos (ID), RESTRICCIÓN FK_Employees_PositionID CLAVE EXTRANJERA (ID de posición) REFERENCIAS Posiciones (ID), RESTRICCIÓN FK_Employees_ManagerID CLAVE EXTRANJERA (ID de gerente) REFERENCIAS Empleados (ID), RESTRICCIÓN UQ_Emplo yees_Email ÚNICO (correo electrónico), RESTRICCIÓN CK_Employees_ID CHECK(ID ENTRE 1000 Y 1999), INDEX IDX_Employees_Name(Nombre))
Finalmente, insertemos a nuestros empleados en la tabla:

INSERTAR Empleados (ID,Nombre,Cumpleaños,Correo electrónico,ID de puesto,ID de departamento,ID de gerente)VALUES (1000,N"Ivanov I.I.","19550219"," [correo electrónico protegido]",2,1,NULL), (1001,N"Petrov P.P.","19831203"," [correo electrónico protegido]",3,3,1003), (1002,N"Sidorov S.S.","19760607"," [correo electrónico protegido]",1,2,1000), (1003,N"Andreev A.A.","19820417"," [correo electrónico protegido]",4,3,1000)
Además, vale la pena señalar que puede incluir valores en un índice no agrupado especificándolos en INCLUDE. Aquellos. En este caso, el índice INCLUDE recordará algo a un índice agrupado, solo que ahora el índice no está adjunto a la tabla, pero los valores necesarios sí están adjuntos al índice. En consecuencia, dichos índices pueden mejorar en gran medida el rendimiento de las consultas de selección (SELECT); si todos los campos enumerados están en el índice, es posible que no sea necesario acceder a la tabla. Pero esto naturalmente aumenta el tamaño del índice, porque los valores de los campos enumerados se duplican en el índice.

Extracto de MSDN. Sintaxis de comando general para crear índices

CREAR [ÚNICO] [AGRUPADO | NO CLUSTERED ] INDEX nombre_índice ON (columna [ ASC | DESC ] [ ,...n ]) [ INCLUDE (nombre_columna [ ,...n ]) ]

resumamos

Los índices pueden aumentar la velocidad de recuperación de datos (SELECT), pero los índices reducen la velocidad de modificación de los datos de la tabla, porque Después de cada modificación, el sistema deberá reconstruir todos los índices para una tabla específica.

Es aconsejable en cada caso encontrar solución óptima, un punto medio para que tanto el rendimiento del muestreo como la modificación de datos estén en el nivel adecuado. La estrategia para crear índices y la cantidad de índices pueden depender de muchos factores, como la frecuencia con la que cambian los datos de la tabla.

Conclusión sobre DDL

Como puede ver, DDL no es tan complicado como parece a primera vista. Aquí pude mostrar casi todas sus estructuras principales usando solo tres tablas.

Lo principal es entender la esencia y el resto es cuestión de práctica.

Buena suerte para dominar este maravilloso lenguaje llamado SQL.

Les presento una traducción gratuita del artículo SQL para principiantes.

Cada vez más aplicaciones web modernas interactúan con bases de datos, normalmente utilizando el lenguaje SQL. Por suerte para nosotros, este idioma es bastante fácil de aprender. En este artículo, comenzaremos a aprender los conceptos básicos de las consultas SQL y cómo interactúan con una base de datos. mysql.

Qué necesitas

SQL (lenguaje de consulta estructurado) es un lenguaje diseñado para interactuar con sistemas de gestión de bases de datos relacionales (DBMS), como MySQL, Oracle, SQLite y otros. Para ejecutar las consultas SQL en este artículo, asumo que tiene mysql. También recomiendo usar phpMyAdmin Cómo ayuda visual mostrar para mysql.

Las siguientes aplicaciones facilitarán la instalación. mysql Y phpMyAdmin a tu computadora:

  • WAMP para Windows
  • MAMP para Mac

Comencemos a ejecutar consultas en la línea de comando. WAMP ya lo contiene en la consola mysql. Para MAMP, es posible que necesites leer esto.

CREAR BASE DE DATOS: Crear una base de datos

Nuestra primera petición. Crearemos una base de datos con la que trabajaremos.

Primero que nada, abre la consola. mysql e iniciar sesión. Para WAMP De forma predeterminada, se utiliza una contraseña vacía. Para MAMP La contraseña debe ser "root".

Después de iniciar sesión, escriba esta solicitud y haga clic Ingresar:

CREAR BASE DE DATOS my_first_db;

Tenga en cuenta que se agrega un punto y coma (;) al final de la consulta, como al final de una línea en el código.

Además, palabras clave CREAR BASE DE DATOS no distinguen entre mayúsculas y minúsculas, como todas las palabras clave en SQL. Pero los escribiremos en mayúsculas para mejorar la legibilidad.

Nota: juego de caracteres y orden de clasificación

Si desea establecer el juego de caracteres predeterminado y el orden de clasificación, utilice una consulta como esta:

CREAR BASE DE DATOS my_first_db CONJUNTO DE CARACTERES PREDETERMINADO utf8 COLLATE utf8_general_ci;

Encontrará una lista de conjuntos de caracteres e intercalaciones admitidos en mysql.

MOSTRAR BASES DE DATOS: Lista de todas las bases de datos

Esta consulta se utiliza para mostrar todas las bases de datos.

DROP DATABASE: Eliminar una base de datos

Con esta solicitud puedes eliminar base existente datos.

Ojo con esta petición porque no genera ningún aviso. Si tiene tablas y datos en la base de datos, la consulta los eliminará todos en un instante.

Desde un punto de vista técnico, esto no es una solicitud. Este es un "operador" y no requiere punto y coma al final.

el informa mysql que necesita seleccionar la base de datos predeterminada y trabajar con ella hasta el final de la sesión. Ahora estamos listos para crear las tablas y todo lo demás en esta base de datos.

¿Qué es una tabla de base de datos?

Puede considerar una tabla en una base de datos como una tabla normal o como un archivo csv que tiene datos estructurados.

Como en este ejemplo, la tabla tiene nombres de filas y columnas de datos. Usando consultas SQL podemos crear esta tabla. También podemos agregar, leer, cambiar y eliminar datos.

CREAR TABLA: Crear una tabla

Con esta consulta podemos crear una tabla en la base de datos. Desafortunadamente, la documentación para mysql No es muy amigable para los nuevos usuarios. La estructura de esta consulta puede ser muy compleja, pero empezaremos de forma sencilla.

La siguiente consulta crea una tabla con dos columnas.

CREATE TABLE usuarios (nombre de usuario VARCHAR(20), create_date DATE);

Tenga en cuenta que podemos escribir la consulta en varias líneas y usar Pestaña para sangría.

La primera línea es sencilla. Creamos una tabla llamada usuarios. A continuación, las columnas de la tabla se enumeran entre paréntesis, separadas por comas. Cada nombre de columna va seguido de un tipo de datos, por ejemplo, VARCHAR o FECHA.

VARCHAR(20) significa que la columna tipo de cadena y no puede tener más de 20 caracteres de longitud. FECHA- tipo de datos destinado a almacenar fechas en el formato: "AAAA-MM-DD".

clave primaria

Antes de ejecutar esta consulta, debemos insertar una columna ID_usuario, que será la clave primaria (CLAVE PRIMARIA). Sin entrar en demasiados detalles, puedes pensar en una clave principal como una forma de identificar cada fila de datos en una tabla.

La solicitud queda así:

CREATE TABLE usuarios (user_id INT AUTO_INCREMENT PRIMARY KEY, nombre de usuario VARCHAR(20), create_date DATE);

ENT- Tipo entero de 32 bits (numérico). AUTO_INCREMENT crea automáticamente nuevo numero id cada vez que se agrega una fila de datos. No es necesario, pero sí más cómodo.

Es posible que esta columna no sea un número entero, aunque este es el tipo de datos más común. Una columna de clave principal es opcional, pero se recomienda para mejorar el rendimiento y la arquitectura de la base de datos.

Ejecutemos la consulta:

MOSTRAR TABLAS: Listar todas las tablas

La consulta le permite obtener una lista de todas las tablas de la base de datos actual.

EXPLICAR: Mostrar estructura de la tabla

Utilice esta consulta para ver la estructura de una tabla existente.

El resultado muestra los campos (columnas) y sus propiedades.

DROP TABLE: Soltar una mesa

Como SOLTAR BASES DE DATOS, esta consulta elimina la tabla y su contenido sin ninguna advertencia.

ALTER TABLA: Cambiar tabla

Una consulta de este tipo puede tener una estructura compleja porque puede realizar varios cambios en la tabla. Veamos ejemplos sencillos.

Gracias a la legibilidad SQL, esta consulta no necesita explicación.

Quitarlo es igual de fácil. Utilice la solicitud con precaución; los datos se eliminan sin previo aviso.

Volvamos a agregar el campo. correo electrónico, lo necesitarás más tarde:

ALTER TABLE usuarios AGREGAR correo electrónico VARCHAR(100) DESPUÉS del nombre de usuario;

A veces es posible que necesites cambiar las propiedades de una columna; para ello, no es necesario eliminarla y crearla nuevamente.

Esta solicitud cambia el nombre del campo. nombre de usuario V nombre de usuario y cambia su tipo de VARCHAR(20) en VARCHAR(30). Estos cambios no afectan los datos de la tabla.

INSERTAR: Agregar datos a la tabla

Agreguemos registros a la tabla usando consultas.

Como se puede ver, VALORES() contiene una lista de valores separados por comas. Los valores de cadena están entre comillas simples. Los valores deben seguir el orden especificado cuando se creó la tabla.

Tenga en cuenta que el primer valor es NULO para la clave primaria cuyo campo nombramos ID_usuario. Todo porque el campo está marcado como AUTO_INCREMENT y la identificación se genera automáticamente. La primera fila de datos tendrá una identificación de 1. La siguiente fila agregada será 2, etc.

Sintaxis alternativa

Aquí hay otra sintaxis para insertar filas.

Esta vez usamos la palabra clave COLOCAR en lugar de VALORES. Notemos algunas cosas:

  • La columna podrá omitirse. Por ejemplo, no asignamos un valor al campo. ID_usuario, porque está marcado como AUTO_INCREMENT. Si no asigna un valor a un campo con tipo VARCHAR, entonces, de forma predeterminada, tomará el valor de una cadena vacía (si no se especificó otro valor predeterminado al crear la tabla).
  • Se puede acceder a cada columna por nombre. Por tanto, los campos pueden estar en cualquier orden, a diferencia de la sintaxis anterior.

Sintaxis alternativa número 2

Aquí hay otro ejemplo.

Como antes, se puede acceder a los campos por nombre y pueden estar en cualquier orden.

Utilice esta consulta para obtener la identificación de la última fila insertada.

AHORA()

Es hora de mostrarte cómo usar las funciones. mysql en solicitudes.

Función AHORA() devuelve la fecha actual. Úselo para agregar automáticamente la fecha actual a un campo con tipo FECHA.

Tenga en cuenta que hemos recibido una advertencia de mysql, pero eso no es tan importante. La razón es que la función AHORA() en realidad devuelve información de tiempo.

Hemos creado un campo. crear_fecha, que solo puede contener una fecha pero no una hora, por lo que los datos se truncaron. En lugar de AHORA() podríamos usar FECHA ACTUAL(), que solo devuelve la fecha actual, pero al final el resultado sería el mismo.

SELECCIONAR: Recuperar datos de una tabla

Obviamente, los datos que escribimos son inútiles hasta que podamos leerlos. Una petición viene al rescate. SELECCIONAR.

El ejemplo más simple de usar una solicitud. SELECCIONAR para leer datos de una tabla:

El asterisco (*) significa que queremos obtener todas las columnas de la tabla. Si solo necesita obtener ciertas columnas, use algo como esto:

La mayoría de las veces, solo queremos recuperar ciertas filas, no todas. Por ejemplo, obtengamos la dirección de correo electrónico del usuario. nettuts.

Es similar a la condición IF. WHERE le permite establecer una condición en una consulta y obtener el resultado deseado.

La condición de igualdad usa un signo simple (=) en lugar del signo doble (==) que podría usar en programación.

También puedes utilizar otras condiciones:

Y Y O se utilizan para combinar condiciones:

Tenga en cuenta que no es necesario incluir los valores numéricos entre comillas.

EN()

Se utiliza para comparar con múltiples valores.

COMO

Le permite especificar un patrón de búsqueda.

El signo de porcentaje (%) se utiliza para especificar un patrón.

ORDEN POR condición

Utilice esta condición si desea que el resultado se devuelva ordenado:

El orden predeterminado es A.S.C.(ascendente). Agregar DESC para ordenar en orden inverso.

LÍMITE...DESPLAZAMIENTO...

Puede limitar el número de filas devueltas.

LÍMITE 2 toma las dos primeras líneas. LÍMITE 1 COMPENSACIÓN 2 toma una línea después de las dos primeras. LÍMITE 2, 1 significa lo mismo, solo que el primer número es el desplazamiento y el segundo limita el número de líneas.

ACTUALIZACIÓN: Actualización de datos en una tabla

Esta consulta se utiliza para actualizar datos en una tabla.

en la mayoría de los casos utilizado junto con DÓNDE, para actualizar filas específicas. Si la condición DÓNDE no se especifica, los cambios se aplicarán a todas las filas.

Para limitar las filas que se pueden cambiar, puede utilizar LÍMITE.

ELIMINAR: Eliminar datos de una tabla

Como , esta consulta se utiliza a menudo junto con la condición DÓNDE.

TABLA TRUNCADA

Para eliminar contenido de una tabla, utilice esta consulta:

ELIMINAR DE los usuarios;

Para mejorar el rendimiento, utilice .

El contador de campo también se restablecerá. AUTO_INCREMENT, por lo que las filas recién agregadas tendrán una identificación igual a 1. Cuando se usa esto no sucederá y el contador seguirá creciendo.

Escapar de valores de cadena y palabras especiales

Valores de cadena

Es necesario escapar de algunos personajes; de lo contrario, puede haber problemas.

La barra invertida (\) se utiliza para escapar.

Esto es muy importante por razones de seguridad. Se debe escapar cualquier dato del usuario antes de escribirlo en la base de datos. EN PHP utilice la función mysql_real_escape_string() o consultas preparadas.

palabras especiales

Desde en mysql muchas palabras reservadas como SELECCIONAR o Para evitar conflictos, incluya los nombres de columnas y tablas entre comillas. Además, es necesario utilizar comillas invertidas (`) en lugar de comillas ordinarias.

Digamos que, por alguna razón, desea agregar una columna llamada :

Conclusión

Gracias por leer el artículo. Espero haber podido mostrarte ese idioma. SQL muy funcional y fácil de aprender.

Cada uno de nosotros encuentra y utiliza regularmente varias bases de datos datos. Cuando seleccionamos una dirección de correo electrónico, estamos trabajando con una base de datos. Las bases de datos son utilizadas por servicios de búsqueda, bancos para almacenar datos de clientes, etc.

Pero a pesar de uso constante bases de datos, incluso para muchos desarrolladores sistemas de software Quedan muchos “espacios en blanco” debido a diferentes interpretaciones de los mismos términos. Daremos una breve definición de los términos básicos de las bases de datos antes de cubrir el lenguaje SQL. Entonces.

Base de datos - un archivo o colección de archivos para almacenar estructuras de datos ordenadas y sus relaciones. Muy a menudo, un sistema de gestión se denomina base de datos: es solo un depósito de información en un formato específico y puede funcionar con varios DBMS.

Mesa - Imaginemos una carpeta en la que se almacenan documentos, agrupados según una determinada característica, por ejemplo, una lista de pedidos del último mes. Esta es la tabla en la computadora. mesa separada tiene su propio nombre único.

tipo de datos - el tipo de información que se permite almacenar en una columna o fila separada. Pueden ser números o texto de un formato determinado.

Columna y fila- Todos hemos trabajado con hojas de cálculo, que también tienen filas y columnas. Cualquier base relacional Los datos funcionan con tablas de manera similar. A las filas a veces se les llama registros.

clave primaria- Cada fila de una tabla puede tener una o más columnas para identificarla de forma única. Sin una clave principal, es muy difícil actualizar, cambiar y eliminar filas relevantes.

¿Qué es SQL?

SQL(inglés: lenguaje de consulta estructurado) se desarrolló únicamente para trabajar con bases de datos y actualmente es el estándar para todos los DBMS populares. La sintaxis del lenguaje consta de una pequeña cantidad de operadores y es fácil de aprender. Pero, a pesar de su aparente sencillez, permite la creación de consultas SQL para operaciones complejas con una base de datos de cualquier tamaño.

Desde 1992, existe un estándar generalmente aceptado llamado ANSI SQL. Define la sintaxis básica y las funciones de los operadores y es compatible con todos los líderes del mercado de DBMS, como ORACLE. Es imposible considerar todas las capacidades del lenguaje en un breve artículo, por lo que consideraremos brevemente solo las consultas SQL básicas. Los ejemplos muestran claramente la simplicidad y capacidades del lenguaje:

  • crear bases de datos y tablas;
  • muestreo de datos;
  • agregar registros;
  • modificación y eliminación de información.

Tipos de datos SQL

Todas las columnas de una tabla de base de datos almacenan el mismo tipo de datos. Los tipos de datos en SQL son los mismos que en otros lenguajes de programación.

Creamos tablas y bases de datos.

Hay dos formas de crear nuevas bases de datos, tablas y otras consultas en SQL:

  • Declaraciones SQL a través de la consola DBMS
  • Utilizar las herramientas de administración interactivas incluidas con el servidor de base de datos.

El operador crea una nueva base de datos. CREAR BASE DE DATOS<наименование базы данных>; . Como puede ver, la sintaxis es simple y concisa.

Creamos tablas dentro de la base de datos usando la declaración CREATE TABLE con los siguientes parámetros:

  • nombre de la tabla
  • nombres de columnas y tipos de datos

Como ejemplo, creemos una tabla de Productos básicos con las siguientes columnas:

Crea una tabla:

CREAR TABLA Producto

(commodity_id CHAR(15) NO NULO,

proveedor_id CHAR(15) NO NULO,

nombre_producto CHAR(254) NULL,

precio_producto DECIMAL(8,2) NULL,

commodity_desc VARCHAR(1000) NULL);

La tabla consta de cinco columnas. Después del nombre viene el tipo de datos, las columnas están separadas por comas. El valor de la columna puede ser valores vacíos(NULL) o debe completarse (NOT NULL), y esto se determina cuando se crea la tabla.

Recuperar datos de una tabla

El operador de obtención de datos es la consulta SQL más utilizada. Para obtener información debemos indicar qué queremos seleccionar de dicha tabla. Primero un ejemplo simple:

SELECCIONE nombre_producto DE Producto

Después de la sentencia SELECT especificamos el nombre de la columna para obtener información, y FROM define la tabla.

El resultado de la consulta serán todas las filas de la tabla con valores de Commodity_name en el orden en que se ingresaron en la base de datos, es decir, sin ningún tipo de clasificación. Para ordenar el resultado, utilice operador adicional ORDENAR POR.

Para consultar varios campos, enumérelos separados por comas, como en el siguiente ejemplo:

SELECCIONE id_commodity, nombre_commodity, precio_commodity DESDE el producto básico

Es posible obtener el valor de todas las columnas de una fila como resultado de la consulta. Para hacer esto, use el signo “*”:

SELECCIONAR * DE Producto

  • Además, SELECT admite:
  • Ordenar datos (ORDER BY operador)
  • Selección según condiciones (DÓNDE)
  • Término de agrupación (GROUP BY)

Agregar una línea

Para agregar una fila a una tabla, se utilizan consultas SQL con el operador INSERT. La suma se puede realizar de tres formas:

  • agregar una nueva línea completa;
  • parte de cuerda;
  • resultados de la consulta.

Para agregar una fila completa, debe especificar el nombre de la tabla y los valores de las columnas (campos) de la nueva fila. He aquí un ejemplo:

INSERTAR EN VALORES DE PRODUCTOS ("106", "50", "Coca-Cola", "1.68", "Sin alcohol,)

El ejemplo agrega un nuevo producto a la tabla. Los valores se enumeran después de VALORES para cada columna. Si no hay ningún valor correspondiente para la columna, se debe especificar NULL. Las columnas se completan con valores en el orden especificado cuando se creó la tabla.

Si agrega solo una parte de una fila, debe especificar explícitamente los nombres de las columnas, como en el ejemplo:

INSERTAR EN Producto básico (id_producto, id_proveedor, nombre_producto)

VALORES("106 ", '50", "Coca-Cola",)

Ingresamos solo los identificadores del producto, proveedor y su nombre, y dejamos los campos restantes en blanco.

Agregar resultados de consulta

INSERT se usa principalmente para agregar filas, pero también se puede usar para agregar los resultados de una instrucción SELECT.

Cambiando datos

Para cambiar información en los campos de una tabla de base de datos, debe utilizar la instrucción UPDATE. El operador se puede utilizar de dos maneras:

  • Todas las filas de la tabla se actualizan.
  • Sólo para una línea específica.

La ACTUALIZACIÓN consta de tres elementos principales:

  • tabla en la que se deben realizar cambios;
  • nombres de campos y sus nuevos valores;
  • condiciones para seleccionar filas a cambiar.

Veamos un ejemplo. Digamos que el precio de un producto con ID=106 ha cambiado, por lo que es necesario actualizar esta línea. Escribimos el siguiente operador:

ACTUALIZAR Producto básico SET precio_producto = "3.2" DONDE id_producto = "106"

Especificamos el nombre de la tabla, en nuestro caso Productos básicos, donde se realizará la actualización, luego, después de SET, el nuevo valor de la columna y encontramos el registro deseado especificando el valor de ID requerido en DONDE.

Para cambiar varias columnas, la instrucción SET va seguida de varios pares de valores de columna separados por comas. Veamos un ejemplo en el que se actualiza el nombre y precio de un producto:

ACTUALIZAR Producto básico SET nombre_producto=’Fanta’, precio_producto = "3.2" DONDE id_producto = "106"

Para eliminar información en una columna, puede asignarle el valor NULL si la estructura de la tabla lo permite. Debe recordarse que NULL es precisamente un valor "no", y no cero en forma de texto o número. Eliminemos la descripción del producto:

ACTUALIZAR Producto básico SET commodity_desc = NULL WHERE commodity_id = "106"

Eliminando filas

Las consultas SQL para eliminar filas en una tabla se ejecutan mediante la instrucción DELETE. Hay dos casos de uso:

  • Se eliminan determinadas filas de la tabla;
  • Se eliminan todas las filas de la tabla.

Un ejemplo de cómo eliminar una fila de una tabla:

ELIMINAR DEL Producto DONDE commodity_id = "106"

Después de DELETE FROM indicamos el nombre de la tabla en la que se eliminarán las filas. La cláusula WHERE contiene la condición mediante la cual se seleccionarán las filas para su eliminación. En el ejemplo, eliminamos la línea de producto con ID=106. Especificar DÓNDE es muy importante porque omitir esta declaración eliminará todas las filas de la tabla. Esto también se aplica al cambiar el valor de los campos.

La declaración DELETE no especifica nombres de columnas ni metacaracteres. Elimina filas por completo y elimina columna separadaél no puede.

Usando SQL en Microsoft Access

Normalmente se utiliza de forma interactiva para crear tablas, bases de datos, administrar, modificar, analizar datos en una base de datos e implementar consultas de SQL Access a través de un conveniente diseñador de consultas interactivo (Query Designer), mediante el cual puede crear y ejecutar inmediatamente declaraciones SQL de cualquier complejidad.

También se admite el modo de acceso al servidor, en el que el DBMS de Access se puede utilizar como generador de consultas SQL para cualquier fuente ODBC datos. Esta característica permite Acceder a aplicaciones interactuar con cualquier formato.

extensiones SQL

Dado que las consultas SQL no tienen todas las capacidades de los lenguajes de programación procedimentales, como bucles, bifurcaciones, etc., los fabricantes de DBMS están desarrollando su propia versión de SQL con capacidades avanzadas. En primer lugar, se trata de soporte para procedimientos almacenados y operadores estándar de lenguajes procedimentales.

Los dialectos más comunes del idioma:

  • Base de datos Oracle-PL/SQL
  • Interbase, Firebird - PSQL
  • Microsoft SQL Server - Transact-SQL
  • PostgreSQL-PL/pgSQL.

SQL en Internet

El DBMS MySQL se distribuye bajo la Licencia Pública General GNU gratuita. Existe una licencia comercial con capacidad de desarrollar módulos personalizados. Cómo componente incluido en los conjuntos más populares de servidores de Internet, como XAMPP, WAMP y LAMP, y es el DBMS más popular para desarrollar aplicaciones en Internet.

Fue desarrollado por Sun Microsystems y actualmente cuenta con el respaldo de Oracle Corporation. Se admiten bases de datos de hasta 64 terabytes de tamaño, estándar de sintaxis SQL:2003, replicación de bases de datos y servicios en la nube.

Consultas: consultas estructuradas a la base de datos. ¿Por qué exactamente? curso de programación? A pesar de que muchos "expertos literarios" argumentarán que SQL no lo es, pero lenguaje de consulta, Creo que los cursos sobre su estudio pueden y deben clasificarse como cursos de programación. En primer lugar, no llamarlos cursos para solicitudes de redacción, ya que esto podría confundirlos con cursos para funcionarios noveles o fiscales. En segundo lugar, trabajar con bases de datos está tan estrechamente relacionado con que la falta de habilidades en SQL reduce significativamente el alcance de un programador en particular. Y en tercer lugar, consultas estructuradas(no necesariamente bases de datos) ya no se encuentran en las proximidades de los límites de los lenguajes de programación; ya los han cruzado y la tecnología puede servir como ejemplo de ello.

Todos los ejemplos se basan en consultas en tres tablas,


que contiene la siguiente información:

  • D_PERSONAL- lista de empleados de la empresa;

    • S_NAME – nombre completo
    • S_POSITION – posición (directorio);
    • S_EXPERIENCE – experiencia laboral (número entero de años);
    • S_CHIEF_ID – empleado senior de la empresa (relación “jefe” - “subordinado”);
    • S_COMMENTS – nota.


  • D_PROFIE- una lista de perfiles de usuario que, según la leyenda, se implementa en el territorio de la empresa en cuestión y ayuda a automatizar algunos de sus procesos comerciales. Este sistema podría ser un desarrollo nacional “1C – Enterprise” o un sistema basado en el paquete de software SAP R/3, que es el más un representante destacado esta clase software en el extranjero;


  • D_STAFF_PROFILE– una tabla que conecta a los empleados de la empresa (D_STAFF) con los perfiles de usuario del sistema (D_PROFILE). Cada entrada en esta tabla es una relación que determina la capacidad del empleado para iniciar sesión en el sistema con todos los derechos y permisos del perfil seleccionado para él. A cada empleado se le pueden permitir varios perfiles y cualquier perfil puede asociarse con varios empleados diferentes. Por tanto, la tabla D_STAFF_PROFILE define una relación de muchos a muchos.

Breve descripción general de la sintaxis de las consultas SQL en cuestión

Actualización de datos o comando ACTUALIZAR

El propósito del comando ACTUALIZAR es actualizar registros existentes en la tabla especificada. Indicamos dónde y qué queremos cambiar, y después de la palabra clave WHERE establecemos criterios para seleccionar registros actualizados. En un comando de actualización de datos, como en otras consultas SQL, puede utilizar subconsultas: por ejemplo, puede definir el resultado de una subconsulta que devuelva solo una columna y una fila como valor asignado a un campo.

ACTUALIZAR CONJUNTO ( = ) o ACTUALIZAR CONJUNTO ( = (SELECCIONAR DESDE DONDE))

Agregar datos o comando INSERT

Agregar nuevos registros a la tabla especificada. Aquí tampoco hay nada complicado. Especificamos la tabla, la lista de campos y la lista de valores agregados a estos campos. También es fácil adivinar lo que puede proporcionar el uso de una subconsulta SQL: copiar la matriz de datos seleccionada usando SELECT en la tabla especificada (en los campos enumerados separados por comas). Naturalmente, el número y tipo de columnas de la consulta SELECT debe corresponder al número y tipo de campos de la tabla en la que se realiza la inserción.

INSERTAR EN [()] VALORES () o INSERTAR EN [()] (SELECCIONAR DESDE DONDE)

Eliminación de datos o comando DELETE

Eliminar filas de una tabla o de varias tablas a la vez, cuyas filas están combinadas por condiciones. Aquí también todo es obvio. Indicamos de qué tabla estamos eliminando datos, y en la parte DÓNDE seleccionamos los datos a eliminar. La segunda versión de la consulta SQL que utiliza la declaración DELETE muestra la sintaxis general para eliminar registros de varias tablas a la vez. En las condiciones de selección (en la parte DÓNDE), también puede utilizar subconsultas.

ELIMINAR DE o ELIMINAR DE

Si todo está más o menos claro, entonces nos familiarizamos o comenzamos el proceso de aprendizaje en sí.

    Ejecución SQL más simple consultas utilizando el comando SELECT. Definir criterios simples y compuestos para seleccionar registros utilizando la cláusula WHERE. Usando los operadores ENTRE y LIKE. Creación de una consulta jerárquica utilizando alias de tablas y campos.



 Arriba