Download - 1-Lenguaje SQL I Actualizado
Lenguaje SQL
Puerto Cruz Mateos Gestión de Bases de Datos.
Introducción
• SQL es el lenguaje fundamental de los SGBD
Relacionales.
• Es uno de los lenguajes más utilizados de la
historia de la Informática.
• Es un lenguaje declarativo, define lo que se va
a hacer por encima del cómo se va a hacer.
• Agrupa todas las funciones que se le pueden
pedir a una Base de Datos, por lo que es
utilizado tanto por administradores como por
programadores y usuarios.
Lenguaje SQL
Puerto Cruz Mateos Gestión de Bases de Datos.
HISTORIA DEL LENGUAJE SQL
• Nació en 1970 y fue creado por Codd.
• Dos años después, IBM adopta las directrices
formuladas por Codd y crea el Standard English
Query Lenguage (Lenguaje Estándar Inglés para
Consultas) SQUEL.
• Más tarde cambió su nombre por SQL.
• En 1979 Oracle presenta la primera implementación
comercial del lenguaje.
• Poco después se convierte en el estándar en Bases
de datos avalado por lo organismos internacionales
de estandarización ISO y ANSI.
Lenguaje SQL
Puerto Cruz Mateos Gestión de Bases de Datos.
VERSIONES DE SQL
• 1989: Aparece el estándar ISO y ANSI SQL89 O
SQL1.
• 1992: Aparece la versión más conocida de SQL,
llamada SQL92 o SQL2
• 1999: Se aprueba una nueva versión, SQL99 que
incorpora mejoras que incluyen trigers,
procedimientos, funciones, …
• 2006: SQL2006 Define las maneras en las cuales el
SQL se puede utilizar conjuntamente con XML.
• 2008: Aparece el último estándar hasta hoy, SQL2008
Lenguaje SQL
Puerto Cruz Mateos Gestión de Bases de Datos.
PROCESO DE LAS INSTRUCCIONES SQL
• SQL INTERACTIVO: las instrucciones se introducen a
través de un cliente conectado directamente al servidor
SQL.
• SQL EMBEBIDO O INCRUSTADO: las instrucciones de
SQL forman parte del código de otro lenguaje que se
considera anfitrión (C, Java, Pascal, Cobol, VisualBasic)
• SQL a través de clientes gráficos: un software que
permite conectar a la BD y manejarla de forma gráfica.
Más cómodo para usuarios.
• SQL dinámico: instrucciones de SQL incrustadas en
módulos especiales que serán llamados desde
aplicaciones.
Lenguaje SQL
Puerto Cruz Mateos Gestión de Bases de Datos.
SENTENCIAS DE SQL
DDL
Sentencias de Definición de Datos
Crear objetos de la BD:CREATE
Modificar objetos: ALTER*
Borrar objetos: DROP*
DML
Sentencias de Manipulación de datos
Recuperar información: SELECT
Actualizar información:
Añadir INSERT
Modificar UPDATE
Borrar DELETE
DCL
Sentencias de Control de acceso
Dar privilegios de acceso a datos GRANT
Quitar privilegios de acceso REVOKE
Control de transacciones : ROLLBACK y
COMMIT
SQL Programático
Utilización de cursores:
DECLARE
OPEN
FETCH
CLOSE
Lenguaje SQL
Puerto Cruz Mateos Gestión de Bases de Datos.
ELEMENTOS DE LAS SENTENCIAS SQL
• Comandos: select, create…
• Claúsulas: palabras especiales que modifican la acción
de un comando: where
• Literales: valores concretos: ‘matematicas’
• Expresiones: asignatura=‘matematicas”
• Nombres de Objetos: ALUMNOS, asignatura
• Operadores: aritméticos (+,-,*./…) o lógicos (=, >,
<,<>,AND, OR)
• Funciones: para conseguir valores complejos (sum, …)
Ejemplo: SELECT CURSO, NOMBRE, NOTA FROM ALUMNOS
WHERE ASIGNATURA = ‘matematicas’
Lenguaje SQL
Puerto Cruz Mateos Gestión de Bases de Datos.
CONSIDERACIONES
• Los comandos de SQL van en mayúsculas.
• En sentencias complejas:
– Las llaves {} indican la elección obligatoria de entre
varios elementos.
– La barra vertical | separa los elementos de una
selección.
– Los corchetes [] se utilizan para un elemento opcional.
– El punto y como ; indica el final de la línea de
comando.
Lenguaje SQL
Puerto Cruz Mateos Gestión de Bases de Datos.
TIPOS DE DATOS
Tipos de datos Descripción
CHARACTER (longitud) CHAR (longitud)
Cadenas de caracteres de longitud fija.
CHARACTER VARYING (longitud) VARCHAR(longitud)
Cadenas de caracteres de longitud variable.
NCHAR (longitud) Texto de anchura fija para caracteres nacionales
NVARCHAR(longitud) Texto de anchura variable para caracteres nacionales.
DATOS DE TIPO TEXTO
Lenguaje SQL
Puerto Cruz Mateos Gestión de Bases de Datos.
TIPOS DE DATOS
Tipos de datos Descripción
SMALLINT Enteros pequeños (2 bytes).
INTEGER INT
Enteros normales (4 bytes)
BIGINT Enteros largos (8 bytes)
FLOAT DOUBLE DOUBLE PRECISSION REAL
Decimal de coma variable
NUMERIC (m,d) DECIMAL (m,d)
Decimal de coma fija
DATOS DE TIPO NUMÉRICO
Lenguaje SQL
Puerto Cruz Mateos Gestión de Bases de Datos.
TIPOS DE DATOS
Tipos de datos Descripción
DATE Fecha
TIMESTAMP Fecha y hora
INTERVAL Intervalos
DATOS DE TIPO FECHA
DATOS DE TIPO LOGICO
Tipos de datos Descripción
BOOLEAN Toma valores verdadero / falso
BIT Binario
Lenguaje SQL
Puerto Cruz Mateos Gestión de Bases de Datos.
DEFINICIÓN
• El DDL es la parte del lenguaje SQL que realiza
la función de definición de datos del SGBD.
• Se encarga de la creación, modificación y
eliminación de los objetos de la Base de Datos.
• Los objetos de la Base de Datos pueden ser:
tablas, vistas, índices…
Lenguaje SQL
Puerto Cruz Mateos Gestión de Bases de Datos.
CREACION y BORRADO DE BASE DE DATOS
• CREATE DATABASE nombre
• DROP DATABASE nombre
Ejemplo:
CREATE DATABASE prueba
DROP DATABASE prueba
Lenguaje SQL
Puerto Cruz Mateos Gestión de Bases de Datos.
CREACIÓN DE TABLAS
CREATE TABLE nombre_tabla (
nombre_columna tipo [ NULL | NOT NULL ] [PRIMARY KEY]
[, ... ] )
Ejemplo:
CREATE TABLE PROVEEDORES (
Codigo_proveedor INT
);
Lenguaje SQL
Puerto Cruz Mateos Gestión de Bases de Datos.
CREACIÓN DE DOMINIOS
• Además de los dominios dados por el tipo de datos predefinidos, el
SQL nos ofrece la posibilidad de trabajar con dominios definidos por el
usuario.
• Un dominio nos permite definir una lísta de valores válidos para
un campo.
CREATE DOMAIN nombre dominio [AS] tipos_datos
[def_defecto] [restricciones_dominio];
Ejemplo:
CREATE DOMAIN ciudades AS CHAR (20)
CONSTRAINT ciudades_validas
CHECK (VALUE IN (‘Plasencia’, ‘Cáceres’, ‘Mérida’, ‘Badajoz’));
Borrar dominios:
DROP DOMAIN nombre_dominio {RESTRICT|CASCADE};
Ejemplo:
DROP DOMAIN dom_ciudades RESTRICT;
Lenguaje SQL
Puerto Cruz Mateos Gestión de Bases de Datos.
MODIFICAR TABLAS
ALTER TABLE nombre_tabla acción_modificar_columna|
acción_modif_restricción_tabla};
acción_modificar_columna puede ser:
• Añadirle una columna (ADD columna).
– ADD [COLUMN] columna def_columna |
• 2) Modificar las definiciones por defecto de la columna
(ALTER columna).
– ALTER [COLUMN] columna {SET def_defecto|DROP DEFAULT
• 3) Borrar la columna (DROP columna).
– DROP [COLUMN ] columna {RESTRICT|CASCADE}
• 4) Añadir alguna nueva restricción de tabla (ADD restricción).
• 5) Borrar alguna restricción de tabla (DROPCONSTRAINT restricción).
Lenguaje SQL
Puerto Cruz Mateos Gestión de Bases de Datos.
BORRAR TABLAS
DROP TABLE nombre_tabla {RESTRICT|CASCADE};
• Si utilizamos la opción RESTRICT, la tabla no se borrará
si está referenciada.
• • Si usamos la opción CASCADE, todo lo que referencie a
la tabla se borrará junto con sus referencias.
Lenguaje SQL
Puerto Cruz Mateos Gestión de Bases de Datos.
VALORES POR DEFECTO (DEFAULT)
• A cada columna se le puede asignar un valor
por defecto durante su creación mediante la
propiedad default.
• Ejemplo:
CREATE TABLE ARTICULO ( COD_ARTICULO INT,
NOMBRE VARCHAR(25),
PRECIO DECIMAL (10,2) DEFAULT 3,5
)
DEFAULT puede utilizarse con CREATE y con ALTER.
Lenguaje SQL
Puerto Cruz Mateos Gestión de Bases de Datos.
RESTRICCIONES
• Una restricción es una condición de obligado
cumplimiento para una o más columnas de la
tabla.
• A cada restricción se le puede poner un
nombre.
• SINTAXIS:
CREATE TABLE Nombre_Tabla ( Campo1 tipo,
Campo2 tipo,
CONSTRAIN [Nombre_restriccion] Tipo (campo1),
CONSTRAIN [Nombre restricción] Tipo (campo2)
)
Lenguaje SQL
Puerto Cruz Mateos Gestión de Bases de Datos.
RESTRICCIONES
• Los tipos de restricciones son los siguientes:
• NOT NULL
• UNIQUE.
• PRIMARY KEY.
• FOREING KEY.
• CHECK (regla de validación)
Lenguaje SQL
Puerto Cruz Mateos Gestión de Bases de Datos.
NOT NULL (PROHIBIR NULOS)
• Esta restricción permite prohibir los valores nulos en un
campo de la tabla, obligando a que el campo tenga un
valor para que pueda ser almacenado en el registro.
• Se puede colocar durante la creación o modificación del
campo añadiendo NOT NULL detrás del tipo.
• La restricción NOT NULL se puede poner a continuación
del campo porque se aplicará solo a un campo.
Ejemplo:
CREATE TABLE CLIENTES
(COD_CLIENTE INT NOT NULL,
NOMBRE VARCHAR(25),
PRECIO DECIMAL (10,2) DEFAULT 3,5,
CONSTRAIN Nom_nn NOT NULL (Nombre) Restricción con nombre.
En ese caso la ponemos
al final
Lenguaje SQL
Puerto Cruz Mateos Gestión de Bases de Datos.
UNIQUE (VALORES ÚNICOS)
• Esta restricción OBLIGA a que el contenido de una o
más columnas no puedan repetir valores.
Ejemplo:
CREATE TABLE CLIENTES (
COD_CLIENTE INT NOT NULL ,
DNI_CLIENTE VARCHAR(9) UNIQUE)
O TAMBIÉN PODRIAMOS PONER
DNI_CLIENTE VARCHAR(9) CONSTRAINT dni_un UNIQUE
Si la restricción se refiere a varios campos, ponemos:
Restricción con nombre.
CREATE TABLE CLIENTES (
COD_CLIENTE INT NOT NULL ,
DNI_CLIENTE VARCHAR(9),
DIRECCION VARCHAR(50),
CONSTRAINT Clientes_un UNIQUE(DNI_CLIENTE, DIRECCIÓN)
Lenguaje SQL
Puerto Cruz Mateos Gestión de Bases de Datos.
PRIMARY KEY (CLAVE PRIMARIA)
• La clave primaria está formada por los campos que identifican a cada
registro de forma única dentro de la tabla.
• Hace que los campos sean NOT NULL Y UNIQUE (sin posibilidad de que
estén vacíos y sin posibilidad de estar duplicados)
• Si la clave está formada por un solo campo:
CREATE TABLE CLIENTES (
COD_CLIENTE INT NOT NULL PRIMARY KEY,
DNI_CLIENTE VARCHAR(9) UNIQUE)
O TAMBIÉN PODRIAMOS PONER
COD_CLIENTE INT CONSTRAINT Clientes_PK PRIMARY KEY,
DNI_CLIENTE VARCHAR(9) UNIQUE)
• Si la clave está formada por más de un campo:
CREATE TABLE VENTAS (
COD_CLIENTE INT NOT NULL,
COD_PRODUCTO INT NOT NULL,
CONSTRAINT Ventas_PK PRIMARY KEY (COD_CLIENTE,
COD_PRODUCTO));
Restricción con nombre.
Lenguaje SQL
Puerto Cruz Mateos Gestión de Bases de Datos.
FOREING KEY (CLAVE SECUNDARIA O FORANEA)
• Una clave secundaria está formada por uno más campos de la tabla que
están relacionados con la clave primaria (o con otro campo) de otra tabla.
CREATE TABLE VENTAS
(
COD_CLIENTE INT NOT NULL,
COD_PRODUCTO INT NOT NULL,
CONSTRAINT Ventas_PK (COD_CLIENTE,COD_PRODUCTO)
CONSTRAINT Clientes_fk FOREING KEY (cod_cliente) REFERENCES CLIENTES
(COD_CLIENTE);
CONSTRAINT Produc tos_fk FOREING KEY (cod_productos) REFERENCES
PRODUCTOS(COD_PRODUCTO)
);
• Significa que el campo cod_cliente se relaciona con el campo cod_cliente de la tabla
CLIENTES y que el campo cod_producto se relaciona con el campo cod_producto
de la tabla PRODUCTOS. Los campos no tienen porque llamarse igual en las dos
tablas, pero si deben ser del mismo tipo.
• Al definir claves secundarias se crean relaciones entre las tablas, lo que obliga al
cumplimiento de la INTEGRIDAD REFERENCIAL.
Lenguaje SQL
Puerto Cruz Mateos Gestión de Bases de Datos.
FOREING KEY E INTEGRIDAD REFERENCIAL
• La Integridad Referencial es obligatoria en BD Relacionales, pero puede
ocasionar problemas al realizar operaciones de modificación y borrado.
• Para evitarlos podemos añadir claúsulas detrás de REFERENCES.
• ON DELETE SET NULL: Coloca a nulos todas las claves
secundarias relacionadas con la que borramos.
• ON DELETE CASCADE: Borra todos los registros cuya clave
secundaria es igual que la clave del registro borrado.
• ON DELETE SET DEFAULT. Coloca en el registro relacionado el
valor por defecto en la columna relacionada.
• ON DELETE NOTHING (NOT ACTION). No haría nada.
• Se aplicarían las claúsulas cuando se eliminen filas y la clave principal esté
relacionada con las claves secundarias.
• Estas opciones son válidas también para la modificación de tablas
(UPDATE).
Lenguaje SQL
Puerto Cruz Mateos Gestión de Bases de Datos.
EJEMPLO
CREATE TABLE VENTAS (
COD_CLIENTE INT,
COD_PRODUCTO INT,
FECHA DATETIME,
CONSTRAINT ventas_pk PRIMARY KEY( COD_CLIENTE, COD_PRODUCTO),
CONSTRAINT clientes_fk FOREING KEY(COD_CLIENTE) REFERENCES
CLIENTES (COD_CLIENTE) ON DELETE SET NULL,
CONSTRAINT productos_fk FOREING KEY (COD_PRODUCTO) REFERENCES
PRODUCTOS (COD_PRODUCTO) ON DELETE CASCADE
);
Lenguaje SQL
Puerto Cruz Mateos Gestión de Bases de Datos.
CHECK (RESTRICCIONES DE VALIDACION)
• Marcan una condición que deben cumplir los valores de un campo.
• Un mismo campo puede tener varias restricciones CHECK.
CREATE TABLE PRODUCTOS
(
COD_PRODUCTO INT NOT NULL RPIMARY KEY
NOMBRE VARCHAR (50) NOT NULL,
PRECIO DECIMAL(2,0) CHECK (PRECIO >1),
STOCK_MINIMO INT CHECK (STOCK_MINIMO >3)
);
• En este caso, el precio no puede ser 0 y el mínimo valor para el campo
stock_mínimo será 3.
Lenguaje SQL
Puerto Cruz Mateos Gestión de Bases de Datos.
CHECK (RESTRICCIONES DE VALIDACION)
• Si las restricciones se refieren a otros campos de la tabla, deben aparecer al
final de dicha tabla.
CREATE TABLE PRODUCTOS
(
COD_PRODUCTO INT NOT NULL RPIMARY KEY
NOMBRE VARCHAR (50) NOT NULL,
PRECIO DECIMAL(2,0) CHECK (PRECIO >1),
STOCK_MINIMO INT CHECK (STOCK_MINIMO >3),
STOCK_MÁXIMO INT,
CONSTRAINT Stock_máxi CHECK (STOCK_MINIMO<STOCK_MAXIMO)
);
• En este caso, el stock máximo será siempre mayor que el mínimo, que a su vez está
obligado a ser mayor de 3.
Lenguaje SQL
Puerto Cruz Mateos Gestión de Bases de Datos.
AÑADIR RESTRICCIONES
• Si queremos añadir restricciones después de tener creada la tabla:
ALTER TABLE Nombre _tabla
ADD CONSTRAINT [NOMBRE] TIPO (Campos)
• Donde TIPO puede ser CHECK, PRIMARY KEY O FOREING KEY.
• Las restricciones NOT NULL se añaden con ALTER TABLE … MODIFY colocando
NOT NULL en el campo a modificar.
• EJEMPLO:
• ALTER TABLE PRODUCTOS
ADD CONSTRAINT precio_max CHECK (PRECIO <1000) ;
• ALTER TABLE PRODUCTOS
MODIFY PRECIO NOT NULL