Master en SQL Server
Master en SQL Server
Requisitos
1 3
Guías telefónicas Bibliotecas
2 4
Archivos personales Historial médico
¿Qué son las Bases de Datos?
Banco de Datos
Electrónica
60 Computación
¿Qué son las Bases de Datos?
Banco de Datos
Aplicaciones Sistemas
personales empresariales
Tipos de Bases de Datos
Tipos de Bases de Datos
Inventario
SQL Ventas
Finanzas
Tipos de Bases de Datos
Ventajas Desventajas
≠
Bases de Datos No Relacionales
SQL API
Las Bases de Datos No Relacionales NO son estructuradas,
es decir no tienen un estructura bien definida.
Tipos de Bases de Datos
Documentales Columnas
Tipos de Bases de Datos
Ventajas Desventajas
Tabla
CLIENTES
nombre paterno materno fecha nacimiento direccion ciudad
Campo o
Columna
SQL
(Structured Query Language)
SQL
(Structured Query Language)
SEQUEL
SQL
SQL
(Structured Query Language)
(70’s)
1974 - Primer sistema de gestión de bases de datos
relacional(IBM)
System R
SQL
(Structured Query Language)
IBM ⟶ SQL
1977
(Relational Software, Inc)
SQL
(Structured Query Language)
80
American National Standards Institute (ANSI)
90
1995 – MySQL (PHP)
1996 – PostgreSQL
SQL
(Structured Query Language)
2000 – SQLite
2009 – MariaDB
SQL
(Structured Query Language)
DDL
Lenguaje de Definición de Datos
DML
Lenguaje de Manipulación de Datos
DML
Lenguaje de Manipulación de Datos
DCL
Lenguaje de Control de Datos
TCL
Lenguaje de control de transacciones
Control de Flujo
IF ELSE WHILE
SQL
(Structured Query Language)
Álgebra Relacional
Álgebra Relacional
SELECT col1, col2, …, coln
FROM tablaa
WHERE condicióna
UNION Unión de Conjuntos
Álgebra Relacional
SELECT col1, col2, …, coln
FROM tablaa
WHERE condicióna
INTERSECT Intersección de Conjuntos
Álgebra Relacional
SELECT col1, col2, …, coln
FROM tablaa
WHERE condicióna
EXCEPT Diferencia de Conjuntos
Álgebra Relacional
Álgebra Relacional
PL/SQL
Transact-SQL
SQL
(Structured Query Language)
T-SQL
Enterprise Estándar
Express Developer
Instancia administrada
de Azure SQL
Microsoft Analytics Platform System
¿Qué es Microsoft SQL Server?
SQL Server
Management
Studio (SSMS)
Los Tipos de Datos son utilizados para definir el tipo de información que puede
almacenarse en una columna de una Tabla.
Cada columna en una Tabla debe tener un Tipo de Datos específico que
determine el formato y el rango de valores que puede contener.
Introducción a los Tipos de Datos
INT DECIMAL(p, s)
4 Bytes 1 al 9 → 5 Bytes 20 al 28 → 13 Bytes
BIT
1 Byte
“1” o “0”
Introducción a los Tipos de Datos
TIME CHAR(n)
5 Bytes Longitud Fija
Formato: hh:mm:ss[.nnnnnn] Valor de n: 1 hasta 8000
Storage: n Bytes
DATE
Donde “n” especifica el tamaño de la columna
3 Bytes en “Bytes”.
Formato: yyyy-MM-dd
VARCHAR(n)
DATETIME Longitud Variable
Caracteristicas:
❖ Sólo se permite una Primary Key por tabla.
Isabel Campos Torres 01/01/2000 Jr. Las flores 520 999999999 [email protected]
Isabel Campos Torres 01/01/2000 Jr. Las flores 520 999999999 [email protected]
101 Isabel Campos Torres 01/01/2000 Jr. Las flores 520 999999999 [email protected]
520 Oscar Gallegos Flores 02/02/2000 Calle Balta 650 988888888 [email protected]
602 Isabel Guillen Morales 03/03/2000 Calle Prado 150 977777777 [email protected]
¿Qué es la Propiedad IDENTITY ?
¿Qué es la Propiedad IDENTITY ?
IDENTITY es una propiedad que se puede aplicar a una columna de una Tabla
para que el motor de base de datos genere automáticamente valores
numéricos únicos para esa columna.
Valor Predeterminado:
valor de inicialización: 1
Incremento: 1
¿Qué es la Propiedad IDENTITY ?
IDENTITY es una propiedad que se puede aplicar a una columna de una Tabla
para que el motor de base de datos genere automáticamente valores
numéricos únicos para esa columna.
Valor Predeterminado:
Incremento: 3 Incremento: 1
Una Foreign Key o Llaves Foráneas es una columna o conjunto de columnas que
nos permiten establecer un vínculo referencial entre los datos de dos tablas.
Tabla Secundaria
Introducción a Foreign Key
Una Foreign Key o Llaves Foráneas es una columna o conjunto de columnas que
nos permiten establecer un vínculo referencial entre los datos de dos tablas.
Tabla
autorreferencia
Enlace
autorreferencia
Establecer Foreign Key
Diagrama de Base de Datos
Cuando diseña una base de datos, puede utilizar el Diseñador de Bases de Datos
para crear, editar o eliminar tablas, columnas, claves, índices, relaciones y
restricciones.
Diagrama de Base de Datos
Tabla con Primary Key Compuesta
Descripción de la Sección
Instrucción INSERT
La instrucción INSERT INTO se usa principalmente para agregar una o más filas a la Tabla
Sintaxis
La instrucción INSERT INTO se usa principalmente para agregar una o más filas a la Tabla
Sintaxis
La instrucción INSERT INTO se usa principalmente para agregar una o más filas a la Tabla
Sintaxis
La instrucción INSERT INTO se usa principalmente para agregar una o más filas a la Tabla
Sintaxis
La instrucción INSERT INTO se usa principalmente para agregar una o más filas a la Tabla
Sintaxis
La instrucción INSERT INTO se usa principalmente para agregar una o más filas a la Tabla
Sintaxis
La instrucción INSERT INTO se usa principalmente para agregar una o más filas a la Tabla
Sintaxis
La instrucción INSERT INTO se usa principalmente para agregar una o más filas a la Tabla
Sintaxis
Todas las columnas de la Tabla
La instrucción INSERT INTO se usa principalmente para agregar una o más filas a la Tabla
Primary Key
Foreign Key
Columnas Auto-Incrementales
Insertar Registro - Transact SQL
Insertar Registro - Transact SQL
INT → 13
CHAR(n) → 'texto'
DECIMAL → 13 o 13,5
VARCHAR(n) → 'texto'
BIT → 1 o 0
Fecha y hora
Valor NULL
TIME → '13:10:20.123'
DATE → '01-01-2024' o '2024-01-01'
'01/01/2024' o '2024/01/01'
NULL
DATETIME → '01-01-2024 13:10:20.123' ''o0
Insertar Registro a una Tabla
con Foreign Key
Insertar Registro a una Tabla con Foreign Key
Podemos insertar registros donde su valore del campo Foreign Key se encuentren
relacionado con el valor del campo Primary Key.
Productos Categorias
idProducto idCategoria nombre precio stock fechaVencimiento idCategoria nombre descripcion
1 Bebidas
1 1 Gaseosa 5.90 100 01/01/2030
2 Ropa
2 7 Laptop 1500 50 3 Tecnología
Insertar Registro a una Tabla con Foreign Key
Podemos insertar registros donde su valore del campo Foreign Key se encuentren
relacionado con el valor del campo Primary Key.
Productos Categorias
idProducto idCategoria nombre precio stock fechaVencimiento idCategoria nombre descripcion
1 Bebidas
1 1 Gaseosa 5.90 100 01/01/2030
2 Ropa
2 3 Laptop 1500 50 3 Tecnología
Tarea – Sentencias DML(Insert)
Instrucción SELECT
Cláusula DISTINCT
Cláusula WHERE
Cláusula ORDER BY
Cláusula TOP
Cláusula PERCENT
Sintaxis
Sintaxis
Sintaxis
FROM nombre_Tabla
Cláusula WHERE
La cláusula WHERE se utiliza para Filtrar las filas devueltas por una consulta
Sintaxis
SELECT lista_columna
FROM nombre_Tabla
WHERE condición;
Cláusula ORDER BY
Sintaxis
SELECT lista_columna
FROM nombre_Tabla
Sintaxis
SELECT lista_columna
FROM nombre_Tabla
WHERE condición;
Sintaxis
FROM nombre_Tabla
Cláusula PERCENT
Sintaxis
FROM nombre_Tabla
Cláusula WITH TIES
La Cláusula WITH TIES permite incluir las filas en el conjunto de resultados que coinciden
con la última fila.
Sintaxis
FROM nombre_Tabla
Tarea – Sentencias DML(Select)
Tarea – Sentencias DML(Select)
Instrucción UPDATE
La instrucción UPDATE se utiliza para actualizar registros existentes en una tabla en una
base de datos de SQL Server.
Sintaxis
UPDATE nombre_tabla
SET column1 = expresion1,
column2 = expresion2
[WHERE condición]
Tarea – Sentencias DML(Update)
Tarea – Sentencias DML(Update)
Instrucción DELETE
La instrucción DELETE se utiliza para eliminar registros existentes en una tabla en una
base de datos de SQL Server
Sintaxis
[WHERE condición]
Tarea – Sentencias DML(Delete)
Tarea – Sentencias DML(Delete)
Los operadores de comparación son utilizados para comparar valores en una consulta y
devolver un resultado booleano (verdadero o falso) que indica si la comparación es cierta.
UPDATE nombre_tabla
SELECT lista_columna
SET column1 = expresion1,
FROM nombre_Tabla column2 = expresion2
Los operadores de comparación son utilizados para comparar valores en una consulta y
devolver un resultado booleano (verdadero o falso) que indica si la comparación es cierta.
Operadores:
Los operadores lógicos se utilizan para combinar múltiples condiciones en una consulta y
evaluar si se cumplen todas o algunas de ellas. Estos operadores lógicos devuelven el tipo
de datos booleano (verdadero o falso) que indica si la comparación es cierta.
UPDATE nombre_tabla
SELECT lista_columna
SET column1 = expresion1,
FROM nombre_Tabla column2 = expresion2
Los operadores lógicos se utilizan para combinar múltiples condiciones en una consulta y
evaluar si se cumplen todas o algunas de ellas. Estos operadores lógicos devuelven el tipo
de datos booleano (verdadero o falso) que indica si la comparación es cierta.
Operadores:
OR Operador Lógico OR
EXISTS Operador Lógico EXISTS
IN Operador Lógico IN
Los operadores lógicos se utilizan para combinar múltiples condiciones en una consulta y
evaluar si se cumplen todas o algunas de ellas. Estos operadores lógicos devuelven el tipo
de datos booleano (verdadero o falso) que indica si la comparación es cierta.
AND OR NOT
E1 E2 E1 Y E2 E1 E2 E1 O E2 E NOT E
V V V V V V V F
V F F V F V F V
F V F F V V
F F F F F F
Operadores Lógicos
Los operadores lógicos se utilizan para combinar múltiples condiciones en una consulta y
evaluar si se cumplen todas o algunas de ellas. Estos operadores lógicos devuelven el tipo
de datos booleano (verdadero o falso) que indica si la comparación es cierta.
AND OR NOT
E1 E2 E1 Y E2 E1 E2 E1 O E2 E NOT E
V V V V V V V F
V F F V F V F V
F V F F V V
F F F F F F
Operadores Lógicos
Los operadores lógicos se utilizan para combinar múltiples condiciones en una consulta y
evaluar si se cumplen todas o algunas de ellas. Estos operadores lógicos devuelven el tipo
de datos booleano (verdadero o falso) que indica si la comparación es cierta.
AND OR NOT
E1 E2 E1 Y E2 E1 E2 E1 O E2 E NOT E
V V V V V V V F
V F F V F V F V
F V F F V V
F F F F F F
Tarea – Operadores Lógicos
1. Mostrar los Autores que sean del estado de “CA” y la ciudad de “Palo Alto”.
2. Mostrar los títulos donde el precio sea mayor o igual a 20 o menor o igual a 7.
4. Mostrar los Autores que sean del estado de “MD, IN, OR”.
Descripción de la Sección
Operador - “UNION”
Operador - “INTERSECT”
Operador - “EXCEPT”
Operadores de Conjunto
Operadores de Conjunto
Los operadores de Conjuntos se utilizan para combinar dos o más datos similares
presentes en uno, dos o más bases de datos SQL; fusionan el resultado obtenido.
SELECT lista_columna
FROM nombre_Tabla
WHERE condición;
Operadores de Conjunto
Los operadores de Conjuntos se utilizan para combinar dos o más datos similares
presentes en uno, dos o más bases de datos SQL; fusionan el resultado obtenido.
Requisitos:
➢ Cada instrucción SELECT dentro del
SELECT lista_columna operador UNION debe tener el mismo
número de columnas.
Los operadores de Conjuntos se utilizan para combinar dos o más datos similares
presentes en uno, dos o más bases de datos SQL; fusionan el resultado obtenido.
Operadores:
UNION Operador de Conjunto UNION
Operador - “Módulo”
Operadores Aritméticos
Operadores Aritméticos
Los operadores aritméticos se utiliza para realizar cálculos y operaciones aritméticas en los
operandos o los datos presentes en las tablas de la base de datos.
Operadores:
+ Operador Aritmético SUMA
Esquemas(schema)
Sentencia TRUNCATE
Sentencias DDL
Sentencias DDL
Las sentencias DDL (del ingles: Data Definition Language o en español: Lenguaje de Definición de
Datos) son un conjunto de comandos utilizados para definir, modificar y gestionar la estructura de
una base de datos.
Estas sentencias se utilizan para crear, modificar y eliminar objetos en la base de datos, como
tablas, índices, vistas, restricciones y otros elementos que definen la organización y la estructura de
los datos en un sistema de administración de Base de Datos Relacionales(RDBMS).
CREATE
La sentencia CREATE se utiliza para crear nuevos objetos en la base de datos. Estos objetos
pueden ser tablas, vistas, índices, procedimientos almacenados, funciones y otros elementos
que forman parte de la estructura de la base de datos.
Sintaxis:
ALTER
Sintaxis:
DROP
La sentencia DROP se utiliza para eliminar objetos de la base de datos, como tablas, vistas o
índices.
Ten en cuenta que esta acción es irreversible y elimina permanentemente los datos asociados.
Sintaxis:
TRUNCATE
La sentencia TRUNCATE elimina todas las filas de una tabla o particiones específicas de una tabla,
sin registrar las eliminaciones de filas individuales.
TRUNCATE es similar a la declaración DELETE sin la cláusula WHERE; sin embargo, TRUNCATE es
más rápido y utiliza menos recursos del sistema y del registro de transacciones.
Sintaxis:
TRUNCATE TABLE [nombre_objeto];
Tablas
Vistas
Procedimiento Almacenado
Funciones
Índices
Triggers
SQL Server
Database
(Empresa)
ON UPDATE …
ON DELETE …
Las cláusulas admitidas que se pueden realizar al eliminar o actualizar los valores de la “TABLA PRINCIPAL” incluyen:
Al establecer las cláusulas ON UPDATE o ON DELETE en CASCADE, la misma acción realizada en los valores
referenciados de la “TABLA PRINCIPAL” se reflejará en los valores relacionados en la “TABLA SEGUNDARIA”. Por
CASCADE ejemplo, si el valor al que se hace referencia se elimina en la “TABLA PRINCIPAL”, también se eliminan todas las filas
relacionadas en la “TABLA SEGUNDARIA”.
Con esta opción de cláusulas ON UPDATE y ON DELETE, si los valores a los que se hace referencia en la “TABLA
SET NULL PRINCIPAL” se eliminan o modifican, todos los valores relacionados en la “TABLA SEGUNDARIA” se establecen en
valor NULL.
El uso de la opción SET DEFAULT de las cláusulas ON UPDATE y ON DELETE especifica que, si los valores a los que se
SET
hace referencia en la “TABLA PRINCIPAL” se actualizan o eliminan, los valores relacionados en la “TABLA
DEFAULT SEGUNDARIA” con columnas FOREIGN KEY se establecerán en su valor predeterminado.
Crear Tabla - Parte 4
Sintaxis:
No se puede TRUNCAR una tabla a la que hace referencia una clave externa.
Antes de poder TRUNCAR una tabla, debe tener los privilegios necesarios, como ALTER TABLE.
TRUNCAR una tabla es una forma rápida de Borrar registros de una tabla
si no necesita preocuparse por revertirla.
TRUNCATE DELETE
El comando TRUNCATE elimina todas las filas de El comando DELETE es útil para eliminar todas o
una tabla. No podemos usar una cláusula Where filas específicas de una tabla especificada
en esto. mediante una cláusula Where.
El comando TRUNCATE no registra entradas El comando DELETE registra una entrada por
para cada fila eliminada en el registro de cada fila eliminada en el registro de
transacciones. transacciones.
Es más rápido que el comando DELETE. El comando DELETE es más lento que el
comando TRUNCATE.
Descripción de la Sección
Tipos de Datos
Los tipos de datos son una parte fundamental para definir la naturaleza de la información que
puede almacenarse en una base de datos. Estos tipos de datos permiten a SQL Server gestionar y
almacenar datos de manera eficiente, garantizando la integridad y exactitud de la información.
Un tipo de datos define qué tipo de valor puede contener una columna: datos enteros, datos de
caracteres, datos monetarios, datos de fecha y hora, cadenas binarias, etc.
Se requiere que cada columna en una tabla de base de datos tenga un nombre y un tipo de datos.
Un desarrollador de SQL debe decidir qué tipo de datos se almacenarán dentro de cada columna
al crear una tabla. El tipo de datos es una guía para que SQL entienda qué tipo de datos se espera
dentro de cada columna, y también identifica cómo SQL interactuará con los datos almacenados.
Cada tipo de datos tiene su propio uso y características específicas, y la elección del tipo de datos
adecuado es crucial para optimizar el rendimiento y la integridad de las Bases de Datos.
Tipos de Datos
Fecha y Hora
Cadenas Binarias
tinyint smallint
int bigint
^38 ^38
Expresión de intervalo: -10 +1 a 10 -1
decimal(p, s)
Precisión Almacenamiento
1–9 (5 Bytes)
10 – 19 (9 Bytes)
numeric(p, s)
20 – 28 (13 Bytes)
p (precisión) 29 – 38 (17 Bytes)
El número total máximo de dígitos
decimales que se almacenarán.
s (escala)
El número de dígitos decimales que se
almacenarán a la derecha del separador decimal.
Estos Tipos de Datos son idénticos, sólo que tienen nombres diferentes.
Tipos de Datos
bit
Intervalo: 1 ó 0
Storage: 1 bit
Tipos de Datos
smallmoney money
Decimales vs Moneda
Float(n) real
n ⟶ Es el número de bits que se usan para almacenar la mantisa del número de float.
Si se especifica n, debe ser un valor entre 1 y 53. El valor predeterminado de n es 53.
Cadenas de Caracteres
varchar(max)
Donde “n” especifica el tamaño de la columna en “Bytes”.
Longitud Variable
Fecha y Hora
Cadenas Binarias
cursor rowversion
geography Sql_variant
geometry table
hierarchyid uniqueidentifier
json xml
Tipos de Datos
COLLATE(Collation)
Ñ
COLLATE viene
Cada juego de condicionado por la
región donde se vaya a
caracteres es instalar y explotar la
diferente base de datos
Tipos de Datos
COLLATE(Collation)
Creación de la
Base de Datos Instalar servidor
SQL Server
Tipos de Datos
COLLATE(Collation)
DD-MM-YYYY
tinyint decimal
Representa la edad de
Representa el valor
un cliente(18 - 90) que
numérico decimal(5,2).
solicuta un crédito.
5 Bytes
1 Byte
bit
int ⟶ 4 Bytes
Establece si su crédito
se encuentra
disponible o no.
int ⟶ 4 byte 1 bit
1 -> Disponible
char
0 -> No disponible
Verdadero /
Falso
Casuísticas de los Tipos de Datos
Fecha y Hora
date
Almacena la fecha de
registro de un paquete.
3 Bytes
datetime/datetime2
time Almacena la fecha y hora de
la fecha de envio y la fecha
Almacena la hora de de entrega del paquete.
registro de un paquete. 6/7/8 Bytes
5 Bytes
Casuísticas de los Tipos de Datos
Cadenas de Caracteres
Longitud Fija
Longitud
Variable
Casuísticas de los Tipos de Datos
Cadenas de Caracteres
Cadenas de Caracteres
ISBN
978-3-16-148410-0
17 caracteres
char(17) ⟶ 17 bytes
varchar(17) ⟶ 19 bytes
nchar(17) ⟶ 34 bytes
nvarchar(17) ⟶ 36 bytes
Casuísticas de los Tipos de Datos
Cadenas de Caracteres
ISBN
9783161484100
13 caracteres
char(13) ⟶ 13 bytes
bigint ⟶ 8 bytes
Casuísticas de los Tipos de Datos
Cadenas de Caracteres
Longitud Variable
¿Sabemos la longitud del nombre?
Cadenas de Caracteres
Longitud Variable
¿Cuando utilizar Unicode?
nvarchar(30) ⟶ Ideal
Tabla ASCII
Chinese: 你好世界
Japanese: こんにちは世界
Korean: 안녕하세요 세계
Descripción de la Sección
Variable
Ámbito de la Variable
Instrucción EXECUTE
Variables
Variables
Las variables son objetos de almacenamiento temporal que pueden contener datos y se utilizan
dentro de un “Batch o Lote” de instrucciones. Las variables son esenciales para la programación en
T-SQL porque permiten almacenar datos, realizar cálculos y controlar el flujo de ejecución.
Las variables se pueden crear para diferentes tipos de datos y también se les pueden asignar
valores. Además, los valores asignados a las variables se pueden cambiar durante el período de
ejecución. El ciclo de vida de la variable comienza desde el punto en el que se declara y debe
finalizar al final del “Batch o Lote” de instrucciones.
Las variables son siempre locales dentro del “Batch o Lote” de instrucción en el que se declara.
Variables
Sintaxis:
GO
Batches(Lotes)
Batches(Lotes)
Un “Batch o Lote” de instrucción es una colección de una o más instrucciones Transact-SQL (T-
SQL) enviadas al servidor para su ejecución como una sola unidad. Los batches permiten agrupar y
enviar múltiples instrucciones SQL al servidor en una sola operación, lo cual puede mejorar la
eficiencia y la gestión del código SQL.
La instrucción “GO” fue introducido por las herramientas SELECT columna1, columna2, ... columnaN
de Microsoft como una forma de separar declaraciones
por lotes, la instrucción “GO” es compatible con las FROM nombre_tabla
herramientas de Microsoft SQL, pero formalmente no GO
forma parte de otras herramientas.
Variables
Instrucción IF … ELSE
Instrucción CASE
Instrucción WHILE
Instrucción RETURN
Instrucción GOTO
La estructura de control de flujo se refiere a las instrucciones y construcciones que permiten dirigir
la ejecución del código Transact-SQL de acuerdo con condiciones específicas, decisiones lógicas y
bucles.
Estas estructuras permiten controlar cómo se ejecutan las sentencias SQL y cómo se manejan las
condiciones y los errores en los scripts.
Estructuras de Control de Flujos
BEGIN...END IF...ELSE
CASE WHILE
GOTO TRY...CATCH
Estructuras de Control de Flujos
OPERADORES DE COMPARACIÓN
• Es igual a (=)
• Mayor que (>)
• Mayor o igual que (>=) OPERADORES LÓGICOS
• Menor o igual que(<=)
• No es igual a(!= , <>) • Operador Lógico - ”AND”
Funciones Matemáticas
Funciones Lógicas
Funciones de Cadena
Funciones de Conversión
Funciones de Clasificación
Funciones Analíticas
Built-In Functions
(Funciones Integradas)
Configuration Functions Conversión Functions Cryptographic Functions Cursor Functions Data Type Functions
(Funciones de Configuración) (Funciones de Conversión) (Funciones de Criptográficas) (Funciones de Cursor) (Funciones de Tipos de Datos)
Date and Time Functions Graph Functions JSON Functions Mathematical Functions Logical Functions
(Funciones de Fecha y Hora) (Funciones de Grafico) (Funciones JSON) (Funciones Matemáticas) (Funciones Lógicas)
Metadata Functions Ranking Functions Replication Functions Security Functions String Functions
(Funciones de Metadatos) (Funciones de Clasificación) (Funciones de Replicación) (Funciones de Seguridad) (Funciones de Cadena)
System Functions System Statistical Functions Text and Image Functions Trigger Functions
(Funciones del Sistema) (Funciones Estadísticas del Sistema) (Funciones de Texto e Imagen) (Funciones de Desencadenador)
Funciones(Functions)
Built-In Functions
(Funciones Integradas)
Scalar Functions
(Funciones Escalares)
Las funciones escalares son las más parecidas a las funciones que se utilizan dentro de los
lenguajes de programación.
Scalar Functions
(Funciones Escalares)
Las funciones escalares son las más parecidas a las funciones que se utilizan dentro de los
lenguajes de programación.
Scalar Functions
(Funciones Escalares)
Funciones Deterministas
Scalar Functions
(Funciones Escalares)
Funciones Deterministas
LOG10(100) = 2 SQRT(100) = 10
Scalar Functions
(Funciones Escalares)
Funciones NO Deterministas
Scalar Functions
(Funciones Escalares)
Funciones NO Deterministas
GETDATE() CURRENT_TIMESTAMP
NEWID(), NEWSEQUENTIALID()
Funciones Escalares(Scalar Functions)
Scalar Functions
(Funciones Escalares)
1 Valor
1 Valor
“No estamos generando cambios reales sobre la tabla original, solo en la salida”
Funciones Escalares(Scalar Functions)
Scalar Functions
(Funciones Escalares)
Funciones Matemáticas
ABS COS LOG10 SIGN
ACOS COT PI SIN
ASIN DEGREES POWER SQRT
ATAN EXP RADIANS SQUARE
ATN2 FLOOR RAND TAN
CEILING LOG ROUND
Funciones Escalares(Scalar Functions)
Scalar Functions
(Funciones Escalares)
Funciones Lógicas
CHOOSE IIF
COALESCE LEAST
GREATEST NULLIF
Funciones Escalares(Scalar Functions)
Scalar Functions
(Funciones Escalares)
Funciones de Cadena
Scalar Functions
(Funciones Escalares)
Funciones de Conversión
CAST TRY_CAST
CONVERT TRY_CONVERT
PARSE TRY_PARSE
Funciones Escalares(Scalar Functions)
Scalar Functions
(Funciones Escalares)
Esta función devuelve la marca Devuelve la marca de tiempo Devuelve la marca de tiempo
de tiempo del sistema de base del sistema de base de datos del sistema de la base de datos
de datos actual como un actual como un valor datetime actual como un valor datetime.
valor datetime sin el sin el desplazamiento de zona El ajuste de zona horaria de la
desplazamiento de zona horaria de la base de datos. base de datos no está incluido.
horaria de la base de Este valor se deriva del sistema Este valor representa la hora
datos. CURRENT_TIMESTAMP d operativo del equipo donde la UTC actual (Hora universal
eriva este valor del sistema instancia de SQL Server se está coordinada).
operativo del equipo en el que ejecutando.
se ejecuta la instancia de SQL
Server.
date
Devuelve un valor time para la hora Devuelve un valor date que se asigna Devuelve un valor smalldatetime de la
especificada y con la precisión a los valores de año, mes y día fecha y la hora especificadas.
indicada. especificados.
Sintaxis: Sintaxis: Sintaxis:
TIMEFROMPARTS( hour, minute, DATEFROMPARTS( year, month, day ) SMALLDATETIMEFROMPARTS( year,
seconds, fractions, precision ) month, day, hour, minute )
EOMONTH
Sintaxis:
Sintaxis: Sintaxis:
SET DATEFORMAT{ format } sp_helplanguage[ 'language’ ]
mdy, dmy, ymd, ydm, myd y dym En el argumento opcional “language” se debe poner el
idioma alternativo para el que se va a mostrar información.
Establece el idioma de la sesión actual. Esto Devuelve el nombre del idioma actual de la
establece la opción SET DATEFORMAT de forma sesión.
implícita.
Sintaxis: Sintaxis:
SET LANGUAGE{ 'language’ } @@LANGUAGE
El argumento “language” es el nombre del idioma tal como
está almacenado en sys.syslanguages o el procedimiento
almacenado sp_helplanguage.
Funciones(Functions)
Scalar Functions
(Funciones Escalares)
Aggregate Functions
(Funciones de Agregación)
Son funciones especializadas que realizan cálculos sobre grupos de variables y devuelven un
único resultado. A diferencia de las funciones tradicionales, las funciones de agregado trabajan
sobre grupos de filas de datos. Esto permite calcular estadísticas de forma eficaz o generar
información resumida a partir de un conjunto de datos.
Funciones de Agregación
Aggregate Functions
(Funciones de Agregación)
Funciones de Agregación
PER a b c
PER PER
MEX CHI
CHI
1 Valor CHI
CHI
“No estamos generando cambios reales sobre la tabla original, solo en la salida”
Funciones de Agregación
Aggregate Functions
(Funciones de Agregación)
Cláusula GROUP BY
Aggregate Functions
(Funciones de Agregación)
Cláusula GROUP BY
Aggregate Functions
(Funciones de Agregación)
Cláusula HAVING
Aggregate Functions
(Funciones de Agregación)
Cláusula HAVING
Window Functions
(Funciones de Ventana)
Las funciones de ventana realizan cálculos sobre un conjunto de filas relacionadas, pero a
diferencia de las funciones de agregación, no agrupan los resultados en una sola fila, sino que
devuelven un conjunto de valores.
Funciones de Ventana
a b c a b c
Conjunto de Valores PER
PER
PER PER
PER PER
Transformar los datos
MEX MEX
Cláusula OVER
MEX MEX
CHI CHI
CHI CHI
“No estamos generando cambios reales sobre la tabla original, solo en la salida”
Funciones de Ventana
Window Functions
(Funciones de Ventana)
Funciones de Clasificación
DENSE_RANK
NTILE
RANK
ROW_NUMBER
Cláusula OVER
Cláusula OVER
que se aplique la función de ventana asociada. Es decir, la cláusula OVER define una
consulta. Una función de ventana calcula entonces un valor para cada fila de la ventana.
Se puede utilizar la cláusula OVER con funciones para calcular valores agregados tales
Sintaxis:
OVER (
[ PARTITION BY value_expression ]
[ ORDER BY order_by_expression [ASC | DESC] ]
)
Cláusula OVER
Sintaxis:
OVER (
[ PARTITION BY value_expression ]
[ ORDER BY order_by_expression [ASC | DESC] ]
)
Si no se especifica PARTITION BY, la función trata todas las filas del conjunto de resultados de la
DENSE_RANK
consulta como una única partición. La función se aplicará en todas las filas de la partición si no
NTILE especifica la cláusula ORDER BY.
RANK
value_expression solo puede hacer referencia a las columnas disponibles mediante la cláusula
ROW_NUMBER FROM. value_expression no puede hacer referencia a expresiones o alias en la lista de la selección.
... value_expression puede ser una expresión de columna, una subconsulta escalar, una función
escalar o una variable definida por el usuario.
Cláusula OVER
Sintaxis:
OVER (
[ PARTITION BY value_expression ]
[ ORDER BY order_by_expression [ASC | DESC] ]
)
La cláusula ORDER BY dentro de la función OVER( ) se utiliza para definir el orden en el que la función de
ventana procesa las filas dentro de cada partición. Le permite controlar cómo se ordenan los datos antes de que
se realicen los cálculos de la función de ventana.
Si no se especifica, el orden predeterminado es ASC y la función de ventana utilizará todas las filas de la partición.
Funciones de Ventana
Window Functions
(Funciones de Ventana)
Funciones Analíticas
CUME_DIST LEAD
FIRST_VALUE PERCENTILE_CONT
LAG PERCENTILE_DISC
LAST_VALUE PERCENT_RANK
Funciones(Functions)
Funciones Funciones de
escalares Tipo Tabla
Funciones de valor de
tabla en línea
Parámetro
Tipo Objeto
Funciones(Functions)
END;
Funciones(Functions)
SET @cantidad_empleado = (
Bloque de
SELECT COUNT(1)
Ejecución
FROM HumanResources.Employee
WHERE MaritalStatus = @MaritalStatus
)
END;
Funciones(Functions)
SET @cantidad_empleado = (
Bloque de
SELECT COUNT(1)
Ejecución
FROM HumanResources.Employee
WHERE MaritalStatus = @MaritalStatus
)
RETURN @cantidad_empleado;
END;
Funciones(Functions)
SET @cantidad_empleado = (
SELECT COUNT(1)
FROM HumanResources.Employee
WHERE MaritalStatus = @MaritalStatus
)
RETURN @cantidad_empleado;
END;
Funciones(Functions)
RETURN @cantidad_empleado;
END;
Funciones(Functions)
RETURN @cantidad_empleado;
END;
Funciones(Functions)
RETURN @cantidad_empleado;
END;
Funciones(Functions)
RETURN @hipotenusa;
END;
SELECT dbo.calcular_pitagoras(6, 8) = 10
Funciones(Functions)
RETURNS [Table]
Tabla
Funciones(Functions)
RETURNS [Table]
Inicio AS
RETURN(
Bloque de
Ejecución
Instrucción SQL;
);
Funciones(Functions)
SELECT *
FROM Mostrar_Empleados_HorasVacaciones(50)
ORDER BY VacationHours DESC
GO
Bloque de
Ejecución
Insertar filas en la Tabla @NOMBRE
RETURN
END;
Funciones(Functions)
RETURN
END
GO
Funciones(Functions)
RETURN
END
GO
Funciones(Functions)
SELECT *
FROM Lista_Empleados_HorasVacaciones(50)
ORDER BY VacationHours DESC
GO
Tipos de JOINS
En otras palabras, JOINS indica cómo SQL Server debe utilizar los
datos de una tabla para seleccionar las filas de otra tabla..
Tipos de JOINS
X =
Karen Yogurt Hugo Agua
Oscar Dulce
Hugo Agua
Oscar Dulce
Oscar Dulce Oscar Dulce
Tipos de JOINS
Tipos Descripción
Inner Join Inicia con el producto cartesiano; aplica el filtro para que coincidan con filas
(Join Interno) entre cuadros basados en predicado.
Self Join Inicia con el producto cartesiano; aplica el filtro y es una técnica en la cual
(Join consigo mismo) una tabla se une consigo misma.
Tipos de JOINS
Sintaxis:
ANSI SQL-92 ANSI SQL-89
Las Tablas son unidas por la Las Tablas son unidas por comas en
instrucción JOIN en la cláusula FROM la cláusula FROM
No es recomendable: produce productos
cartesianos accidentales.
SELECT . . . SELECT . . .
FROM Table1 <Type Join> Table2 FROM Table1, Table2
ON <on_predicate> WHERE <where_predicate>
Tipos de JOINS
A B A B A B
SELECT <list> FROM SELECT <list> FROM SELECT <list> FROM
TableA A LEFT JOIN TableB B TableA A INNER JOIN TableB B TableA A RIGHT JOIN TableB B
ON A.KEY = B.KEY ON A.KEY = B.KEY ON A.KEY = B.KEY
A B A A B
SELECT <list> FROM SELECT <list> FROM SELECT <list> FROM
TableA A LEFT JOIN TableB B TableA A INNER JOIN TableA B TableA A RIGHT JOIN TableB B
ON A.KEY = B.KEY ON A.KEY = B.COLUMN ON A.KEY = B.KEY
WHERE B.KEY IS NULL WHERE A.KEY IS NULL
A B
A B A B
SELECT <list> FROM SELECT <list> FROM SELECT <list> FROM
TableA A FULL JOIN TableB B TableA A CROSS JOIN TableB B TableA A FULL JOIN TableB B
ON A.KEY = B.KEY ON A.KEY = B.KEY
WHERE A.KEY IS NULL OR B.KEY IS NULL
Cláusula INNER JOIN
Cláusula INNER JOIN
A B
de dos o más tablas basadas en una condición que especifica una
relación entre las columnas de las tablas. La cláusula INNER JOIN
devuelve solo aquellas filas que tienen coincidencias en ambas
tablas según la condición de unión especificada.
SELECT <list> FROM
TableA A INNER JOIN TableB B
ON A.KEY = B.KEY OPCIONAL
<join_type> ::=
[ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } ]
JOIN
PREDETERMINADO
OPCIONAL
Cláusula LEFT JOIN
Cláusula LEFT JOIN
A B LEFT OUTER JOIN se utiliza para combinar filas de dos tablas de manera
que devuelve todas las filas de la tabla de la izquierda (la primera tabla
mencionada) y las filas coincidentes de la tabla de la derecha (la
SELECT <list> FROM
TableA A LEFT JOIN TableB B segunda tabla mencionada). Si no hay ninguna coincidencia en la tabla
ON A.KEY = B.KEY derecha, se devuelven NULL para las columnas de la tabla derecha.
OPCIONAL OPCIONAL
<join_type> ::=
A B
[ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } ]
JOIN
A B RIGHT OUTER JOIN se utiliza para combinar filas de dos tablas de manera
que devuelve todas las filas de la tabla de la derecha (la segunda tabla
mencionada) y las filas coincidentes de la tabla de la izquierda (la primera
SELECT <list> FROM
TableA A RIGHT JOIN TableB B tabla mencionada). Si no hay ninguna coincidencia en la tabla izquierda,
ON A.KEY = B.KEY se devuelven NULL para las columnas de la tabla izquierda.
OPCIONAL OPCIONAL
<join_type> ::=
A B
[ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } ]
JOIN
A B FULL OUTER JOIN se utiliza para combinar filas de dos tablas de manera
que devuelve todas las filas cuando hay una coincidencia en una de las
tablas. El resultado incluirá todas las filas de ambas tablas y, cuando no
SELECT <list> FROM
TableA A FULL JOIN TableB B haya coincidencia, las columnas de la tabla faltante tendrán valores NULL.
ON A.KEY = B.KEY
OPCIONAL OPCIONAL
<join_type> ::=
A B
[ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } ]
JOIN
SELECT <list> FROM combinaciones posibles de filas entre las dos tablas
TableA A CROSS JOIN TableB B
involucradas.
Sintaxis:
Algo importante a tener en cuenta es que la cláusula CROSS JOIN no se utiliza mucho en un
ambiente real o de producción, es raro su utilización y se suele utilizar para testear datos.
Cláusula SELF JOIN
Cláusula SELF JOIN
A
sino es una técnica en la que una tabla se une consigo misma. Esto
se utiliza cuando se desea comparar filas dentro de la misma tabla o
cuando los datos en una sola tabla necesitan ser relacionados entre
sí de alguna manera. Para realizar un SELF JOIN, se usan alias de
SELECT <list> FROM
tabla para diferenciar las diferentes instancias de la misma tabla.
TableA A INNER JOIN TableA B
ON A.KEY = B.COLUMN
Un caso típico de uso de SELF JOIN es en una tabla de “empleados ”
donde cada “empleado” tiene un campo de identificación de su
Sintaxis: “gerente”. Al usar un SELF JOIN, se pueden relacionar los empleados
con sus gerentes para obtener una jerarquía de informes.
SELECT column1, column2, columnN
FROM TableA [INNER | LEFT | RIGHT ] TableB
ON TableA.Key = B.Column
Descripción de la Sección
Descripción de Subconsultas
Subconsultas Escalares
Subconsultas Multivalor
Subconsultas
Subconsultas
Subconsultas
Subconsultas
Sub consultas
Las subconsultas escalares en SQL Server son subconsultas que devuelven un único valor (un
solo dato) como resultado. Este valor puede ser un número, una cadena, una fecha, etc.
Una subconsulta escalar está encerrada entre paréntesis y se ejecuta una vez para cada fila de
la consulta principal. Debido a que devuelven un único valor, pueden utilizarse en expresiones
de asignación, comparaciones, o en combinaciones con operadores aritméticos y lógicos.
Las subconsultas multivalor en SQL Server son subconsultas que pueden devolver múltiples
filas y/o columnas como resultado. A diferencia de las subconsultas escalares, que devuelven
un solo valor, las subconsultas multivalor pueden proporcionar una lista de valores o un
conjunto de resultados completo.
Objetivo de la Sección
Funciones de Metadato
Restricciones
Pruebas de Implementación
Objetivo de la Sección
Funciones de Metadatos
Funciones de Metadatos
Aggregate Functions
(Funciones de Agregación)
Funciones de Metadatos
@@PROCID DB_NAME INDEXKEY_PROPERTY SCHEMA_ID
APP_NAME FILE_ID INDEXPROPERTY SCHEMA_NAME
APPLOCK_MODE FILE_IDEX NEXT VALUE FOR SCOPE_IDENTITY
APPLOCK_TEST FILE_NAME OBJECT_DEFINITION SERVERPROPERTY
ASSEMBLYPROPERTY FILEGROUP_ID OBJECT_ID STATS_DATE
COL_LENGTH FILEGROUP_NAME OBJECT_NAME TYPE_ID
COL_NAME FILEGROUPPROPERTY OBJECT_SCHEMA_NAME TYPE_NAME
COLUMNPROPERTY FILEPROPERTY OBJECTPROPERTY TYPEPROPERTY
DATABASE_PRINCIPAL_ID FULLTEXTCATALOGPROPERTY OBJECTPROPERTYEX VERSION
DATABASEPROPERTYEX FULLTEXTSERVICEPROPERTY ORIGINAL_DB_NAME
DB_ID INDEX_COL PARSENAME
Funciones de Metadatos
SELECT DB_NAME();
SELECT OBJECT_ID('dbo.TablaEjemplo');
SELECT OBJECT_NAME(OBJECT_ID('dbo.TablaEjemplo'));
Funciones de Metadatos
SELECT SERVERPROPERTY('ProductVersion');
Funciones de Metadatos
Beneficios:
• Automatización
• Administración
• Auditoría
Funciones de Metadatos
Beneficios:
CHECK DEFAULT
Restricciones
NOT NULL
NOT NULL
NOT NULL
NOT NULL
… … … … … …
Restricciones
UNIQUE
UNIQUE
… … … … … …
Restricciones
UNIQUE
… … … … … …
Restricciones
PRIMARY KEY
La restricción PRIMARY KEY consta de una columna o varias columnas con valores
que identifican de forma única cada fila de la tabla.
PRIMARY KEY
… … … … … …
Restricciones
PRIMARY KEY
… … … … … …
Restricciones
PRIMARY KEY
… … … … … …
Restricciones
FOREIGN KEY
FOREIGN KEY
FOREIGN KEY
Tabla Hija
Restricciones
FOREIGN KEY
CREATE TABLE PROFESORES
(
dni INT PRIMARY KEY ,
nombre VARCHAR(40) NOT NULL,
paterno VARCHAR(20) NOT NULL,
materno VARCHAR(20) NOT NULL,
email VARCHAR(40) UNIQUE NOT NULL,
edad TINYINT
);
FOREIGN KEY
Las acciones admitidas que se pueden realizar al eliminar o actualizar los valores de la “TABLA
PADRE” incluyen:
Cuando las cláusulas ON UPDATE o ON DELETE se establecen en NO ACTION, la operación de
NO actualización o eliminación realizada en la “TABLA PADRE” fallará con un error.
ACTION Está son las cláusulas por “defecto” si no se establece las cláusulas ON UPDATE o ON DELETE dentro de
las instrucciones.
Al establecer las cláusulas ON UPDATE o ON DELETE en CASCADE, la misma acción realizada en los
valores referenciados de la “TABLA PADRE” se reflejará en los valores relacionados en la “TABLA
CASCADE HIJA”. Por ejemplo, si el valor al que se hace referencia se elimina en la “TABLA PADRE”, también se
eliminan todas las filas relacionadas en la “TABLA HIJA”.
Con esta opción de cláusulas ON UPDATE y ON DELETE, si los valores a los que se hace referencia en la
SET NULL “TABLA PADRE” se eliminan o modifican, todos los valores relacionados en la “TABLA HIJA” se
establecen en valor NULL.
El uso de la opción SET DEFAULT de las cláusulas ON UPDATE y ON DELETE especifica que, si los valores
SET
a los que se hace referencia en la “TABLA PADRE” se actualizan o eliminan, los valores relacionados en la
DEFAULT “TABLA HIJA” con columnas FOREIGN KEY se establecerán en su valor predeterminado.
Restricciones
CHECK Constraint
CHECK Constraint
CREATE TABLE PROFESORES
(
dni INT PRIMARY KEY ,
nombre VARCHAR(40) NOT NULL,
paterno VARCHAR(20) NOT NULL,
materno VARCHAR(20) NOT NULL,
email VARCHAR(40) UNIQUE NOT NULL,
edad TINYINT
);
… … … … … …
Restricciones
CHECK Constraint
CREATE TABLE PROFESORES
(
dni INT PRIMARY KEY
CHECK(dni >= 10000000 AND dni <= 99999999),
nombre VARCHAR(40) NOT NULL,
paterno VARCHAR(20) NOT NULL,
materno VARCHAR(20) NOT NULL,
email VARCHAR(40) UNIQUE NOT NULL,
edad TINYINT
);
… … … … … …
Restricciones
CHECK Constraint
CREATE TABLE PROFESORES
(
dni INT PRIMARY KEY
CHECK(dni >= 10000000 AND dni <= 99999999),
nombre VARCHAR(40) NOT NULL,
paterno VARCHAR(20) NOT NULL,
materno VARCHAR(20) NOT NULL,
email VARCHAR(40) UNIQUE NOT NULL,
edad TINYINT
);
nombreLongitud(dni) = 8
ON DELETE CASCADE,
VARCHAR(40) NOT NULL
);
… … … … … …
Restricciones
CHECK Constraint
CREATE TABLE PROFESORES
(
dni INT PRIMARY KEY
CHECK(dni >= 10000000 AND dni <= 99999999),
nombre VARCHAR(40) NOT NULL,
paterno VARCHAR(20) NOT NULL,
materno VARCHAR(20) NOT NULL,
email VARCHAR(40) UNIQUE NOT NULL,
edad TINYINT
);
… … … … … …
Restricciones
CHECK Constraint
CREATE TABLE PROFESORES
(
dni INT PRIMARY KEY
CHECK(dni >= 10000000 AND dni <= 99999999),
nombre VARCHAR(40) NOT NULL,
paterno VARCHAR(20) NOT NULL,
materno VARCHAR(20) NOT NULL,
email VARCHAR(40) UNIQUE NOT NULL,
edad TINYINT CHECK(edad >= 18 AND edad <= 70)
);
… … … … … …
Restricciones
CHECK Constraint
CREATE TABLE PROFESORES
(
dni INT PRIMARY KEY
CHECK(dni >= 10000000 AND dni <= 99999999),
nombre VARCHAR(40) NOT NULL,
paterno VARCHAR(20) NOT NULL,
materno VARCHAR(20) NOT NULL,
email VARCHAR(40) UNIQUE NOT NULL,
edad TINYINT CHECK(edad >= 18 AND edad <= 70)
);
CHECK Constraint
Campo Restricción
Descuento 0 <= Descuento
AND
decimal(1,2)
Descuento <= 0.25
Restricciones
CHECK Constraint
Campo Restricción
Fecha_Ingreso
Fecha_Salida >
smalldatetime Fecha_Ingreso
Fecha_Salida
smalldatetime
Restricciones
DEFAULT Constraint
DEFAULT Constraint
88888888 Jose Perez Garcia [email protected] NULL 2024-01-14 12:57:00 2024-01-14 18:00:00
Restricciones
DEFAULT Constraint
Campo Restricción
orderDate GETDATE()
city ‘LIMA’
descuento 0.15
Restricciones
USE MASTER
GO
La validación de tablas en SQL Server implica comprobar que las tablas exista.
SELECT OBJECT_ID('object_type')
La segunda forma es consultar la Vista del sistema llamado “sys.tables” la cual contiene información
de todas las tablas de la Base de Datos en donde estamos ubicados .
Características :
Manejo de
Seguridad Transacciones
parámetros
¿Qué es un Procedimiento
Almacenado(Stored Procedure)?
Tipo Objeto
Crear Objeto Nombre Objeto
BEGIN
Bloque de
Ejecución Instrucción SQL;
END
¿Qué es un Procedimiento
Almacenado(Stored Procedure)?
BEGIN
Instrucción SQL;
END
¿Qué es un Procedimiento
Almacenado(Stored Procedure)?
BEGIN
Instrucción SQL;
END
¿Qué es un Procedimiento
Almacenado(Stored Procedure)?
EXECUTE Nombre
GO
EXEC Nombre
GO
¿Qué es un Procedimiento
Almacenado dinámico?
¿Qué es un Procedimiento Almacenado
dinámico?
¿Cómo funciona?
Características y Consideraciones:
➢ Flexibilidad
➢ Seguridad
➢ Rendimiento
¿Qué es un Procedimiento Almacenado
dinámico?
Tanto los procedimientos almacenados como las funciones en SQL Server son bloques de código
reutilizables que encapsulan lógica y pueden ejecutar operaciones en la base de datos.
Puede realizar tareas más complejas, como trabajar Se puede utilizar en consultas SQL dentro de una
con transacciones, llamar a otros procedimientos cláusula SELECT, WHERE, FROM, etc.
almacenados, manejar errores, etc.
Se ejecuta con la sentencia EXEC o EXECUTE. Se invoca como parte de una expresión o consulta.
Procedimiento Almacenado VS Funciones
Tanto los procedimientos almacenados como las funciones en SQL Server son bloques de código
reutilizables que encapsulan lógica y pueden ejecutar operaciones en la base de datos.
• Parámetros • Parámetros
Puede aceptar parámetros de entrada y salida. Los Solo acepta parámetros de entrada. No puede tener
parámetros de salida (OUTPUT) permiten que el parámetros de salida (OUTPUT).
procedimiento devuelva valores.
Procedimiento Almacenado VS Funciones
Tanto los procedimientos almacenados como las funciones en SQL Server son bloques de código
reutilizables que encapsulan lógica y pueden ejecutar operaciones en la base de datos.
• Permisos • Permisos
Los permisos para ejecutar un procedimiento Las funciones pueden tener restricciones más
almacenado son más amplios y flexibles. estrictas dependiendo de su uso.
Descripción de la Sección
Una vista en SQL Server es un objeto de base de datos que actúa como una tabla virtual que
contiene datos de una o varias tablas. No contiene ningún dato y no existe físicamente en la
base de datos. De manera similar a una tabla SQL, el nombre de la vista debe ser único en
una base de datos.
Una VISTA no requiere almacenamiento en una base de datos porque no existe físicamente.
En una VISTA, también podemos controlar la seguridad del usuario para acceder a los datos
de las tablas de la base de datos. Podemos permitir que los usuarios obtengan los datos de la
VISTA, y el usuario no necesita permiso para cada tabla o columna para obtener datos.
La Vista se define a partir de una consulta SELECT que puede extraer datos de una o más
tablas u otras vistas. Aunque una vista no almacena datos por sí misma, proporciona una
manera conveniente de encapsular y simplificar consultas complejas, permitiendo que los
usuarios accedan a datos filtrados o combinados de una manera más sencilla.
¿Qué es una Vista(View)?
Características :
Definición
No Almacena Datos
Uso de SELECT
¿Qué es una Vista(View)?
Ventajas :
implicidad
Seguridad
Reutilización
Abstracción
¿Qué es una Vista(View)?
Tipo Objeto
Crear Objeto Nombre Objeto
AS
Instrucción SQL;
¿Qué es una Vista(View)?
AS
Instrucción SQL;
¿Qué es una Vista(View)?
No No
Filas
Coincide Coincide
Coincid
con el entes con el
Origen Destino
La sentencia MERGE en realidad combina las operaciones INSERT, UPDATE y DELETE en conjunto.
Sentencia Merge
ON TTable.columnKey = STable.columnKey
No No
Coincide Filas Coincide
con el Coincid con el
[ WHEN MATCHED THEN ] entes
Origen Destino
Statement Update Sql;
O bien, podemos considerar una CTE como una especie de tabla virtual que contiene columnas
con registros físicos. Esta tabla virtual se crea como resultado de la ejecución de la consulta, es
utilizada por otra consulta y se elimina después de la ejecución de la consulta principal.
Desde la introducción desde la versión de SQL Server 2005, las CTE se han convertido en un
método popular para los especialistas en bases de datos que las aplican para hacer que las
consultas complejas sean más fáciles de leer y mantener.
¿Qué es CTE(Common Table Expression)?
Características:
Definición Temporal
Facilita la Legibilidad
Uso Recursivo
¿Qué es CTE(Common Table Expression)?
Sintaxis:
Comienza con
Nombre CTE Opcional
la instrucción
Sintaxis:
Creación CTE
Consulta CTE
CTE Anidados
CTE Anidados
Al igual que las subconsultas, las CTE también se pueden anidar o, en palabras sencillas,
podemos usar una definición de CTE dentro de otra definición de CTE.
Sintaxis:
WITH expression_1 [ ( ColName1, ColName2, ..., ColNameN ) ]
AS (
CTE_query_definition_1
)
expression_2 [ ( ColName1, ColName2, ..., ColNameN ) ]
AS(
En la cláusula FROM se
CTE_query_definition_2
refiere a cte_expression_1
)
Podemos observar que el operador PIVOT es una de las técnicas que permite el
intercambio y la transposición de filas a columnas y realiza posibles agregaciones en el
camino. PIVOT y UNPIVOT son los operadores relacionales para transponer una serie de
datos bidimensionales con valores de tabla en otra forma de datos.
El operador PIVOT transpone una expresión con valores de tabla de un conjunto único
de valores de una columna a varias columnas en la salida y realiza agregaciones.
Podemos utilizar el operador PIVOT para rotar filas en una tabla convirtiendo los valores
de fila en varias columnas. El siguiente diagrama ilustra lo que puede hacer PIVOT,
donde tomamos 4 filas de datos y las convertimos en 1 fila con 4 columnas. Como
puede ver, el proceso PIVOT convierte filas en columnas al pivotar la tabla.
UNPIVOT
SalesYear TotalSales
2011 151706131.5475
2011 2012 2013 2014
2012 862786335.1754
151706131.5475 862786335.1754 1190722789.0552 391255200.8993
2013 1190722789.0552
2014 391255200.8993
PIVOT
Operadores PIVOT y UNPIVOT
Sintaxis: Sintaxis:
SELECT [ <non-pivoted column> [ AS <column name> ] , ] SELECT [ <non-pivoted column> [ AS <column name> ] , ]
... ...
[ <first pivoted column> [ AS <column name> ] , [ <output column for names of the pivot columns>
[ <second pivoted column> [ AS <column name> ] , ] [ AS <column name> ] , ]
... [ <new output column created for values
[ <last pivoted column> [ AS <column name> ] ] ] in result of the source query> [ AS <column name> ] ]
FROM FROM
( <SELECT query that produces the data> ) ( <SELECT query that produces the data> )
AS <alias> AS <alias>
PIVOT UNPIVOT
( (
<aggregation function> ( <column being aggregated> ) <new output column created for values
FOR <column that contains the values in result of the source query>
that become column headers> FOR <output column for names of the pivot columns>
IN ( <first pivoted column> IN ( <first pivoted column>
, <second pivoted column> , <second pivoted column>
, ... <last pivoted column> ) , ... <last pivoted column> )
) AS <alias for the pivot table> )
[ <optional ORDER BY clause> ] [ <optional ORDER BY clause> ]
[;] [;]
La mayoría de los casos en los que se cambian filas por columnas es para
entregar un informe con un formato específico. El analista de datos o
alguien de la empresa requiere la información de una manera diferente a
la estructura de la tabla. Si se trata de un requisito único, una consulta
puede resultar de ayuda. De lo contrario, se podría utilizar una vista.
Objetivo de la Sección
¿Qué es un Trigger?
Triggers DDL
Triggers DML
LOGON Triggers
Triggers(Disparadores)
Una vez que se activan, los triggers pueden realizar una variedad
de funciones, como la modificación de datos en la misma tabla o
en otras tablas, la aplicación de restricciones y reglas de negocio, y
muchas más tareas relacionadas con la gestión de datos.
Triggers(Disparadores)
Automatización de Tareas
Integridad de Datos
Auditoría y Registro
Acción en Cascada
Triggers(Disparadores)
Trigger DDL
Instrucción
Instrucción DDL Tipo de Objeto Nombre
Alter
Trigger DDL
El alcance del Trigger DDL será El alcance del Trigger DDL será
el servidor actual. la Base de Datos Actual.
Triggers(Disparadores)
Trigger DDL
[ END ];
Triggers(Disparadores)
Trigger DDL
Trigger DML
Trigger DML
CREATE [ OR ALTER ] TRIGGER trigger_name
ON table | view
FOR | AFTER | INSTEAD OF
[ INSERT , UPDATE , DELETE ] Acción de Disparo
AS
[ BEGIN ]
Bloque de ejecución
Instrucción SQL;
[ END ];
Triggers(Disparadores)
Trigger DML
CREATE [ OR ALTER ] TRIGGER trigger_name
ON table | view
FOR | AFTER | INSTEAD OF
Después En lugar
de la Acción de la Acción
Trigger DML
CREATE TRIGGER nombre_trigger
En esta Tabla ON tabla
FOR INSERT
Se dispara después de AS
insertar algún registro
BEGIN Ejecuta la siguiente
instrucción
Instrucción SQL;
Después de validar:
• Tipos de Datos END;
• Restricciones
• Foreign Key
• Funciones
Triggers(Disparadores)
Trigger DML
CREATE TRIGGER nombre_trigger
En esta Tabla ON tabla
FOR UPDATE, DELETE
AS
BEGIN Diferentes Acciones
Instrucción SQL;
END;
Triggers(Disparadores)
END; END;
Triggers(Disparadores)
Inserted
CLIENTES
Perduran
id nombre paterno materno edad durante la ejecución
101 Isabel Campos Torres 19
END;
Triggers(Disparadores)
Inserted
CLIENTES id nombre paterno materno edad
END;
Triggers(Disparadores)
Inserted
CLIENTES id nombre paterno materno edad
END;
Triggers(Disparadores)
Inserted
CLIENTES id nombre paterno materno edad
END;
Trigger DDL - ALL SERVER
Trigger DDL - ALL SERVER
Instrucción SQL;
[ END ];
Trigger DDL - ALL SERVER
ON ALL SERVER
Instrucción SQL;
[ END ];
Trigger DDL - DATABASE
ON DATABASE
Instrucción SQL;
END;
Trigger DML - FOR | AFTER
Automatización de Tareas
Trigger DML - FOR | AFTER
PRODUCTOS
id_producto nombre stock
DETALLE_FACTURA
codigo id_producto precio cantidad
Trigger DML - FOR | AFTER
PRODUCTOS
id_producto nombre stock
DETALLE_FACTURA
codigo id_producto precio cantidad
PRODUCTOS
id_producto nombre stock
DETALLE_FACTURA
codigo id_producto precio cantidad
Triggers
Trigger DML - FOR | AFTER
PRODUCTOS
id_producto nombre stock
DETALLE_FACTURA
codigo id_producto precio cantidad
Insert
Triggers Delete
Update
Trigger DML - FOR | AFTER
Insert
CREATE TRIGGER tgr_stock_insert
ON DETALLE_FACTURA
AFTER INSERT
AS
BEGIN
END;
Trigger DML - FOR | AFTER
Insert
CREATE TRIGGER tgr_stock_insert
PRODUCTOS
ON DETALLE_FACTURA
id_producto nombre stock
AFTER INSERT
101 Monitor LG 27 pulgadas 50
AS
102 Mouse Logitech G502 100
BEGIN
103 SSD Kingston 960GB 50
END;
Trigger DML - FOR | AFTER
Insert
CREATE TRIGGER tgr_stock_insert
PRODUCTOS
ON DETALLE_FACTURA
id_producto nombre stock
AFTER INSERT
101 Monitor LG 27 pulgadas 50
AS
102 Mouse Logitech G502 100
BEGIN
103 SSD Kingston 960GB 50
Insert
CREATE TRIGGER tgr_stock_insert
PRODUCTOS
ON DETALLE_FACTURA
id_producto nombre stock
AFTER INSERT
101 Monitor LG 27 pulgadas 50
AS
102 Mouse Logitech G502 100
BEGIN
103 SSD Kingston 960GB 50
Insert
CREATE TRIGGER tgr_stock_insert
PRODUCTOS
ON DETALLE_FACTURA
id_producto nombre stock
AFTER INSERT
101 Monitor LG 27 pulgadas 50
AS
102 Mouse Logitech G502 100
BEGIN
103 SSD Kingston 960GB 50
Insert
CREATE TRIGGER tgr_stock_insert
PRODUCTOS
ON DETALLE_FACTURA
id_producto nombre stock
AFTER INSERT
101 Monitor LG 27 pulgadas 50
AS
102 Mouse Logitech G502 100
BEGIN
103 SSD Kingston 960GB 50
Insert
CREATE TRIGGER tgr_stock_insert
PRODUCTOS
ON DETALLE_FACTURA
id_producto nombre stock
AFTER INSERT
101 Monitor LG 27 pulgadas 50
AS
102 Mouse Logitech G502 100
BEGIN
103 SSD Kingston 960GB 50
Insert
CREATE TRIGGER tgr_stock_insert
PRODUCTOS
ON DETALLE_FACTURA
id_producto nombre stock
AFTER INSERT
101 Monitor LG 27 pulgadas 50
AS
102 Mouse Logitech G502 70
BEGIN
103 SSD Kingston 960GB 50
Delete
CREATE TRIGGER tgr_stock_delete
PRODUCTOS
ON DETALLE_FACTURA
id_producto nombre stock
AFTER DELETE
101 Monitor LG 27 pulgadas 50
AS
102 Mouse Logitech G502 70
BEGIN
103 SSD Kingston 960GB 50
Delete
CREATE TRIGGER tgr_stock_delete
PRODUCTOS
ON DETALLE_FACTURA
id_producto nombre stock
AFTER DELETE
101 Monitor LG 27 pulgadas 50
AS
102 Mouse Logitech G502 70
BEGIN
103 SSD Kingston 960GB 50
Delete
CREATE TRIGGER tgr_stock_delete
PRODUCTOS
ON DETALLE_FACTURA
id_producto nombre stock
AFTER DELETE
101 Monitor LG 27 pulgadas 50
AS
102 Mouse Logitech G502 70
BEGIN
103 SSD Kingston 960GB 50
Delete
CREATE TRIGGER tgr_stock_delete
PRODUCTOS
ON DETALLE_FACTURA
id_producto nombre stock
AFTER DELETE
101 Monitor LG 27 pulgadas 50
AS
102 Mouse Logitech G502 70
BEGIN
103 SSD Kingston 960GB 50
Delete
CREATE TRIGGER tgr_stock_delete
PRODUCTOS
ON DETALLE_FACTURA
id_producto nombre stock
AFTER DELETE
101 Monitor LG 27 pulgadas 50
AS
102 Mouse Logitech G502 70
BEGIN
103 SSD Kingston 960GB 50
Delete
CREATE TRIGGER tgr_stock_delete
PRODUCTOS
ON DETALLE_FACTURA
id_producto nombre stock
AFTER DELETE
101 Monitor LG 27 pulgadas 50
AS
102 Mouse Logitech G502 90
BEGIN
103 SSD Kingston 960GB 50
Update
Update
Update
Update
Update
Update
Update
CREATE TRIGGER tgr_stock_update
ON DETALLE_FACTURA
AFTER UPDATE
AS
BEGIN
UPDATE PRODUCTOS
SET stock = stock + total_cantidad
FROM (
SELECT id_producto AS id, SUM(cantidad) AS total_cantidad
FROM(
SELECT id_producto, -cantidad AS cantidad FROM Inserted
UNION ALL
SELECT id_producto, cantidad FROM Deleted
)T
GROUP BY id_producto
)A
WHERE id_producto = A.id;
END;
Trigger DML - FOR | AFTER
Update
PRODUCTOS CREATE TRIGGER tgr_stock_update
DETALLE_FACTURA )T
END;
Trigger DML - FOR | AFTER
Update
PRODUCTOS CREATE TRIGGER tgr_stock_update
DETALLE_FACTURA )T
END;
Trigger DML - FOR | AFTER
Update
PRODUCTOS CREATE TRIGGER tgr_stock_update
DETALLE_FACTURA )T
END;
Trigger DML - FOR | AFTER
Update
PRODUCTOS CREATE TRIGGER tgr_stock_update
DETALLE_FACTURA )T
END;
Trigger DML - FOR | AFTER
Update
PRODUCTOS CREATE TRIGGER tgr_stock_update
DETALLE_FACTURA )T
END;
Trigger DML - FOR | AFTER
Update
PRODUCTOS CREATE TRIGGER tgr_stock_update
DETALLE_FACTURA )T
END;
Trigger DML - FOR | AFTER
Update
CREATE TRIGGER tgr_stock_update
ON DETALLE_FACTURA
AFTER UPDATE
AS
BEGIN
UPDATE PRODUCTOS
SET stock = stock + total_cantidad
FROM (
SELECT id_producto AS id, SUM(cantidad) AS total_cantidad
FROM(
Inserción
SELECT id_producto, -cantidad AS cantidad FROM Inserted
UNION ALL Deleted = Vacía
SELECT id_producto, cantidad FROM Deleted
)T
GROUP BY id_producto
Eliminación
)A
WHERE id_producto = A.id; Inserted = Vacía
END;
Trigger DML - FOR | AFTER
Update
CREATE TRIGGER tgr_stock_modificados
ON DETALLE_FACTURA
AFTER UPDATE, INSERT, DELETE
AS
BEGIN
UPDATE PRODUCTOS
SET stock = stock + total_cantidad
FROM (
SELECT id_producto AS id, SUM(cantidad) AS total_cantidad
FROM(
SELECT id_producto, -cantidad AS cantidad FROM Inserted
UNION ALL
SELECT id_producto, cantidad FROM Deleted
)T
GROUP BY id_producto
)A
WHERE id_producto = A.id;
END;
Trigger DML - INSTEAD OF
Trigger DML - INSTEAD OF
Instrucción SQL;
END;
Trigger DML - INSTEAD OF
Un " Trigger INSTEAD OF" es un tipo especial de Trigger que se dispara en lugar de la acción
desencadenante habitual. Esto significa que en lugar de que la operación de Inserción,
Actualización o Eliminación se ejecute directamente en la Tabla, el Trigger INSTEAD OF se
ejecutará en su lugar, permitiéndote controlar y modificar la operación según sea necesario.
Este tipo de Trigger es comúnmente utilizado en situaciones donde deseas realizar acciones
personalizadas o complejas en lugar de la operación de base de datos estándar. Por ejemplo,
puedes utilizarlo en Vistas o Tablas que involucran múltiples tablas para manipular los datos de
forma más específica o restringir ciertas operaciones según ciertas condiciones.
Trigger DML - INSTEAD OF
END;
Ejecuta la instrucción SQL.
Trigger DML - INSTEAD OF
CREATE TABLE PADRES(
id_padre SMALLINT PRIMARY KEY,
nombre VARCHAR(10) NOT NULL
);
INSTEAD OF
DELETE NO ACTION; DELETE NO ACTION;
END;
END;
END;
Trigger DML - INSTEAD OF
END;
END;
END;
Trigger DML - INSTEAD OF
END;
END;
END;
Trigger DML - INSTEAD OF
END;
END;
END;
Trigger DML - INSTEAD OF
END;
END;
END;
Trigger DML - INSTEAD OF
END;
END;
END;
Implementación de la Base de Datos
Implementación de la Base de Datos
Implementación de la Base de Datos
Descripción de la Sección
Objetivo de la Sección
Index(Índice)
El indexar una tabla es sin lugar a dudas, una de las mejores opciones
de poder mejorar el rendimiento de las consultas y aplicaciones.
Un índice SQL es una tabla de búsqueda rápida para poder encontrar los registros
que los usuarios necesitan buscar con mayor frecuencia. Ya que un índice es
pequeño, rápido y optimizado para búsquedas rápidas. Además, que son muy
útiles para conectar las tablas relacionales y la búsqueda de tablas grandes.
Index(Índice)
Oculto al usuario
Mostrar al usuario
Sin índice
LIBROS
cod_libro isbn titulo editorial pagina
103 9988556114250 Don Quijote de la Mancha Editorial Juventud 312
101 9783161484100 El corazón de la piedra Hodder Children Book 560
102 9955112035100 Paulo Coelho Editorial Planeta 208
… … … … …
En la cláusula SELECT, utilice únicamente las columnas necesarias. Evite utilizar “*”.
Use la cláusula WHERE para filtrar y devolver solo las filas necesarias.
Aprender cómo hacer frente a las tareas con diferentes enfoques de consulta para
comparar el rendimiento.
Index(Índice)
Table Scan
Similar al Table Scan, pero en este caso la tabla tiene un Dado que los datos no pueden ser ordenados físicamente
índice Clustered que organiza previamente los datos en en disco, ya que esto lo ha realizado el índice Clustered, se
un orden específico. Esto significa que ahora se recorren genera una estructura adicional con las columnas a indexar,
los datos ya ordenados. Sin embargo, a pesar de estar y estas columnas se organizan de manera ordenada. Si la
ordenados, sigue siendo un proceso lento recorrer todo consulta solo utiliza esta estructura del índice sin acceder
el índice. directamente a las páginas de datos, aunque no sea un
método perfecto, es más eficiente que un Table Scan o un
Clustered Index Scan.
Index(Índice)
Este método sí es eficiente. Es similar a buscar en un Este es el uso ideal de un índice NonClustered. El
diccionario que está organizado alfabéticamente. Si concepto es parecido a buscar un tema en un libro:
queremos encontrar la palabra "Zanahoria", no acudimos al índice de las primeras páginas para
empezaremos desde la primera página que contiene encontrar rápidamente las secciones donde se encuentra
palabras con la letra "A". En su lugar, iremos la información que necesitamos.
directamente hacia el final, donde se encuentran las
palabras que empiezan con la letra "Z".
Index(Índice)
Ocurre cuando organizamos los datos en grupos y Cuando el motor de base de datos debe ordenar los
utilizamos funciones de agregación como MIN, SUM, resultados por un campo que no está previamente
AVG, o cuando empleamos la cláusula HAVING. ordenado por un índice, necesita realizar una operación
de ordenación, lo que generalmente reduce el
rendimiento de la consulta.
Index(Índice)
Tenemos dos conjuntos de datos: uno está preordenado y contiene elementos únicos, mientras que el
otro no. Usando el conjunto ordenado y de elementos únicos como referencia, se selecciona el primer
elemento y se busca una coincidencia en cada elemento del segundo conjunto, recorriendo todos sus
elementos porque no está ordenado. Al finalizar, se procede con el segundo elemento del conjunto
ordenado. Es posible que se vuelva a encontrar el primer elemento y que ocurra una nueva
coincidencia con el segundo, debido a que el conjunto original ya estaba previamente ordenado.
Index(Índice)
Merge Join
Este operador es el más eficiente de los Joins, ya que ambos conjuntos de datos están
ordenados. Esto permite realizar una búsqueda más rápida en el segundo conjunto.
Cada elemento del primer conjunto busca coincidir con los ítems del segundo, y una
vez que no hay más coincidencias, ya no es necesario recorrer toda la tabla para cada
elemento del primer conjunto.
Index(Índice)
Hash Join
Este es el tipo de Join menos eficiente, ya que al no haber un orden válido a través de
índices en ninguna de las dos tablas o conjuntos de datos (es decir, no hay índices en
ninguna tabla), el sistema debe crear una tabla temporal ordenada para reemplazar
uno de los conjuntos y luego simular un Join similar al Nested Loop Join.
Index(Índice)
Estadísticas de Distribución
➢ Las estadísticas son utilizadas por el optimizador de consultas para estimar la selectividad
de los datos, incluyendo el tamaño de los resultados.
➢ Las grandes variaciones entre los valores estimados y los reales podrían indicar un
problema con las estimaciones, que pueden ser abordados a través de estadísticas de
actualización.
Descripción de la Sección
Aplicar Transaction(Transacción)
Comando NOLOCK
Transaction(Transacción) -
Sentencias TCL
Transaction(Transacción) - Sentencias TCL
Usar la Transacción es el mejor método debido a que cumple con las cuatro
propiedades de todo Sistema de Bases de Datos Relacional, a estas propiedades
de les conoce como ACID(atomicity, consistency, isolation y durability)
Transaction(Transacción) - Sentencias TCL
BEGIN TRANSACTION[TRAN]
Transferencia Bancaria
Transferencia Bancaria
BEGIN TRANSACTION; Inicio de la Transacción
BEGIN TRY
UPDATE Cuentas
SET Saldo = Saldo + 100 Agrega el monto a
WHERE CuentaID = 2; la cuenta destino
BEGIN CATCH
ROLLBACK TRANSACTION; Si hay un error,
PRINT 'Error en la transferencia. Se han revertido los cambios.'; revertimos la transacción
END CATCH;
Transaction(Transacción) - Sentencias TCL
Transferencia Bancaria
BEGIN TRANSACTION; Inicio de la Transacción
BEGIN TRY
UPDATE Cuentas
SET Saldo = Saldo - 100
WHERE CuentaID = 1;
Envía Dinero Transacción Recibe Dinero
UPDATE Cuentas
SET Saldo = Saldo + 100
WHERE CuentaID = 2;
Corte de energía
COMMIT TRANSACTION; Desastre natural
PRINT 'Transferencia completada exitosamente.';
END TRY
Problema de hardware
BEGIN CATCH
ROLLBACK TRANSACTION; Si hay un error,
PRINT 'Error en la transferencia. Se han revertido los cambios.'; revertimos la transacción
END CATCH;
Transaction(Transacción) - Sentencias TCL
Las transacciones son esenciales en sistemas de bases de datos para garantizar que las
operaciones críticas se ejecuten correctamente o se reviertan en caso de fallo.
Descripción de la Sección
Logins
Users
[ MUST_CHANGE ],
[ DEFAULT_DATABASE = database ],
• Los miembros de este rol pueden “configurar las opciones del servidor” y realizar
tareas administrativas relacionadas con el servidor, como cambiar las opciones de
serveradmin configuración globales del servidor.
• También pueden iniciar y detener el servidor SQL Server.
• Los miembros del rol ‘setupadmin’ pueden “administrar los enlaces de servidores
remotos” y “configurar” opciones del servidor.
setupadmin • Este rol tiene permisos para “agregar y eliminar servidores vinculados”, que permiten
la ejecución de consultas distribuidas entre servidores SQL.
Roles a Nivel de Servidor
En la versión de SQL Server 2019 y versiones anteriores se
contaban con nueve roles a nivel de servidor.
• Los miembros del rol ‘processadmin’ pueden “administrar los procesos que se
ejecutan en SQL Server”, lo que incluye la capacidad de “ver y terminar procesos” o
processadmin conexiones activas.
• Pueden detener cualquier tarea que esté bloqueando otros procesos o consumiendo
demasiados recursos.
• Los miembros de este rol pueden “crear, modificar, eliminar y restaurar bases de
datos” en la instancia de SQL Server.
dbcreator • Tienen privilegios para realizar tareas relacionadas con la creación y administración de
bases de datos, pero no necesariamente pueden administrar la seguridad de los usuarios
de la base de datos.
Roles a Nivel de Servidor
En la versión de SQL Server 2019 y versiones anteriores se
contaban con nueve roles a nivel de servidor.
• Los miembros del rol ‘bulkadmin’ tienen permisos para ejecutar operaciones de
“importación masiva de datos” (Bulk Insert) en SQL Server.
bulkadmin • Este rol es útil cuando se necesitan insertar grandes cantidades de datos en tablas de
SQL Server mediante el comando ‘BULK INSERT’.
• El rol ‘public’ es un rol especial y está “disponible para todos los usuarios” de SQL
Server de manera predeterminada. “Todos los logins” que acceden a SQL Server
public automáticamente son miembros del rol ‘public’.
• El rol ‘public’ no se puede eliminar ni quitar de ningún login o usuario. Su función es
proporcionar un conjunto básico de permisos que todos los usuarios tienen por defecto.
Roles a Nivel de Servidor
En la versión de SQL Server 2022 se han 10 roles de servidor adicionales que se diseñaron específicamente
teniendo en cuenta el principio de privilegio mínimo , que tienen el prefijo ##MS_ y el sufijo ## para distinguirlos de
otros principales creados por el usuario y roles de servidor personalizados. Esos nuevos roles contienen privilegios
que se aplican en el ámbito del servidor, pero también pueden heredarse hasta bases de datos individuales (excepto
el rol de servidor ##MS_LoginManager## ).
##MS_ServerPerformanceStateReader## ##MS_ServerSecurityStateReader##
##MS_ServerStateManager## ##MS_ServerStateReader##
Roles a Nivel de Servidor
Sintaxis:
USE master;
Los roles a nivel de servidor personalizados en SQL Server son roles definidos por el
administrador de la base de datos que permiten agrupar y asignar permisos a usuarios o
inicios de sesión de acuerdo con las necesidades específicas de la organización o sistema.
Estos roles permiten una mayor flexibilidad en la administración de permisos, ya que
permiten definir conjuntos de privilegios que no están cubiertos por los roles de servidor
predefinidos de SQL Server.
Facilidad de
Control de permisos Seguridad
administración
Sintaxis:
USE master;
Tiene control completo sobre la base de datos. Los miembros de este rol pueden realizar
db_owner cualquier tarea dentro de la base de datos, incluida la modificación de los permisos de otros
usuarios.
Puede modificar los roles y permisos a nivel de base de datos. No tiene todos los permisos
db_securityadmin que tiene db_owner, pero es el rol responsable de gestionar la seguridad de la base de
datos.
Puede agregar o eliminar acceso a la base de datos, es decir, asignar usuarios a la base de
db_accessadmin datos.
db_backupoperator Tiene permisos para realizar respaldos de la base de datos, pero no puede restaurar.
Roles a Nivel de Base de Datos
SQL Server consta de 10 roles a Nivel de Base de datos
db_datareader Permite leer todos los datos de todas las tablas y vistas dentro de la base de datos.
Permite modificar los datos (INSERT, UPDATE, DELETE) en todas las tablas y vistas
db_datawriter de la base de datos.
Es un rol a nivel de base de datos especial que incluye a todos los usuarios de una
public base de datos. Por defecto, el rol public tiene permisos mínimos, generalmente solo
de lectura de ciertos metadatos.
Roles a Nivel de Base de Datos
Sintaxis:
USE DataBaseName;
En SQL Server, los roles a nivel de base de datos personalizados son roles
que puedes crear manualmente para organizar y gestionar los permisos de
los usuarios de forma más flexible y eficiente. Estos roles son muy útiles
cuando los roles fijos de base de datos no se ajustan exactamente a tus
necesidades, ya que te permiten agrupar permisos específicos y asignarlos a
usuarios o grupos.
Roles a Nivel de Base de Datos Personalizado
Ventajas:
Control Granular de
Facilidad de Gestión Reusabilidad
Permisos
En lugar de asignar
permisos
Puedes asignar Puedes crear roles
individualmente a cada
permisos específicos a personalizados que se
usuario, puedes agrupar
los roles personalizados ajusten a un perfil
permisos en roles
según las necesidades común de usuario y
personalizados y luego
de la aplicación o del asignarlos a múltiples
asignar usuarios a esos
equipo. usuarios.
roles, simplificando la
administración.
Roles a Nivel de Base de Datos Personalizado
Sintaxis:
USE DataBaseName;
¿Qué es un Backup?
Estrategias de Backups
Un backup (o copia de seguridad) es una copia exacta de los datos que se realiza para proteger
y preservar la información en caso de pérdida, daño, corrupción o eliminación accidental de los
datos originales. El propósito principal de un backup es garantizar la recuperación de la
información en caso de fallos, errores humanos, ataques cibernéticos, o desastres.
En caso de desastres,
Dependiendo del tipo de
Minimiza el impacto de los backups permiten
backup, se puede
fallos de hardware, que las empresas sigan
restaurar el sistema
ataques de malware o funcionando sin una
completo o partes
errores humanos. pérdida significativa de
específicas de los datos.
datos.
¿Qué es un Backup?
Tipos:
Se debe realizar una copia de seguridad completa al menos una vez antes de poder ejecutar cualquier
otro tipo de copia de seguridad: esta es la base para cualquier otro tipo de copia de seguridad.
¿Qué es un Backup?
Full Backup
(Copia de seguridad Completa)
Sintaxis:
Como una copia de seguridad diferencial no realiza una copia de seguridad de todo , la copia de
seguridad suele ejecutarse más rápido que una copia de seguridad completa. Una copia de seguridad
diferencial de la base de datos captura el estado de las extensiones modificadas en el momento en Differential
que se creó la copia de seguridad. Si crea una serie de copias de seguridad diferenciales, es probable Backup
que una base de datos que se actualiza con frecuencia contenga datos diferentes en cada diferencial.
Sintaxis: Differential
Backup
WITH DIFFERENTIAL,
[ options ];
Differential Backup
¿Qué es un Backup?
Transaction log Backup
(Copia de seguridad de Log de Transacción)
La copia de seguridad de registros, como su nombre lo indica, realiza una copia de seguridad de los registros de
transacciones. Este tipo de copia de seguridad solo es posible con modelos de recuperación de registros Log
Backup
completos o masivos.
No se puede hacer un backup del log de transacciones sin haber hecho antes un
backup completo de la base de datos. El log backup depende del último full backup Log Log
Backup Backup
para restaurar completamente la base de datos.
¿Qué es un Backup?
Transaction log Backup
(Copia de seguridad de Log de Transacción)
Sintaxis: Log
Backup
WITH [ options ];
Log Log
Backup Backup
¿Qué es un Backup?
Copy-Only Backup
(Copia de seguridad de solo copia)
El Copy-Only Backup es un tipo especial de backup en SQL Server que se realiza sin
afectar la secuencia normal de backups. Esencialmente, es una copia de seguridad
independiente que no interfiere con la estrategia regular de backups, lo que significa que
no altera los puntos de restauración ni la capacidad de realizar otros tipos de backups Copy-Only
(como diferenciales o de transacciones). Se utiliza cuando se necesita hacer una copia de Backup
seguridad temporal o puntual, pero sin alterar el historial de backups de la base de datos.
Si necesitamos una copia temporal de la base de datos para moverla o probarla en otro entorno, un copy-only
backup te permite hacerlo sin afectar la estrategia regular de backups.
También si estás realizando mantenimiento en la base de datos y necesitas una copia de seguridad adicional
como medida de seguridad, el copy-only backup te permite hacerlo sin interferir con los otros backups.
¿Qué es un Backup?
Copy-Only Backup
(Copia de seguridad de solo copia)
Sintaxis:
Las estrategias de backup en SQL Server son enfoques diseñados para garantizar la seguridad,
integridad y disponibilidad de los datos almacenados en las bases de datos. La elección de la
estrategia de backup adecuada depende de varios factores, como el tamaño de la base de
datos, la frecuencia de los cambios en los datos, los requisitos de recuperación ante desastres y
los recursos disponibles (como almacenamiento y tiempo de inactividad permitido).
Estrategias de Backups
Log Log Log Log Log Log Log Log Log Log Log Log Log Log
Backup Backup Backup Backup Backup Backup Backup Backup Backup Backup Backup Backup Backup Backup
Log Log Log Log Log Log Log Log Log Log Log Log Log Log
Backup Backup Backup Backup Backup Backup Backup Backup Backup Backup Backup Backup Backup Backup
Descripción de la Sección
Crear JOB
Backups automáticos
Tareas de mantenimiento
Automatización
Flexibilidad
Monitoreo
¿Qué es un Scheduled JOB?