Lenguaje de programación SQL. SQL "para tontos": ¿qué necesitan saber los principiantes? Aprendiendo consultas simples en sql

Se plantean de forma sencilla y accesible los fundamentos teóricos del SGBD SQL Server 2012. Se muestra la instalación, configuración y soporte de MS SQL Server 2012. Se describe el lenguaje de manipulación de datos Transact-SQL. Consideró crear una base de datos, modificar tablas y sus contenidos, consultas, índices, vistas, activadores, procedimientos almacenados y funciones definidas por el usuario.
Se muestra la implementación de seguridad mediante autenticación, encriptación y autorización. Se presta atención a la automatización de las tareas de administración de DBMS. Se considera la creación de copias de seguridad de los datos y la implementación de la recuperación del sistema. Describe Microsoft Analysis Services, Microsoft Reporting Services y otras herramientas de inteligencia comercial. Se considera la tecnología de trabajo con documentos XML, gestión de datos espaciales, búsqueda de texto completo y mucho más. Para programadores principiantes.

En el mundo moderno, la información es de gran valor, pero es igualmente importante poder gestionar esta información. Este libro trata sobre el lenguaje de consultas SQL y la gestión de bases de datos. El material se presenta comenzando con la descripción de consultas básicas y terminando con manipulaciones complejas utilizando uniones, subconsultas y transacciones. Si está tratando de comprender la organización y gestión de bases de datos, este libro será una excelente guía práctica y le proporcionará todo herramientas necesarias. Una característica de esta edición es la forma única de presentar el material, que distingue a la serie Head First de O\'Reilly de una serie de aburridos libros de programación.

Este libro le enseñará cómo trabajar con comandos y declaraciones SQL, crear y configurar bases de datos relacionales, cargar y modificar objetos de bases de datos, ejecutar consultas potentes, mejorar el rendimiento y crear seguridad. Aprenderá a usar declaraciones DDL y aplicar API, integrar scripts XML y Java, usar objetos SQL, crear servidores web, trabajar con acceso remoto y realizar transacciones distribuidas.
En este libro, encontrará información como descripciones del trabajo con bases de datos en memoria, bases de datos integradas y de transmisión, bases de datos para dispositivos portátiles y móviles, y mucho más.

SQL for Mortals es una introducción completa al lenguaje de consulta estructurado escrito especialmente para principiantes.

Si es nuevo en la administración de bases de datos, este libro le enseñará cómo trabajar con SQL de manera fácil y fluida, utilizando consultas simples y operaciones complejas. Para dominar SQL:

- Comprender el significado de los conceptos de gestión de bases de datos con una introducción concisa y sencilla a las bases de datos relacionales.
— Siga estas instrucciones para usar comandos SQL básicos para buscar y trabajar con información colocada en tablas de datos. Aprenda a seleccionar y resumir datos, así como a administrarlos hábilmente.
- Trabaje eficientemente con tablas de datos compuestas aplicando técnicas de consulta avanzadas a más de una tabla al mismo tiempo, construyendo consultas y subconsultas complejas.
- Crear nuevas tablas de datos para aplicaciones comerciales minoristas. Aprenda los principios importantes del diseño efectivo de bases de datos y las técnicas para garantizar la integridad y protección de los datos.
- Aprenda a usar SQL con lenguajes de programación usando un capítulo dedicado para programadores.

SQL es más antiguo que la mayoría de nosotros, por lo que no puedo afirmar que esté transmitiendo cosas extraordinarias a través de este libro. Lo que hace que este título sea único es su tamaño delgado. Si está buscando una guía práctica realmente compacta sobre SQL, entonces este libro es para usted. Para los principiantes, he tratado de confinar un océano a un balde para equiparlos con conocimientos de SQL en el menor tiempo posible. El lenguaje SQL es demasiado voluminoso y la exposición de todos los aspectos de este enorme lenguaje es una tarea muy tediosa. Dejando de lado las características menos utilizadas, este libro se desarrolla para centrarse en las áreas más operativas del lenguaje. Está destinado a ayudarlo a aprender SQL rápidamente por sí mismo. Sigue un enfoque de tutorial mientras se proporcionan cientos de ejercicios prácticos, aumentados con ilustraciones, para enseñarle SQL en un corto período de tiempo. Sin exagerar, el libro expondrá SQL en un tiempo récord. El libro cubre explícitamente una plataforma gratuita del DBMS número 1 del mundo para exponer SQL: Oracle Database Express Edition. Elegí Oracle XE porque es gratuito para desarrollar, implementar y distribuir; rápido para descargar; y sencillo de administrar.

Comenzar con Oracle PL/SQL lo inicia en el uso del lenguaje incorporado que todo desarrollador de Oracle y administrador de bases de datos debe conocer. Oracle Database está repleto de funciones de aplicaciones integradas que son gratuitas para usar, y PL/SQL es su boleto para aprender y usar esas funciones desde su propio código. con eso, usted puede centralice la lógica comercial en la base de datos, puede descargar la lógica de la aplicación y puede automatizar las tareas de administración de la base de datos y la aplicación.

El autor Don Bales proporciona en Begining Oracle PL/SQL un tutorial rápido y lleno de ejemplos. Aprenda de la amplia experiencia de Don para descubrir los aspectos más utilizados de PL/SQL, sin perder el tiempo en características oscuras y obsoletas.

El libro "SQL. La Biblia del usuario es única en el sentido de que cada capítulo compara las implementaciones del lenguaje de consulta SQL estándar en los tres DBMS líderes. El resultado es una referencia completa y práctica para usuarios de bases de datos, desde principiantes hasta profesionales. Este libro sobre SQL combina convenientemente la teoría con la práctica, contiene una descripción de las nuevas tecnologías y le permitirá comprender los numerosos matices del estándar del lenguaje de consulta SQL y sus implementaciones. Se puede utilizar como referencia, una especie de manual de escritorio.
— Aprenda los conceptos básicos del lenguaje de consultas SQL y las bases de datos relacionales
- Aprenda a trabajar con tablas, vistas, secuencias y otros objetos de base de datos
- Aprenda a aplicar transacciones y bloqueos en un entorno multiusuario
- Conozca las funciones que ofrece el estándar SQL y tres proveedores líderes de bases de datos
- Aprenda a acceder a los metadatos e implementar la seguridad de la base de datos
- Explore temas adicionales: integración de SQL a XML, inteligencia empresarial OLAP y más

Si tiene habilidades básicas de HTML, entonces con la ayuda del libro de Robin Nixon, un desarrollador experimentado y autor de numerosos libros de dominio web más vendidos, aprenderá fácilmente cómo crear sitios dinámicos caracterizados por un alto nivel de interacción con el usuario.
Descubra la combinación de PHP y MySQL, aprenda cómo facilitan la creación de sitios web modernos, aprenda cómo agregar javascript a estas tecnologías, lo que le permite crear aplicaciones de alta tecnología.
Este tutorial analiza cada tecnología por separado, muestra cómo combinar PHP, MySQL y javascript en un solo conjunto y ofrece una introducción a los últimos conceptos de programación web. Con estudios de casos detallados y cuestionarios en cada capítulo, podrá poner en práctica lo que ha aprendido.

Esta guía le ayudará a:
— dominar los conceptos básicos de PHP y la programación orientada a objetos;
- estudiar a fondo MySQL, comenzando con la estructura de las bases de datos y terminando con la compilación de consultas complejas;
- crear páginas web que utilicen PHP y MySQL para combinar formularios y otros componentes HTML;
- aprender javascript, comenzando con las funciones y el manejo de eventos y terminando con el acceso al Modelo de objetos del documento (DOM);
— usar bibliotecas y paquetes de software, incluido el sistema Smarty, el repositorio de software PEAR y Yahoo! interfaz de usuario;
- realizar llamadas Ajax y convertir su sitio web en un entorno de información altamente dinámico;
- subir archivos e imágenes al sitio web y trabajar con ellos, verificar los datos ingresados ​​por el usuario;
- Garantizar la seguridad de sus aplicaciones.

¿Las consultas no se ejecutan lo suficientemente rápido? ¿Se pregunta acerca de las características de la base de datos en memoria en 2014? ¿Cansado de las llamadas telefónicas de usuarios frustrados? El libro de Grant Fritchey SQL Server Query Performance Tuning es la respuesta a sus problemas de rendimiento de consultas de SQL Server. El libro está revisado para cubrir las últimas funciones y técnicas de optimización del rendimiento, especialmente las funciones de base de datos en memoria recientemente agregadas, anteriormente conocidas con el nombre de código Project Hekaton. Este libro proporciona las herramientas que necesita para abordar sus consultas teniendo en cuenta el rendimiento.

El ajuste del rendimiento de consultas de SQL Server lo guía a través de la comprensión de las causas del bajo rendimiento, cómo identificarlas y cómo solucionarlas. Aprenderá a ser proactivo en el establecimiento de líneas de base de rendimiento utilizando herramientas como Performance Monitor y Extended Events. Aprenderá a reconocer cuellos de botella y desactivarlos antes de que suene el teléfono. También aprenderá algunas soluciones rápidas, pero el énfasis está en diseñar para el rendimiento y hacerlo bien, y en evitar los problemas antes de que ocurran. Deleite a sus usuarios. Silencie ese teléfono que suena. Ponga en práctica hoy mismo los principios y lecciones de SQL Server Query Performance Tuning.

