You are on page 1of 34

Guia SQL

Creación y eliminación de una Base de Datos

Tipos de datos (para declarar campos de la base)

Ya creada la base de datos (el ente de memoria) definimos la tabla o tablas que la conformarán (las estructuras / campos
que definirán cada registro)

Los datos son muy similares a los ya conocidos, int, float, cadenas que aquí se llaman varchar() etc. La Tabla puede o no
permitir valores NULL en sus campos, (no hay límites excepto un dato al menos por registro). Es decir, un registro puede
tener varios nulos si tú así lo decides, pero al menos, de tooooodos los campos, uno deberá estar registrado.

Creación y eliminación de tablas (Los elementos básicos de la Base de Datos)

Así se declara una tabla y sus campos, así como la Y asi se borraría la tabla
permisibilidad del NULL

Inserción de Registros (INSERT)

Ya creados el ente de la Base de Datos y las tablas que definen su estructura, ya está lista para recibir datos, para esto
usamos la inserción de datos (registro).

Ejemplo de inserción múltiple

Editar un registro ya existente (Set and Update)

Si ya existe un registro y se desea editar algún o algunos registros, se busca mediante el dato delator (si existe), y si no
mediante condiciones y al encontrarlo se define la condición a alterar.
Eliminación de Registros (Delete, drop and Truncate)

Aclaración, aunque para ciertos casos delete y truncate parecen actuar igual, delete borrar el contenido pero no la historia,
por ejemplo de algún entity (autoincrementable), si estaba en 20 y borras todo, al meter un nuevo registro, comienza del
21, en cambio, truncate si borrar incluso la historia, osea que el entity comenzaría de nuevo en su origen (0, 1 o el que se
le haya definido como origen)

-Delete

-Drop

Y la tabla ya no existe, osea, ni registros ni estructura(s).

-Truncate
Consultas

Es el filtrado de la información mediante comandos que definen condiciones, es decir, no altera la tabla, simplemente
nos muestra lo que deseamos ver.

Consulta universal *

Consulta filtrada sin condicionantes

Como se observa, se puede alterar el orden de los campos, no importa.

Condicional Básico de filtrado WHERE

Este comando sirve cuando deseamos aplicar un filtro básico de condición, es decir , cuando quiere mostrar solo los
datos que cumplen con esa condición.

Mostrando tabla original.

Condicionada, se entiende así, “quiero ver a,b ,c etc” de los registros “que cumplan con”
Operadores relacionales (Mayor, menor, igual, diferente) etc

Ejemplos, no hay nada que explicar

Tabla original

Ejemplo 3

Ejemplo 1 Ejemplo 2

Operador autoincrementable Identity

Este tipo de dato tiene ciertas limitantes y condiciones, es útil porque se autoasigna de con un origen, y un delta.

En una tabla, solo se puede asignar a máximo un solo


campo la propiedad identity.

Así se define un identity, y bueno, ya se muestra la tabla con 7 registros llenos.


Aquí se ve cómo podemos definir
valores específicos de inicio y delta
para una Identity

Aquí se ve que no deja al usuario


asignar un valor al identity

Se permite la alteración, y con esto la repetición de un dato que sea Identity con un pequeño truco (activando la
edición), de la siguiente manera

*En el caso de aplicar truncate, como dijimos que se resetea TODO, esto incluiría al Identity

Aquí se ve que el delete no resetea el identity, pero usando Truncate, si lo resetea.


Operadores aritméticos

Sirven para operar entre columnas y hacer una consulta “virtual”, de un campo que por si solo no existe

Tabla Original

Ejemplo 1, muestra la ganancia que obtengo de cada libro (muestra todos porque no se filtró la búsqueda)

Ejemplo 2, filtrando el resultado

Ejemplo 3
Funciones de Agregado

Son funciones predefinidas y de mucha utilidad según


su uso:

Tabla Original

-count

*Cabe destacar que esta función no cuenta los nulos

Otra base de datos:

Y si contamos todos los registros existentes (contando toooodo se evita el problema de que salga incompleto por NULL)
-sum

Ejemplo para otra tabla

*Nota, ahí aparece un 22 porque el profe agarró de la interfaz gráfica los 22 valores no nulos, peeeero, formalmente en
script debería decir (edad).

-avg

Sirve para sacar el promedio de algún campo en la tabla

-min

Otro ejemplo con otra tabla


Otro ejemplo con otra tabla

-max

Concatenación y Alias

Como ya vimos, cuando aplicamos una consulta (generalmente aritmética) aparece la columna resultado sin etiqueta, es
decir, dice “Sin nombre de columna”, entonces, para una consulta de este tipo podemos utilizar “etiquetas” temporales
para saber que representa o que muestra.

