Lenguaje SQL
Lenguaje SQL
En clases pasadas tuvimos una breve introducción a las bases, ahora profundizaremos
un poco mas en las bases de datos, como realizar consultas y como conectar Python
con una base de datos y realizar consultas
El diseño de una base de datos que puede resultar bastante arduo. Habitualmente, la
complejidad de la información y la cantidad de requisitos de los sistemas de
información hacen que sea complicado; por este motivo, cuando se diseñan bases de
datos es interesante aplicar la vieja estrategia de dividir para vence. consiste en
descomponer el proceso del diseño en varias etapas; en cada una se obtiene un
resultado intermedio que sirve de punto de partida de la etapa siguiente
Los objetivos que se desean conseguir con el diseño de base de datos son los siguientes:
• Controlar la redundancia de la información.
• Evitar pérdidas de información.
• Capacidad para representar toda la información.
• Mantener la consistencia de los datos.
Como ya se menciono, el diseño de base de datos generalmente se realiza por etapas
esta etapa, normalmente se realiza en dos grandes etapas.
Etapa del diseño conceptual:
En esta etapa se obtiene una estructura de la información de la futura base de datos independiente de la
tecnología que se empleará. No se tiene en cuenta todavía qué tipo de base de datos se utilizará (relacio
nal, orientada a objetos, jerárquica); tampoco se tiene en cuenta con qué sistema de gestión de base de
datos ni con qué lenguaje concreto se implementará la base de datos.
El resultado de esta etapa es un modelo de flujo de información de alto nivel.
Como ya se menciono, el diseño de base de datos generalmente se realiza por etapas
partiendo por la etapa de diseño conceptual.
Etapa del diseño lógico: en esta etapa se parte del resultado del diseño conceptual, que se transforma al tip
o de base de datos que vamos a utilizar. Más concretamente, es preciso que se ajuste al modelo del sistema
de gestión de base de datos con el que se desea implementar la base de datos. Por ejemplo, si se trata de u
n SGBD relacional, esta etapa obtendrá un conjunto de relaciones donde las entidades se transforman a tab
las normalizadas con sus atributos, claves primarias y claves foráneas.
El proceso de normalización que se aplica en esta etapa consiste en una serie de reglas que deben cumplir l
as tablas y relaciones obtenidas tras el paso del modelo entidad relación al modelo relacional, para entonce
s ser un modelo lógico. Las bases de datos relacionales se normalizan básicamente para: evitar la redundan
cia de los datos, evitar problemas de actualización de los datos en las tablas, proteger la integridad de los d
atos.
Para la normalización de los datos en una base de datos se siguen 3 conjunto de
reglas, que son conocidas como “formas normales” las cuales dictan una serie de
pautas que se deben tener en cuenta para una base de datos pueda cumplir con los
objetivos mencionados anteriormente
Primera forma normal (1FN)
• Se eliminan todos los campos o atributos repetidos
• Se asegura la atomicidad de los campos, en caso de existir atomicidad, se evalúa la creación de una nu
eva tabla Cada tabla debe tener una llave primaria
• Se asegura una dependencia funcional respecto a la llave primaria
Segunda forma normal (2FN)
• Debe cumplir la primera forma normal
• No deben existir dependencias parciales: todos los campos no llaves deben depender solo de la llave p
rimaria
Tercera forma normal (3FN)
• Debe cumplir con la segunda forma normal
• No deben existir dependencias transitivas: ningún campo debe depender de un campo no llave
Y por último tenemos la etapa del diseño físico
Etapa del diseño físico:
En esta etapa se transforma la estructura obtenida en la etapa del diseño lógico, con el objetivo de conse
guir una mayor eficiencia; además, se completa con aspectos de implementación física que dependerán
del sistema de gestión de bases de datos
En clases anteriores mencionamos que el lenguaje SQL era el lenguaje de gestión de información mas extendido para el
manejo de bases de datos relacionales, la estructura de una sentencia o consulta SQL es mas similar a una oración
hablada que a una instrucción de código como estamos acostumbrados a ver en los lenguajes de programación
Entre las acciones básicas en SQL tenemos:
• Select: selecciona
• Update: actualiza o modifica los campos indicados
• Delete: elimina un registro
• Insert: Agrega un registro
Por ahora que estamos comenzando usaremos una base de datos pequeña para realizar algunas consultas simples,
Para comenzar realicemos una consulta donde obtendremos de la tabla alumno los nombres y Cedula de los alumnos
que estén inscrito en el curso “MOD1P2G”. Observemos que el resultado es el esperado.
Realicemos la misma consulta, pero esta vez queremos toda la información de los mismos estudiantes. Podemos
intuir que colocando todos los campos podemos obtener todos los datos de los registros consultados, sin embargo,
en SQL podemos indicar que queremos todos usando el asterisco (*) de la siguiente manera
Para la siguiente consulta crearemos un nuevo estudiante, de nombre Teresa, apellido López, Cedula 100556235 y
inscrito en el curso MOD1P1G. Observemos que la posición de los nombres de los campos debe coincidir con la de
su respectivo valor en “values”
Un comando muy usando es el de actualizar o modificar un registro, para este ejemplo
cambiaremos el curso a la alumna Teresa a MOD1P3G. Cuando modifiquemos un registro
debemos tener en cuenta como acedemos a el registro, en este caso es la ya que solo
queríamos modificar un solo registro accedimos por medio de la cedula que sabemos
que no se repetiría para ningún otro registro
Ahora realizaremos el borrado de un registro, en ciertas bases de datos no es recomendable borrar información, por
ejemplo, en la base de datos de usuarios normalmente no se eliminan los registros, simplemente se crea un campo
que indica si el usuario esta activo o inactivo. Pero en caso de que sea necesario tenemos el comando DELETE, en
este ejemplo eliminaremos el alumno Juaquin
Para avanzar y hacer consultas mas complejas usaremos una base de datos de una inmobiliaria, la cual cuenta con
los datos residencias en renta.
Para la siguiente consulta realizaremos nuevamente la clausula WHERE, pero esta vaz usaremos mas parámetros de
búsqueda, para la siguiente consulta pediremos que nos devuelva todos los datos cuyo coste de renta sea mayor o
igual a 1500 y que estén amueblados.
Observemos que es tan simple como utilizar el operador and, y los signos mayor o igual. Esta base de datos tiene una
peculiaridad, la cual es que los nombres de los campos contienen espacios, esto no es recomendable, sin embargo, si
nos llegásemos a encontrar con alguna base de datos igual que esta, solo debemos colocar los nombres de los campos
entre corchetes.
También podemos agrupar con paréntesis los operadores lógicos, por ejemplo, en esta consulta requerimos la
información de los inmuebles que estén amueblados y su coste de arrendamiento sea menor a 1500 o que cuente con
mas de 4 habitaciones
La clausula WHERE algunos operadores mas, solo debemos tener en cuenta que pueden existir algunas variaciones
entre cada gestor de bases de datos, en estos casos solo deberíamos buscar el equivalente de en el gestor de bases
de datos que estemos usando
Continuamos con las consultas de agrupación o totales, estas son consultas que como su nombre lo indica consisten
en agrupar algún valor, y con esta agrupación y aplicarle alguna función de operación entre las funciones que
podemos aplicarle son las siguientes.
Para el siguiente ejemplo continuaremos con la base de datos de la inmobiliaria, y
utilizaremos la función GROUP BY para agrupar el resultado por un campo. En esta
consulta agruparemos el resultado por el campo “Amoblado” y sumaremos los precios de
estos
En la siguiente consulta agruparemos por el área del inmueble y calcularemos el promedio del coste de renta. Vemos
que es igual que la consulta anterior, pero en esta consulta queremos ordenar por el promedio del costo ya que por
defecto se ordena por el campo que estamos agrupando. Para ordenar una consulta se usa ORDER BY
Pero en estas cosas que deseamos ordenar por medio de un valor tendremos un problema el nombre del registro que
se genera que en este ejemplo es “Expr1001” no existe hasta que se ejecuta la consulta, por lo tanto, no podemos
referirnos a ese campo y si intentamos referirnos a el en el ORDER BY nos saldrá un error, para estos casos en que
necesitamos referirnos un registro generado por una operación, debemos referirnos a este campo junto con la función
de operación que le estemos aplicando.
Si deseamos cambiar el orden de ascendente o descendente solo debemos usar ASC y
DESC como criterio de orden y en caso de querer asignarle un nombre a ese campo que
se genera por la operación podemos asignarle un alea, con la clausula AS.
Esta es la misma consulta solo que se le agrego un alea a la columna del promedio y
se ordeno de manera descendiente. Solo a modo informativo, en algunos gestores como
MySQL podríamos ordenar con el alea de la siguiente manera “ORDER BY Promedio”
En las consultas de agrupación podemos agregar condiciones como lo hemos hecho en consultas anteriores, sin embargo,
debemos usar HAVING en vez de WHERE ya que, en las consultas de agrupación, el WHERE es sustituido por el HAVING,
no obstante, ambos pueden usar los mismos operadores lógicos, en este ejemplo realizaremos la misma consulta anterior
pero solo con los inmuebles cuya área sea mayor a 80 m2
Similar a las consultas de datos pro agrupación, tenemos las consultas de calculo, estas son similares, con la diferencia
que los cálculos se realizan en cada uno de los registros del campo que deseemos realizar la operación. Las
operaciones se realizan por medio fe funciones SQL, estas funciones son independiente de cada gestor de base de
datos, sin embargo, existen algunas que son bastantes comunes entre los gestores
Funciones mas comunes:
• Now(): Regresa la fecha actual
• Datediff(): Entrega la diferencia entre dos fechas.
• Date_format(): Especifica el formato de la fecha
• Round(): Redondea decimales
• Concat(): concadena texto
No todas las operaciones se realizan con funciones por ejemplo el ejemplo realizaremos una consulta que nos regresara
el código del inmueble junto a su precio de arriendo y dos nuevos campos, uno con un impuesto del 10% del precio del
arriendo y otro campo con el recio sumado con el impuesto
A esta ultima consulta, volvámosla un poco mas interesante, quitaremos de la consulta el campo “impuesto” en
cambio agregaremos el campo de la fecha de renovación, y calcularemos cuantos años han transcurrido desde que el
inmueble fue remodelado
Observemos que con le función Datediff calculamos fácilmente los años transcurridos,
también notemos que esta función recibe el parámetro “yyyy” este parámetro le indica
a la función que entregue la diferencia en años, ya que podemos colocar “m” para mes
“d” para día “q” para trimestres incluso “s” para segundos.
Y al igual que las otras consultas podemos especificar condiciones con el WHERE, como ejemplo indiquemos que solo
nos devuelva los que tenga solo 1 año transcurrido desde su remodelación o que su precio sea menor a 4000
En una base de datos relacional, la información de diferentes tablas esta
relacionada por medio de las relaciones, estas pueden ser:
Relaciones de uno a muchos: son relaciones como las que vemos en la imagen, esta relación
indica que un registro de la tabla Pasajero puede esta vinculado con varios registros de
la tabla Registro
Relación uno a uno: esta relación indica un registro del coche de la empresa solo esta relacionado con un registro de e
mpleado
Relación muchos a muchos: Esta relación en SQL no es posible realizarla directamente y se realiza atreves de una tab
la intermedia. Esta relación permite que varios archivos de una tabla se relacionen con varios archivos de otra
Gracias a estas relaciones podemos realizar consultas entre varias tablas usando las
clausula JOIN, INNER JOIN, LEFT JOIN y RIGTH JOIN.
INNER JOIN: Esta sentencia devuelve los registros que aparezca tanto en la tabla A como en la taba B, podrí
amos verlo como una AND devuelve los registros que estén en A y en B
Para realizar estas consultas utilizaremos la base de datos “Carpooling” esta tabla
contiene la información relacionada de los viajes realizado por una universidad.
Para comenzar pediremos todos los datos de los conductores con sus viajes
La explicación es bastante sencilla. Como sabemos que la tablas Conductor y Viajes están relacionadas con la del
conductor, aparece en la tabla Viaje, con la clausula ON del INNER JOIN le estamos indicando que una las tablas
donde coincida los id
Y como es de esperarse también podemos aplicar criterios de búsqueda con WHERE
LEFT JOIN y RIGTH JOIN son bastante similares, esto lo que hace es devolvernos todos los registros que se
encuentren en y los que coincidan en la otra. LEFT JOIN nos devuelve todos los registros de A y los que coinciden en B
mientras que RIGTH jJOIN es lo contrario. Devuelve todos los registros de B y los que coinciden en A
Observemos que la instrucción en SQL es igual, solo debemos saber cual nos resulta
mejor usar dependiente de lo que deseemos.
Ahora veremos las subconsultas, se basa en realizar una consulta a otra consulta, en
pocas palabras es una consulta dentro de otra para la siguiente consulta usaremos
nuevamente la base de datos de Inmobiliaria
En esta sub consulta pediremos que nos regresen los registros de los inmuebles cuyo costo de renta sea menor al
promedio del valor del costo de renta de los inmuebles amoblados. observemos como por valor del criterio de búsqueda
del WHERE de la primera búsqueda tenemos una consulta de agrupación con su propio WHERE.