Lección 1 - Bases de datos relacionales
¿Que son las bases de Datos?
Se define una base de datos como una serie de datos organizados y relacionados entre sí, los cuales son
recolectados y explotados por los sistemas de información de una empresa o negocio en particular.
Características
Entre las principales características de los sistemas de base de datos podemos mencionar:
◘Independencia lógica y física de los datos.
◘Redundancia mínima.
◘Acceso concurrente por parte de múltiples usuarios.
◘Integridad de los datos.
◘Consultas complejas optimizadas.
◘Seguridad de acceso y auditoría.
◘Respaldo y recuperación.
◘Acceso a través de lenguajes de programación estándar.
Mayor informacion : [Link]
¿Que son las bases de Datos Relacionales?
Una base de datos relacional es una colección de elementos de datos organizados en un conjunto de
tablas formalmente descritas desde la que se puede acceder a los datos o volver a montarlos de muchas
maneras diferentes sin tener que reorganizar las tablas de la base. La base de datos relacional fue
inventada por E.F. Codd en IBM en 1970.
Definiciones Importantes a tomar en cuenta:
Tabla:
Objeto de almacenamiento perteneciente a una BD. Es una estructura en forma de cuadrante donde se
almacenan registros o filas de datos. Cada tabla tiene un nombre único en la BD.
Registro:
Cada una de las filas de una tabla, esta compuesto por campos o atributos.
Campo:
Cada uno de los “cajoncitos” de un registro donde se guardan los datos. Cada campo tiene un nombre
único para la tabla de la cual forma parte, además es de un tipo (naturaleza) determinado, por tanto no
podemos guardar limones en el cajón de las naranjas, en términos informáticos y a modo de ejemplo, no
encontraremos un dato alfanumérico (letras y números) en un campo diseñado para
Para la creacion de una Base de datos la sintaxis que se ocupa es la siguiente :
create database nombreBase
Donde "nombreBase" es el nombre que se le dara a la base de datos.
Para la creacion de una Tablas la sintaxis que se ocupa es la siguiente :
create table Trabajador (ID_trabajador int PRIMARY KEY NOT NULL,
Nombre varchar(50),
ano_nacimiento datetime,
genero varchar(5),
Puesto varchar(30),
Salario int);
Y como resultado tendremos
Como observamos en el ejemplo de la Tabla de Trabajadores Cada Trabajador tiene respectiva
informacion con el, en este caso el año de nacimiento, asi como el genero y el puesto.
Los registros o miembros de una tabla tienen en común sus atributos, no el dato en sí, que lo más
probable es que difiera de un registro a otro, pero sí el hecho de que todos ellos poseen esos atributos.
Dato para concluir :
Una BD contendrá tablas que a su vez contendrán registros y en estos se encontrarán los datos
distribuidos en una serie de campos.
Curso Gratis SQL . Lección 2 - Comandos SQL Básicos.
Lección 2 - Comandos SQL Básicos.
En esta lección les explicaremos la sintaxis basica del lenguaje SQL.
SQL (por sus siglas en inglés Structured Query Language; en español lenguaje de consulta estructurada) es
un lenguaje específico del dominio que da acceso a un sistema de gestión de bases de datos relacionales que
permite especificar diversos tipos de operaciones en ellos.
Definiendo cómo es almacenada la información.
CREATE DATABASE este comando se utiliza para crear una nueva base de datos vacía.
DROP DATABASE este comando se utiliza para eliminar completamente una base de datos existente.
CREATE TABLE este comando se utiliza para crear una nueva tabla, donde la información se almacena
realmente.
ALTER TABLE este comando se utiliza para modificar una tabla ya existente.
DROP TABLE este comando se utiliza para eliminar por completo una tabla existente.
Tambien mostraremos comandos para poder manipular los datos de las tablas que se creen.
Manipulando los datos.
SELECT se utiliza cuando quieres leer (o seleccionar) tus datos.
INSERT se utiliza cuando quieres añadir (o insertar) nuevos datos.
UPDATE se utiliza cuando quieres cambiar (o actualizar) datos existentes.
DELETE se utiliza cuando quieres eliminar (o borrar) datos existentes.
REPLACE se utiliza cuando quieres añadir o cambiar (o reemplazar) datos nuevos o ya existentes.
TRUNCATE se utiliza cuando quieres vaciar (o borrar) todos los datos de la plantilla.
Ejemplo Basico:
CREATE DATABASE mydb;
USE mydb;
CREATE TABLE mitabla ( id INT PRIMARY KEY, nombre VARCHAR(20) );
INSERT INTO mitabla VALUES ( 1, 'Will' );
INSERT INTO mitabla VALUES ( 2, 'Marry' );
INSERT INTO mitabla VALUES ( 3, 'Dean' );
SELECT id, nombre FROM mitabla WHERE id = 1;
UPDATE mitabla SET nombre = 'Willy' WHERE id = 1;
Curso Gratis SQL . Lección 3 - Consutas SQL I (Sencillas)
Consultas SQL sencillas
Devolver todos los campos de una tabla (SELECT *)
SELECT * FROM CLIENTES
Con el * indicamos que queremos devolver todos los campos. Si CLIENTES dispone de los
campos idCliente, nombre y descripcion,
lo anterior sería equivalente a:
SELECT idCliente, nombre, descripción FROM CLIENTES
Obviamente, al querer todos los campos, esto es innecesario y es por tanto más conveniente emplear el asterisco
(*). También sería equivalente emplear la notación completa:
SELECT [Link], [Link], [Link] FROM CLIENTES
Al tener únicamente una tabla involucrada, podemos referirnos a los campos sin calificar, dado que no hay duda de
a qué tabla se refiere. Cuando veamos consultas sobre varias tablas comprenderemos la necesidad de incluir esta
notación calificada ([Link]).
Devolver un subconjunto de los campos de una tabla (SELECT DISTINCT)
SELECT cp, ciudad
FROM DIRECCION
Esta consulta devolverá únicamente los campos cp (código postal) y ciudad de la tabla DIRECCION. Al tener
un subconjunto de los campos, éstos no tienen por qué incluir a la clave de la tabla, por lo que no tienen por qué ser
únicos. Así, si tenemos muchos registros referidos a distintas calles y números de ese mismo código postal y ciudad,
nos encontraremos muchos registros repetidos. Esto puede evitarse haciendo:
SELECT DISTINCT cp, ciudad
FROM CLIENTES
Así se eliminan los registros repetidos, devolviendo únicamente una vez cada par cp, ciudad. Esta selección de un
subconjunto de los datos de la tabla y excluyendo repetidos se denomina en álgebra relacional proyección.
Devolver un subconjunto de los registros de una tabla (WHERE)
SELECT numero, calle
FROM DIRECCION
WHERE ciudad = ‘Sevilla’
Esta consulta devolvería el número y la dirección de todas las direcciones pertenecientes a la ciudad de Sevilla.
Como vemos, con WHERE indicamos la condición que deben cumplir los registros de la tabla para ser devueltos en
la consulta. En este caso tenemos una condición simple dada por la comparación de igualdad (=) entre al campo
(ciudad) y un literal de tipo
cadena, entre comillas simples (‘Sevilla’).
SELECT calle, ciudad
FROM DIRECCION
WHERE numero = 12
Esta otra consulta devolvería la calle y ciudad de todos los registros de la tabla con el número 12, en este caso un
literal numérico. Las condiciones empleadas pueden ser mucho más complejas incluyendo otro tipo de operadores
y combinaciones de los mismos.
Operadores relacionales
Al margen del signo de igualdad empleado anteriormente, se pueden usar n las condiciones simples de las consultas
los operadores relacionales habituales, devolviendo siempre un valor booleano (lógico):
Operador Significado
< Menor que
> Mayor que
<> Distinto de
<= Menor ó Igual que
>= Mayor ó Igual que
= Igual que
SELECT nombre
FROM CLIENTES
WHERE edad <= 32
Adicionalmente, disponemos de operadores de comparación adicionales, también devolviendo valores booleanos
(lógicos) True o False según si se cumplen o no las condiciones:
BETWEEN: para indicar un intervalo de valores.
SELECT nombre
FROM CLIENTES
WHERE edad BETWEEN 20 AND 35
LIKE: empleado para comparar patrones de texto pudiendo incluir comodines como los siguientes:
SELECT num, calle, cp
FROM DIRECCION
WHERE ciudad LIKE ‘Val%’
Esta consulta devolvería los datos de las direcciones de toda ciudad que comience por Val y siga por cualquier
número de caracteres, incluyendo cero caracteres. Por ejemplo, Valladolid o Valencia. En el enlace anterior sobre
patrones de texto podemos practicar directamente desde la web.
IN: empleado para comparar con una lista de valores fijados de modo que devuelva True si el campo indicado
pertenece a la lista.
SELECT num, calle, direccion
FROM DIRECCION
WHERE ciudad IN (‘Sevilla’, ’Córdoba’, ‘Huelva’, ‘Cádiz’)
Curso Gratis SQL . Lección 4 - AND, OR, NOT ,ORDER BY,A,GROUP BY
La precedencia y asociatividad es la habitual definida en la Lógica. En cualquier caso, cuando incluya
expresiones que empleen varios de estos operadores es recomendable usar paréntesis para evitar errores.
Operadores lógicos (AND, OR, NOT)
Los operadores lógicos nos sirven para componer expresiones de filtrado a partir de las anteriores:
Operador Significado
AND -Y lógico
OR -O lógico
NOT - Negación lógica
Por ejemplo:
SELECT *
FROM DIRECCION
WHERE ciudad = ‘Sevilla’ AND cp = 41009 OR ciudad = ‘Córdoba’ AND NOT cp = 14010
Devuelve los registros pertenecientes a direcciones que tengan el código postal 41009 de Sevilla o bien que no
tengan el 14010 de Córdoba. La mayor precedencia la adopta el operador NOT sobre la condición cp = 14010; a
continuación los AND se aplican sobre ciudad = ‘Sevilla’ AND cp = 41009 y ciudad = ‘Córdoba’ AND NOT cp = 14010;
por último se aplica el OR sobre la fórmula completa. La misma consulta se puede expresar de forma más clara con
paréntesis:
SELECT *
FROM DIRECCION
WHERE (ciudad = ‘Sevilla’ AND cp = 41009) OR
(ciudad = ‘Córdoba’ AND (NOT cp = 14010))
O bien si el NOT nos parece más evidente, podemos excluir el paréntesis interior, a nuestra gusto siempre
conservando el significado que queríamos dar la operación.
Ordenación
Ordenar según criterios (ORDER BY)
Podemos ordenar los registros devueltos por una consulta por el campo o campos que estimemos oportunos:
SELECT *
FROM CIUDAD
ORDER BY provincia ASC, numhabitantes DESC
Esta consulta devolvería todas las ciudades ordenadas por provincia en orden ascendente, y dentro de los de la
misma provincia ordenaría las ciudades por orden descendente del número de habitantes. Si no indicamos ASC ni
DESC, el comportamiento por defecto será el orden ascendente (ASC).
Devolución de expresiones
Asignación de un alias a un dato devuelto (AS)
SELECT idCliente AS id, nombre AS cliente, descripcion AS desc
FROM CLIENTES
Uso de expresiones empleando operadores y/o funciones
Podemos practicar en SQLzoo a usar expresiones con operadores y funciones. Por ejemplo:
SELECT MOD(DAY(NOW()),7) AS numSemana, POW(2,3) AS potencia8
Devuelve el número de semana en la que nos encontramos dentro del mes, ya que NOW() nos devuelve la
fecha/hora actual, de la cual extraemos el día con DAY, y posteriormente calculamos el módulo 7 de dicho día (de
modo que para un día 26 devolvería un 5, por ejemplo). El dato con alias potencia8 devolvería 8 (2 elevado a 3,
POW es power, potencia).
Se puede combinar naturalmente la potencia de este lenguaje de expresiones usando operadores y funciones sobre
los datos de los registros de una tabla:
SELECT DAY(fechaLinea) AS dia, FLOOR(precioLinea * 0.85) AS precioDtoRedondeado
FROM LINEAPEDIDO
Consultas agrupadas (GROUP BY)
Las consultas anteriores recuperaban, trabajaban con, y mostraban información a nivel de cada registro
individual de la base de datos. Así, si tenemos un producto con un determinado precio, podemos devolver el precio
mediante SELECT precioLinea o bien operar sobre él como en SELECT precioLinea * 0.85.
Ahora bien, podemos querer obtener información que no proviene de un registro individual sino de la
agrupación de información, como es el caso de contar el número de líneas de pedido, sumar el precio de todas las
líneas por cada pedido, etc. Para ello, debemos emplear funciones agregadas y en la mayoría de los casos agrupar
por algún campo.
Así, para ver el número total de registros podemos hacer:
SELECT COUNT(*)
FROM LINEAPEDIDO
Si por el contrario deseamos obtener el total de líneas por pedido, debemos indicar queagrupe por idPedido, lo
que contará todos los registros con el mismo idPedido y calculará sucuenta:
SELECT idPedido, COUNT(*)
FROM LINEAPEDIDO
GROUP BY idPedido
Lo mismo se puede aplicar a otras funciones como la suma, indicando en ese caso aparte de la agrupación el
campo que queremos sumar:
SELECT idPedido, SUM(precioLinea)
FROM LINEAPEDIDO
GROUP BY idPedido
¿Y si queremos hallar la media de los precios por cada pedido? En ese caso necesitamos de nuevo agrupar
(GROUP BY) por pedido.
SELECT idPedido, AVG(precioLinea)
FROM LINEAPEDIDO
GROUP BY idPedido
Igualmente, podríamos aplicar un redondeo (ROUND) sobre la media, para dejar 4 decimales, y aplicarle un alias
(AS) para el nombre del dato de salida.
SELECT idPedido, ROUND(AVG(precioLinea),4) AS media
FROM LINEAPEDIDO
GROUP BY idPedido
O podríamos establecer una condición sobre el dato agrupado (HAVING), de forma que solamente se muestren
las medias menores o iguales que 10. Existe una gran cantidad de funciones de agregación definidas en SQL, pero
hay que tener precaución porque pueden diferir de un SGBD a otro.
SELECT idPedido, ROUND(AVG(precioLinea),4)
FROM LINEAPEDIDO
GROUP BY idPedido
HAVING AVG(precioLinea) < 10
Para practicar un poco con las más comunes es muy recomendable este tutorial interactivo. En MySQL tendríamos
las que aparecen en este enlace. Este es el desglose completo de las funciones de agregación estándar: