Etiquetas

SQL Server (Inicio)


 SQL Server es un sistema de gestión de bases de datos relacional (RDBMS, por sus siglas en inglés) desarrollado por Microsoft. Está diseñado para almacenar, procesar y gestionar grandes volúmenes de datos de manera eficiente. SQL Server utiliza el lenguaje SQL (Structured Query Language) para interactuar con las bases de datos, y proporciona herramientas adicionales para análisis, informes, y administración.

Características principales:

  1. Motor de base de datos relacional:

    • Permite almacenar datos en tablas relacionales y ejecutar consultas SQL para manipularlos y analizarlos.
  2. Compatibilidad con T-SQL:

    • Utiliza una variante de SQL llamada Transact-SQL (T-SQL), que incluye características adicionales como control de flujo, manejo de errores, y variables.
  3. Altamente escalable:

    • Es capaz de manejar desde pequeñas bases de datos locales hasta sistemas empresariales con millones de registros.
  4. Seguridad:

    • Soporta autenticación integrada con Windows y funciones avanzadas como encriptación y control de accesos.
  5. Funciones avanzadas:

    • Integración con herramientas de análisis como SQL Server Analysis Services (SSAS).
    • Generación de reportes con SQL Server Reporting Services (SSRS).
    • Capacidades de integración de datos con SQL Server Integration Services (SSIS).
  6. Soporte para datos no estructurados:

    • Desde versiones más recientes, soporta almacenamiento y consultas de datos JSON, XML, y tipos de datos geoespaciales.
  7. Alta disponibilidad y recuperación:

    • Características como replicación, Always On Availability Groups, y recuperación ante desastres.
  8. Entorno de desarrollo integrado:

    • Generalmente se administra a través de SQL Server Management Studio (SSMS) o herramientas más modernas como Azure Data Studio.

Ediciones de SQL Server:

SQL Server se ofrece en diferentes ediciones para distintos propósitos, como:

  • Enterprise: Para aplicaciones críticas de gran escala.
  • Standard: Funciones básicas para la mayoría de las empresas.
  • Express: Versión gratuita con capacidades limitadas.
  • Developer: Gratuita para desarrollo y pruebas, pero no para producción.

Casos de uso:

  • Gestión de datos empresariales.
  • Aplicaciones web y móviles que requieren una base de datos en el backend.
  • Almacenamiento de datos para análisis y generación de reportes.
  • Soluciones de inteligencia empresarial (BI).

La interfaz gráfica de usuario más comúnmente utilizada para interactuar con SQL Server es SQL Server Management Studio (SSMS). SSMS es una herramienta de administración que permite a los usuarios gestionar, configurar y consultar bases de datos en un entorno gráfico fácil de usar.

Principales componentes de la interfaz gráfica de SSMS:

  1. Explorador de objetos (Object Explorer):

    • Aparece en el lado izquierdo de la ventana.
    • Muestra una jerarquía de los servidores conectados y sus componentes, como bases de datos, tablas, vistas, procedimientos almacenados, usuarios, etc.
    • Permite navegar y realizar acciones administrativas (por ejemplo, crear tablas, hacer copias de seguridad, administrar permisos).
  2. Panel de consultas (Query Editor):

    • El área principal donde se escriben y ejecutan comandos SQL.
    • Ofrece características como:
      • Coloreado de sintaxis.
      • Sugerencias automáticas (IntelliSense).
      • Posibilidad de ejecutar comandos parciales o completos.
    • Muestra los resultados de las consultas en una sección inferior.
  3. Menús y barras de herramientas:

    • Incluyen opciones comunes como abrir, guardar archivos, ejecutar consultas, administrar conexiones a servidores, entre otras.
    • Barra de herramientas adicional para tareas frecuentes, como detener la ejecución de una consulta o abrir nuevos paneles.
  4. Panel de resultados:

    • Aparece en la parte inferior del panel de consultas después de ejecutar una consulta.
    • Muestra resultados en formato tabular, mensajes de error, o estadísticas como el tiempo de ejecución.
  5. Explorador de plantillas (Template Explorer):

    • Contiene fragmentos de código predefinidos para tareas comunes, como crear tablas, procedimientos almacenados o vistas.
    • Permite reutilizar y personalizar scripts SQL.
  6. Explorador de soluciones (Solution Explorer):

    • Una herramienta opcional que organiza proyectos de base de datos y scripts SQL.
    • Útil para desarrolladores que trabajan con grandes conjuntos de archivos.
  7. Panel de propiedades:

    • Muestra información adicional sobre el objeto seleccionado, como el nombre, el esquema, el tipo de datos, etc.
  8. Ventana de mensajes:

    • Presenta mensajes informativos, advertencias y errores relacionados con la ejecución de comandos SQL.
  9. Diagramas de base de datos:

    • Permiten crear y editar diagramas visuales de las relaciones entre tablas.
    • Facilitan la comprensión del diseño de la base de datos.
  10. Asistentes y herramientas adicionales:

    • Incluyen asistentes para tareas comunes como la importación/exportación de datos, generación de scripts, y configuración de copias de seguridad.

