MÁSTER EN SQL SERVER: DESDE CERO A
NIVEL PROFESIONAL
UDEMY
Contenido
TABLA DE ILUSTRACIONES ............................................................................... 10
NOTA ANTES DE EMPZAR.................................................................................. 18
1. FUNDAMENTOS Y ESTRUCTURAS DE BASE DE DATOS......................... 19
I. ¿QUÉ ES MICROSOFT MANAGMENT STUDIOS? ................................... 19
II. Herramientas del Managment Studio. ...................................................... 24
2. FUNDAMENTOS Y ESTRUCTURA DE UNA BASE DE DATOS .................. 25
I. ¿Qué es una base de Datos? ...................................................................... 25
II. ¿Qué es una tabla? .................................................................................. 25
III. ¿Qué es un tipo de dato? ......................................................................... 25
IV. Tipos de datos exigentes. ........................................................................ 25
Datos numéricos. ........................................................................................... 26
Datos texto y Binarios .................................................................................... 27
Datos de fecha y hora: ................................................................................... 27
3. RESTRICCIONES Y PROPIEDADES DE CAMPOS ..................................... 28
I. ¿Qué es una Primary Key? ......................................................................... 28
II. ¿Qué es una Foreign Key? ...................................................................... 28
Restricciones y propiedades de campos ........................................................ 28
III. ¿Qué es la propiedad IDENTITY?............................................................ 29
Propiedad Identity de un campo. .................................................................... 29
Argumentos de la propiedad Identity .............................................................. 29
IV. Normalización de la Base de datos .......................................................... 31
Primera 1FN ................................................................................................... 31
Segunda 2FN ................................................................................................. 31
Tercera 3FN ................................................................................................... 31
4. DISÑENADO NUESTRA PRIMERA BASE DE DATOS ................................. 33
I. Creando el archivo de Base de Datos. ........................................................ 33
II. Abriendo una ventana de script y estableciendo la base CentroMedico por
default. ............................................................................................................... 34
III. Definiendo la Tabla Pacientes y aplicando Formas Normales. ................ 37
IV. Cómo desactivar el warning Prevent saving changes that require table re-
created ............................................................................................................... 38
V. Estableciendo la propiedad IDENTITY en la tabla paciente ..................... 40
VI. Cómo crear una tabla y definir su Primary Key desde Transact-SQL ...... 42
VII. Definiendo la Tabla de Historias Clínicas ................................................. 42
VIII. Definiendo las Tablas de Turnos (Turno, TurnoPaciente y TurnoEstado)
43
IX. Insertar registros en la tabla turnoEstado................................................. 44
X. Ejercicio crear Tablas especialidades y países. ....................................... 45
XI. Definiendo la tabla de pagos. ................................................................... 46
XII. Definiendo la tabla de Relación Pago/ Paciente/ Turno ........................... 47
XIII. Definiendo la tabla de Conceptos ......................................................... 47
XIV. Definiendo Tipos de Datos de Usuarios. ............................................... 47
XV. Conceptos de Relaciones entre tablas. .................................................... 50
¿Qué son éstas Reglas? ................................................................................ 50
¿De que me sirve crear esta relación?........................................................... 51
Ejemplo .......................................................................................................... 51
XVI. Modelando el Diagrama Entidad Relación DER y definiendo las FK. ... 52
XVII. Crear relación con TRANSACT-SQL .................................................... 53
XVIII. Cómo reiniciar un campo IDENTITY con DBCC ................................... 54
5. COMANDOS SQL PARA MANIPULACIÓN DE REGISTROS. ...................... 55
I. Comando SELECT FROM .......................................................................... 55
II. Comando INSERT.................................................................................... 55
III. Comando DELETE ................................................................................... 56
IV. Comando UPDATE .................................................................................. 57
6. CLÁUSULAS SQL .......................................................................................... 57
I. Cláusula WHERE. ....................................................................................... 57
II. Cláusula TOP ........................................................................................... 58
III. Cláusula ORDER BY................................................................................ 59
IV. Cláusula DISTINCT .................................................................................. 60
V. Cláusula GROUP BY ............................................................................... 61
7. FRUNCIONES DE AGREGADO .................................................................... 62
I. Función MAX y MIN..................................................................................... 62
II. Función SUM ........................................................................................... 63
III. Función AVG ............................................................................................ 63
IV. Función COUNT ....................................................................................... 64
V. Función HAVING ...................................................................................... 65
8. OPERADORES LÓGICOS............................................................................. 65
I. Operador AND ............................................................................................. 65
II. Operador OR ............................................................................................ 66
III. Operador IN ............................................................................................. 66
IV. Operador LIKE ......................................................................................... 67
V. Operador NOT ......................................................................................... 68
VI. Operador BETWEEN ............................................................................... 68
VII. Combinación Operadores ........................................................................ 69
9. STORED PROSCEDURES ............................................................................ 70
I. ¿Qué es un Stored Procedure? Estructura y manipulación ......................... 70
II. ¿Qué es una variable? Uso de INSNULL para evaluar valores. .............. 71
III. Programando Subconsultas y uso de Alias Tablas .................................. 71
10. ESTRUCTURA DE CONTROL.................................................................... 71
I. El condicional IF ELSE y estructura BEGIN END ........................................ 71
II. La función EXIST ..................................................................................... 75
III. El bucle WHILE ........................................................................................ 76
IV. El condicional CASE ................................................................................ 77
V. Las instrucciones RETURN y BREAK ...................................................... 78
VI. La estructura TRY CATCH ....................................................................... 79
11. OPERACIONES ARITMÉTICAS Y DE COMPARACIÓN ............................ 80
I. Operadores Aritméticos de suma, resta, división, multiplicación, módulo. .. 80
II. Operadores mayor o igual, menor o igual, distinto. .................................. 82
12. HERRAMIENTAS ADICIONALES ............................................................... 83
I. Proceso SP_help ......................................................................................... 83
II. Proceso SP_HELPTEXT .......................................................................... 83
III. Agregando Shortcuts en la consola (sp_help, sp_helptext) ..................... 84
13. SENTENCIAS SQL ..................................................................................... 86
I. Sentencia CREATE (Table, Type, Function) ............................................... 86
II. Sentencia ALTER ..................................................................................... 87
III. Sentencia DROP ...................................................................................... 88
IV. Sentencia TRUNCATE ............................................................................. 89
14. FUNCIONES DE CONVERSIÓN Y TEXTO ................................................ 91
I. Funciones LEFT y RIGHT ........................................................................... 91
II. Función LEN ............................................................................................ 92
III. Funciones LOWER y UPPER .................................................................. 93
IV. Función REPLACE ................................................................................... 94
V. Funciones REPLICATE ............................................................................ 95
VI. Funciones LTRIM y RTRIM ...................................................................... 96
VII. Función CONCACT .................................................................................. 96
VIII. Función GETDATE y GETUTCDATE ................................................... 97
IX. Función DATEADD .................................................................................. 98
X. Función DATEIFF..................................................................................... 98
XI. Función DATEPART ................................................................................ 99
XII. Función ISDATE....................................................................................... 99
XIII. Función CAST y CONVERT ............................................................... 100
15. TRANSACTION ......................................................................................... 102
16. JOINS Y UNIONS ENTRE TABLAS .......................................................... 102
I. Cláusula INNER JOIN ............................................................................... 102
II. Cláusula LEFT JOIN .............................................................................. 103
III. Cláusula RIGHT JOIN ............................................................................ 104
IV. Consideraciones a tener en cuenta con el uso de INNER ..................... 105
V. La cláusula UNION y UNION ALL. ......................................................... 106
17. FUNCIONES DEFINIDAS POR EL USUARIO .......................................... 107
I. Funciones de tipo Escalares...................................................................... 107
II. Funciones de tipo tabla. ......................................................................... 108
18. TABLAS TEMPORALES ........................................................................... 109
I. Definición y uso de las Tablas Temporal en Memoria ............................... 109
II. Definición y uso de Tabla Temporal Física ............................................ 109
19. VISTAS ...................................................................................................... 111
I. ¿Qué es una Vista? Uso e implementación .............................................. 111
II. Creando una Vista desde el entorno gráfico. ......................................... 112
20. TRIGGERS ................................................................................................ 114
I. ¿Qué es un Trigger? Tipos posibles.......................................................... 114
II. Creación de Trigger tipo DELETE .......................................................... 114
21. BACKUP Y RESTORE DATABASE .......................................................... 115
I. Como realizar un Backup desde Managment Studio................................. 115
II. Como restaurar un Backup .................................................................... 116
III. Como crear un Backup desde Script ...................................................... 118
22. Shedule JOBS ........................................................................................... 119
I. ¿Qué es un SQL JOB? Opciones disponibles ........................................... 119
II. Preparando un JOB para realizar una tarea........................................... 120
23. ADMINISTRACIÓN DE USUAIROS, ROLES, SHCEMAS Y PERMISOS. 123
I. Usuarios y Logins ...................................................................................... 123
II. Roles de Base de Datos: tipos posibles. ................................................ 126
III. Crear y asignar un ROL a un Usuario desde T-SQL .............................. 126
IV. ¿Qué es un Schema? ............................................................................ 126
Un SCHEMA es un ESPACIO DE NOMBRES que adjunta OBJETOS, como lo
son tablas, stored procedures, etc… El ESQUEMA POR DEFECTO ES DBO.
......................................................................................................................... 126
V. Descripciones de Roles de Servidor y roles predefinido ........................ 127
ROLES PREDEFINIDOS DE BASE DE DATOS ......................................... 127
ROLES DE SERVIDOR ............................................................................... 127
24. SQL Server Profile..................................................................................... 128
I. Conocimiento de la herramienta. ............................................................... 128
II. Como monitorear procesos por tiempo de ejecución ............................. 130
25. 10 BUENAS PRÁCTICAS SOBRE DISEÑO, PROGRAMACIÓN Y
SEGURIDAD ....................................................................................................... 130
26. REFERENCIAS ......................................................................................... 132
TABLA DE ILUSTRACIONES
Ilustración 1 Object Explorer ................................................................................. 19
Ilustración 2 Demostración de conexión ................................................................ 20
Ilustración 3 Ventana Solution ............................................................................... 20
Ilustración 4 Agregar solución ............................................................................... 21
Ilustración 5 Nuevo proyecto ................................................................................. 21
Ilustración 6 Nuevo proyecto SQL Script ............................................................... 22
Ilustración 7 Resultado de la nueva solution ......................................................... 22
Ilustración 8 Ejecución de Script con resultado ..................................................... 23
Ilustración 9 Resultado del tipo de resultado ......................................................... 23
Ilustración 10 Botones de vistas de resultados ..................................................... 23
Ilustración 11 Restaurar el Layout ......................................................................... 24
Ilustración 12 Crear nueva base de datos ............................................................. 33
Ilustración 13 Nombre de la base de datos ........................................................... 33
Ilustración 14 Generado la base de datos ............................................................. 34
Ilustración 15 Escoger base de datos 1 ................................................................ 34
Ilustración 16 Acceder a la carpeta de Logins ....................................................... 35
Ilustración 17 Escoger base de datos 2 ................................................................ 36
Ilustración 18 Crear nueva tabla............................................................................ 37
Ilustración 19 Tabla Paciente ................................................................................ 37
Ilustración 20 Tabla paciente normalizada ............................................................ 38
Ilustración 21 Escoger opción ............................................................................... 39
Ilustración 22 Quitar opción de prevent ................................................................. 39
Ilustración 23 Abrir menú de Design ..................................................................... 40
Ilustración 24 Seleccionar la propiedad Is Identity ................................................ 41
Ilustración 25 Crear tabla con Trasnsact-SQL....................................................... 42
Ilustración 26 Tabla Historia .................................................................................. 42
Ilustración 27 diseño tabla HistoriaPaciente .......................................................... 43
Ilustración 28 Creación tabla Turno ....................................................................... 43
Ilustración 29 Tabla TurnoPaciente ....................................................................... 43
Ilustración 30 Crear tabla turnoEstado .................................................................. 44
Ilustración 31 Insertar en turnoEstado ................................................................... 44
Ilustración 32 Resultado ........................................................................................ 44
Ilustración 33 Generar SCRIPT para crear tabla ................................................... 45
Ilustración 34 script para país................................................................................ 45
Ilustración 35 Script Especialidad.......................................................................... 46
Ilustración 36 Tabla pago ...................................................................................... 46
Ilustración 37 Crear tabla PagoPaciente ............................................................... 47
Ilustración 38 Crear tabla de Conceptos ............................................................... 47
Ilustración 39 Definir tipo de dato .......................................................................... 48
Ilustración 40 Crear nuevo tipo de dato ................................................................. 49
Ilustración 41 Crear tipo de dato por consola ........................................................ 49
Ilustración 42 Cambiar tipo de dato a la tabla ....................................................... 50
Ilustración 43 New database Diagrams ................................................................. 52
Ilustración 44 Todas las tablas .............................................................................. 52
Ilustración 45 Modelo relacional ............................................................................ 53
Ilustración 46 Crear relación por medio de código ................................................ 53
Ilustración 47 RESEED en una tabla ..................................................................... 54
Ilustración 48 Ejemplo SELECT ............................................................................ 55
Ilustración 49 Ejemplo INSERT ............................................................................. 55
Ilustración 50 Ejemplo 2 de INSERT ..................................................................... 56
Ilustración 51 Ejemplo antes de DELETE ............................................................. 56
Ilustración 52 Ejemplo comando DELETE ............................................................ 56
Ilustración 53 Resultado después del DELETE ..................................................... 56
Ilustración 54 Actualizar registro ........................................................................... 57
Ilustración 55 Ejemplo de cláusula WHERE .......................................................... 57
Ilustración 56 Ejemplo 2 cláusula WHERE ............................................................ 58
Ilustración 57 Ejemplo clausula TOP ..................................................................... 58
Ilustración 58 Ejemplo clausula TOP con WHERE ................................................ 58
Ilustración 59 Ejemplo TOP con ORDER BY ........................................................ 59
Ilustración 60 Ejemplo de ORDER BY Descendente ............................................ 59
Ilustración 61 Ejemplo de ORDER BY ascendente ............................................... 60
Ilustración 62 Ejemplo de la cláusula DISTINCT ................................................... 60
Ilustración 63 Ejemplo cláusula DISTINCT para dos columnas ............................ 61
Ilustración 64 Ejemplo de la cláusula GROUP BY ................................................ 61
Ilustración 65 Ejemplo función MAX ...................................................................... 62
Ilustración 66 Ejemplo función MIN ....................................................................... 62
Ilustración 67 Función MIN con cláusula GROUP BY ........................................... 63
Ilustración 68 Ejemplo de Función SUM con GROUP BY ..................................... 63
Ilustración 69 Ejemplo función AVG ...................................................................... 64
Ilustración 70 Función AVG con GROUP BY ........................................................ 64
Ilustración 71 Ejemplo función COUNT ................................................................. 64
Ilustración 72 Ejemplo función HAVING ................................................................ 65
Ilustración 73 Ejemplo Operador AND .................................................................. 65
Ilustración 74 Ejemplo Operador OR ..................................................................... 66
Ilustración 75 Operador IN .................................................................................... 66
Ilustración 76 Ejemplo operador LIKE ................................................................... 67
Ilustración 77 Operador LIKE con % ..................................................................... 67
Ilustración 78 Ejemplo operador NOT ................................................................... 68
Ilustración 79 Ejemplo Operador BETWEEN ........................................................ 68
Ilustración 80 Ejemplo de Combinar operación ..................................................... 69
Ilustración 81 Ejemplo de procedimiento almacenado .......................................... 70
Ilustración 82 Procedimiento Almacenado desde Object Explorer ........................ 70
Ilustración 83 Condicional IF ................................................................................. 72
Ilustración 84 Condicional IF que no funciona ....................................................... 72
Ilustración 85 Ejecutar varias líneas con IF ........................................................... 73
Ilustración 86 Condicional ELSE ........................................................................... 74
Ilustración 87 IF EXISTS ....................................................................................... 75
Ilustración 88 Bucle WHILE ................................................................................... 76
Ilustración 89 Condicional CASE........................................................................... 77
Ilustración 90 Condicional CASE con SELECT ..................................................... 77
Ilustración 91 Ejemplo Instrucción RETURN ......................................................... 78
Ilustración 92 Ejemplo instrucción BREAK ............................................................ 78
Ilustración 93 Ejemplo de TRY CATCH ................................................................. 79
Ilustración 94 Parte 1 de operaciones aritméticas ................................................. 80
Ilustración 95 Parte 2 de operaciones aritméticas ................................................. 81
Ilustración 96 Parte 1 Operadores lógicos ............................................................ 82
Ilustración 97 Parte 2 Operadores lógicos ............................................................ 82
Ilustración 98 Proceso SP_HELP .......................................................................... 83
Ilustración 99 Ejemplo de SP_HELPTEXT ............................................................ 84
Ilustración 100 Menu Tools ................................................................................... 84
Ilustración 101 Ver menú de atajos ....................................................................... 85
Ilustración 102 Asignar comando .......................................................................... 85
Ilustración 103 Create Table ................................................................................. 86
Ilustración 104 Crear un dipo de dato ................................................................... 86
Ilustración 105 Crear función................................................................................. 86
Ilustración 106 ALTER TABLE con agregar campo .............................................. 87
Ilustración 107 ALTER TABLE para un CAMPO ................................................... 87
Ilustración 108 ALTER TABLE para ELIMINAR un campo.................................... 88
Ilustración 109 Ejemplo de DROP ......................................................................... 88
Ilustración 110 Ejemplo TRUNCATE TABLE parte 1 ............................................ 89
Ilustración 111 Ejemplo TRUNCATE TABLE parte 2 ............................................ 89
Ilustración 112 Ejemplo TRUNCATE TABLE parte 3 ............................................ 90
Ilustración 113 Ejemplo función Left ...................................................................... 91
Ilustración 114 Ejemplo función Right ................................................................... 91
Ilustración 115 Ejemplo con concatenar ................................................................ 92
Ilustración 116 Ejemplo sencillo de LEN ............................................................... 92
Ilustración 117 Función LEN con LEFT ................................................................. 93
Ilustración 118 Ejemplo función LOWER Y UPPER .............................................. 93
Ilustración 119 Upper y Lowwer para dar formato ................................................. 94
Ilustración 120 Cambiar un carácter ...................................................................... 94
Ilustración 121 Replace por un carácter ................................................................ 95
Ilustración 122 Ejemplo función Replicate ............................................................. 95
Ilustración 123 Función LTRIM y RTRIM .............................................................. 96
Ilustración 124 Función CONCAT ......................................................................... 96
Ilustración 125 Función GETDATE GETUTCDATE .............................................. 97
Ilustración 126 Función DATEADD ....................................................................... 98
Ilustración 127 Función DATEIFF ......................................................................... 98
Ilustración 128 Función DATEPART ..................................................................... 99
Ilustración 129 Función ISDATE ........................................................................... 99
Ilustración 130 Función ISDATE incorrecta ......................................................... 100
Ilustración 131 Función CAST ............................................................................. 100
Ilustración 132 Función CONVERT ..................................................................... 101
Ilustración 133 Ejemplo de TRANSACTION........................................................ 102
Ilustración 134 Representación de INNER JOIN ................................................. 102
Ilustración 135 Ejemplo de la cláusula INNER JOIN ........................................... 103
Ilustración 136 Representación de LEFT JOIN ................................................... 103
Ilustración 137 Ejemplo de LEFT JOIN ............................................................... 104
Ilustración 138 Representación de RIGHT JOIN ................................................. 104
Ilustración 139 Ejemplo de RIGHT JOIN ............................................................. 105
Ilustración 140 Ejemplo de UNION...................................................................... 106
Ilustración 141 Ejemplo de UNION ALL .............................................................. 106
Ilustración 142 Crear una función tipo escalar .................................................... 107
Ilustración 143 Probar Función............................................................................ 107
Ilustración 144 Ejemplo de creación de función tipo tabla ................................... 108
Ilustración 145 Ejemplo de llamado de función tipo tabla .................................... 108
Ilustración 146 Crear una tabla temporal en memoria ......................................... 109
Ilustración 147 Ingresando datos y creando tabla temporal en memoria ............ 109
Ilustración 148 Crear tabla temporal física .......................................................... 110
Ilustración 149 Ejemplo de TABLA TEMPORAL FÍSICA ..................................... 110
Ilustración 150 Crear vista ................................................................................... 111
Ilustración 151 Seleccionar visual de la vista ...................................................... 111
Ilustración 152 Crear VISTA ................................................................................ 112
Ilustración 153 Agregar tablas ............................................................................. 112
Ilustración 154 Seleccionar campos .................................................................... 113
Ilustración 155 Selección de filtro ........................................................................ 113
NOTA ANTES DE EMPZAR.
Estos son mis apuntes personales, quizás no esté al nivel curso original de Udemy,
dictado por Analista de Sistemas de información Mariano Puglisi. Por ello quizás
haya contenasdasdsadido faltante o notas propias.
1. FUNDAMENTOS Y ESTRUCTURAS DE BASE DE
DATOS
I.¿QUÉ ES MICROSOFT MANAGMENT STUDIOS?
Es un entorno que nos permite conectarnos a distintas instancias de bases de datos
y nos permite administrar sus objetos. Es decir, podemos crear tablas, procesos,
diagramas de base de datos y crear todos los objetos que estén relacionados con
una base de datos.
El entorno Managment Studio lo que nos va a permitir es conectarnos al motor y
poder gestionar todos sus objetos para poder crear nuestra base de datos, su
interfaz contiene lo siguiente.
El primer objeto que tenemos en cuenta es el
Object Explorer, es el que nos muestra a que
instancia estamos conectados en el motor SQL
Server en sí.
Ilustración 1 Object Explorer
Otro panel que se encuentra a la derecha es el Solution Explorer, este nos va a
mostrar las soluciones que vamos a gestionar con distintos proyectos de nuestra
base de datos.
Ilustración 2 Demostración de conexión
En el centro nos van a mostrar todos los scripts con sus respectivos resultados, cual
está conectada por defecto a la base de datos master, que es una base de datos
por sistema.
Esta es la Solution Explorer, donde
muestran todas las soluciones que van
mostrando del proyecto, cual se puede
guardar a parte para tenerla a la mano.
Ilustración 3 Ventana Solution
Ilustración 4 Agregar solución
Ilustración 5 Nuevo proyecto
Ilustración 6 Nuevo proyecto SQL Script
Luego de hacer ese proceso se creará una nueva
solution al proyecto designado donde se tendrá lo
siguiente: Connections, Queries, Miscellaneus.
Ilustración 7 Resultado de la nueva solution
Con esto podemos agregando los distintos scripts para los proyectos.
Otra ventana importante es la de los mensajes o resultados donde muestra el
resultado de la ejecución de un script de SQL, cual se verá a continuación.
Ilustración 8 Ejecución de Script con resultado
Como se observa en la ilustración 8 esta presentado en forma de tabla, hay una
manera para que solo se presente en forma de texto que es presionando la
combinación de teclas Ctrl + t y se verá como a continuación.
Ilustración 9 Resultado del tipo de resultado
Para volver a la vista de tabla con la combinación de teclas ctl + D o a la de archivo
con la combinación de teclas Ctl + Shift + f o en el menú de arriba con los siguientes
botones.
Ilustración 10 Botones de vistas de resultados
II.Herramientas del Managment Studio.
Todas las vistas o ventanas son modificables para la comodidad del usuario a la
hora de usar, cual puede ser a la izquierda, abajo, derecha y organizar como desee
el usuario.
Si uno quiere restaurar las vistas solo es presionar el botón en la barra de
herramientas Window y Reset Window Layout, le presionamos aceptar y se
reinicia a defecto las vistas de la herramienta.
Ilustración 11 Restaurar el Layout
2. FUNDAMENTOS Y ESTRUCTURA DE UNA BASE DE
DATOS
I. ¿Qué es una base de Datos?
Una base de datos este compuesto de distintas cosas, como lo son tablas, campos
que contiene títulos, autor, genero, ISB, etc. y los registros son los datos que
contiene la información de los libros, comparándolo con una biblioteca.
II.¿Qué es una tabla?
Una tabla es un espacio donde se guarda campos, a la cual cuando se guarda
información en este se llama registros, una tabla puede tener desde un campo
(que no es lo común) hasta una cantidad grande de campos (cual tampoco es
recomendable).
Los registros en la tabla es la información que va alimentando la tabla, tengamos
de ejemplo una tabla de libro, donde sus campos pueden ser nombre, autor, año,
editorial…
III.¿Qué es un tipo de dato?
Un tipo de dato es el tipo de valor que va a contener un campo, es muy importante
saber qué tipo de valor, para que concuerda con la información que se va
almacenar en la base de datos. Acompañado del tipo de dato también la cantidad
de caracteres máximos que puede tener un campo.
IV. Tipos de datos exigentes.
Dependiendo del tipo de dato se recomienda un tipo de dato, pero para ello vamos
a revisar los datos básicos de la informática.
• Bit: 0 o 1.
• Byte: 8 bits
• Kilobyte: 1024 Bytes.
• Megabyte: 1024 Kilobytes.
• Gigabyte: 1024 Megabytes.
• Terabyte: 1024 Gigabytes.
• Petabyte: 1024 Terabytes
Ahora si vamos a ver que dependiendo del tipo de dato para saber qué tipo de datos
vamos a escoger y optimizar nuestra base de datos, porque si ponemos un nombre
de 2000 caracteres es muy poco probable y si tenemos una tabla con 1000
registros, sería mucho espacio de almacenamiento reservado solo para ese
campo.
Vamos a revisar los datos más utilizados en SQL Server.
Datos numéricos.
Por la parte de enteros tenemos los siguientes tipos de datos:
•
BIT: 0 o 1 True o False
•
TINYINT: 1 byte y va desde 0 a 255
•
SMALLINT: -215 (-32,768) HASTA 215 (32,767)
•
INT: 4 bytes -215 (2,147,483,648) HASTA 231-1 (2,147,483,647)
•
BIGINT 8 bytes -263 (-9,223,372,036,854,775,808) 263-1
(9,223,372,036,854,775,807)
Decimales tenemos los siguientes tipos de datos:
• MONEY 8 bytes -922,337,203,685,477.5808 hasta
922,337,203,685,477.5807
• DECIMAL (10,2) Precisión y Escala
o 1 a 9: 5 bytes.
o 10 a 19: 9 bytes.
o 20 a 28: 13 bytes
o 29 a 38: 17 bytes.
Datos texto y Binarios
Por la parte de texto tenemos los siguientes tipos de datos:
• CHAR: 1 byte por carácter UTF-8 1 hasta 8000 MAX
• VARCHAR 1 byte por carácter variable UTF-8 hasta 8000 MAX hasta 231-1
bytes (2 GB)
• NCHAR 2 bytes por carácter UTF-16 1 hasta 4000
• NVARCHAR 2 bytes por carácter UTF-16 1 hasta 4000 MAX 230-1 Caracteres
(2 GB de espacio) (1 GB de datos)
Por parte de los datos binarios tenemos.
• BINARY: 1 byte por valor 1 hasta 8000
• VARBINARY: 1 byte por valor variable 1 hasta 8000 231-1 bytes (2GB)
Datos de fecha y hora:
Para los datos de fecha y hora tenemos:
• DATE 3 bytes YYYY-MM-DD 01/01/0001 hasta 31/12/9999
• TIME 5 bytes hh:mm:ss:nnnnnn 00:00:00.000000 hasta 23:59:59.999999
• DATETIME 8 bytes YYYY-MM-DD hh:mm:ss:nnn 01/01/1753 HASTA
31/12/9999 00:00:00 HASTA 23:59:59.997
• SMALLDATETIME 4 bytes YYYY-MM-DD hh:mm:ss 01/01/1900 HASTA
06/06/2079 00:00:00 HASTA 23:59:59
3. RESTRICCIONES Y PROPIEDADES DE CAMPOS
I. ¿Qué es una Primary Key?
La clave Primary key (PK), identifica de manera única a cada registro de una tabla,
el valor que contiene la columna definida como Primary key, debe ser único, una
de las condiciones es que debe ser NOT NULL (No se permite valores nulos), una
tabla puede tener más de un campo PK, a la que llamamos CLAVE COMPUESTA.
Sea SIMPLE o COMPUESTA, cada tabla solo podrá tener clave primaria
(PRIMARY KEY) es decir sólo habrá una única clave primaria de este tipo. No se
podrá crear otra combinación.
II. ¿Qué es una Foreign Key?
La clave foránea o Foreign key, debe ser del mismo tipo de dato que su campo
relacionado. El valor del campo relacionado. El valor del campo definido como FK
puede ser Null.
Restricciones y propiedades de campos
¿Qué es una Primary Key (PK)?
Una Primary Key o Clave primaria, está compuesta por uno o más campos de una
tabla. Este grupo de campos que conforman una PK hacen que cada registro de la
tabla se pueda identificar unívocamente. Es decir que, solo existirá un único registro
con determinados valores en los campos conformados por la PK. No habrá
repeticiones.
Esta es una de las primeras reglas de Integridad Referencial de Base de Datos.
¿Qué es una Foreign Key (FK)?
Una Foreign Key o Clave Foránea (Ajena), es aquella Relación entre la Clave
Primaria de una Tabla llamémosla A, la cual está relacionada directamente con uno
o más campos del mismo tipo de una tabla B.
La tabla B solo podrá tener valores ene l campo con Clave Foránea, que existan
únicamente en la Tabla A. No podrá tener otros valores.
La Clave Foránea también es una de las reglas de Integridad Referencial de Base
de datos.
III. ¿Qué es la propiedad IDENTITY?
Propiedad Identity de un campo.
La propiedad Identity se puede establecer a uno o más campos de una tabla
determinada.
Un campo con propiedad Identity activada, hará que su valor se incremente
automáticamente a medida que se inserten registros en la tabla.
Es por ello que, para que un campo puede se Identity, su tipo de dato debe ser
numérico.
Por lo general establecemos Identity a un campo que es Primary Key. Con esto
lograremos que su valor no se duplique, generando registros unívocos (únicos).
Argumentos de la propiedad Identity
Existe un argumento requerido llamado Seed.
El argumento Seed define desde que valor comienza a incrementar su valor.
Si el valor de Seed es 1, comenzará a incrementar desde 1.
Si el valor de Seed es 5, comenzará a incrementar desde 5.
También existe un argumento de la propiedad Identity, llamado Increment.
Si el valor de Increment es 1, el valor del campo se guardará con valores correlativo
ej: 1,2,3,4.
Si el valor de Increment es 2, el valor del campo se guardará con valores correlativos
ej: 1,3,5,7
Para definir un campo con propiedad Identity (Seed =1, Increment=2) desde T-SQL
colocamos:
EJ: [NombreCampo] [int] IDENTITY (1,2)
Ejemplo de tabla con propiedad IDENTITY (1,2)
Tabla 1 Ejemplo de la propiedad Identity
Ejemplo de tabla con propiedad IDENTITY (10,1)
Tabla 2 Ejemplo propiedad IDENTITY (10,1)
IV. Normalización de la Base de datos
Tabla 3 Tabla médicos sin normalizar
Primera 1FN
Se dice que una Tabla está en Primera Forma Normal y si sólo si todos sus campos
(Atributos) contienen valores atómicos. Esto quiere decir que cada Atributo de la
tabla deberá tener un único valor para una ocurrencia de la Entidad. No se
permitirán grupos repetitivos.
Tabla 4 Tabla pacientes con 1FN
Segunda 2FN
Una tabla está en Segunda Forma Normal si y solo si están en 1FN y todos los
Atributos no clave dependen de por completo de la clave primaria.
Tercera 3FN
Una tabla está en Tercera Forma Normal si y sólo si está en 2FN los atributos no
clave son independientes entre sí. Esto quiere decir que los valores de los atributos
dependen sólo de la clave primaria y no depende de otro Atributo no clave. El
valor del Atributo no debe depender del valor de otro Atributo no clave.
Tabla 5 Tabla paciente 2FN y 3FN
Tabla 6 Tabla país
Tabla 7 Tabla medico
Tabla 8 Tabla TurnoPaciente
4. DISÑENADO NUESTRA PRIMERA BASE DE DATOS
En esta parte ya se deja tanto de teoría y empieza a hacer más de práctica, por
ello se recomienda que vaya planchando nalga y tirar código.
I. Creando el archivo de Base de Datos.
Para empezar, nos vamos a abrir nuestro gestor de base de datos y vamos a
conectarnos al motor de bases de datos, en el menú de la izquierda Object
explorer vamos a pararnos sobre la carpeta de Databases presionamos clic
derecho y nos aparecerá la siguiente ventana:
Ilustración 12 Crear nueva base de datos
Ahora le ponemos el nombre de la base de datos correspondiente al proyecto que
estemos realizando.
Ilustración 13 Nombre de la base de datos
Cuando presionemos guardar la base de datos nos generara dos archivos, un
MDF para la base de datos y un archivo log con extensión RDF.
Una recomendación es cambiar la ubicación donde se genera la base de datos en
otro disco que no sea el disco del sistema ya que si se formatea y no se tiene
backup se perderá.
Generada la BD veremos en el Object Explorer los siguientes archivos o carpetas
que gestiona SQL Server.
Ilustración 14 Generado la base de datos
II. Abriendo una ventana de script y estableciendo la base
CentroMedico por default.
Para escoger la base de datos que deseemos cuando abrimos el Managment
Studio hay de dos maneras, la primera es al abrir un script y escoger manualmente
la base de datos.
Ilustración 15 Escoger base de datos 1
Para la segunda manera vamos al Object Explorer, carpeta security y finalmente
a la parte de Logins, vamos al usuario correspondiente, en este caso SA y
presionamos clic derecho propiedades.
Ilustración 16 Acceder a la carpeta de Logins
Al abrir las propiedades nos aparecerá la siguiente ventana, la cual en la parte
inferior en la sección Default database seleccionamos la que vamos a trabajar en
este caso centroMedico y así quedará por defecto la base de datos seleccionada.
Ilustración 17 Escoger base de datos 2
Después de eso hay que desconectar y volver a conectarse a la base de datos, para
que el cambio surta efecto.
III. Definiendo la Tabla Pacientes y aplicando Formas Normales.
Para crear una tabla en la base de datos, vamos al Object Explorer, seleccionamos
la base de datos en este caso centroMedico (La segunda palabra va junta y en
mayúscula). Vamos a la selección de Tablas presionamos clic derecho y new
Table.
Ilustración 18 Crear nueva tabla
Ahora al tener el diagrama abierto empezamos a introducir los nombres de las
columnas con su respectivo tipo de dato, al realizar esto el primer dato en nuestro
caso idPaciente tendrá llave primaria cual en la columna de la izquierda clic
derecho y seleccionamos Primary Key, cuando se tenga todo organizado,
seleccionamos la opción y guardar y ponemos el nombre de la tabla (cual siempre
va en singular).
Ilustración 19 Tabla Paciente
Si analizamos la tabla de la ilustración 19, no corresponde a la 1FN, 2FN, 3FN por
los campos idTurno y idEspecialista y fechaAlta ya que, si un paciente tiene
varios turnos o citas con especialistas y si le dan varias fechas de alta, se estaría
repitiendo varias veces. Para ello eliminamos los campos anteriores y agregamos
un campo email y observación.
Ilustración 20 Tabla paciente normalizada
IV. Cómo desactivar el warning Prevent saving changes that require
table re-created
Cuando nos salga el error que no se pueden guardar porque requiere que la tabla
se rehace con drop y organizarla con los cambios que uno quiere.
Para evitar esto vamos a la barra de menú escogemos opciones.
Ilustración 21 Escoger opción
Cuando nos abra la ventana vamos a la sección de Designers escogemos la opción
de Table and Database Designers, ya en esa opción desmarcamos la ultima
opción que dice “Prevent saving changes thar require table re-creations”.
Ilustración 22 Quitar opción de prevent
V. Estableciendo la propiedad IDENTITY en la tabla paciente
Vamos a activar la propiedad IDENTITY en el campo idPaciente en la tabla
Paciente.
Esta propiedad hará que el valor del campo idPaciente, se incremente
automáticamente a medida que insertamos registros en la tabla.
Hacemos clic derecho sobre la tabla y seleccionamos la vista de diseño.
En la lista propiedad, damos dobles click a la propiedad Is Identity.
Guardamos los cambios desde la barra de menú, listo.
Ilustración 23 Abrir menú de Design
Ilustración 24 Seleccionar la propiedad Is Identity
VI. Cómo crear una tabla y definir su Primary Key desde Transact-
SQL
Lo primero es abrir un nuevo Query, cual vamos a llamar la tabla en este caso
Paciente1, donde cada campo separado por una coma (,), dando así sus
características como lo puede ser NOT NULL o puede ser Primary Key, viéndolo a
continuación.
Ilustración 25 Crear tabla con Trasnsact-SQL
VII. Definiendo la Tabla de Historias Clínicas
Vamos a hacer el mismo proceso del paso III para crear la tabla de Historias
Clínicas. Tengamos en cuenta que la columna idHistoria tiene la propiedad
Identity.
Ilustración 26 Tabla Historia
Vamos a crear una tabla nueva de intermediaria para la tabla Historia, tabla
Paciente y tabla Medico.
Ilustración 27 diseño tabla HistoriaPaciente
Al ser una tabla especial de conexión, todos sus datos serán tomados como llaves
primarias, en la cual cada dato será importante.
VIII. Definiendo las Tablas de Turnos (Turno, TurnoPaciente y
TurnoEstado)
Vamos a crear una nueva tabla, de la misma manera que las veces anteriores.
Ilustración 28 Creación tabla Turno
Ahora nos falta relacionar la tabla turno con paciente y para ello vamos a crear otra
tabla.
Ilustración 29 Tabla TurnoPaciente
IX. Insertar registros en la tabla turnoEstado
Para ello vamos a crear la tabla turnoEstado, primero vamos a abrir un nuevo
query, el cual vamos a introducir el siguiente código.
Ilustración 30 Crear tabla turnoEstado
Ahora vamos a introducir los posibles estados del turno, para ello vamos a
introducir las siguientes líneas de código.
Ilustración 31 Insertar en turnoEstado
Vemos que ingreso correctamente los registros y para comprobar solo debemos
ingresar el siguiente SELECT y veremos el resultado.
Ilustración 32 Resultado
X. Ejercicio crear Tablas especialidades y países.
Aquí se recomienda que cada uno se tome la tarea de diseñar la tabla de país y la
tabla de especialidad, tengan en cuenta que la posible PK para país puede ser la
que definimos anteriormente como idPais con tipo de dato char 3. Y para ver si
corresponde con los códigos correspondientes se ve a continuación.
Ilustración 33 Generar SCRIPT para crear tabla
En el caso del script de país es el de a continuación.
Ilustración 34 script para país
Y para la tabla especialidad el código queda así.
Ilustración 35 Script Especialidad
Antes de eso también se definirá la tabla de médico, para ello solo se tendrá su Id,
nombre y apellido.
XI. Definiendo la tabla de pagos.
Ilustración 36 Tabla pago
XII. Definiendo la tabla de Relación Pago/ Paciente/ Turno
Ilustración 37 Crear tabla PagoPaciente
XIII. Definiendo la tabla de Conceptos
Ilustración 38 Crear tabla de Conceptos
XIV. Definiendo Tipos de Datos de Usuarios.
Un tipo de dato de usuario lo que nos facilita es crear un tipo de dato en particular,
un nombre que especificamos y poderlo usar en todo el ciclo de vida de la base
de datos. Esto nos ayuda a evitar perder el seguimiento de los datos.
Para ello vamos a abrir la base de datos en Programmability y en types.
Ilustración 39 Definir tipo de dato
Ilustración 40 Crear nuevo tipo de dato
Ilustración 41 Crear tipo de dato por consola
Después de crear los tipos de datos, vamos a ir a la tabal en este caso va a ser la
de Paciente y vamos a diseño, escogemos el Data Type de la ID escogida y vamos
a cambiarlo al
Ilustración 42 Cambiar tipo de dato a la tabla
Esto nos permite establecer un orden en todas las tablas para que sea el mismo
tipo de dato y no tener problemas mas adelante con la consistencia.
XV. Conceptos de Relaciones entre tablas.
Las relaciones entre tablas no son obligatorias. Una base de datos puede no tener
tablas relacionadas.
No obstante, una BD sin relaciones, corre el riesgo de perder la integridad de los
datos en las tablas, ya que no tiene definida las reglas de Integridad Referencial.
¿Qué son éstas Reglas?
Son propiamente las relaciones entre tablas, en las que un campo Primary Key (PK)
se relaciona un campo de otra tabla (del mismo tipo de dato), al cual llamamos
Foreign Key (FK).
¿De que me sirve crear esta relación?
Esta relación NO permitirá colocar un valor en el campo definido como FK, que no
esté definido en la tabla definida con el campo PK.
Ejemplo
Tabla Paciente (campo idpais FK)
Tabla Pais (Campo idpais PK)
Si tratamos de insertar un paciente nuevo con un código de país que no existe en
la tabla país, devolverá error y no permitirá su grabación.
¿Por qué no me permite insertar el registro?
Porque se ha definido la relación entre ambas tablas. Es una regla de Integridad
Referencial, y que proviene que guardemos registros con valores indefinidos.
Esto hace que, del lado del interfaz de usuario, siempre se pueda visualizar
información consistente.
¿Qué sucede si quiero eliminar un registro de la tabla País, cuyo país está
asignado a un Paciente?
Al igual que antes, la regla de Integridad no nos permitirá eliminar el país, hasta que
cambiemos el país del Paciente por otro.
Esta es la característica principal de las Bases de Datos relacionales.
XVI. Modelando el Diagrama Entidad Relación DER y definiendo las FK.
Vamos a la base de datos que tenemos de elección y vamos a la sección de
Database Diagrams. Click derecho y escogemos la opción de New Database
Diagram.
Ilustración 43 New database Diagrams
Al escoger eso nos aparece un listado con todas las tablas de la base de datos que
hayamos creado. Donde escogemos todas las tablas.
Ilustración 44 Todas las tablas
Organizamos las tablas de una manera sencilla que podamos trabajar. Para crear
la relación debemos seleccionar el campo presionar click y llevar el campo hacia la
otra tabla, quedando así.
Ilustración 45 Modelo relacional
XVII. Crear relación con TRANSACT-SQL
Teniendo en cuenta la relación que hay entre las tablas paciente y país vamos a
eliminarla de la manera grafica para así realizarla por medio de scripts. Quedando
así el siguiente código.
Ilustración 46 Crear relación por medio de código
XVIII. Cómo reiniciar un campo IDENTITY con DBCC
Lo primero es que la tabla no debe tener registros, para reiniciar, los parámetros
para reiniciar son los siguientes: el nombre de la tabla, el comando RESEED y el
numero a partir del cual desea que vuelva a empezar.
Ilustración 47 RESEED en una tabla
5. COMANDOS SQL PARA MANIPULACIÓN DE
REGISTROS.
I. Comando SELECT FROM
Lo primero que debemos tener en cuenta para hacer estos comandos es que
debemos estar usando la base de datos correspondiente, ya sea escogiéndolo de
manera grafica o usando el comando USE. Después de eso ya especificar
mediante las clausulas que se verán mas adelante. Por ahora veremos el SELECT
* FROM TABLE más sencillo.
Aclarando que el * se puede cambiar por cualquier columna o grupo de columnas
que estén dentro de la tabla o tablas para así tener el SELECT más completo.
Ilustración 48 Ejemplo SELECT
II. Comando INSERT
Siguiendo con la misma lógica que con el SELECT FROM tenemos el comando
para insertar registros dentro de nuestras tablas, la estructura básica de esta es
INSERT INTO TBALE VALUES (XXXXX,XXXXX,XXXX). Hay varias cosas que
tener en cuenta a la hora de usar este comando, es que el Auto incremental como
son los ID no se colocan por lo general y también uno puede especificar a que
columnas.
Ilustración 49 Ejemplo INSERT
También se puede especificar a que campos uno quiere que se le agreguen los
registros, para ello después de especificar el nombre de la tabla, se debe poner
entre paréntesis los campos que se van a agregar.
Ilustración 50 Ejemplo 2 de INSERT
III. Comando DELETE
Este comando nos permite eliminar registros de la Tabla y es es uno de los más
PELIGROSOS dentro de SQL, ya que si no se especifica que se va a eliminar dentro
de este, podría vaciar toda la tabla si no tiene toda la cláusula WHERE, tomando en
cuenta el ejemplo anterior con Autor.
Ilustración 51 Ejemplo antes de DELETE
Realizando el comando DELETE vemos a continuación con base de la información
del anterior SELECT.
Ilustración 52 Ejemplo comando DELETE
Ilustración 53 Resultado después del DELETE
IV. Comando UPDATE
Con el comando UPDATE nos permite actualizar registros dentro de las tablas, este
comando nos permite cambiar un elemento, conjunto de elementos o la totalidad de
estos. Por ello hay que tener mucho cuidado a la hora de escribir su sentencia, un
ejemplo que se tiene es el de a continuación.
Ilustración 54 Actualizar registro
6. CLÁUSULAS SQL
Estas cláusulas nos sirven para ordenar y agrupar los registros de las consultas
dentro de SQL.
I. Cláusula WHERE.
Esta cláusula nos permite filtrar datos, nos sirve para seleccionar unos registros
digamos por apellidos, país o entre otros tipos de registros.
Por ejemplo, podemos tener en la tabla autores de libros aquellos que nacieron en
Colombia.
Ilustración 55 Ejemplo de cláusula WHERE
También podemos poner doble clausula con el AND con el cual podemos tener
varias por ejemplo, autores de USA y que hayan vivido en el siglo pasado.
Ilustración 56 Ejemplo 2 cláusula WHERE
II. Cláusula TOP
La clausula TOP va después de la clausula SELECT, cual devuelve la cantidad de
registros en orden, es decir devuelve los dos primeros.
Ilustración 57 Ejemplo clausula TOP
También se le puede incluir la clausula WHERE para la selección.
Ilustración 58 Ejemplo clausula TOP con WHERE
Y para traer el registro mas reciente es por medio de un ORDER BY.
Ilustración 59 Ejemplo TOP con ORDER BY
III. Cláusula ORDER BY
La cláusula ORDER BY es para organizar las consultas de manera ascendente o
de manera descendente.
Ilustración 60 Ejemplo de ORDER BY Descendente
Y por defecto ordena de manera ascendente.
Ilustración 61 Ejemplo de ORDER BY ascendente
IV. Cláusula DISTINCT
La clausula DISTINCT funciona para agrupar por un campo en particular, digamos
que a partir de los ejemplos anteriores podemos con la columna País.
Ilustración 62 Ejemplo de la cláusula DISTINCT
Ilustración 63 Ejemplo cláusula DISTINCT para dos columnas
Como se puede ver trajo todos los registros de la tabla, esto ya que la cláusula
DISTINCT solo trae los repetidos y al haber nombres distintos no los agrupa.
V. Cláusula GROUP BY
Esta cláusula funciona igual que DISTINCT excepto que nos permite agregar
funciones de agregado.
Ilustración 64 Ejemplo de la cláusula GROUP BY
7. FRUNCIONES DE AGREGADO
Las funciones de agregado son acompañantes de la cláusula GROUP BY.
I. Función MAX y MIN
Esta función nos permite ver el máximo y el mínimo de la tabla, es decir fechas, id
o para lo que sea necesario.
Ilustración 65 Ejemplo función MAX
Ilustración 66 Ejemplo función MIN
Para verlo con la cláusula GROUP BY es a continuación.
Ilustración 67 Función MIN con cláusula GROUP BY
II. Función SUM
La función SUM se aplica directamente sobre el campo que uno desea sumar, cual
suma los totales con respecto a la cláusula GROUP BY.
Ilustración 68 Ejemplo de Función SUM con GROUP BY
III. Función AVG
Esta función nos permite calcular el promedio de un campo numérico.
Ilustración 69 Ejemplo función AVG
Ilustración 70 Función AVG con GROUP BY
IV. Función COUNT
La función COUNT nos funciona para contar la cantidad de filas o registros que hay
en el campo o tabla.
Ilustración 71 Ejemplo función COUNT
V. Función HAVING
Lo que nos permite ver que tiene, función HAVING funciona con la función COUNT
y la cláusula GROUP BY.
La diferencia entre el WHERE Y EL HAVING es que el WHERE nos filtra sobre
registro a registro, a comparación del HAVING lo hace sobre un conjunto de
registros.
Ilustración 72 Ejemplo función HAVING
8. OPERADORES LÓGICOS
I. Operador AND
Lo que nos permite es concatenar varias condiciones dentro de la cláusula
WHERE. Donde ambas condiciones se deben combiar.
Ilustración 73 Ejemplo Operador AND
II. Operador OR
En este operador una de las condiciones se debe cumplir para devolver.
Ilustración 74 Ejemplo Operador OR
III. Operador IN
En este operador nos permite filtrar en un grupo de valores que vamos a
establecer.
Ilustración 75 Operador IN
IV. Operador LIKE
El operador LIKE lo que nos permite trabajar sobre cadenas caracteres.
Ilustración 76 Ejemplo operador LIKE
Para nombres que no sean completos, se utiliza la combinación del carácter con
el %.
Ilustración 77 Operador LIKE con %
V. Operador NOT
Lo que nos permite es negar cualquier operador ejecutado antes.
Ilustración 78 Ejemplo operador NOT
Lo que nos permite ver son el resto de apellidos que no cumplía en el ejemplo de la
operación LIKE.
VI. Operador BETWEEN
Lo que nos permite este operador es filtrar los registros por un determinado rango,
que puede ser fechas, números, textos.
Ilustración 79 Ejemplo Operador BETWEEN
VII. Combinación Operadores
Uno puede combinar varias de las operaciones antes mencionadas , como por
ejemplo.
Ilustración 80 Ejemplo de Combinar operación
Para darle importancia hay que encerrar entre paréntesis para que devuelva
correctamente.
9. STORED PROSCEDURES
I. ¿Qué es un Stored Procedure? Estructura y manipulación
Es un conjunto de instrucciones SQL que esta almacenado, que no este en un
archivo, esta almacenado internamente en el SQL. Estos están diseñados para
realizar múltiples acciones concretas. Por lo general para lo que nos sirve es para
un proceso de inserción, editar, eliminar registros. Lo principal es que tenga un
objetivo.
La estructura es un Stored Procedure es CREATE PROC (es una abreviatura)
SP_EJEMPLO (NOMBRE) (PARAMETROS)
Ilustración 81 Ejemplo de procedimiento almacenado
También se puede hacer de manera mas grafica en la carpeta programability.
Ilustración 82 Procedimiento Almacenado desde Object Explorer
II. ¿Qué es una variable? Uso de INSNULL para evaluar valores.
Una variable es un valor que nos sirve para guardar distintos tipos de valores, que
pueden ser de los mismos tipos de datos que se pueden asignar a la base de datos.
Y el ISNULL es para comprobar si una variable esta vacía y devolverla un resultado
por si resulta siendo
III. Programando Subconsultas y uso de Alias Tablas
Las subconsultas son resultados a partir de otra consulta, para tener en cuenta el
subqueri debe ser solo de un valor. Y el alias a una tabla es para darle un nombre
alternativo.
10. ESTRUCTURA DE CONTROL
En esta sección vamos a ver las estructuras que se pueden ejecutar en SQL
SERVER para evaluar un bloque de código, cuales son las siguientes estructuras.
I. El condicional IF ELSE y estructura BEGIN END
Nos sirve para evaluar el valor de una variable o una consulta para ejecutar acciones
que sean necesarias para el este resultado.
Ilustración 83 Condicional IF
Como vemos funciona la condicional IF, pero en el caso que no funcione no nos
devolverá nada la condicional.
Ilustración 84 Condicional IF que no funciona
Para ejecutar varias líneas de script se debe ingresar entre BEGIN y END, o si no
solo se ejecutara la primera línea de esta.
Ilustración 85 Ejecutar varias líneas con IF
Y si no se ejecuta la condición IF se ejecuta la condición ELSE.
Ilustración 86 Condicional ELSE
II. La función EXIST
La función EXIST nos permite evaluar si un grupo de registros de determinada
consulta existe.
Ilustración 87 IF EXISTS
Hay que tener en cuenta el tabulado a la hora de escribir los scripts para así tener
en cuenta el orden y saber lo que uno escribe.
III. El bucle WHILE
El bucle WHILE nos permite ejecutar un bloque de código hasta que la condición
se cumpla.
Ilustración 88 Bucle WHILE
En este caso recordar que el WHILE la variable CONTADOR debe estar
AUMENTANDO O DISMINUYENDO o sino se ejecutara ínfimamente y no
queremos eso.
IV. El condicional CASE
La condicional CASE nos sirve para evaluar valores, y evaluando resultados
dependiendo del resultado de este, la podremos utilizar en un SELECT.
Ilustración 89 Condicional CASE
Ilustración 90 Condicional CASE con SELECT
V. Las instrucciones RETURN y BREAK
La instrucción RETURN nos permite salir del SCRIPT para consola y todas las
instrucciones que estén después de esta instrucción no se ejecutarán
Ilustración 91 Ejemplo Instrucción RETURN
y la instrucción BREAK va a salir del bucle antes que termine.
Ilustración 92 Ejemplo instrucción BREAK
VI. La estructura TRY CATCH
Lo que nos permite la estructura TRY CATCH es para los errores no controlados
durante la ejecución, nos permite capturar el error y devolvernos el error específico
mediante consola.
Ilustración 93 Ejemplo de TRY CATCH
11. OPERACIONES ARITMÉTICAS Y DE COMPARACIÓN
I. Operadores Aritméticos de suma, resta, división,
multiplicación, módulo.
Tenemos una gran cantidad de operaciones aritméticas dentro de las opciones de
SQL, en los cuales puede ser ejecutado dentro de las variables que nosotros
mismos podemos declarar.
Ilustración 94 Parte 1 de operaciones aritméticas
Ilustración 95 Parte 2 de operaciones aritméticas
II. Operadores mayor o igual, menor o igual, distinto.
Ilustración 96 Parte 1 Operadores lógicos
Ilustración 97 Parte 2 Operadores lógicos
12. HERRAMIENTAS ADICIONALES
I. Proceso SP_help
Este proceso nos permite ver el detalle de los objetos que tenemos definidos en
nuestra base de datos y se escribe de manera sp_help (con el nombre de la
tabla)
Ilustración 98 Proceso SP_HELP
II. Proceso SP_HELPTEXT
Este proceso es igual al anterior pero solo funciona con Procedimientos
almacenados, en el cual ver y poder editarlo.
Ilustración 99 Ejemplo de SP_HELPTEXT
III. Agregando Shortcuts en la consola (sp_help, sp_helptext)
Para poder ejecutar ambos procesos desde una combinación de teclas, en la cual
nos podrá facilitar el proceso, para ello vamos a Menu Tools, options.
Ilustración 100 Menu Tools
Ilustración 101 Ver menú de atajos
Ilustración 102 Asignar comando
Al realizar los cambios en el menú de atajos hay que abrir un nuevo QUERY para
que se realicen los cambios.
13. SENTENCIAS SQL
I. Sentencia CREATE (Table, Type, Function)
Con esta sentencia nos permite crear tablas, tipos, funciones y bases de datos.
La cual se ve a continuación, es la de creación por defecto que da el motor de base
de datos.
Ilustración 103 Create Table
Para crear un tipo de dato de usuario es a continuación:
Ilustración 104 Crear un dipo de dato
También para crear una función
Ilustración 105 Crear función
II. Sentencia ALTER
Esta sentencia nos permite alterar la estructura de tabla, procedimiento
almacenados, funciones.
Ilustración 106 ALTER TABLE con agregar campo
Ilustración 107 ALTER TABLE para un CAMPO
Ilustración 108 ALTER TABLE para ELIMINAR un campo
III. Sentencia DROP
Este comando nos ELIMINA TODA LA BASE DE DATOS O LA TABLA es una de
las sentencias mas CUIDADO porque se debe especificar que TABLA O QUE SE
ESTA BORRANDO O SE LLEVA TODA LA BASE DE DATOS POR DELANTE.
Ilustración 109 Ejemplo de DROP
IV. Sentencia TRUNCATE
Esta sentencia nos hace es VACIAR O ELIMINAR POR COMPLETO los registros
de una tabla y reiniciar los campos Identity.
Cual tenemos la tabla de ejemplo con lo siguiente
Ilustración 110 Ejemplo TRUNCATE TABLE parte 1
Al realizar la SENTENCIA TRUNCATE
Ilustración 111 Ejemplo TRUNCATE TABLE parte 2
El resultado al volver ingresar registros es el siguiente:
Ilustración 112 Ejemplo TRUNCATE TABLE parte 3
14. FUNCIONES DE CONVERSIÓN Y TEXTO
I. Funciones LEFT y RIGHT
Lo que realiza esta función es tomar la cantidad de caracteres que uno mismo indica
del lado derecho e izquierdo de una variable, se realiza de la siguiente manera.
Ilustración 113 Ejemplo función Left
Ilustración 114 Ejemplo función Right
Otra manera es de la siguiente manera para concatenar dos cadenas de caracteres.
Ilustración 115 Ejemplo con concatenar
II. Función LEN
Lo que realiza esta función es contar la cantidad de caracteres que hay en una
variable CHAR o VARCHAR, para ver la cantidad de caracteres que ingrese un
usuario, se puede combinar con la función LEFT o RIGHT por ejemplo.
Ilustración 116 Ejemplo sencillo de LEN
Ilustración 117 Función LEN con LEFT
III. Funciones LOWER y UPPER
Estas funciones nos permite dar formato a campos de tipo texto o campos de una
campa, lo que hace LOWER es pasar todos los caracteres en minúscula a
comparación de la función UPPER deja la cadena de caracteres en mayúsculas.
Ilustración 118 Ejemplo función LOWER Y UPPER
Nos sirve para cambiar cuando un usuario nos guarda su nombre y apellido en un
formato que nosotros deseemos.
Ilustración 119 Upper y Lowwer para dar formato
IV. Función REPLACE
Lo que nos permite es reemplazar un carácter por otro, ya puede ser en una
variable o en el campo de una tabla.
Ilustración 120 Cambiar un carácter
Ilustración 121 Replace por un carácter
V. Funciones REPLICATE
Lo que nos permite es repetir un carácter o una cadena de caracteres una cantidad
de veces.
Ilustración 122 Ejemplo función Replicate
VI. Funciones LTRIM y RTRIM
Lo que realiza estas funciones es eliminar los espacios del principio y del final,
LTRIM es el encargado de eliminar el espacio al principio en la cadena de
caracteres y RTRIM al final de la cadena de caracteres.
Ilustración 123 Función LTRIM y RTRIM
VII. Función CONCACT
Lo que permite la función CONCAT permite concatenar dos valores diferentes en
una cadena de caracteres, también se puede agregar la función LTRIM Y RTRIM
para separar los espacios.
Ilustración 124 Función CONCAT
VIII. Función GETDATE y GETUTCDATE
Estas funciones son importante para almacenar la fecha y la hora de los
registrosfueron creados. La función del GETDATE es la fecha y la hora del sistema
a comparación del GETUTCDATE es la fecha y hora del meridiano de Grengwitch.
Ilustración 125 Función GETDATE GETUTCDATE
IX. Función DATEADD
Esta función nos permite agregarle una fecha intervalos, de segundos, minutos,
horas, días, meses y años.
Ilustración 126 Función DATEADD
X. Función DATEIFF
Lo que nos permite es ver la diferencia entre dos intervalos de fechas que nosotros
especifiquemos.
Ilustración 127 Función DATEIFF
XI. Función DATEPART
Esta función nos permite obtener un intervalo especifico de una fecha.
Ilustración 128 Función DATEPART
Un recordatorio es que dentro de los parámetros se puede ingresar wd, dd para
saber específicamente.
XII. Función ISDATE
Lo que nos permite es evaluar si una fecha en especifica esta en el formato correcto.
Ilustración 129 Función ISDATE
Si esta ingresado la fecha incorrectamente nos devolverá un 0, como se ve a
continuación
Ilustración 130 Función ISDATE incorrecta
XIII. Función CAST y CONVERT
Estas son las funciones de conversión la función CAST nos permite un tipo de dato
a otro, dentro del mismo tipo, es decir que sea de decimal a entero, no se puede
hacer un varchar a decimal.
La función CONVERT nos permite cambiar con un poco de detalle los tipos de
datos.
Ilustración 131 Función CAST
Ilustración 132 Función CONVERT
15. TRANSACTION
Esta operación nos permite hacer varios INSERT, DELETE, UPDATE en el cual si
uno falla se devuelva al estado original de operación.
Ilustración 133 Ejemplo de TRANSACTION
En el script anterior vemos que intentamos cambiar el nombre a varios autores por
Brandon, como vemos que hay varios autores de COL no se realiza la operación.
16. JOINS Y UNIONS ENTRE TABLAS
I. Cláusula INNER JOIN
Ilustración 134 Representación de INNER JOIN
(Cuestiones técnicas, 2019)
Lo que nos permite es cruzar tablas por campos que tengan en común entre ambas
tablas.
Ilustración 135 Ejemplo de la cláusula INNER JOIN
II. Cláusula LEFT JOIN
Ilustración 136 Representación de LEFT JOIN
(Ánonimo, n.d.)
Lo que muestra los registros son los registros de la tabla de la izquierda, en este
caso sería la primera que aparece después del SELECT
Ilustración 137 Ejemplo de LEFT JOIN
Lo que sucede es que si no hubiese datos correspondientes aparecerían como
NULL.
III. Cláusula RIGHT JOIN
Ilustración 138 Representación de RIGHT JOIN
(Ánonimo, n.d.)
Lo que nos permite el RIGHT JOIN es todo lo contrario al LEFT JOIN.
Ilustración 139 Ejemplo de RIGHT JOIN
IV. Consideraciones a tener en cuenta con el uso de INNER
Hay que tener en cuenta varias cosas cunado se trabaja con JOINS ENTRE
TABLAS, cuando uno hace una conexión SIEMPRE con la PRIMARY KEY.
Siempre hacer la búsqueda en ORDEN a la hora del ON que sea por la tabla
inmediate y luego de la conexión.
La tercera es tener ALIAS para ahorrar tiempo y siempre especificar para que no
salga errores.
V. La cláusula UNION y UNION ALL.
La diferencia entre las clausulas UNION y la INNER, UNION nos permite unir dos
distintas CONSULTAS para la misma tabla.
Ilustración 140 Ejemplo de UNION
La diferencia entre UNION y UNION ALL es que UNION ALL devuelve toda la
información a comparación de UNION que eliminar las repeticiones.
Ilustración 141 Ejemplo de UNION ALL
17. FUNCIONES DEFINIDAS POR EL USUARIO
I. Funciones de tipo Escalares
Las funciones escalares son funciones que nos permite recibir uno o mas valores
y devolver un valor, realizar un cálculo con ese parámetro y retornar ese valor.
Ilustración 142 Crear una función tipo escalar
Para probar la función es a continuación
Ilustración 143 Probar Función
II. Funciones de tipo tabla.
Esta función nos permite recibir uno o más parámetros, nos retorna una tabla, un
conjunto de registros.
Ilustración 144 Ejemplo de creación de función tipo tabla
Ilustración 145 Ejemplo de llamado de función tipo tabla
18. TABLAS TEMPORALES
I. Definición y uso de las Tablas Temporal en Memoria
Una tabla temporal en memoria solo existe mientras el SCRIPT este
funcionando, cuando termine se destruirá.
Ilustración 146 Crear una tabla temporal en memoria
Ilustración 147 Ingresando datos y creando tabla temporal en memoria
II. Definición y uso de Tabla Temporal Física
La diferencia con la tabla temporal en memoria es que la tabla temporal física
va a existir hasta cuando reiniciemos el motor de base de datos.
Ilustración 148 Crear tabla temporal física
Siempre se recomienda tener un DROP TABLE al final para liberar parte de la
memoria.
Ilustración 149 Ejemplo de TABLA TEMPORAL FÍSICA
19. VISTAS
I. ¿Qué es una Vista? Uso e implementación
Una vista es una tabla virtual cuyo contenido está definido por una consulta.
Ilustración 150 Crear vista
Y para consultar la vista.
Ilustración 151 Seleccionar visual de la vista
II. Creando una Vista desde el entorno gráfico.
Y para crear nuestra VISTA de manera grafica se muestra a continuación.
Ilustración 152 Crear VISTA
Agregamos las tablas que deseamos hacer la consulta.
Ilustración 153 Agregar tablas
Seleccionamos los campos con las tablas, también con los filtros que se desea.
Ilustración 154 Seleccionar campos
Ilustración 155 Selección de filtro
Ya por último es guardar y así ejecutar la vista.
20. TRIGGERS
I. ¿Qué es un Trigger? Tipos posibles.
Un TRIGGER es un desencadenador o disparador de un evento, dependiendo de
los 3 tipos de eventos, cuales son: INSERT, UPDATE,DELETE a partir de una tabla,
cual puede ser para guardar en un LOG, mandar la información que se modifico en
cierta tabla.
II. Creación de Trigger tipo DELETE
Ilustración 156 Ejemplo TRIGGER
21. BACKUP Y RESTORE DATABASE
I. Como realizar un Backup desde Managment Studio
Lo primero es escoger el espacio para guardar el Backup de la base de datos,
como puede ser en documentos o cualquier otro lugar. Se recomienda que un
Backup este guardado en 3 lugares como mínimo, los cuales son: En el lugar del
trabajo, fuera del lugar del trabajo como puede ser un banco o lugar de fácil
de acceso y un servidor fuera del país.
En este caso será en mis documentos (una práctica nada recomendada)
Para ello vamos al Object Explorer, seleccionamos la base de datos, tareas y
escogemos la opción de Backup.
Ilustración 157 Escoger Back Up
Para continuar es el tipo de Backup, cuales son: Completo es aquel que hace de
todos los objetos que están dentro de la base de datos y el diferencial cual hace
con los nuevos objetos y registros comparándolo con un backup anterior. También
escogemos la ubicación.
Ilustración 158 Escoger el tipo de Backup
Otras recomendaciones es que los backup por nombres se pongan la fecha del
día y hora para así no confundirse.
II. Como restaurar un Backup
Para restaurar una base de datos, vamos al Object Explorer seleccionamos
Databases y escogemos la opción Restore.
Ilustración 159 Restaurar una base de datos
Ahora seleccionamos la Base de datos y el archivo para restaurar.
Ilustración 160 Restaurar base de datos
III. Como crear un Backup desde Script
La primera manera de generar el Backup es por medio del siguiente Script.
Ilustración 161 Backup Script
Ilustración 162 Script de Backup
Se puede usar este Script para un Procedimiento almacenado para así sea
programado para la hora correspondiente.
22. Shedule JOBS
I. ¿Qué es un SQL JOB? Opciones disponibles
O también llamado como tarea programada, es administrado por el SQL Server
Agent cual administra las tareas programadas. Es usado para procesar datos de
tablas y procesarlo mas adelante.
Ilustración 163 Opciones del JOB
Donde se puede administrar que a partir de que usuario, horarios y tareas para
realizar el proceso automatizado.
II. Preparando un JOB para realizar una tarea
Ilustración 164 Administrador general
Ahora escogemos el nuevo paso en Steps y así creamos un nuevo paso
Ilustración 165 Step 1
Le asignamos un horario
Ilustración 166 Shedule JOB
También agregamos notificaciones para el momento que se cumpla o no cumpla el
JOB.
Ilustración 167 Agregar notificaciones
23. ADMINISTRACIÓN DE USUAIROS, ROLES,
SHCEMAS Y PERMISOS.
I. Usuarios y Logins
Para ingresar en SQL se tiene dos métodos se tiene el LOGIN y los USUARIOS
cuales los últimos se le puede ingresar los permisos. Cual todo USUARIO esta
relacionado con un LOGIN.
Para crear un LOGIN se debe ingresar por medio del OBJECT EXPLORER.
Ilustración 168 New Login
Y el cual se le crea el LOGIN.
Ilustración 169 Nuevo Login
Al tener el LOGIN creado nos vamos para DATABASES- SECURITY y creamos el
USUARIO.
Ilustración 170 Nuevo Usuario
Se ingresa los datos necesarios.
Ilustración 171 Crear Usuario
Y se le asigna los posibles permisos, en el cual se puede ingresar.
II. Roles de Base de Datos: tipos posibles.
Los ROLES es un grupo especifico de USUARIOS, cual tienen un agrupado
especifico de permisos, así facilitando el trabajo al momento de crear los distintos
de usuarios.
Cuales hay unos predefinidos por el SERVIDOR, los de la BASE DE DATOS y los
que creamos nosotros mismos que son los de USUARIOS.
III. Crear y asignar un ROL a un Usuario desde T-SQL
Para crear y asignar recordemos que debemos tener el LOGIN creado.
Ilustración 172 Ejemplo de Asignar ROL
IV. ¿Qué es un Schema?
Un SCHEMA es un ESPACIO DE NOMBRES que adjunta OBJETOS,
como lo son tablas, stored procedures, etc… El ESQUEMA POR
DEFECTO ES DBO.
V. Descripciones de Roles de Servidor y roles predefinido
ROLES PREDEFINIDOS DE BASE DE DATOS
• db_owner: Miembros tienen permisos totales.
• db_accessadmin: Miembros pueden administrar grupos de Windows y
Logins de SQL Server.
• db_datareader: Miembros tienen permiso de lectura.
• db_datawriter: Miembros pueden agregar, eliminar, o modificar datos en las
tablas.
• db_ddladmin: Miembros pueden ejecutar librerías DLL.
• db_securityadmin: Miembros pueden modificar la membresía de Roles y
administrar permisos.
• db_backupoperator: Miembros pueden realizar un backup de la BD.
• db_denydatareader: Miembros no pueden visualizar datos dentro de la BD.
• db_denydatawriter: Miembros no pueden modificar o eliminar datos de
tablas o vistas.
ROLES DE SERVIDOR
• SysAdmin: Cualquier miembro puede realizar cualquier acción en el servidor
SQL.
• ServerAdmin: Cualquier miembro puede establecer opciones de
configuración en el servidor SQL.
• SetupAdmin: Cualquier miembro puede administrar servidores remotos y
opciones de inicio de SQL Server.
• Security Admin: Cualquier miembro puede administrar la seguridad del
servidor SQL.
• ProcessAdmin: Cualquier miembro puede finalizar un proceso en ejecución
en el servidor SQL.
• DbCreator: Cualquier miembro puede crear, modificar, eliminar y restaurar
Bases de Datos.
• DiskAdmin: Cualquier miembro puede administrar archivos de datos del
servidor SQL.
• BulkAdmin: Cualquier miembro puede ejecutar el comando BULK INSERT.
24. SQL Server Profile
Esta herramienta sirve para rastrear los procesos dentro de la base de datos.
I. Conocimiento de la herramienta.
Se accede a través del menú tolos.
Ilustración 173 Ingreso de la herramienta Tools
Ilustración 174 Vista de la herramienta SQLProfile
Ilustración 175 Trazas de ejecución
La tabla anterior se ira actualizando cada vez que uno mande cualquier ejecución
en el SQL Server Managment.
Ilustración 176 Columna de duración
Esta columna nos dice el tiempo de duración del proceso en milisegundos.
II. Como monitorear procesos por tiempo de ejecución
Para ver una traza personalizada es por medio de Trace Propieties. Cual uno
escoge que procesos y que hacerle seguimiento.
Ilustración 177 Trace Propieties
25. 10 BUENAS PRÁCTICAS SOBRE DISEÑO,
PROGRAMACIÓN Y SEGURIDAD
1. Definan nombres de campos cortos y que representen lo mejor posible el
valor que almacena. Para nombrarlos usen el idioma que más prefieran,
inglés, español… Pero respeten ese idioma durante todo el proyectos.
2. Cuando definan el nombre de un campo, por ejemplo OrderID, asegúrense
que el campo se llama igual si deben definirlo en otra tabla, eso les ahorrará
muchos dolores de cabeza cuando tengan que realizan JOINS.
3. Al momentode elegir un tipo de dato para un campo, evalúen los valores que
almacenará y elijan el tipo de dato adecuado. Por ejemplo, si el campo
almacenará edades, no es necesario definirlo como INT, un tipo TINYINT es
más que suficiente. Ahorrar en bytes mejorará la perfomance de la base de
datos a largo plazo.
4. Para definir el nombre de un Stored Procedure es recomendable usar una
nomenclatura que defina rápidamente qué tarea realizar ese proceso, por
ejemplo:
SEL_OrdenesPedido (SEL nos indica que un proceso que devuelve datos)
INS_Pagos (INS no indica que es un proceso de grabación)
5. Normalicen las tablas; deben crear tantas tablas como requiera el modelo de
base de datos. Normalizar en 3ra FN es suficiente. Si considera que hayt
campos que deben colocarse en otra tabla, hágalo.
6. Aseguresn su base de datos. Si tienen la posibilidad de administrar los
accesos, creen usuarios, roles y permisos que garanticen la seguridad.
No permitan que cualquier usuario pueda acceder y realizar modificaciones.
Asignen los permisos adecuados a usuarios responsables o dedicados a
desarrollo.
Puede utilizar Schemas si lo considera necesario.
7. Realizar las consultas filtradas siempre en lo posible por los campos Primary
Key. Si usas JOINS, siempre coloca la cláusula ON los campos PK. Esto hará
que la consulta sea óptima.
8. Si has implementado Schedule Jobs, asegúrate que estén ejecutando en
horarios nocturnos o cuando la base de datos esté con poca actividad, a fin
de no afectar la perfomance al usuario.
9. Eviten el uso excesivo de Triggers. Cuando estos desencadenadores están
vinculados a inserts, updates o deletes muy concurrentes, puede afectar la
perfomance.
10. Realiza un Backup periódicamente y almacena los archivos preferente en un
disco o dispositivo externo.
26. REFERENCIAS
Ánonimo. (n.d.). ¿Cómo funciona INNER JOIN, LEFT JOIN, RIGHT JOIN Y FULL
JOIN? Retrieved January 24, 2023, from
https://programacionymas.com/blog/como-funciona-inner-left-right-full-join
Cuestiones técnicas. (2019, July 19). INNER JOIN: definición y aplicación.
https://www.ionos.es/digitalguide/hosting/cuestiones-tecnicas/inner-join/