Ejemplo de Concatenación:

Ejemplo de Concatenación Filtrada


Ejemplo de Alias, antes Ejemplo de Alias Aplicado

Manejo de cadenas (Comandos muy sonsos)

Breviario de comandos para cadenas que nunca usarás:

Cortador de cadena (Origen, Tamaño)

Si dijera 7,6 mostraria “_a_tod”

Pasa un valor numérico a cadena

Para remplazar una cadena (Origen, Cuales remplazará (aunque el parche sea más grande))

Tamaño de Cadena

Minusculizar
Mayusculizar Eliminar Espacios (por izquierda o derecha)

Remplazar cadenas, o secciones

Buscar Coincidencias (devuelve la casilla donde inicia la coincidencia)

Voltear cadena Repetir cadenas

Concatenar con espacios contados

Order By

Como su nombre lo dice, ordena una consulta según lo deseemos, las sub-instrucciones básicos son ascendente y
descendente (asc y des). La default es asc

Tabla Original
Ordenada ascendentemente respecto al título, sin filtrado mostrando toda la tabla

Ordenada ascendentemente respecto al título y filtrado, mostrando solo el titulo

*Si se aplica un doble orden, no tiene lógica porque el segundo rompería al primero, por lo tanto, SQL solo aplica al
primero e ignora al segundo

Operadores Lógicos

Uso de los operadores lógicos clásicos, not, and , or etc (que como ya sabemos son operaciones aritméticas abreviadas)
Ejemplo NOT Ejemplo AND

Ejemplo OR Ejemplo Engañoso xD

Otro ejemplillo

Is null / Between
Este comando solo sirve para evidenciar campos nulos si De igual manera podemos aplicar su inverso, para
es que existen, delatar los NO NULOS

O así que se ve más chido y es más eficiente

Ahora, between, muestra intervalos, es un equivalente a usar mayor que y menor que pero de una forma abreviada

Like / Not like

Sirve para cadenas y nos permite encontrar coincidencias o para evitarlas.


De esa manera busca la coincidencia donde sea, pero si se desea buscar al inicio, al final o en medio, se usan las
variaciones con los espacios

Ejemplo 1

Ejemplo 2

Ejemplo 3

Ejemplo 4

Como tip, sirve para buscar palabras de las cuales no sabemos precisamente como se escriben, o que podrían tener
alguna variación (búsqueda comodín)

Having

Es un filtro grupal (similar al where, pero where es individual), mejor explicado, es un filtro de segundo nivel, osea, después
de un filtro aplicado, puedes aplicar oooootro filtro con having. La condición es aplicarlo sobre un group, y la condición
para aplicar group a su vez es SI utiliza un operador de agrupamiento, es por eso que vemos que se ocupa, como sacado
de la manga, previo al group un avg (edad)
Se debe utilizar en campos sin operadores de agrupamiento (sum, average, etc)

Ejemplo aplicado

Compute

Comando útil para ejecutar varias consultas o líneas de código encadenadas.

Begin / End

Comando útil para ejecutar varias consultas o líneas de código


Distinct

Es un filtro específico, que se aplica después de cualquier


filtro “normal” y sirve para no mostrar los repetidos.
Simplemente no los muestra, no quiere decir que los
borre

Para las edades, si hay muchas repetidas, entonces si le


aplicamos el filtro, sale:
Top

Sirve para hacer un filtrado de clausura, mostrando solo los n primeros registros o los n últimos

Para mostrar últimos, primero ordenamos al revés

Respaldo Y Restauración

Seleccionar la base, tareas, generar Script, volver a seleccionar la base, seleccionar sus objetos, Incluir datos en el script
ON TRUE, y listo salvar y pone fecha, eso siempre es importante. Al reabrir el script, se puede omitir el login del usuario
en código y añadir create database “Titulo de la base original/ Respaldada”.

Join

Para hacer consulta en una base que contiene diferentes tablas ligadas [estructuras dentro de otras estructuras]

Como se ve, Tabla 1 = 4 Registros, Tabla 2 = 3 Registros, Tabla 3 = 4 Registros

Inner Join

Sirve para filtrar el contenido y unir solo los campos relación o los que se deseen
Cabe destacar que solo muestra los registro apareados, es decir solo las x que tiene sus y completas, en caso contrario
las omite. En este caso son 4 vs 4, y los muestra completos.

Un ejemplo que no cumple sería aparear Tabla 1 con Tabla 2 (4 vs 3), y en consecuencia solo muestra 3 registros
apareados.