Cómo interactuar con SSMS:

  • Navegación: Se puede explorar visualmente las bases de datos y sus componentes.
  • Administración: Permite realizar tareas como crear usuarios, configurar permisos, o realizar respaldos de bases de datos.
  • Escritura de consultas: Los usuarios pueden escribir y ejecutar consultas SQL directamente en el editor de consultas.
  • Personalización: Los paneles se pueden mover, acoplar o cerrar según las preferencias del usuario.

SSMS es una herramienta completa para administradores de bases de datos y desarrolladores, proporcionando una experiencia gráfica amigable que complementa las funcionalidades avanzadas de SQL Server.


SQL Server Management Studio (SSMS) utiliza el lenguaje SQL porque es la forma estándar y universal de interactuar con bases de datos relacionales, incluido Microsoft SQL Server. SSMS es una herramienta gráfica que facilita la gestión y administración de bases de datos, pero debajo de esta interfaz, todas las operaciones que realiza se ejecutan mediante comandos SQL.

El lenguaje SQL (Structured Query Language) es un lenguaje estándar utilizado para interactuar con bases de datos relacionales. SQL permite realizar diversas operaciones sobre los datos almacenados, como consultar, insertar, actualizar y eliminar información, además de gestionar la estructura de las bases de datos.

Componentes del lenguaje SQL

SQL se divide en varios subconjuntos, cada uno con un propósito específico:

  1. DQL (Data Query Language):

    • Consultar datos de las tablas.
    • Ejemplo: SELECT.
  2. DML (Data Manipulation Language):

    • Manipular datos almacenados.
    • Ejemplos: INSERT, UPDATE, DELETE.
  3. DDL (Data Definition Language):

    • Definir y gestionar la estructura de la base de datos.
    • Ejemplos: CREATE, ALTER, DROP.
  4. DCL (Data Control Language):

    • Controlar accesos y permisos.
    • Ejemplos: GRANT, REVOKE.
  5. TCL (Transaction Control Language):

    • Gestionar transacciones.
    • Ejemplos: COMMIT, ROLLBACK.

SQL Server utiliza comandos de lenguaje SQL estándar, junto con características específicas para la gestión de bases de datos. A continuación, te detallo algunos comandos básicos organizados por categorías:

Gestión de bases de datos

  • Crear una base de datos:

    CREATE DATABASE nombre_base_datos;
  • Seleccionar una base de datos:

    USE nombre_base_datos;
  • Eliminar una base de datos:

    DROP DATABASE nombre_base_datos;

Gestión de tablas

  • Crear una tabla:

    CREATE TABLE nombre_tabla ( columna1 tipo_dato CONSTRAINTS, columna2 tipo_dato CONSTRAINTS, ... );
  • Listar tablas en una base de datos:

    SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE';
  • Modificar una tabla (agregar, eliminar o modificar columnas):

    • Agregar una columna:
      ALTER TABLE nombre_tabla ADD nombre_columna tipo_dato;
    • Eliminar una columna:
      ALTER TABLE nombre_tabla DROP COLUMN nombre_columna;
    • Modificar una columna:
      ALTER TABLE nombre_tabla ALTER COLUMN nombre_columna nuevo_tipo_dato;
  • Eliminar una tabla:

    DROP TABLE nombre_tabla;
Con la creacion de tablas es necesario conocer los tipos de datos que se pueden utilizar, mas adelante se mencionaran.

Uniones (Joins)

INNER JOIN (Registros coincidentes en ambas tablas)

SELECT t1.columna, t2.columna FROM tabla1 t1 INNER JOIN tabla2 t2 ON t1.columna_comun = t2.columna_comun;

LEFT JOIN (Todos los registros de la tabla izquierda y coincidentes de la derecha)

SELECT t1.columna, t2.columna FROM tabla1 t1 LEFT JOIN tabla2 t2 ON t1.columna_comun = t2.columna_comun;