Cubre las características en memoria del Proyecto Hekaton
Ayuda a establecer líneas de base de rendimiento y monitorear contra ellas
Guías para solucionar problemas y eliminar cuellos de botella que frustraban a los usuarios
lo que aprenderás
— Establecer líneas de base de desempeño y monitorear contra ellas
— Reconocer y eliminar los cuellos de botella que conducen a un rendimiento lento
- Implementar arreglos rápidos cuando sea necesario, siguiendo con soluciones a largo plazo
— Implementar las mejores prácticas en T-SQL para minimizar el riesgo de rendimiento
— Diseñe con el rendimiento que necesita mediante un cuidadoso diseño de consultas e índices
— Aproveche las funciones de optimización del rendimiento más recientes en SQL Server 2014
— Comprender las nuevas características de la base de datos en memoria, anteriormente denominadas en código como Project Hekaton

Libro SQL en 10 minutos ofrece soluciones sencillas y prácticas para aquellos que quieren obtener resultados rápidamente. Después de trabajar con las 22 lecciones, cada una de las cuales no tomará más de 10 minutos, aprenderá todo lo necesario para el uso práctico de SQL. Los ejemplos del libro son adecuados para IBM DB2, Microsoft Access, Microsoft SQL Server, MySQL, Oracle, PostgreSQL, SQLite, MariaDB y Apache OpenOffice Base. Los ejemplos ilustrativos lo ayudarán a comprender cómo se estructuran las declaraciones SQL. Las sugerencias generarán atajos a las soluciones. Las advertencias le ayudan a evitar errores comunes. Las notas proporcionan más aclaraciones.

Este tutorial es algo así como un "sello de mi memoria" en 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. Este es un mínimo suficiente para mí, que se usa con mayor frecuencia cuando se trabaja con bases de datos. Si surge la necesidad de usar construcciones SQL más completas, generalmente recurro a la biblioteca de MSDN ubicada en Internet para obtener ayuda. En mi opinión, mantener todo en la cabeza es muy difícil y no hay una necesidad particular de hacerlo. Pero conocer las construcciones 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 se encuentran principalmente en los tipos de datos, que pueden diferir en los detalles. No hay tantas construcciones básicas del lenguaje SQL, y con práctica constante se recuerdan rápidamente. Por ejemplo, para crear objetos (tablas, restricciones, índices, etc.) basta con tener a mano un editor de texto del entorno (IDE) para trabajar con una base de datos, y no hace falta aprender un toolkit visual afilado 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 un límite. Cuando se trabaja constantemente con la base de datos, crear, modificar y especialmente volver a crear un objeto mediante scripts es muchas veces más rápido que si se hace en modo visual. También en modo script (respectivamente, con el debido cuidado), es más fácil establecer 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 de prueba) deben transferirse de la misma forma a otra base de datos (productiva).

El lenguaje SQL se divide en varias partes, aquí consideraré las 2 partes más importantes del mismo:
  • DML - Lenguaje de manipulación de datos (lenguaje de manipulación de datos), que contiene las siguientes construcciones:
    • SELECCIONAR - selección de datos
    • INSERTAR - insertar nuevos datos
    • ACTUALIZAR - actualización de datos
    • DELETE - eliminación de datos
    • MERGE - fusión de datos
Porque Soy un practicante, como tal, habrá poca teoría en este libro de texto y todas las construcciones se explicarán con ejemplos prácticos. Además, creo que un lenguaje de programación, y especialmente SQL, solo se puede dominar en la práctica, tocándolo por uno mismo y entendiendo qué sucede cuando ejecutas tal o cual construcción.

Este tutorial fue creado sobre el principio de Paso a Paso, es decir, es necesario leerlo secuencialmente y preferiblemente inmediatamente después de los ejemplos. Pero si en el camino necesita conocer un comando con más detalle, utilice una búsqueda específica en Internet, por ejemplo, en la biblioteca de MSDN.

Al escribir este tutorial, usé una base de datos de MS SQL Server versión 2014 y usé MS SQL Server Management Studio (SSMS) para ejecutar los scripts.

Brevemente sobre MS SQL Server Management Studio (SSMS)

SQL Server Management Studio (SSMS) es una utilidad para Microsoft SQL Server 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. La herramienta principal de SQL Server Management Studio es el 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, use 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 presione la tecla "F5". Si solo hay un comando en el editor en este momento, o si 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 Actualizar desde el menú contextual, resaltando el grupo apropiado (por ejemplo, Tablas), la tabla en sí o el grupo Columnas en ella .

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

un poco de teoria

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

DBMS: el sistema para administrar estas 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 lenguaje coloquial, generalmente decimos: "Oracle DB", o incluso simplemente "Oracle", que en realidad significa "Oracle DBMS", entonces, en el contexto de este tutorial, a veces se usará el término DB. Por el contexto, creo que quedará claro qué es exactamente lo que está en juego.

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

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

Para cada tabla, así como para sus columnas, se dan nombres, mediante los cuales se hace referencia a ellas 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 en particular, debe desarrollar sus propias reglas para nombrar objetos a fin de cumplir con el límite en la cantidad de caracteres.

SQL es un lenguaje que le permite consultar la base de datos a través del DBMS. En un DBMS particular, 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 tablas y actualizar y eliminar datos existentes.

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

Comentario de una sola línea
y

/* comentario multilinea */

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

DDL - Lenguaje de definición de datos (lenguaje de descripción de datos)

Por ejemplo, considere una tabla con datos sobre empleados, en la forma familiar para una persona que no es programadora:

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 - cadena
El tipo de columna es una característica que indica qué tipo de datos puede almacenar esta columna.

Para empezar, será suficiente recordar solo los siguientes tipos de datos básicos utilizados en MS SQL:

Significado Notación en MS SQL Descripción
Cadena de longitud variable varchar(N)
y
nvarchar(N)
Con el número N, podemos especificar la máxima longitud 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, debemos establecer su tipo en 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, mientras que 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 el campo no necesitará almacenar caracteres Unicode. Por ejemplo, varchar se puede usar para almacenar direcciones de correo electrónico porque generalmente contienen solo caracteres ASCII.
Cadena de longitud fija carácter(N)
y
nchar(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 a la derecha hasta la longitud de N 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, entonces se usa principalmente en el formato char (1), es decir cuando el campo está definido por un solo carácter.
Entero En t Este tipo nos permite usar solo números enteros, tanto positivos como negativos, en la columna. Como referencia (esto no es tan relevante para nosotros ahora), el rango de números que permite el tipo int desde -2 147 483 648 hasta 2 147 483 647. Este suele ser el tipo principal que se usa para establecer identificadores.
número real o real flotador En términos simples, estos son números en los que puede estar presente un punto decimal (coma).
fecha fecha Si es necesario almacenar solo la Fecha en la columna, que consta de tres componentes: Número, 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 que es importante para nosotros fijar solo la fecha, o cuando el componente de tiempo no es importante para nosotros y puede descartarse, o si no se conoce.
Hora hora Este tipo se puede usar si la columna necesita almacenar solo datos de tiempo, es decir, Horas, Minutos, Segundos y Milisegundos. Por ejemplo, 17:38:31.3231603
Por ejemplo, la “Hora de salida del vuelo” diaria.
fecha y hora fecha y hora Este tipo le permite almacenar la fecha y la hora al mismo tiempo. Por ejemplo, 15/02/2014 5:38:31.323 p. m.
Por ejemplo, podría ser la fecha y la hora de un evento.
Bandera un poco Este tipo es útil para almacenar valores Sí/No, donde Sí se almacenará como 1 y No como 0.

Asimismo, no se podrá especificar el valor del campo, en caso de que no esté prohibido, para lo cual se utiliza la palabra clave NULL.

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

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

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

Prueba DROP BASE DE DATOS
Para cambiar a nuestra base de datos, puede ejecutar el comando:

Prueba de EE. UU.
Como alternativa, seleccione la base de datos de prueba de la lista desplegable en el área de menú de SSMS. En el trabajo, a menudo uso 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:

CREATE TABLE [Empleados]([Número de personal] int, [Nombre] nvarchar(30), [Fecha de nacimiento] fecha, nvarchar(30), [Puesto] nvarchar(30), [Departamento] nvarchar(30))
En este caso, tendremos que encerrar 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 usar espacios en los nombres. En MS SQL, por lo general en este caso, cada palabra comienza con una letra mayúscula, por ejemplo, para el campo "Número de personal", podríamos establecer el nombre PersonnelNumber. También puede usar números en el nombre, por ejemplo, PhoneNumber1.

en una nota
En algunos DBMS, el siguiente formato de nombres "PHONE_NUMBER" puede ser más preferible, por ejemplo, este formato se usa a menudo en la base de datos ORACLE. Naturalmente, al configurar el nombre del campo, es deseable que no coincida con las palabras clave utilizadas en el DBMS.

Por este motivo, puede olvidarse de la sintaxis de corchetes y eliminar la tabla [Empleados]:

DROP TABLE [Empleados]
Por ejemplo, una tabla con empleados puede llamarse "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
  • Posición
  • Departamento - Departamento
Muy a menudo, la palabra ID se usa para nombrar el campo identificador.

Ahora vamos a crear nuestra tabla:

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

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

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

en una nota
El concepto general del lenguaje SQL para la mayoría de los DBMS sigue siendo el mismo (al menos, puedo juzgar esto por el DBMS con el que tuve la oportunidad de trabajar). La diferencia entre DDL en diferentes DBMS radica principalmente en los tipos de datos (no solo sus nombres, sino también los detalles de su implementación pueden diferir aquí), los detalles específicos de la implementación del lenguaje SQL también pueden diferir ligeramente (es decir, la esencia del los comandos son los mismos, pero puede haber ligeras diferencias en el dialecto, por desgracia, pero no hay un estándar). Al conocer los conceptos básicos de SQL, puede cambiar fácilmente de un DBMS a otro. 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 el 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 un PK (en este caso, la construcción se ve como en MS SQL, se mostrará a continuación) ALTER TABLE Empleados 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 configurar tanto en bytes como en caracteres, para esto se utilizan las opciones adicionales BYTE y CHAR, que se especifican después de la longitud del campo, por ejemplo:

NOMBRE varchar2(30 BYTE) -- la capacidad del campo será de 30 bytes NOMBRE varchar2(30 CARACTERES) -- la capacidad del campo será de 30 caracteres
Qué opción se usará por defecto BYTE o CHAR, en el caso de una especificación simple del tipo varchar2(30) en ORACLE, depende de la configuración de la base de datos, a veces también se puede establecer en la configuración del IDE. En general, a veces puede confundirse fácilmente, 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 (porque por lo general, es más conveniente leer la longitud de una cadena en caracteres).

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

INSERTAR Empleados (ID, Puesto, Departamento) VALORES (1000, N "Director", N "Administración"), (1001, N "Programador", N "TI"), (1002, N "Contador", N "Contabilidad" ), (1003,N"Programador sénior",N"TI")
En este caso, el comando INSERT también arrojará un error, porque al insertar, no especificamos el valor del campo Nombre requerido.
En el caso de que ya tuviéramos estos datos en la tabla original, entonces el comando "ALTER TABLE Employees ALTER COLUMN ID int NOT NULL" sería exitoso, y el comando "ALTER TABLE Employees ALTER COLUMN Name int NOT NULL" arrojaría un error mensaje, que hay valores NULL (no especificados) en el campo Nombre.

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


Además, la opción NOT NULL se puede usar directamente al crear una nueva tabla, es decir, en el contexto del comando CREATE TABLE.

Primero, elimine la tabla con el comando:

DROP TABLE Empleados
Ahora vamos a crear una tabla con las columnas ID y Nombre obligatorias:

CREAR TABLA Empleados (ID int NO NULO, Nombre nvarchar (30) NO NULO, 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 por defecto.

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, ampliemos 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 por este valor único. Este valor se denomina clave principal de la tabla. Para nuestra tabla Empleados, este valor único podría ser la columna ID (que contiene el "Número de personal del empleado", incluso si 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 ADD CONSTRAINT PK_Employees PRIMARY KEY(ID)
Donde "PK_Employees" es el nombre de la restricción responsable de la clave principal. Por lo general, la clave principal se nombra 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 ADD CONSTRAINT nombre_restricción CLAVE PRINCIPAL (campo1, campo2,...)
Vale la pena señalar que en MS SQL todos los campos que se incluyen en la clave principal deben tener la característica NOT NULL.

Además, la clave principal se puede definir directamente al crear una tabla, es decir, en el contexto del comando CREATE TABLE. Borremos la tabla:

DROP TABLE Empleados
Y luego créalo usando la siguiente sintaxis:

CREAR TABLA Empleados (ID int NO NULO, Nombre nvarchar (30) NO NULO, Fecha de cumpleaños, Correo electrónico nvarchar (30), Posición nvarchar (30), Departamento nvarchar (30), RESTRICCIÓN PK_Employees PRIMARY KEY (ID) -- describir PK después todos los campos como una restricción)
Después de la creación, complete los datos de la tabla:

INSERTAR Empleados (ID, Puesto, Departamento, Nombre) VALORES (1000, N"Director",N"Administración",N"Ivanov II.), (1001,N"Programador",N"TI",N" Petrov PP" ), (1002,N"Contador",N"Contabilidad",N"Sidorov SS"), (1003,N"Programador sénior",N"TI",N"Andreev A. A.")
Si la clave principal en la tabla consta solo de los valores de una columna, se puede usar la siguiente sintaxis:

CREAR TABLA Empleados (ID int NOT NULL RESTRICCIÓN 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, se puede omitir el nombre de la restricción, en cuyo caso se le dará un nombre de sistema (como "PK__Employee__3214EC278DA42077"):

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

CREAR TABLA Empleados (ID int NOT NULL CLAVE PRIMARIA, 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 siempre establezca explícitamente el nombre de la restricción para tablas permanentes, porque por un nombre explícitamente proporcionado y comprensible, posteriormente será más fácil manipularlo, por ejemplo, puede eliminarlo:

ALTER TABLE Empleados DROP CONSTRAINT PK_Employees
Pero una sintaxis tan corta, sin especificar los nombres de las restricciones, es conveniente cuando se crean tablas de bases de datos temporales (el nombre de una tabla temporal comienza con # o ##), que se eliminarán después de su uso.

vamos a resumir

Hasta ahora hemos cubierto los siguientes comandos:
  • CREAR MESA table_name (enumeración de campos y sus tipos, restricciones): se utiliza para crear una nueva tabla en la base de datos actual;
  • MESA PLEGABLE table_name: se usa para eliminar una tabla de la base de datos actual;
  • ALTERAR TABLA nombre de la tabla ALTERAR COLUMNA column_name … – se utiliza para actualizar el tipo de columna o para cambiar su configuración (por ejemplo, para establecer la característica NULL o NOT NULL);
  • ALTERAR TABLA nombre de la tabla AGREGAR RESTRICCIÓN nombre_restricción CLAVE PRIMARIA(field1, field2,…) – agregar una clave principal a una tabla existente;
  • ALTERAR TABLA nombre de la tabla RESTRICCIÓN DE CAÍDA constrict_name: elimina la restricción de la tabla.

Un poco sobre tablas temporales

Recorte de MSDN. Hay dos tipos de tablas temporales en MS SQL Server: locales (#) y globales (##). Las tablas temporales locales solo son visibles para sus creadores hasta que finaliza la sesión de conexión con la instancia de SQL Server una vez que se crean por primera vez. Las tablas temporales locales se eliminan automáticamente después de que un usuario se desconecta de una 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 estas tablas y se eliminan cuando todos los usuarios que hacen referencia a estas 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 crearlos, no obstruimos la base de datos principal; de lo contrario, las tablas temporales son completamente idénticas a las tablas regulares, también se pueden eliminar con el comando DROP TABLE. Las tablas temporales locales (#) se usan con más frecuencia.

Para crear una tabla temporal, puede usar el comando CREAR TABLA:

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

DROP TABLE #Temp

También puede crear una tabla temporal (así como una tabla regular) e inmediatamente llenarla con los datos devueltos por la consulta usando la sintaxis SELECT ... INTO:

SELECCIONE ID, Nombre EN #Temp DE Empleados

en una nota
En diferentes DBMS, la implementación de tablas temporales puede diferir. Por ejemplo, en ORACLE y Firebird DBMS, la estructura de las tablas temporales debe definirse de antemano mediante el comando CREATE GLOBAL TEMPORARY TABLE, indicando los detalles de almacenamiento de datos en él, luego el usuario lo ve entre las tablas principales y trabaja con él. como con una mesa normal.

Normalización de la base de datos: división en subtablas (directorios) y determinación de relaciones

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

El segundo inconveniente es la cantidad 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 un lugar 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 cambia el nombre de una posición, por ejemplo, si necesita cambiar el nombre de la posición "Programador" a "Programador Junior". En este caso, tendremos que hacer cambios en cada línea de la tabla, en la que la Posición es igual a "Programador".

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

Vamos a crear 2 tablas de referencia "Puestos" y "Departamentos", la primera se llamará Puestos, y la segunda, respectivamente, Departamentos:

CREATE TABLE Positions(ID int IDENTITY(1,1) NOT NULL RESTRICTION PK_Positions PRIMARY KEY, Name nvarchar(30) NOT NULL) CREATE TABLE Departments(ID int IDENTITY(1,1) NOT NULL RESTRICT PK_Departments PRIMARY KEY, Name nvarchar(30 ) NO NULO)
Tenga en cuenta que aquí usamos la nueva opción IDENTIDAD, lo que significa que los datos en la columna ID se numerarán automáticamente, comenzando desde 1, con un paso de 1, es decir cuando se agreguen nuevos registros, se les asignarán secuencialmente los valores 1, 2, 3, y así sucesivamente. Dichos campos generalmente se denominan de incremento automático. Solo se puede definir un campo con la propiedad IDENTITY en una tabla y, por lo general, pero no necesariamente, dicho campo es la clave principal de esa tabla.

en una nota
En diferentes DBMS, la implementación de campos con un contador se puede hacer de manera diferente. En MySQL, por ejemplo, dicho campo se define mediante la opción AUTO_INCREMENT. En ORACLE y Firebird, esta funcionalidad se podía emular previamente mediante 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 Cargo y Departamento de la tabla Empleados:

Rellene el campo Nombre de la tabla Puestos con valores únicos del campo Puesto de la tabla Empleados INSERTAR Puestos (Nombre) SELECCIONAR Puesto DISTINTO DE Empleados DONDE Puesto NO ES NULO -- descartar registros sin puesto especificado
Haremos lo mismo para la tabla de Departamentos:

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

SELECCIONE * DESDE Posiciones

SELECCIONE * DE Departamentos

Estas tablas ahora desempeñarán el papel de directorios para establecer puestos y departamentos. Ahora nos referiremos a los ID de trabajo y departamento. En primer lugar, vamos a crear nuevos campos en la tabla Empleados para almacenar los datos de ID:

Agregar campo para ID de puesto ALTER TABLE Empleados ADD PositionID int -- agregar 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 puede agregar varios campos a la tabla a la vez con un comando, enumerando los campos separados por comas:

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

ALTER TABLE Empleados ADD CONSTRAINT FK_Employees_PositionID FOREIGN KEY(PositionID) REFERENCES Positions(ID)
Y haremos lo mismo para el segundo campo:

ALTER TABLE Empleados ADD CONSTRAINT FK_Employees_DepartmentID FOREIGN KEY(DepartmentID) REFERENCIAS Departamentos(ID)
Ahora el usuario podrá ingresar solo los valores de identificación del libro de referencia correspondiente en estos campos. En consecuencia, para utilizar un nuevo departamento o puesto, primero deberá agregar una nueva entrada al directorio correspondiente. Porque las posiciones y departamentos ahora se almacenan en directorios en una sola copia, luego para cambiar el nombre, es suficiente cambiarlo solo en el directorio.

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

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

ALTER TABLE tabla ADD CONSTRAINT nombre_restricción FOREIGN KEY(campo1,campo2,…) REFERENCIAS tabla de búsqueda(campo1,campo2,…)
En este caso, en la tabla "table_reference", la clave principal está representada por una combinación de varios campos (field1, field2, ...).

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

UPDATE e SET PositionID=(SELECCIONE ID FROM Posiciones WHERE Nombre=e.Puesto), DepartmentID=(SELECCIONE ID FROM Departamentos WHERE Nombre=e.Departamento) FROM Empleados e
Veamos qué sucede al ejecutar la consulta:

SELECCIONE * DE Empleados

Eso es todo, los campos PositionID y DepartmentID se completan con los puestos y departamentos correspondientes con ID de necesidad en los campos Puesto y Departamento en la tabla Empleados ahora, puede eliminar estos campos:

ALTER TABLE Empleados DROP COLUMN Posición, Departamento
La tabla ahora se ve así:

SELECCIONE * DE Empleados

IDENTIFICACIÓN Nombre cumpleaños Correo electrónico ID de posición ID de departamento
1000 Ivanov II NULO NULO 2 1
1001 Petrov P. P. NULO NULO 3 3
1002 Sidorov SS NULO NULO 1 2
1003 Andreev A.A. NULO NULO 4 3

Aquellos. eventualmente nos deshicimos del almacenamiento de información redundante. Ahora, por los números de puesto y departamento, podemos determinar de forma única sus nombres usando los valores en las tablas de búsqueda:

SELECT e.ID,e.Name,p.Name PositionName,d.Name DepartmentName FROM Empleados e LEFT JOIN 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í también puede realizar varias manipulaciones con estos objetos, por ejemplo, cambiar el nombre o eliminar objetos.

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

ALTER TABLE Empleados ADD ManagerID int
En este campo se permite el valor NULL, el campo estará vacío si, por ejemplo, no hay superiores sobre el empleado.

Ahora vamos a crear una CLAVE EXTERNA en la tabla Empleados:

ALTER TABLE Empleados ADD CONSTRAINT FK_Employees_ManagerID FOREIGN KEY (ManagerID) REFERENCES 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 de Empleados está relacionada con las tablas de Cargos y Departamentos, y también se refiere a sí misma):

Finalmente, vale la pena mencionar 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 referenciado en la tabla de búsqueda. Si no se especifican estas opciones, entonces no podemos cambiar la ID en la tabla de directorio de la entrada que tiene enlaces de otra tabla, ni podemos eliminar dicha entrada del directorio hasta que eliminemos todas las filas que hacen referencia a esta entrada o, vamos a actualice estas líneas de referencias a otro valor.

Por ejemplo, volvamos a crear la tabla con la opción ON DELETE CASCADE para FK_Employees_DepartmentID:

DROP TABLE Empleados CREATE TABLE Empleados (ID int NOT NULL, Name nvarchar (30), Fecha de cumpleaños, Correo electrónico nvarchar (30), PositionID int, DepartmentID int, ManagerID int, CONSTRAINT PK_Employees PRIMARY KEY (ID), CONSTRAINT FK_Employees_DepartmentID FOREIGN KEY (DepartmentID ) REFERENCIAS Departamentos (ID) ON DELETE CASCADE, CONSTRAINT FK_Employees_PositionID FOREIGN KEY(PositionID) REFERENCES Positions(ID), CONSTRAINT FK_Employees_ManagerID FOREIGN KEY (ManagerID) REFERENCES Employees(ID)) INSERT Empleados (ID,Nombre,Cumpleaños,PuestoID,DepartmentID,ManagerID )VALORES (1000,N"Ivanov II","19550219",2,1,NULL), (1001,N"Petrov PP","19831203",3,3,1003), (1002 ,N"Sidorov SS" ,"19760607",1,2,1000), (1003,N"Andreev AA","19820417",4,3,1000)
Eliminemos el departamento con ID 3 de la tabla Departamentos:

DELETE Departamentos DONDE ID=3
Veamos los datos en la tabla Empleados:

SELECCIONE * DE Empleados

IDENTIFICACIÓN Nombre cumpleaños Correo electrónico ID de posición ID de departamento Id. de administrador
1000 Ivanov II 1955-02-19 NULO 2 1 NULO
1002 Sidorov SS 1976-06-07 NULO 1 2 1000

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

La opción ON UPDATE CASCADE se comporta de manera similar, pero surte efecto al actualizar el valor de ID en el directorio. Por ejemplo, si cambiamos el ID de 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 demostrar esto, porque. la columna ID en la tabla Departamentos tiene la opción IDENTIDAD, lo que nos impedirá ejecutar la siguiente consulta (cambiar ID departamento 3 a 30):

ACTUALIZAR Departamentos SET ID=30 WHERE ID=3
Lo principal es entender la esencia de estas 2 opciones EN ELIMINAR CASCADA y EN ACTUALIZAR CASCADA. Uso estas opciones en muy raras ocasiones, y recomiendo que pienses detenidamente antes de especificarlas en una restricción referencial. si elimina accidentalmente un registro de la tabla de referencia, esto puede generar grandes problemas y crear una reacción en cadena.

Restauremos el departamento 3:

Dar permiso para agregar/cambiar valores de IDENTIDAD SET IDENTITY_INSERT Departamentos ON INSERT Departamentos (ID, Nombre) VALORES (3,N"IT") -- denegar agregar/cambiar valores de IDENTIDAD SET IDENTITY_INSERT Departamentos OFF
Borre completamente la tabla Empleados usando el comando TRUNCATE TABLE:

TABLA TRUNCADA Empleados
Y nuevamente, vuelva a cargar los datos usando el comando INSERT anterior:

INSERTAR empleados (ID, nombre, fecha de nacimiento, ID de puesto, ID de departamento, ID de gerente)VALUES (1000,N"Ivanov II","19550219",2,1,NULL), (1001,N"Petrov P.P." ,"19831203",3 ,3,1003), (1002,N"Sidorov SS","19760607",1,2,1000), (1003,N"Andreev AA","19820417" ,4,3,1000)

vamos a resumir

Por el momento, se han agregado algunos comandos DDL más a nuestro conocimiento:
  • Agregar la propiedad IDENTIDAD al campo: le permite hacer que este campo se llene automáticamente (campo de contador) para la tabla;
  • ALTERAR TABLA nombre de la tabla AGREGAR list_of_fields_with_characteristics: le permite agregar nuevos campos a la tabla;
  • ALTERAR TABLA nombre de la tabla SOLTAR COLUMNA list_of_fields: le permite eliminar campos de la tabla;
  • ALTERAR TABLA nombre de la tabla AGREGAR RESTRICCIÓN nombre_restricción CLAVE EXTERNA(campos) REFERENCIAS lookup_table(fields) – le permite definir una relación entre una tabla y una tabla de búsqueda.

Otras restricciones: ÚNICO, POR DEFECTO, COMPROBAR

Con la 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 UPDATE 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
Y ahora puede imponer una restricción única en este campo:

ALTER TABLE Empleados ADD CONSTRAINT UQ_Employees_Email ÚNICO (Correo electrónico)
Ahora el usuario no podrá ingresar el mismo E-Mail para varios empleados.

La restricción de unicidad generalmente se nombra de la siguiente manera: primero viene el prefijo "UQ_", luego el nombre de la tabla y después del guión bajo está 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 ADD CONSTRAINT nombre_restricción ÚNICO(campo1,campo2,…)
Al agregar una restricción DEFAULT a un campo, podemos establecer un valor predeterminado que se sustituirá si el campo no aparece en la lista de campos del comando INSERT cuando se inserta un nuevo registro. Esta restricción se puede establecer directamente al crear una tabla.

Agreguemos un nuevo campo "Fecha de contratación" a la tabla Empleados y asígnele el nombre HireDate y digamos que el valor predeterminado para este campo será la fecha actual:

ALTER TABLE Empleados ADD HireDate date NOT NULL DEFAULT SYSDATETIME()
O si la columna HireDate ya existe, se puede usar la siguiente sintaxis:

ALTER TABLE Empleados ADD DEFAULT SYSDATETIME() FOR HireDate
Aquí no especifiqué el nombre de la restricción, porque en el caso de DEFAULT, yo era de la opinión de que esto no es tan crítico. Pero si lo haces de una buena manera, entonces creo que no necesitas ser perezoso y debes establecer un nombre normal. Esto se hace de la siguiente manera:

ALTER TABLE Empleados ADD CONSTRAINT DF_Employees_HireDate DEFAULT SYSDATETIME() FOR HireDate
Dado que esta columna no existía antes, cuando se agrega 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, si no lo establecemos explícitamente, es decir, no especificado 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) VALORES (1004, N"Sergeev S.S."," [correo electrónico protegido]")
Vamos a ver que pasó:

SELECCIONE * DE Empleados

IDENTIFICACIÓN Nombre cumpleaños Correo electrónico ID de posición ID de departamento Id. de administrador Fecha de contratación
1000 Ivanov II 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 SS 1976-06-07 [correo electrónico protegido] 1 2 1000 2015-04-08
1003 Andreev A.A. 1982-04-17 [correo electrónico protegido] 4 3 1000 2015-04-08
1004 Sergeev SS NULO [correo electrónico protegido] NULO NULO NULO 2015-04-08

La restricción de verificación CHECK 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 es nuestro identificador (ID) de empleado. Usando esta restricción, digamos que los números de personal deben tener un valor de 1000 a 1999:

ALTER TABLE Empleados ADD CONSTRAINT CK_Employees_ID CHECK(ID ENTRE 1000 Y 1999)
La restricción suele tener el mismo nombre, primero con el prefijo "CK_", luego el nombre de la tabla y el nombre del campo en el que se aplica la restricción.

Intentemos insertar una entrada inválida para verificar 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 que se insertará a 1500 y asegurémonos de que se inserte el registro:

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 AGREGAR ÚNICO (Correo electrónico) ALTER TABLE Empleados AGREGAR CHEQUE (ID ENTRE 1000 Y 1999)
Pero esto no es una buena práctica y es mejor especificar el nombre de la restricción explícitamente, porque para descubrir más tarde qué será más difícil, deberá abrir el objeto y ver de qué es responsable.

Con un buen nombre, se puede aprender mucha información sobre una 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:

DROP TABLE Empleados
Y recréelo con todas las restricciones creadas con un comando CREAR TABLA:

CREATE TABLE Employees(ID int NOT NULL, Name nvarchar(30), Birthday date, Email nvarchar(30), PositionID int, DepartmentID int, HireDate date NOT NULL DEFAULT SYSDATETIME(), -- por DEFAULT lanzaré una CONSTRAINT PK_Employees PRIMARY EXCEPCIÓN DE CLAVE (ID), CONSTRAINT FK_Employees_DepartmentID FOREIGN KEY(DepartmentID) REFERENCES Departments(ID), CONSTRAINT FK_Employees_PositionID FOREIGN KEY(PositionID) REFERENCES Positions(ID), CONSTRAINT UQ_Employees_Email ÚNICO (Correo electrónico), CONSTRAINT CK_Employees_ID CHECK (ID ENTRE 1000)

INSERTAR empleados (ID, nombre, cumpleaños, correo electrónico, ID de puesto, ID de departamento)VALUES (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 agrupado no está disponible en todos los DBMS. Una tabla solo puede tener un índice CLUSTERED. CLUSTERED - significa que los registros de la tabla serán ordenados por este índice, también se puede decir que este índice tiene acceso directo a todos los datos de la tabla. Es por así decirlo el índice principal de la tabla. Para decirlo aún más toscamente, es un índice atornillado a la mesa. El índice agrupado es una herramienta muy poderosa que puede ayudar con la optimización de consultas, solo tenga eso en cuenta. Si queremos decir que el índice agrupado no se usa en la clave principal, sino para otro índice, al crear la clave principal, debemos especificar la opción NO CLUSTERADO:

ALTER TABLE nombre_tabla ADD CONSTRAINT nombre_restricción PRIMARY KEY NONCLUSTERED(field1,field2,…)
Por ejemplo, hagamos que el índice de restricción PK_Employees no esté agrupado y que 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
Y ahora vamos a crearlos con las opciones CLUSTERED y NONCLUSTERED:

ALTER TABLE Empleados ADD CONSTRAINT PK_Employees PRIMARY KEY NOCLSTERED (ID) ALTER TABLE Empleados ADD CONSTRAINT UQ_Employees_Email UNIQUE CLUSTERED (Email)
Ahora, cuando seleccionamos de la tabla Empleados, podemos ver que los registros están ordenados por el índice agrupado UQ_Employees_Email:

SELECCIONE * DE Empleados

IDENTIFICACIÓN Nombre cumpleaños Correo electrónico ID de posición ID de departamento Fecha de contratación
1003 Andreev A.A. 1982-04-17 [correo electrónico protegido] 4 3 2015-04-08
1000 Ivanov II 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 SS 1976-06-07 [correo electrónico protegido] 1 2 2015-04-08

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

Pero en este caso, este es solo un ejemplo que muestra la esencia del índice agrupado, porque. lo más probable es que se realicen consultas a la tabla Empleados por el campo ID y, en algunos casos, el mismo puede actuar como referencia.

Para los directorios, generalmente es recomendable que el índice agrupado se construya sobre la clave principal, porque en las solicitudes, muchas veces nos referimos al identificador del directorio para obtener, por ejemplo, el nombre (Cargo, Departamento). Aquí recordamos lo que escribí anteriormente, que el índice agrupado tiene acceso directo a las filas de la tabla, y se deduce que podemos obtener el valor de cualquier columna sin sobrecarga adicional.

El índice agrupado es beneficioso para aplicar a los campos que se seleccionan con mayor frecuencia.

A veces, las tablas crean una clave mediante un campo suplente, en cuyo caso es útil mantener la opción de índice CLUSTERED para obtener un índice más apropiado y especificar la opción NONCLUSTERED al crear una clave principal sustituta.

vamos a resumir

En esta etapa, nos familiarizamos con todos los tipos de restricciones, en su forma más simple, que se crean mediante un comando como "ALTER TABLE nombre_tabla ADD CONSTRAINT nombre_restricción ...":
  • CLAVE PRIMARIA- Clave primaria;
  • CLAVE EXTERNA- establecer enlaces y monitorear la integridad referencial de los datos;
  • ÚNICO- le permite crear singularidad;
  • CHEQUE- le permite llevar a cabo la corrección de los datos ingresados;
  • DEFECTO– le permite establecer el valor predeterminado;
  • También vale la pena señalar que todas las restricciones se pueden eliminar con el comando " ALTERAR TABLA nombre de la tabla RESTRICCIÓN DE CAÍDA nombre_restricción".
También tocamos parcialmente el tema de los índices y analizamos el concepto de clúster ( AGRUPADO) y no agrupados ( NO AGRUPADO) índice.

Creación de índices independientes

La autosuficiencia aquí se refiere a índices que no se crean para una CLAVE PRINCIPAL o una restricción ÚNICA.

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

CREAR ÍNDICE IDX_Empleados_Nombre ON Empleados (Nombre)
También puede especificar las opciones AGRUPADO, NO AGRUPADO, ÚNICO aquí, y también puede especificar la dirección de clasificación para cada campo individual ASC (predeterminado) o DESC:

CREAR ÍNDICE ÚNICO NO AGRUPADO UQ_Employees_EmailDesc ON Empleados (Email DESC)
Al crear un índice no agrupado, se puede omitir la opción NO CLUSTERADO, ya que está implícito de forma predeterminada, 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 ON Empleados
Los índices simples, al igual que las restricciones, se pueden crear en el contexto del comando CREATE TABLE.

Por ejemplo, eliminemos la tabla nuevamente:

DROP TABLE Empleados
Y recréelo con todas las restricciones e índices creados con un comando CREATE TABLE:

CREAR TABLA Empleados (ID int NOT NULL, Name nvarchar (30), Fecha de cumpleaños, Correo electrónico nvarchar (30), PositionID int, DepartmentID int, HireDate date NOT NULL RESTRICCIÓN DF_Employees_HireDate DEFAULT SYSDATETIME(), ManagerID int, RESTRICCIÓN PK_Employees PRIMARY KEY (ID ), CONSTRAINT FK_Employees_DepartmentID FOREIGN KEY(DepartmentID) REFERENCES Departments(ID), CONSTRAINT FK_Employees_PositionID FOREIGN KEY(PositionID) REFERENCES Positions(ID), CONSTRAINT FK_Employees_ManagerID FOREIGN KEY (ManagerID) REFERENCES Employees(ID), CONSTRAINT UQ_Employees_Email UNICE 1999), ÍNDICE IDX_Empleados_Nombre(Nombre))
Finalmente, inserte en la tabla de nuestros empleados:

INSERTAR Empleados (ID, Nombre, Cumpleaños, Correo electrónico, ID de puesto, ID de departamento, ID de gerente) VALORES (1000, N"Ivanov II","19550219"," [correo electrónico protegido]",2,1,NULO), (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 los valores se pueden incluir en un índice no agrupado especificándolos en INCLUDE. Aquellos. en este caso, el índice INCLUDE se parecerá un poco a un índice agrupado, solo que ahora el índice no está adjunto a la tabla, pero los valores necesarios 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, entonces es posible que no haya necesidad de acceder a la tabla en absoluto. Pero esto naturalmente aumenta el tamaño del índice, porque los valores de los campos enumerados se duplican en el índice.

Recorte de MSDN. Sintaxis general de comandos para crear índices

CREAR [ÚNICO] [AGRUPADO | NO CLUSTERADO] ÍNDICE nombre_índice ENCENDIDO (columna [ ASC | DESC ] [ ,...n ]) [ INCLUDE (nombre_columna [ ,...n ]) ]

vamos a resumir

Los índices pueden aumentar la velocidad de recuperación de datos (SELECT), pero los índices reducen la velocidad de actualización de los datos de la tabla porque después de cada modificación, el sistema necesitará reconstruir todos los índices para una tabla en particular.

Es deseable en cada caso encontrar la solución óptima, la media dorada, para que tanto el rendimiento del muestreo como la modificación de los datos estén al nivel adecuado. La estrategia para crear índices y su número puede depender de muchos factores, como la frecuencia con la que cambian los datos de la tabla.

Conclusión sobre DDL

Como puede ver, el lenguaje DDL no es tan complicado como podría parecer a primera vista. Aquí pude mostrar casi todos sus diseños principales, usando solo tres tablas.

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

Buena suerte en dominar este maravilloso lenguaje llamado SQL.

Lenguaje de consulta estructurado (lenguaje de consulta estructurado) o SQL- es un lenguaje de programación declarativo para uso en bases de datos cuasi-relacionales. Muchas de las características originales de SQL fueron asumidas por los cálculos de tuplas, pero las extensiones recientes de SQL incluyen cada vez más álgebra relacional.
SQL fue creado originalmente por IBM, pero muchos proveedores han desarrollado sus propios dialectos. Fue adoptado como estándar por el American National Standards Institute (ANSI) en 1986 y por ISO en 1987. En el estándar del lenguaje de programación SQL, ANSI declaró que la pronunciación oficial de SQL es "es cue el". Sin embargo, muchos especialistas en bases de datos utilizaron la pronunciación de "jerga" "Sequel", lo que refleja el nombre original del idioma, Sequel, que luego se cambió debido a conflictos de nombres y marcas registradas en IBM. Programación para principiantes.
lenguaje de programación SQL fue revisado en 1992 y esta versión se conoce como SQL-92. Luego, 1999 se revisó nuevamente para convertirse en SQL: 1999 (también conocido como SQL3). Programación para tontos. SQL 1999 admite objetos que anteriormente no eran compatibles con otras versiones, pero solo a fines de 2001, solo unos pocos sistemas de administración de bases de datos admitían implementaciones de SQL: 1999.
SQL, aunque definido como ANSI e ISO, tiene muchas variaciones y extensiones, la mayoría de las cuales tienen sus propias características, como la implementación "PL/SQL" de la corporación Oracle, o la implementación de Sybase y Microsoft llamada "Transact-SQL", que puede confundir al usuario los fundamentos de la programación. Tampoco es raro que las implementaciones comerciales omitan la compatibilidad con funciones clave del estándar, como tipos de datos como la fecha y la hora, en favor de algunas propias. Como resultado, a diferencia de ANSI C o ANSI Fortran, que generalmente se pueden trasladar de una plataforma a otra sin cambios estructurales importantes, las consultas del lenguaje de programación SQL rara vez se pueden trasladar entre diferentes sistemas de bases de datos sin modificaciones importantes. La mayoría de las personas en el campo de las bases de datos cree que esta falta de interoperabilidad es intencional para proporcionar a cada desarrollador su propio sistema de administración de bases de datos y vincular al cliente a una base de datos en particular.
Como sugiere el nombre, el lenguaje de programación SQL está diseñado para un propósito específico y limitado: consultar los datos contenidos en una base de datos relacional. Como tal, es un conjunto de instrucciones de lenguaje de programación para crear muestras de datos, en lugar de un lenguaje de procedimiento como C o BASIC, que están diseñados para resolver una gama mucho más amplia de problemas. Las extensiones de lenguaje como "PL/SQL" están diseñadas para abordar esta limitación agregando elementos de procedimiento a SQL y conservando los beneficios de SQL. Otro enfoque es permitir que las consultas SQL incrusten comandos de lenguaje de programación de procedimientos e interactúen con la base de datos. Por ejemplo, Oracle y otros admiten el lenguaje Java en la base de datos, mientras que PostgreSQL permite que las funciones se escriban en Perl, Tcl o C.
Una broma de SQL: "SQL no está estructurado ni es un lenguaje". El punto de la broma es que SQL no es un lenguaje de Turing. .

Seleccione * de T
C1 C2
1 a
2 B
C1 C2
1 a
2 B
Seleccione C1 de T
C1
1
2
C1 C2
1 a
2 B
Seleccionar * de T donde C1=1
C1 C2
1 a

Dada una tabla T, una consulta Seleccionar * de T mostrará todos los elementos de todas las filas de la tabla.
Desde la misma tabla, una consulta Seleccionar C1 de T mostrará los elementos de la columna C1 de todas las filas de la tabla.
De la misma tabla, la consulta Select * from T where C1=1 mostrará todos los elementos de todas las filas donde el valor de la columna C1 es "1".

Palabras clave de SQL

Las palabras SQL se dividen en varios grupos.

El primero es Lenguaje de manipulación de datos o DML(lenguaje de gestión de datos). DML es un subconjunto del lenguaje utilizado para consultar bases de datos, agregar, actualizar y eliminar datos.

  • SELECT es uno de los comandos DML más utilizados y permite al usuario especificar una consulta como una descripción del resultado deseado como un conjunto. La consulta no especifica cómo deben distribuirse los resultados: traducir la consulta a un formato que se pueda realizar en la base de datos es tarea del sistema de la base de datos, más específicamente del optimizador de consultas.
  • INSERT se usa para agregar filas (conjunto formal) a una tabla existente.
  • ACTUALIZAR se usa para cambiar valores de datos en una fila de tabla existente.
  • DELETE especifica las filas existentes que se eliminarán de la tabla.

Se puede decir que otras tres palabras clave pertenecen al grupo DML:

  • BEGIN WORK (o START TRANSACTION, según el dialecto de SQL) se puede usar para marcar el inicio de una transacción de base de datos que se ejecutará por completo o no se ejecutará en absoluto.
  • COMMIT establece que se guardan todos los cambios de datos después de que se confirma la operación.
  • ROLLBACK especifica que todos los cambios de datos desde la última confirmación o reversión deben destruirse, hasta el punto en que se confirmaron en la base de datos como una "reversión".

COMMIT y ROLLBACK se utilizan en áreas como el control de transacciones y los bloqueos. Ambas instrucciones completan todas las transacciones actuales (conjuntos de operaciones de la base de datos) y liberan todos los bloqueos sobre el cambio de datos en las tablas. La presencia o ausencia de una declaración BEGIN WORK o similar depende de la implementación particular de SQL.

El segundo grupo de palabras clave se refiere al grupo Lenguaje de definición de datos o DDL (lenguaje de definición de datos). DDL permite al usuario definir nuevas tablas y elementos relacionados. La mayoría de las bases de datos SQL comerciales tienen sus propias extensiones DDL que permiten el control sobre elementos no estándar pero generalmente vitales de un sistema en particular.
Los puntos principales de DDL son los comandos de creación y eliminación.

  • CREATE especifica los objetos (como tablas) que se crearán en la base de datos.
  • DROP especifica qué objetos existentes en la base de datos se eliminarán, generalmente de forma permanente.
  • Algunos sistemas de bases de datos también admiten el comando ALTER, que permite al usuario modificar un objeto existente de diferentes maneras, como agregar columnas a una tabla existente.

El tercer grupo de palabras clave de SQL es Lenguaje de control de datos o DCL (lenguaje de control de datos). DCL es responsable de los derechos de acceso a los datos y permite al usuario controlar quién tiene acceso para ver o manipular los datos en la base de datos. Hay dos palabras clave principales aquí.

Bienvenido al ámbito del desarrollo de bases de datos realizado con el lenguaje de consulta SQL estándar. Los sistemas de administración de bases de datos (DBMS) tienen muchas herramientas que se ejecutan en una amplia variedad de plataformas de hardware.

  • Fundamentos de bases de datos relacionales

    En este capítulo... | Organización de la información | Qué es una base de datos | ¿Qué es un SGBD | Comparación de modelos de bases de datos | Qué es una base de datos relacional

  • Conceptos básicos de SQL

    En este capítulo... | ¿Qué es SQL | Conceptos erróneos de SQL | Una mirada a los diferentes estándares SQL | Introducción a los comandos estándar de SQL y las palabras reservadas | Representación de números, símbolos, fechas, horas y otros tipos de datos | Valores nulos y restricciones

  • Componentes SQL

    En este capítulo… | Creación de base de datos | Procesamiento de datos | Protección de base de datos | SQL es un lenguaje diseñado específicamente para crear y mantener datos en bases de datos relacionales. Si bien las empresas que suministran sistemas para administrar este tipo de bases de datos ofrecen sus propias implementaciones de SQL, el desarrollo del lenguaje mismo está determinado y controlado por el estándar ISO/ANSI.

  • Creación y mantenimiento de una base de datos simple

    En este capítulo… | Crear, modificar y eliminar una tabla de una base de datos utilizando la herramienta RAD. | Crear, modificar y eliminar una tabla de una base de datos usando SQL. | Transferir una base de datos a otro DBMS.

  • Creación de una base de datos relacional de varias tablas

    En este capítulo… | Lo que debe estar en la base de datos | Definición de relaciones entre elementos de base de datos | Vinculación de tablas mediante claves | Diseño de integridad de datos | Normalización de base de datos | Este capítulo presentará un ejemplo de cómo crear una base de datos de varias tablas.

  • Manipulación de datos de la base de datos.

    En este capítulo... | Trabajando con datos | Obtener los datos requeridos de la tabla | Mostrar información seleccionada de una o más tablas | Actualizar información en tablas y vistas | Agregar una nueva fila a una tabla

  • Definición de valores

    En este capítulo... | Uso de variables para reducir la codificación redundante | Obtener información solicitada con frecuencia en un campo de tabla de base de datos | Combinar valores simples para crear expresiones compuestas | Este libro enfatiza constantemente cuán importante es la estructura de la base de datos para mantener la integridad de una base de datos.

  • Expresiones complejas con significado

    En este capítulo... | Caso de uso de expresiones condicionales | Conversión de un elemento de datos de un tipo de datos a otro | Ahorre tiempo de entrada de datos con expresiones con valor récord | En el Capítulo 2, se hizo referencia a SQL como un sublenguaje de datos.

  • "Disparando" a los datos correctos

    En este capítulo... | Especificación de tablas requeridas | Separación de las líneas necesarias de todas las demás | Creación de cláusulas where efectivas | Cómo trabajar con valores nulos | Creación de expresiones compuestas con conectores lógicos | Agrupar el resultado de la consulta por columna

  • Operadores relacionales

    En este capítulo... | Fusión de tablas con estructura similar | Fusión de tablas con diferente estructura | Obtener los datos correctos de varias tablas | SQL es un lenguaje de consulta utilizado en bases de datos relacionales.

  • Uso de consultas anidadas

    En este capítulo… | Recuperación de datos de varias tablas con una sola instrucción SQL | Encontrar elementos de datos comparando un valor de una tabla con un conjunto de valores de otra | Encontrar elementos de datos comparando un valor de una tabla con un solo valor seleccionado usando una declaración de selección de otra

  • Consultas recursivas

  • Seguridad de la base de datos

    En este capítulo... | Control de acceso a la tabla de la base de datos | Tomar la decisión de otorgar acceso | Otorgamiento de permisos de acceso | Revocación de Autorizaciones de Acceso | Prevención de intentos de acceso no autorizado

  • Protección de Datos

    En este capítulo... | Cómo evitar la corrupción de la base de datos | Problemas Causados ​​por Operaciones Concurrentes | Resolviendo estos problemas con mecanismos SQL | Establecer el nivel de seguridad requerido con el comando de transacción set

  • Uso de SQL en aplicaciones

    En este capítulo... | SQL en la aplicación | Compartiendo SQL con lenguajes procedimentales | Cómo evitar la incompatibilidad | Código SQL incrustado en código de procedimiento | Llamar a módulos SQL desde código de procedimiento | Llamada SQL desde la herramienta RAD | En los capítulos anteriores, hemos analizado principalmente los comandos SQL de forma aislada, es decir, se formuló una tarea de procesamiento de datos y se creó una consulta SQL para ello.

  • ODBC y JDBC

    En este capítulo… | Definición ODBC | Descripción de piezas ODBC | Uso de ODBC en un entorno cliente/servidor | Uso de ODBC en Internet | Uso de ODBC en redes de área local | Uso de JDBC | Cada año, las computadoras de una organización o varias organizaciones diferentes están cada vez más conectadas entre sí. Por lo tanto, existe la necesidad de establecer un acceso compartido a las bases de datos a través de la red.

  • SQL:2003 y XML

    En este capítulo... | Uso de SQL con XML | XML, bases de datos e Internet | Una de las características nuevas más importantes del lenguaje SQL:2003 es la compatibilidad con archivos de lenguaje de marcado extensible (XML), que se están convirtiendo cada vez más en el estándar universal para el intercambio de datos entre plataformas heterogéneas.

  • Cursores

    En este capítulo… | Alcance del cursor en una declaración de declaración | Apertura del cursor | Muestreo de datos de fila | Cursor cerrar | SQL se diferencia de la mayoría de los lenguajes de programación más populares en que realiza operaciones simultáneamente en los datos de todas las filas de una tabla, mientras que los lenguajes de procedimiento procesan los datos fila por fila.

  • La mayoría de las aplicaciones web modernas interactúan con las bases de datos, generalmente usando un lenguaje llamado SQL. Por suerte para nosotros, este idioma es muy fácil de aprender. En este artículo, veremos simples sql solicitudes y aprender a usarlas para interactuar con Base de datos mysql.

    ¿Que necesitas?

    SQL (lenguaje de consulta estructurado) un lenguaje especialmente diseñado para interactuar con sistemas de gestión de bases de datos como MySQL, Oracle, Sqlite y otros... Para realizar sql solicitudes en este artículo, le aconsejo que instale mysql a la computadora local. También recomiendo usar phpMyAdmin como interfaz visual.

    Todo esto está disponible en el Denver favorito de todos. Creo que todo el mundo debería saber qué es y dónde conseguirlo :). Poder de lo contrario, use WAMP o MAMP.

    Denver tiene una mysql consola. Lo usaremos.

    CREAR BASE DE DATOS:creación de base de datos

    Aquí está nuestra primera petición. Crearemos nuestra primera base de datos para seguir trabajando.

    Para empezar, abre mysql consola e iniciar sesión. Para WAMP la contraseña predeterminada está vacía. Eso no es nada :). Para MAMP - "raíz". Denver necesita ser aclarado.

    Después de iniciar sesión, ingrese la siguiente línea y haga clic en Ingresar:

    CREAR BASE DE DATOS my_first_db;

    Tenga en cuenta que se agrega un punto y coma (;) al final de la consulta, al igual que en otros idiomas.

    También comandos en SQL distingue mayúsculas y minúsculas. Las escribimos en mayúsculas.

    Opciones solamente: conjunto de caracteresy Colación

    Si desea instalar conjunto de caracteres (juego de caracteres) y colación (comparación) pueden escribir el siguiente comando:

    CREAR BASE DE DATOS my_first_db CONJUNTO DE CARACTERES POR DEFECTO utf8 COLLATE utf8_general_ci;

    Encuentre una lista de juegos de caracteres compatibles con MySQL.

    MOSTRAR BASES DE DATOS:enumera todas las bases de datos

    Este comando se utiliza para mostrar todas las bases de datos disponibles.

    SOLTAR BASE DE DATOS:borrando la base de datos

    Puede eliminar una base de datos existente con esta consulta.

    Tenga cuidado con este comando ya que se ejecuta sin previo aviso. Si hay datos en su base de datos, todos serán eliminados.

    USAR:Selección de base de datos

    Técnicamente, esto no es una consulta, sino un operador, y no requiere un punto y coma al final.

    Le dice a MySQL seleccione una base de datos para trabajar de forma predeterminada para la sesión actual. Ahora estamos listos para crear tablas y hacer otras cosas con la base de datos.

    ¿Qué es una tabla en una base de datos?

    Puede representar una tabla en la base de datos como archivo Excel.

    Al igual que en la imagen, las tablas tienen nombres de columnas, filas e información. Vía sql consultas podemos crear dichas tablas. También podemos agregar, leer, actualizar y eliminar información.

    CREAR MESA: crear una tabla

    C Con esta consulta, podemos crear tablas en la base de datos. Desafortunadamente la documentación mysql no muy claro para los novatos en este tema. La estructura de este tipo de solicitud puede ser muy compleja, pero comenzaremos con una sencilla.

    La siguiente consulta creará una tabla con 2 columnas.

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

    Tenga en cuenta que podemos escribir nuestras consultas en varias líneas y con tabulaciones para sangría.

    La primera línea es simple. Simplemente creamos una tabla llamada "usuarios". A continuación, entre paréntesis, separados por comas, hay una lista de todas las columnas. Después de cada nombre de columna, tenemos tipos de información como VARCHAR o DATE.

    VARCHAR(20) significa que la columna es de tipo cadena y puede tener un máximo de 20 caracteres. DATE también es un tipo de información que se utiliza para almacenar fechas en este formato: "YYYY - MM-DD".

    CLAVE PRIMARIA ( Clave primariah)

    Antes de ejecutar la siguiente consulta, también debemos incluir una columna para "user_id", que será nuestra clave principal. Puede pensar en PRIMARY KEY como información que se usa para identificar cada fila en una tabla.

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

    EN T hace un tipo entero de 32 bits (como números). AUTOINCREMENTO genera automáticamente un nuevo valor IDENTIFICACIÓN cada vez que añadimos nuevas filas de información. Esto no es obligatorio, pero facilita todo el proceso.

    Esta columna no tiene que ser un valor entero, pero se usa más comúnmente. Tener una clave principal también es opcional, pero se recomienda para la arquitectura y el rendimiento de la base de datos.

    Hagamos una consulta:

    MOSTRAR TABLAS:mostrar todas las tablas

    Esta consulta le permite obtener una lista de las tablas que se encuentran en la base de datos.

    EXPLIQUE:Mostrar la estructura de la tabla

    Puede utilizar esta consulta para mostrar la estructura de una tabla existente.

    Las columnas se muestran con todas las propiedades.

    MESA PLEGABLE:borrar tabla

    Al igual que DROP DATABASES, esta consulta descarta la tabla y su contenido sin previo aviso.

    ALTERAR TABLA: mesa de cambio

    Esta consulta también puede contener una estructura compleja debido a la mayor cantidad de cambios que puede realizar en la tabla. Veamos ejemplos.

    (si eliminó la tabla en el último paso, créela nuevamente para las pruebas)

    AÑADIR UNA COLUMNA

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

    Debido a la buena legibilidad de SQL, creo que no tiene sentido explicarlo en detalle. Estamos agregando una nueva columna "correo electrónico" después de "nombre de usuario".

    ELIMINAR UNA COLUMNA

    También fue muy fácil. Utilice esta consulta con precaución ya que los datos pueden eliminarse sin previo aviso.

    Restaure la columna que acaba de eliminar para seguir experimentando.

    HACER UN CAMBIO A UNA COLUMNA

    En ocasiones, es posible que desee realizar cambios en las propiedades de una columna y no es necesario que la elimine por completo para hacerlo.

    Esta consulta cambió el nombre de la columna de usuario a "user_name" y cambió su tipo de VARCHAR(20) a VARCHAR(30). Tal cambio no debería cambiar los datos en la tabla.

    INSERTAR: Agregar información a una tabla

    Agreguemos información a la tabla usando la siguiente consulta.

    Como puede ver, VALUES() contiene una lista de valores separados por comas. Todos los valores están encerrados en columnas individuales. Y los valores deben estar en el orden de las columnas que se definieron cuando se creó la tabla.

    Tenga en cuenta que el primer valor es NULL para el campo PRIMARY KEY llamado "user_id". Hacemos esto para que el ID se genere automáticamente, ya que la columna tiene la propiedad AUTO_INCREMENT. Cuando se agrega información por primera vez, el ID será 1. La siguiente fila será 2, y así sucesivamente...

    OPCIÓN ALTERNATIVA

    Hay otra opción de consulta para agregar filas.

    Esta vez usamos la palabra clave SET en lugar de VALUES y no tiene paréntesis. Hay varios matices:

    La columna se puede omitir. Por ejemplo, no asignamos un valor a "user_id", que obtendrá su valor AUTO_INCREMENT de forma predeterminada. Si omite una columna VARCHAR, se agregará una cadena vacía.

    Cada columna debe ser referida por su nombre. Debido a esto, se pueden mencionar en cualquier orden, a diferencia de la versión anterior.

    ALTERNATIVA 2

    Aquí hay otra opción.

    Nuevamente, dado que hay referencias al nombre de la columna, puede especificar los valores en cualquier orden.

    LAST_INSERT_ID()

    Puede usar esta consulta para obtener el ID que fue AUTO_INCREMENT para la última fila de la sesión actual.

    AHORA()

    Ahora es el momento de mostrarle cómo puede usar una función de MySQL en las consultas.

    La función NOW() devuelve la fecha actual. Entonces puede usarlo para establecer automáticamente la fecha de una columna a la actual cuando inserta una nueva fila.

    Tenga en cuenta que recibimos 1 advertencia, pero ignórela. La razón de esto es que NOW() también sirve para mostrar información temporal.

    SELECCIONE: Lectura de datos de una tabla

    Si añadimos información a una tabla, entonces sería lógico aprender a leerla desde allí. Aquí es donde la consulta SELECT nos ayudará.

    A continuación se muestra la consulta SELECT más simple posible para leer una tabla.

    En este caso, el asterisco (*) significa que hemos solicitado todos los campos de la tabla. Si solo desea ciertas columnas, la consulta se vería así.

    CondiciónDONDE

    La mayoría de las veces, no estamos interesados ​​en todas las columnas, sino solo en algunas. Por ejemplo, supongamos que solo necesitamos la dirección de correo electrónico del usuario "nettuts".

    DONDE le permite establecer condiciones en una consulta y realizar selecciones detalladas.

    Tenga en cuenta que la igualdad usa un signo igual (=) en lugar de dos como en la programación.

    También puedes usar comparaciones.

    AND u OR se pueden utilizar para combinar condiciones:

    Tenga en cuenta que los valores numéricos no deben estar entre comillas.

    EN()

    Esto es útil para muestrear en múltiples valores.

    ME GUSTA

    Le permite hacer solicitudes de "comodín"

    El signo % se utiliza como "comodín". Es decir, en su lugar puede ser cualquier cosa.

    CondiciónORDENAR POR

    Si desea obtener el resultado de forma ordenada por algún criterio

    El orden predeterminado es ASC (de menor a mayor). Para el reverso, se usa DESC.

    LÍMITE... COMPENSACIÓN...

    Puede limitar el número de resultados que recibe.

    LIMIT 2 solo toma los 2 primeros resultados. LIMIT 1 OFFSET 2 obtiene 1 resultado después de los primeros 2. LIMIT 2, 1 significa lo mismo (solo observe que el desplazamiento viene primero y luego el límite).

    ACTUALIZAR: Realizar cambios en la información de la tabla.

    Esta consulta se utiliza para cambiar información en una tabla.

    En la mayoría de los casos, se usa junto con la cláusula WHERE, ya que lo más probable es que desee realizar cambios en ciertas columnas. Si no hay una cláusula WHERE, los cambios afectarán a todas las filas.

    También puede usar LIMIT para limitar la cantidad de filas que deben modificarse.

    ELIMINAR: Eliminar información de una tabla

    Al igual que ACTUALIZAR, esta consulta se usa con DONDE:

    Para eliminar el contenido de una tabla, simplemente puede hacer esto:

    ELIMINAR DE usuarios;

    Pero es mejor usar TRUNCAR

    Además de eliminar, esta consulta también restablece los valores AUTOINCREMENTO y al agregar filas nuevamente, la cuenta regresiva comenzará desde cero. ELIMINAR no hace esto y la cuenta regresiva continúa.

    Deshabilitar valores de cadena y palabras especiales

    valores de cadena

    Es necesario deshabilitar algunos caracteres ( escapar ), o puede haber problemas.

    Para esto, se utiliza una barra invertida.(\).

    palabras especiales

    porque en mysql hay muchas palabras especiales SELECCIONAR o ACTUALIZAR ), para evitar errores al utilizarlos, se deben utilizar comillas. Pero no citas ordinarias, sino estas(`).

    Es decir, deberá agregar una columna llamada " Eliminar ", tienes que hacerlo así:

    Conclusión

    Gracias por leer hasta el final. Espero que este artículo te haya sido útil. ¡Aún no ha terminado! Continuará:).