Ahora un ejemplo de consulta filtrada aplicando Join sería

Cabe destacar que Join es un operador binario, es decir, la gramática de una sentencia para 3 tablas sería:
(A join B) join C

Join Left / Join Right

Este sirve para mostrar lados completos del join, aunque no hayan sido apareados. Si se elige Left, muestra completo el
izquierdo, si se elige right, muestra completo el derecho.

Ejemplo, base original con una tabla de contenidos


nulos

Al intentar aparear con una completa de 5 registro no nulos (en este caso la tabla datos), omite los nulos no
apareados
Por ejemplo, si forzamos a la tabla Alumnos full por izquierda

Y si forzamos a la tabla Alumnos full por derecha

Aplicación más útil para diferenciar

Join and Group by

Partiendo de:
Pues es igual al group de antes, solo que previo hay que aparear las tablas

Join and Update / Join and Delete

Cuando dos tablas se relacionan, es preferible insertar y eliminar de todas (las relacionadas) para que la información
siga siendo consistente.

Alter Table

Sirve para modificar la estructura de una tabla, es decir, editar, añadir o eliminar campo(s).

Obvio, al ser nuevo, todos los registros lo tienen nulo.

Y para eliminar:

Campos Calculados (campos temporales dependientes de existentes)

Este comando permite hacer operaciones con campos, pero sin alterar la tabla, es decir son temporales.

+Nota, al crear campos calculados, los campos de los que proceden no pueden ser borrados, a menos que se eliminen
primero sus dependientes
Sub-Consultas

Significa consultas dentro de consultas, donde primero se aplica la interna, está arroja unos resultados que serán la
entrada para la segunda consulta (es decir, la consulta interna “pasa parámetros”)

Sub-consultas con in / not in

Tabla original

Primero el uso básico de in / not in

Ahora aplicándolo con subconsulta (where num pag >500)

Sub-consultas con any / all

= Any , los que pertenecen <> all, los que no pertenecen


Muestra las mujeres que tienen “un gemelo de edad en
los hombres”

Muestra las mujeres que no tienen gemelo de edad en los hombres

Sub-consultas con update / delete

Se muestra como se actualizan o datos procedentes de una subconsulta

Lo primero que hace es buscar y devolver las id de


mayores de 24, ya realizado ese filtro, les cambia el tipo
a root

Y bueno, lo mismo aplica a borrar.

Primero entrega los usuarios mayores a 24, y luego


entonces los elimina
Sub-consultas con insert

Aquí se ejemplifica el insertado resultado de primero copiar de una tabla a una nueva:

De la tabla que hemos usado, se copian los nombres a la


nueva tabla

Y cuando se ejecutó la subconsulta?

Pues nunca…

Comando Go, para ejecución estructurada

Este comando sirve para delimitar conjuntos de sentencias y ejecutar varias de un jalón

Así no jala, pero así si:

Vistas

Son una “tabla parcial/ temporal” es decir provienen de una tabla original, pero limitando datos, ya sea por practicidad,
privacidad etc. Por ejemplo, es lo que el manager DB suele compartir con desarrolladores
Esta tabla satisface la necesidad de un desarrollador que desea conocer los nombres de los registrados, pero no necesita,
o no le queremos pasar los demás datos.

Cabe destacar que si una tabla original cambia (borra, agrega etc.) su(s) vistas hijas también lo hacen así, e igual, si una
vista es alterada, se altera en automático a la tabla Original.

*Comprobación en el tema: Vistas con Update / Delete

Cifrado de Vistas

Evita que quien recibe la vista pueda ver el grupo (estructura origen de la vista/ o sea la estructura de la tabla madre)

Así lo haría

Entonces para que no puedan aplicar el helptext,


añadimos el crear la vista una encriptación

Y cuando un metiche quiera saber de dónde y qué tomé para realizar esa vista, obtendrá:

Eliminación de Vistas

Aquí el profe confunde respecto a las depedencias, pero bueno en el ejemplo usó drop (que es un reset) a una tabla
original y esto según lo que él había mostrado, aplica a la vez un drop (reset) a las vistas dependientes. Y después todo
sonso aplica un drop a la vista en particular, lo cual procede, pero aunque él no lo muestre, no tiene sentido puesto que
la vista se acababa de resetear.

Vistas con Update / Delete Creando y mostrando la vista

Tabla original
Ahora editamos en la Vista, y luego demostraremos que
también cambió la tabla original Y aquí la comprobación de la tabla original

Lo mismo pasaría, si borramos en la vista, se borraría en automático en la Tabla original

Aquí primero borramos toda la Vista Mujeres, luego


entonces consultamos la Tabla original usuarios, y
arroja puros hombres