RIGHT JOIN (Todos los registros de la tabla derecha y coincidentes de la izquierda)

SELECT t1.columna, t2.columna FROM tabla1 t1 RIGHT JOIN tabla2 t2 ON t1.columna_comun = t2.columna_comun;

FULL OUTER JOIN (Todos los registros de ambas tablas, coincidentes o no)

SELECT t1.columna, t2.columna FROM tabla1 t1 FULL OUTER JOIN tabla2 t2 ON t1.columna_comun = t2.columna_comun;

Operadores de conjuntos

UNION (Combina resultados sin duplicados)

SELECT columna FROM tabla1 UNION SELECT columna FROM tabla2;

UNION ALL (Combina resultados incluyendo duplicados)

SELECT columna FROM tabla1 UNION ALL SELECT columna FROM tabla2;

INTERSECT (Registros comunes entre dos consultas)

SELECT columna FROM tabla1 INTERSECT SELECT columna FROM tabla2;

EXCEPT (Registros de la primera consulta que no están en la segunda)

SELECT columna FROM tabla1 EXCEPT SELECT columna FROM tabla2;

Comparaciones y filtros

Operadores lógicos

  • Igualdad: =
  • Desigualdad: <> o !=
  • Mayor que / menor que: > / <
  • Mayor o igual / menor o igual: >= / <=

Operadores de comparación

  • BETWEEN:
    SELECT * FROM nombre_tabla WHERE columna BETWEEN valor1 AND valor2;
  • IN:
    SELECT * FROM nombre_tabla WHERE columna IN (valor1, valor2, valor3);
  • LIKE (búsqueda de patrones):
    • Contiene: %valor%
    • Empieza con: valor%
    • Termina con: %valor
    SELECT * FROM nombre_tabla WHERE columna LIKE '%patron%';
  • IS NULL / IS NOT NULL:
    SELECT * FROM nombre_tabla WHERE columna IS NULL;

Agrupaciones y funciones de agregación

Funciones de agregación

  • Suma:
    SELECT SUM(columna) FROM nombre_tabla;
  • Promedio:
    SELECT AVG(columna) FROM nombre_tabla;
  • Contar registros:
    SELECT COUNT(*) FROM nombre_tabla;
  • Valor mínimo/máximo:
    SELECT MIN(columna), MAX(columna) FROM nombre_tabla;

Agrupaciones con GROUP BY

SELECT columna, COUNT(*) FROM nombre_tabla GROUP BY columna;

Filtros con HAVING (para agrupaciones)

SELECT columna, COUNT(*) FROM nombre_tabla GROUP BY columna HAVING COUNT(*) > 5;

Orden y límites

  • Ordenar resultados:

    SELECT * FROM nombre_tabla ORDER BY columna ASC; -- Ascendente SELECT * FROM nombre_tabla ORDER BY columna DESC; -- Descendente
  • Limitar resultados:

    SELECT TOP 10 * FROM nombre_tabla; -- Primeros 10 registros

Consultas y manipulación de datos

  • Seleccionar datos:

    SELECT columnas FROM nombre_tabla WHERE condiciones;
  • Insertar datos:

    INSERT INTO nombre_tabla (columna1, columna2, ...) VALUES (valor1, valor2, ...);
  • Actualizar datos:

    UPDATE nombre_tabla SET columna1 = valor1, columna2 = valor2, ... WHERE condiciones;
  • Eliminar datos:

    DELETE FROM nombre_tabla WHERE condiciones;

Gestión de usuarios

  • Crear un usuario:

    CREATE LOGIN nombre_usuario WITH PASSWORD = 'contraseña'; CREATE USER nombre_usuario FOR LOGIN nombre_usuario;
  • Asignar permisos:

    GRANT permiso ON objeto TO nombre_usuario;
  • Eliminar un usuario:

    DROP USER nombre_usuario; DROP LOGIN nombre_usuario;

Funciones y utilidades

  • Obtener el listado de bases de datos:

    SELECT name FROM sys.databases;
  • Obtener estructura de una tabla:

    EXEC sp_columns nombre_tabla;
  • Realizar una copia de seguridad:

    BACKUP DATABASE nombre_base_datos TO DISK = 'ruta_backup.bak';
  • Restaurar una base de datos:

    RESTORE DATABASE nombre_base_datos FROM DISK = 'ruta_backup.bak';

Indices

  • Crear un índice:

    CREATE INDEX nombre_indice ON nombre_tabla (columna);
  • Eliminar un índice:

    DROP INDEX nombre_indice ON nombre_tabla;

Transacciones y control

  • Iniciar una transacción:

    BEGIN TRANSACTION;
  • Confirmar una transacción:

    COMMIT;
  • Revertir una transacción:

    ROLLBACK;
  • Punto de guardado dentro de una transacción:

    SAVE TRANSACTION nombre_punto; ROLLBACK TRANSACTION nombre_punto;

Procedimientos almacenados

  • Crear un procedimiento almacenado:
    CREATE PROCEDURE nombre_procedimiento @parametro1 tipo_dato, @parametro2 tipo_dato AS BEGIN -- Lógica aquí SELECT * FROM nombre_tabla WHERE columna = @parametro1; END;
  • Ejecutar un procedimiento almacenado:
    EXEC nombre_procedimiento @parametro1 = valor1, @parametro2 = valor2;
  • Eliminar un procedimiento almacenado:
    DROP PROCEDURE nombre_procedimiento;

Funciones definidas por el usuario

  • Crear una función escalar:

    CREATE FUNCTION nombre_funcion(@parametro tipo_dato) RETURNS tipo_dato AS BEGIN RETURN (SELECT columna FROM nombre_tabla WHERE columna = @parametro); END;
  • Crear una función con valores de tabla:

    CREATE FUNCTION nombre_funcion(@parametro tipo_dato) RETURNS TABLE AS RETURN ( SELECT * FROM nombre_tabla WHERE columna = @parametro );
  • Eliminar una función:

    DROP FUNCTION nombre_funcion;

Vistas

  • Crear una vista:

    CREATE VIEW nombre_vista AS SELECT columna1, columna2 FROM nombre_tabla WHERE condiciones;
  • Actualizar datos a través de una vista (si es posible):

    UPDATE nombre_vista SET columna = valor WHERE condiciones;
  • Eliminar una vista:

    DROP VIEW nombre_vista;

Optimización y consultas complejas

  • Utilizar índices con hints de consulta:

    SELECT * FROM nombre_tabla WITH (INDEX(nombre_indice));
  • Consulta recursiva (CTE - Common Table Expressions):

    WITH CTE_Nombre AS ( SELECT columna1, columna2 FROM nombre_tabla WHERE condiciones UNION ALL SELECT columna1, columna2 FROM nombre_tabla_otro WHERE condiciones ) SELECT * FROM CTE_Nombre;
  • Particionar consultas (OVER y WINDOW FUNCTIONS):

    SELECT columna, ROW_NUMBER() OVER (PARTITION BY columna_categoria ORDER BY columna_orden) AS fila FROM nombre_tabla;

Triggers

  • Crear un trigger:
    CREATE TRIGGER nombre_trigger ON nombre_tabla AFTER INSERT, UPDATE, DELETE AS BEGIN -- Lógica aquí PRINT 'Acción ejecutada en la tabla'; END;
  • Eliminar un trigger:
    DROP TRIGGER nombre_trigger;

Administración avanzada

  • Recompilar una tabla para optimizar:

    DBCC DBREINDEX('nombre_tabla');
  • Actualizar estadísticas de una tabla:

    UPDATE STATISTICS nombre_tabla;
  • Ver el plan de ejecución de una consulta:

    SET SHOWPLAN_TEXT ON; SELECT * FROM nombre_tabla; SET SHOWPLAN_TEXT OFF;

Seguridad y auditoría

  • Auditar actividad en una base de datos:

    CREATE SERVER AUDIT nombre_audit TO FILE (FILEPATH = 'C:\ruta_audit\'); ALTER SERVER AUDIT nombre_audit WITH (STATE = ON);
  • Ver roles y permisos asignados:

    SELECT * FROM sys.database_permissions;

Gestión de particiones

  • Crear una función de partición:

    CREATE PARTITION FUNCTION nombre_funcion (tipo_dato) AS RANGE LEFT FOR VALUES (valor1, valor2, valor3);
  • Crear un esquema de partición:

    CREATE PARTITION SCHEME nombre_esquema AS PARTITION nombre_funcion ALL TO ([PRIMARY]);

Backups avanzados

  • Backup diferencial:

    BACKUP DATABASE nombre_base_datos TO DISK = 'ruta_backup.bak' WITH DIFFERENTIAL;
  • Backup con compresión:

    BACKUP DATABASE nombre_base_datos TO DISK = 'ruta_backup_comprimido.bak' WITH COMPRESSION;