Apunte Curso SQL Server ProgramBI
Apunte Curso SQL Server ProgramBI
Apunte
Autor:
Juan Carrasco Pastrián
2021
1 Introducción a SQL
1.1 Introducción a las bases de datos
Una Base de datos es un conjunto de datos pertenecientes a un
mismo contexto y almacenados metodologicamente para su uso a
futuro.
Actualmente gracias al desarrollo tecnologico que se esta dando y
a la gran cantidad de datos que se tienen, han surgido varias solu-
ciones al almacenamiento de datos. Dichas soluciones se cono-
cen formalmente como sistemas de gestion de bases de datos, o
DBMS por sus siglas en inglés. Estos sistemas permiten gestionar
las bases de datos, sus sub-componentes como tablas o consultas,
y utilizan un lenguaje estándar de consulta llamado SQL que sig-
nifica “Lenguaje estructurado de consultas (Structured Query Lan-
guage)” Los principales Motores de bases que estan en el mercado
son: ORACLE, MySQL, SQL Server, PostGreSQL, SQLite.
1
o Azure Data Studio, los cuales procederemos a explicar su insta-
lación en el PC local.
2
4. Aceptamos los términos de la licencia
3
6. El instalador empezará a descargar e instalar la plataforma.
Asegurarse de tener una conexión estable para que el insta-
lador proceda sin inconvenientes. Cuando el instalador haya
terminado aparecerá la siguiente ventana
4
1.2.2 Instalación de SSMS
IMPORTANTE: el orden es fundamental. Se requiere primero insta-
lar SQL Server(apartado anterior) antes de instalar el SQL Manage-
ment Studio.
5
4. Al presionar “Connect” ya estamos exitosamente conectados
al servidor local de SQL y podremos trabajar en las actividades
del curso.
6
2. Abrimos el instalador y se comenzará a instalar el programa.
7
4. Aparecera una ventana emergente donde ingresaremos los
parámetros de la conexión:
8
1.3 Tablas
Como objeto clave de una BBDD, Una tabla es un objeto que esta
formado por columnas, las cuales están interrelacionadas a través
de la información que contienen.
En jerga de bases de datos a una columna se le conoce como campo,
mientras que una fila se le conoce como registro.
En una BBDD, las tablas tienen un nombre único. Una BBDD puede
contener varias tablas, y las tablas estar relacionadas entre sı́ por
campos que comparten, llaves (un tipo de campo que revisaremos
más adelante) y relaciones de cardinalidad entre sus registros (que
también veremos más adelante).
El conjunto de tablas y relaciones en una BBDD se conoce como el
Esquema de una BBDD y se puede representar gráficamente en un
diagrama que se conoce como diagrama Entidad-Relación (como el
que se muestra a continuación)
9
1.4 Tipos de Datos
Las bases de datos en las que se puede consultar con SQL se les
conoce como bases de datos relacionales, mientras que los datos
que se almacenan en ellas son datos estructurados; es decir, cor-
responden a un tipo bien especı́fico de dato que caerá en las sigu-
ientes categorı́as:
• Tipos Numéricos
• Tipos de Texto/Fecha
10
1.5 Declaraciones DDL
Las declaraciones DDL o Data Definition Language corresponden a
aquellas que intervienen de alguna manera el esquema de la BBDD
o manipulan nuevos objetos adyacentes a las tablas. Las declara-
ciones DDL suelen empezar con un comando CREATE en caso de que
se crean objetos, ALTER para modificarlos y DROP para borrarlos.
Por ejemplo, al crear una base de datos se puede usar un comando
CREATE como sigue:
1 CREATE DATABASE mi_base_de_datos
Acto seguido puedo exigirle a SQL que apunte a esa base de datos
de ahora en adelante para trabajar sobre ella:
1 USE mi_base_de_datos
Para borrar una tabla, usar comando DROP TABLE. Para vaciar usar
TRUNCATE TABLE:
11
1 DROP TABLE nombre - tabla
2 TRUNCATE TABLE nombre - tabla
12
similares al asistente de SSMS. Más info en https://docs.microsoft.
com/en-us/sql/azure-data-studio/extensions/sql-server
-import-extension?view=sql-server-ver15
13
1 -- CONDICIONALES
2 -- operadores
3 WHERE campo > valor -- mayor que
4 WHERE campo < valor -- menor que
5 WHERE campo >= valor -- mayor o igual
6 WHERE campo <= valor -- menor o igual
7 WHERE campo <> valor -- distinto
8 WHERE campo = valor -- igual
9 WHERE campo LIKE patron ( veremos en Seccion 2)
10 WHERE campo IN ( valor1 , valor2 ...) --si el campo
esta en un conjunto de valores
11 WHERE campo BETWEEN rangomin AND rangomax --si
el campo esta entre rangomin y rango max
12 WHERE campo IS NULL -- filas en donde el campo
seleccionado es null
13 WHERE campo IS NOT NULL -- filas donde el campo
no es null ( vacio )
14
1 - Operadores Logicos
2 -- operador AND
3 SELECT campo1 , campo2 , ...
4 FROM tabla
5 WHERE condicion1 AND condicion2 AND condicion3
...
6 -- operador OR
7 SELECT campo1 , campo2 , ...
8 FROM tabla
9 WHERE condicion1 OR condicion2 OR condicion3 ...
10 -- operador NOT
11 SELECT campo1 , campo2 , ...
12 FROM tabla
13 WHERE NOT condicion ;
15
1.10 Comando DISTINCT
Dentro de una tabla, una columna a menudo contiene muchos val-
ores duplicados; a veces solo desea enumerar los valores distintos.
El comando DISTINCT elimina repeticiones de una tupla de datos en
una fila.
1 SELECT DISTINCT columna1 , columna2 , ...
2 FROM tabla_nombre ;
16
2 Clase 2: de los Wildcards a las Vistas
2.1 Wildcards o patrones
Como mencionamos anteriormente, el comparador LIKE se utiliza
para encontrar patrones o declarar filtros que permiten de forma
eficiente obtener sub-conjuntos de los datos. Para representar pa-
trones que serán utilizados en un comparador LIKE, se utilizan los
siguientes caracteres:
• %: Representa cero o más caracteres
17
2.2 Cláusula GROUP BY y funciones
La declaración GROUP BY agrupa las filas que tienen los mismos val-
ores en un campo determinado, como ”encontrar el número de clientes
en cada paı́s”. La instrucción GROUP BY se utiliza a menudo con fun-
ciones de agregado ( COUNT(), MAX(), MIN(), SUM(), AVG()) y agru-
pando el conjunto de resultados de una o más columnas.
1 SELECT * , funcion de agregado
2 FROM tabla
3 WHERE condicion
4 GROUP BY *
18
2.4 Borrar y actualizar registros
Como parte de las operaciones de escritura (que deben estar de-
bidamente autorizadas) se pueden borrar filas o actualizar filas según
una condicion en particular. La sintaxis de estas operaciones es la
siguiente:
1 -- Borrar registro
2 DELETE FROM tabla WHERE condicion
3 -- Actualizar registro
4 UPDATE tabla SET campo1 =.. , campo2 =..
5 WHERE condicion
Una función definida por el usuario es una rutina que acepta parámetros,
realiza una acción, como un cálculo complejo, y devuelve el resul-
tado de esa acción como un valor.
19
inputs(x1, x2, . . .) → f (x1, x2, . . .) → output
El valor de retorno puede ser un valor escalar (único) o una tabla.
Una sintaxis para una función escalar es la siguiente:
1 CREATE FUNCTION nombre_funcion ( par1 t1 , par2 t2
...)
2 RETURNS tipo_variable_salida
3 BEGIN
4 ....
5 returns @variable_salida
6 END
20
1 SELECT campo1 , campo2 , ....
2 CASE WHEN condicion1 THEN resultado1
3 WHEN condicion2 THEN resultado2
4
5 ...
6
7 ELSE resultadoN
8 END
9 FROM tabla
21
almacenada que se ejecuta cuando se usa).
- Puedo ver cómo está constituı́da una vista en SSMS, botón dere-
cho en la vista → opción ”Design”.
22
3 Clase 3: Subquerys, Tablas Temporales y
Consultas de cruce
3.1 Subconsultas
Una subconsulta es una consulta SQL anidada dentro de una con-
sulta más grande. Una subconsulta puede ocurrir en:
1 -- Subquerys en WHERE
2 SELECT ... FROM ... WHERE campo IN ( Subquery )
3 -- Subquery en SELECT
4 SELECT campo = subquery FROM .... WHERE ....
23
3.2 Tablas Temporales
Permiten generar una tabla a partir de una consulta. Se le denom-
ina tabla temporal por que queda almacenada en memoria caché
(temporal) mientras la sesión está abierta o el servidor permanece
corriendo; una vez cerrada la sesión o apagado el servidor, la tabla
desaparece con sus datos ingestados. La sintaxis es la siguiente:
1 SELECT ....
2 INTO # tablatemporal
3 FROM ...
4 WHERE ...
24
3.4 Consultas de Cruce
3.4.1 INNER JOIN
25
1 SELECT columna ( s )
2 FROM tabla1
3 RIGHT JOIN tabla2
4 ON tabla1 . columna_pivote = tabla2 . columna_pivote
;
26
3.6 Manos a la obra: Ejercicio # 1
“Arriendo Seguro S.A” es una de las asociaciones encargadas de
administrar el proceso de arrendar casas en Santiago. Para evitar
las molestias de cobranzas para los propietarios ellos se encargan
del cobro, por lo cual han diseñado el siguiente modelo de datos,
con el fin de obtener toda la información necesaria y llevar el control
del proceso.
1. Cree las tablas e ingrese datos acordes a cada una de ellas (ver
anexos)
Modelo ERD
27
Tabla Arrendatario:
Tabla Arrienda:
Tabla Casa:
28
Tabla Dueño:
3.6.1 Observaciones
29
1 -- El orden SI IMPORTA !
2
3 CREATE TABLE Arrendatario ( Rut_A varchar (10)
PRIMARY KEY ,
4 Nombre varchar (20) ,
5 Apellido varchar (20) )
6
7 CREATE TABLE dueno ( Rut_D varchar (10) PRIMARY
KEY ,
8 Nombre varchar (20) ,
9 Apellido varchar (20) )
10
11 CREATE TABLE casa ( Id_Casa int PRIMARY KEY ,
12 Rut_D varchar (10) REFERENCES dueno ( RUT_D ) ,
13 Numero int ,
14 Calle varchar (20) ,
15 Comuna varchar (20) )
16
17 CREATE TABLE Arrienda ( Rut_A varchar (10)
REFERENCES Arrendatario ( Rut_A ) ,
18 Id_Casa int REFERENCES casa ( Id_Casa ) ,
19 Deuda int ,
20 Rut_D varchar (10) REFERENCES dueno ( Rut_D ) )
30
4 Clase 4: Comenzando el nivel intermedio
4.1 Funciones Tabulares y Multisentencia
Como vimos en la sección anterior, una función puede tener un out-
put escalar (valor único) o vectorial (entrega como resultado una
tabla). A este último tipo se le conoce como función tabular.
La sintaxis para crear una función tabular es similar a lo revisado en
clases anteriores, solo que como resultado se obtiene una tabla:
1 CREATE FUNCTION nombre_funcion ( @param1 tipo1
..)
2 RETURNS TABLE
3 AS
4 RETURN
5 (... codigo para generar tabla ...)
Además, podemos crear una tabla que sea definida en una función,
y que por ende usará más comandos que un SELECT, sino también
INSERT, DELETE, UPDATE, etc. A este tipo de bloques se les de-
nomina funciones multisentencia:
1 CREATE FUNCTION nombre_funcion ( @param1 tipo1
....)
2 RETURNS @tabla_retorna table ( campos a retornar )
3 AS BEGIN
4 INSERT INTO @tabla retorna
5 SELECT ...
6 RETURN
7 END
31
4.2 Triggers
Un Trigger o desencadenador es un tipo de procedimiento almace-
nado que se ejecuta automáticamente cuando se produce un evento
de Lenguaje de Manipulación de Datos (DML), o sea cuando se eje-
cuta un INSERT, UPDATE o DELETE en una tabla o un evento de Lenguaje
de Definición de Datos (DDL) por ejemplo un DROP TABLE.
Un gatillo se activa cuando ocurre un evento, por ende es condi-
cionado a que el evento ocurra. El gatillo se puede activarse antes
o después de que el evento ocurra, aunque para nivel intermedio de
SQL consideramos gatillos con activación posterior a la ocurrencia
del evento.
Para crear un Trigger, usar la siguiente sintaxis:
1 CREATE TRIGGER nombre_trigger
2 ON tabla_inicial FOR tipo_evento
3 AS
4 BEGIN
5 ...
6 END
En este caso el tipo de evento puede ser un DML o DDL, para los
DML seria INSERT/UPDATE/DELETE. El evento que activa el gatillo en-
tregará un objeto inserted/updated/deleted que corresponderá a
una tabla resultante o que recibe la acción: por ejemplo, si quiero
gatillar una acción a partir de una inserción realizada, puedo obtener
sus caracterı́sticas llamando al objeto inserted.
Los triggers pueden ser modificados con ALTER TRIGGER y elimina-
dos con DROP TRIGGER.
32
4.3 Ejecución y Programación en SQL
Una ventaja importante de SQL es que no sólo es un lenguaje de
consulta, sino también un lenguaje de programación: podemos crear
programas que se ejecutan lı́nea por lı́nea, pueden iterar, agregar
condicionales, etc.
En SQL Server podemos imponer condiciones sobre la ejecución de
una instrucción SQL. La instrucción SQL que sigue a una palabra
clave IF y su condición se ejecuta si se cumple la condición. La pal-
abra clave ELSE opcional introduce otra instrucción SQL que se eje-
cuta cuando no se cumple la condición IF:
1 IF < condicion >
2 BEGIN
3 Ejecucion ...
4 END
5 ELSE
6 BEGIN
7 Ejecucion ...
8 END
33
1 -- sintaxis
2 CREATE PROCEDURE nombre_procedimiento ( @param1
tipo1 ,
3 @param2 tipo2 ...)
4 AS
5 BEGIN
6 ...
7 END
8 -- ejecute el procedimiento
9 EXEC nombre_procedimiento
4.4 Cursores
Una introducción a los objetos iterativos en programación en SQL
son los cursores. El cursor es un objeto de base de datos para recu-
perar datos de un conjunto de resultados una fila a la vez, en lugar
de los comandos vistos hasta ahora que operan en todas las filas
del conjunto de resultados a la vez. En consecuencia, el cursor es
el unico objeto que recorre una consulta lı́nea por lı́nea.
34
1 DECLARE nombre_cursor CURSOR
2 FOR especificacion_consulta
3 -- activar_cursor
4 OPEN nombre_cursor
5 -- recorrer fila por fila
6 FETCH NEXT FROM nombre : cursor INTO
variables_cursor
7 WHILE @@FETCH_STATUS = 0
8 BEGIN
9 ...
10 FETCH NEXT FROM nombre : cursor INTO
variables_cursor
11 END
12 CLOSE nombre_cursor -- cierra cursor
13 DEALLOCATE nombre_cursor -- desposicionar
35
• BULK INSERT como instrucción carga los datos en el formato
que están en el archivo de origen; por ende, debemos pre-
ocuparnos de que los datos vengan en el formato correcto y
consistente con la tabla donde se hara la ingesta. Si los datos
no vienen en un formato consistente con la tabla, pueden en
primer lugar cargarse en una tabla temporal como texto (sólo
campos varchar(max)) y luego utilizar funciones de conver-
sion (tema a revisar sección 5)
36
5 Clase 5: Funciones especı́ficas
5.1 Comandos de conversión e IIF
La función CONVERT () convierte un valor (de cualquier tipo) en un
tipo de datos especı́fico.
1 CONVERT ( tipodato , dato )
2 -- sintaxis alternativa
3 CAST ( valor AS tipo_datos )
Es la siguiente:
1 iif ( var =x , ’a ’ , iif ( var =y , ’b ’ , ’c ’) )
37
• CHARINDEX(): La función CHARINDEX() busca una subcadena
en una cadena y devuelve la posición CHARINDEX(substring,
string, start)
38
• DATEADD(unidad, cantidad, fecha) agrega a la fecha una can-
tidad de unidades de fecha (análogo a anterior)
39
1 -- obtiene tablas
2 SELECT * FROM nombre_bbdd . INFORMATION_SCHEMA .
TABLES
3 -- obtiene tablas y sus columnas
4 SELECT * FROM nombre_bbdd . INFORMATION_SCHEMA .
COLUMNS
5 -- Contar numero de tablas en bbdd
6 SELECT COUNT ( TABLE_NAME ) FROM nombre_bbdd .
INFORMATION_SCHEMA . TABLES
40
6 Ejercicio Final
El archivo series precios.csv contiene los precios diarios de 5 in-
dices ampliamente utilizados en el mercado financiero. En el se in-
cluyen además los dı́as no hábiles, en cuyo caso se repite el precio
de cierre del último dı́a hábil disponible. Respecto a este archivo:
41