Vistas con Check Option

Este comando sirve para “bloquear” la operación de inserción en una vista.

Creando una vista que se llama copy, que incluye puros hombres con WITH CHECK HABILITADO

Y en que afecta?, en que ese campo con WITH CHECK HABILITADO no puede ser editado por la vista. El profe la cagó,
pero un ejemplo mejor ejecutado sería este:
create view copy as
select * from usuarios
where tipo_usuario = 'registrado' with check option

y después quisieras actualizar de esta manera

update copy set tipo_usuario = 'ROOT'

Esto mandará un error diciendo que se especificó con el with check option que desde la vista no se modificara este campo.
(tipo de usuario)
Seguuuuuun… y otros dicen que no, que sirve como candado pero para datos posteriores, osea, que si la cualidad de
existencia de esa tabla fue “los menores de 24”, cualquier nuevo dato que esa tabla permita, solo serán menores de 24.
LO REVISARË

Vistas modificadas (Alter View)

Sirve para modificar la estructura de una vista, es decir,


editar, añadir o eliminar campo(s). No sé si esto también
altera a la Tabla original.

Bucles: Case

Estructura de procedimiento evaluado, es decir se evalúa


una condición y si procede se ejecuta A, si no se cumple,
ejecuta B, en casos no incluidos pone NULL

Y muestra:

Y muestra: Mejor expresado:

Y para corregir, pues se hace extensión de casos, es decir,


considerar a los demás, ya sea caso a caso o con una
condición inclusiva, agrupadora, comparativa etc
Bucles: If

Que muestra:

O en otro ejemplo:

Y obtenemos:

Variables

De la tabla total, mediante condicionamiento con variables, se hizo un filtrado de hombres mayores a 18 años

Otro ejemplo
Procedimientos: Declaración

Cabe destacar que el proceso no puede incluir un “crear proceso”, pero si llamar procesos dentro (ya hechos).

Además también se pueden cifrar igual que las vistas

*al aplicar el sp_helptext, solo dice que el procedimiento está encriptado

Ejemplo, un procedimiento que solo invocarlo, muestre todas las mujeres

Ahora con filtrado de datos:

Proceso que inserta un registro predefinido cada que se le invoque


Procedimientos: Eliminarlos

Se pone la verificación del NULL para evitar problemas

Procedimientos: de Input

Muéstrame todos los hombres mayores de 18 años:

Aun siendo input, se puede poner valores por defecto si el usuario no inserta valores, como en este ejemplo, el default
es 18 y F, si el usuario no hubiera puesto 21 y F, al ejecutar el procedure, se mostrarían mujeres mayores a 18

Procedimientos: de Output

Se ejemplifica un proceso que devuelve el total de personas que cumplen con las dos características input (Sexo y Mayor
a edad indicada).

Cabe destacar que el resultado del proceso (output) se igualó a una variable para poderlo mostrar, este paso se pudo
omitir colocando el SHOW dentro del proceso.
Procedimientos: Return

Un condicional de bandera que devuelve un valor puntual según las condicionantes, pudiendo aplicar este filtro a una
sentencia o instrucción posterior, aquí devuelve 1 solo si ambos campos insertados son diferentes de NULL

Utilidades Info, para delatar procedimientos

*Comandos básicos para analizar/ conocer / verificar una Base de Datos y sus componentes

Procedimientos: Anidación

Y el procedimiento 2 llama al 1

De uno se obtiene la suma, la 2 la copia y la muestra. Por eso no se observa mucho, si se le añadiera una operación en el
caso 2 sería más evidente la utilidad.
Triggers

Podríamos decir que son un procedimiento autoejecutable, detonado por alguna operación primaria de Base de Datos
(Eliminar, Editar o Ingresar Registros)

Su estructura básica:

Triggers: Insert

Ejemplo de trigger que actua mediante detonante Insert

Ejemplo de un total de ventas, donde cada registro nuevo simboliza una nueva venta, por lo tanto, al hacer un nuevo
registro, activa trigger detonado por inserción que aumenta la cantidad de las ventas AUTOMÁTICAMENTE

Previo a una inserción, se tenía el total de 63 Y luego de insertar:


Trigger: Update

Ejemplo de Trigger detonado por una actualización

Probando el trigger

Antes: Después

Trigger: Delete

Antes: Después:
Trigger: Activar o Desactivar

Sentencias para desactivar el trigger que en dado punto se creó, y no se quiere efectuar ahora mismo

(Para activar sería enable)

Y aplicando en el mismo ejemplo de la eliminación, luego de haber eliminado, ya no actuó el trigger

You might also like