
# UNIDAD 6: LENGUAJE SQL
# 6.1 INTRUDUCCIÓN
# SQL significa: Lenguaje de consulta estructurado
# Es un lenguaje que se utiliza en los Gestores de BBDD
# Incorpora lenguaje de definición de datos, y lenguaje
# de manipulación de datos.
# 6.2 DEFINICIÓN DE DATOS.
# El DDL (Data Definition Language) lenguaje de
# definición de datos es la parte del SQL que más varía
# de un sistema a otro ya que esa area tiene que ver con
# cómo se organizan internamente los datos y eso, cada
# sistema lo hace de una manera u otra.
# ejemplo:
CREATE TABLE especies (
Id_especie INTEGER NOT NULL AUTO_INCREMENT,
nombre_comun VARCHAR(50),
nombre_cientifico VARCHAR(50),
id_alimentacion INTEGER,
INDEX (id_alimentacion),
PRIMARY KEY (Id_especie)
);
ENGINE=InnoDB DEFAULT CHARSET=utf8;
#6.3 ESTRUCTURA BASICA DE LAS CONSULTAS
Select * from tabla;
Select atributo from tabla;
Select atributo1, atributo2, atriburo n from tabla;
# Select atributox, atributoy from tabla1,tabla2,tablan where ...
select nombre from proveedores,sociedades
where (proveedores.tipo_sociedad=sociedades.id_tipo_sociedad)
and (sociedades.descripcion="camino al exito");
# 6.4 OPERACIONES SOBRE CONJUNTOS
# el primer tipo de operación sobre conjuntos es la union...
# este trata unir los elementos de dos o mas conjuntos,
# preferentemente los elementos de esos conjuntos deben
# tener algunas caracteristicas en comun
# Ejemplo:
select nombre
from empleados
union
select nombre
from clientes
union
select nombre
from proveedores;
# El segundo tipo de operación sobre conjuntos es la
# Diferencia, Resta o excepcion, se conoce con esos 3 nombres
# EXCEPT devuelve la diferencia (resta) de dos o más conjuntos
# de resultados. El conjunto obtenido como resultado de EXCEPT
# tiene la misma estructura que los conjuntos originales.
# En muchos manejadores de BD se logra con EXCEPT o con MINUS
# En mysql esto se logra con: NOT IN
# Ejemplo:
select nombre
from clientes
where nombre NOT IN
(select nombre
from proveedores);
# El tercer tipo de operación sobre conjuntos es la intersección.
# Este devuelve la intersección entre dos o más conjuntos de resultados en uno.
select nombre
from clientes
INNER JOIN proveedores
USING
(nombre);
select nombre
from proveedores
where nombre= (select nombre from clientes where nombre = "green_peace");
#6.5 VALORES DE AGREGACIÓN.
# El SQL nos ofrece las siguientes funciones de agregación para efectuar
# varias operaciones sobre los datos de una base de datos:
#Funciones de agregación Función
# Descripción
# COUNT Nos da el número total de filas seleccionadas
# SUM Suma los valores de una columna
# MIN Nos da el valor mínimo de una columna
# MAX Nos da el valor máximo de una columna
# AVG Calcula el valor medio de una columna
# En general, las funciones de agregación se aplican a una columna,
# excepto la función de agregación COUNT, que normalmente se aplica
# a todas las columnas de la tabla o tablas seleccionadas. Por lo
# tanto,COUNT (*) contará todas las filas de la tabla o las tablas
# que cumplan las condiciones. Si se utilizase COUNT(distinct #columna),
# sólo contaría los valores que no fuesen nulos ni repetidos, y si se utilizase
# COUNT(columna), sólo contaría los valores que no fuesen nulos.
# Aclarando que hay mas variaciones sobre cada caso
# Veamos algunos ejemplos basicos de cada caso.
# Supongamos que queremos contar cuantos proveedores tenemos
Select count(*)
as numero_prov
from proveedores;
# Supongamos que queremos sumar la cantidad de productos que existen en stock
select SUM(stock) as total_prod from productos;
# Supongamos que queremos el producto que tiene
# valor minino de todas las existencias de los productos
select nombre, MIN(stock) as valor_minimo from productos;
# Supongamos que queremos el producto que tiene valor
# maximo de todas las existencias de los productos
select nombre, MAX(stock) as valor_maximo from productos;
# Ahora supongamos que queremos saber en promedio cuantos
select AVG(stock) as promedio_cantidad from productos;
# Tambien se pueden agrupar algunos datos cuyas caracteristicas o atributos se repitan
select id_proveedor from productos;
select id_proveedor from productos order by(id_proveedor);
select id_proveedor from productos group by(id_proveedor);
# 6.6 VALORES NULOS
# Los valores nulos representan valores inexistente o desconocido,
# y son tratado de forma diferente a otros valores.
# Veamos algunos ejemplos con otro tipo de valores,
# y a continuacion tratanto de la misma los valores nulos
# ahora veamos el tratamiento correcto de valores nulos.
Select id_proveedor from productos where nombre is NULL;
Select id_proveedor from productos where nombre is not NULL;
# 6.7 CONSULTAS ANIDADAS
# No son mas que consultas que empotran otras consultas
# Para poder filtrar en forma correcta la información
# que se desea obtener como resultado de estas.
# Generalmente se tulizan cuando se requiere filtrar informacipon
# de distintas tablas.
# Chequemos un ejemplo
Select nombre from clientes where tipo_sociedad=(select id_tipo_sociedad from sociedades where
descripcion="camino al exito");
# 6.8 CONSULTA COMPLEJAS
# En este tipo de consultas se utilizan las uniones de la informacino de diversas tablas.
# existen righ y left joins, que nos ayudan a buscar informacion en varias tablas ala vez.
# Veamos ejemplos directamente.
#Supongamos que queremos conocer los empleados que son cuidadores y de que animales estan encargados.
select animales.nombre, empleados.nombre from animales left join empleados on
animales.id_cuidador=id_empleado;
6.9 Vistas.
# De esto ya vimos los ejemplos
# Supongamos que ya hacemos varias veces consultas complejas
# Para evitar errores potenciales de captura del codigo de la consulta
# Podemos anidar esa consulta en una Vista, la sintaxis ya la vimos en clases.
# Chequemos el ejemplo directamente
# para no estar capturando a cada ratos codigos como este:
Select nombre from clientes
where tipo_sociedad=(select id_tipo_sociedad
from sociedades where descripcion="camino al exito");
# Mejor creemos una vista que contenga esa conulta...
create view miconsulta as
Select nombre from clientes
where tipo_sociedad=(select id_tipo_sociedad
from sociedades where descripcion="camino al exito");
# Una vez creada la consulta podemos consultar
# los datos de la siguiente manera
Select * from miconsulta;
# 6.10 Modificación de las bases de datos.
# Hay diversas operaciones que se pueden hacer en relaciona la modificación de
# Una base de datos, iremos describiendo las principales, a continuacion.
# Para efectos de no alterar nuestra base de datos, crearemos una nueva tabla
# que sea totalmente independiente.
#La primera operación es crear un a tabla:
#Crear la tabla hotel con la siguiente especificación:
# - Identificador: entero sin signo, autoincrementable, llave primaria
# - nombre: longitud variable, 100 carácteres como máxima longitud y no nulo
# - activo: booleano, no nullo, 1 valor por defecto
# - url: longitud variable, 255 carácteres como máxima longitud, índice único
# Para lograr esto utilicemos el siguiente código.
CREATE TABLE hotel (id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(100) NOT NULL,
descripcion TEXT,
activo TINYINT(1) DEFAULT '1' NOT NULL,
url VARCHAR(255),
UNIQUE INDEX url_idx (url)) DEFAULT CHARACTER SET utf8
COLLATE utf8_general_ci ENGINE = InnoDB;
# De la misma manera creemos una tabla mas:
# con las siguientes características
# Identificador: entero sin signo, autoincrementable, llave primaria
# nombre: longitud variable, 100 carácteres como máxima longitud y no nulo
# activo: booleano, no nullo, 1 valor por defecto
# Para lograr esto utilicemos el siguiente código.
CREATE TABLE trabajador (id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(100) NOT NULL,
activo TINYINT(1) DEFAULT '1' NOT NULL,
hotel_id INT UNSIGNED ) DEFAULT CHARACTER SET utf8
COLLATE utf8_general_ci ENGINE = InnoDB;
# Ver especificación de una tabla
# podemos lograrlo de la siguiente manera:
desc hotel;
# Tambien podemos lograrlo de la siguiente manera:
describe trabajador;
# Ver índices de una tabla
show index from hotel;
# Modificar definición de una columna
# supongamos que queremosRestringir los valores de hotel_id
# a valores no nulos en la tabla trabajador
ALTER TABLE trabajador MODIFY COLUMN hotel_id INT UNSIGNED NOT NULL;
# Agregar columna
# Supongamos que queremos Agregar la columna código a la tabla trabajador
# Primero veamos la estructura de la tabla trabajador
describe trabajador;
# Ahora agreguemos la columna
ALTER TABLE trabajador ADD COLUMN codigo CHAR(11) NOT NULL;
# ahora veamos la estructura de la tabla trabajador de nuevo
describe trabajador;
# Observa los cambios
# Crear índice
# Supongamos que el código del trabajador debe ser único
# Eso lo logramos con el siguiente codigo
CREATE UNIQUE INDEX trabajador_codigo_idx USING BTREE
on trabajador(codigo);
#Crear relación
# Aquí se establece la relación entre trabajador y hotel
# (Un hotel puede terner muchos trabajadores
# y un trabajador pertenece a un solo hotel).
# Cuando se elemina un hotel se eliminan todos sus trabajadores
ALTER TABLE trabajador ADD CONSTRAINT trabajador_hotel_id_hotel_id
FOREIGN KEY (hotel_id) REFERENCES hotel(id) ON DELETE CASCADE;
#Renombrar columna
# Cambiar el nombre de la columna url a slug de la tabla hotel
# y restringir los valores a no nulos
# y cadena vacía como valor por defecto
ALTER TABLE hotel CHANGE COLUMN url slug varchar(255) NOT
NULL DEFAULT '';
# Renombrar tabla
ALTER table trabajador RENAME TO negros;
# Eliminar tabla
DROP table tabla1[,tabla2, ...]
# Eliminar columna
# Supongamos que queremos eliminar la columna código de la tabla trabajadores
ALTER TABLE negros DROP COLUMN codigo;
No hay comentarios:
Publicar un comentario