Lenguaje Estructurado de Consultas Lenguaje SQL Puerto Cruz Mateos Gestin de Bases de Datos. Introduccin SQL es el lenguaje fundamental de los SGBD Relacionales. Es uno de los lenguajes ms utilizados de la historia de la Informtica. Es un lenguaje declarativo, define lo que se va a hacer por encima del cmo 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 Gestin de Bases de Datos. HISTORIA DEL LENGUAJE SQL Naci en 1970 y fue creado por Codd. Dos aos despus, IBM adopta las directrices formuladas por Codd y crea el Standard English Query Lenguage (Lenguaje Estndar Ingls para Consultas) SQUEL. Ms tarde cambi su nombre por SQL. En 1979 Oracle presenta la primera implementacin comercial del lenguaje. Poco despus se convierte en el estndar en Bases de datos avalado por lo organismos internacionales de estandarizacin ISO y ANSI.
Lenguaje SQL Puerto Cruz Mateos Gestin de Bases de Datos. VERSIONES DE SQL 1989: Aparece el estndar ISO y ANSI SQL89 O SQL1. 1992: Aparece la versin ms conocida de SQL, llamada SQL92 o SQL2 1999: Se aprueba una nueva versin, 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 estndar hasta hoy, SQL2008
Lenguaje SQL Puerto Cruz Mateos Gestin de Bases de Datos. PROCESO DE LAS INSTRUCCIONES SQL SQL INTERACTIVO: las instrucciones se introducen a travs de un cliente conectado directamente al servidor SQL. SQL EMBEBIDO O INCRUSTADO: las instrucciones de SQL forman parte del cdigo de otro lenguaje que se considera anfitrin (C, Java, Pascal, Cobol, VisualBasic) SQL a travs de clientes grficos: un software que permite conectar a la BD y manejarla de forma grfica. Ms cmodo para usuarios. SQL dinmico: instrucciones de SQL incrustadas en mdulos especiales que sern llamados desde aplicaciones. Lenguaje SQL Puerto Cruz Mateos Gestin de Bases de Datos. SENTENCIAS DE SQL DDL Sentencias de Definicin de Datos Crear objetos de la BD:CREATE Modificar objetos: ALTER* Borrar objetos: DROP* DML Sentencias de Manipulacin de datos Recuperar informacin: SELECT Actualizar informacin: Aadir 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 Programtico Utilizacin de cursores: DECLARE OPEN FETCH CLOSE Lenguaje SQL Puerto Cruz Mateos Gestin de Bases de Datos. ELEMENTOS DE LAS SENTENCIAS SQL Comandos: select, create Clasulas: palabras especiales que modifican la accin de un comando: where Literales: valores concretos: matematicas Expresiones: asignatura=matematicas Nombres de Objetos: ALUMNOS, asignatura Operadores: aritmticos (+,-,*./) o lgicos (=, >, <,<>,AND, OR) Funciones: para conseguir valores complejos (sum, ) Ejemplo: SELECT CURSO, NOMBRE, NOTA FROM ALUMNOS WHERE ASIGNATURA = matematicas
Lenguaje SQL Puerto Cruz Mateos Gestin de Bases de Datos. CONSIDERACIONES Los comandos de SQL van en maysculas. En sentencias complejas: Las llaves {} indican la eleccin obligatoria de entre varios elementos. La barra vertical | separa los elementos de una seleccin. Los corchetes [] se utilizan para un elemento opcional. El punto y como ; indica el final de la lnea de comando. Lenguaje SQL Puerto Cruz Mateos Gestin de Bases de Datos. TIPOS DE DATOS Tipos de datos Descripcin 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 Gestin de Bases de Datos. TIPOS DE DATOS Tipos de datos Descripcin SMALLINT Enteros pequeos (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 NUMRICO Lenguaje SQL Puerto Cruz Mateos Gestin de Bases de Datos. TIPOS DE DATOS Tipos de datos Descripcin DATE Fecha TIMESTAMP Fecha y hora INTERVAL Intervalos DATOS DE TIPO FECHA DATOS DE TIPO LOGICO Tipos de datos Descripcin BOOLEAN Toma valores verdadero / falso BIT Binario Sentencias de Definicin de Datos (DDL) Lenguaje SQL Puerto Cruz Mateos Gestin de Bases de Datos. DEFINICIN El DDL es la parte del lenguaje SQL que realiza la funcin de definicin de datos del SGBD. Se encarga de la creacin, modificacin y eliminacin 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 Gestin 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 Gestin de Bases de Datos. CREACIN 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 Gestin de Bases de Datos. CREACIN DE DOMINIOS Adems 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 lsta de valores vlidos 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, Cceres, Mrida, Badajoz)); Borrar dominios: DROP DOMAIN nombre_dominio {RESTRICT|CASCADE}; Ejemplo: DROP DOMAIN dom_ciudades RESTRICT; Lenguaje SQL Puerto Cruz Mateos Gestin de Bases de Datos. MODIFICAR TABLAS ALTER TABLE nombre_tabla accin_modificar_columna| accin_modif_restriccin_tabla}; accin_modificar_columna puede ser: Aadirle 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) Aadir alguna nueva restriccin de tabla (ADD restriccin). 5) Borrar alguna restriccin de tabla (DROPCONSTRAINT restriccin). Lenguaje SQL Puerto Cruz Mateos Gestin de Bases de Datos. BORRAR TABLAS DROP TABLE nombre_tabla {RESTRICT|CASCADE}; Si utilizamos la opcin RESTRICT, la tabla no se borrar si est referenciada. Si usamos la opcin CASCADE, todo lo que referencie a la tabla se borrar junto con sus referencias. Lenguaje SQL Puerto Cruz Mateos Gestin de Bases de Datos. VALORES POR DEFECTO (DEFAULT) A cada columna se le puede asignar un valor por defecto durante su creacin 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 Gestin de Bases de Datos. RESTRICCIONES Una restriccin es una condicin de obligado cumplimiento para una o ms columnas de la tabla. A cada restriccin se le puede poner un nombre. SINTAXIS: CREATE TABLE Nombre_Tabla ( Campo1 tipo, Campo2 tipo, CONSTRAIN [Nombre_restriccion] Tipo (campo1), CONSTRAIN [Nombre restriccin] Tipo (campo2) )
Lenguaje SQL Puerto Cruz Mateos Gestin de Bases de Datos. RESTRICCIONES Los tipos de restricciones son los siguientes: NOT NULL UNIQUE. PRIMARY KEY. FOREING KEY. CHECK (regla de validacin)
Lenguaje SQL Puerto Cruz Mateos Gestin de Bases de Datos. NOT NULL (PROHIBIR NULOS) Esta restriccin 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 creacin o modificacin del campo aadiendo NOT NULL detrs del tipo. La restriccin NOT NULL se puede poner a continuacin 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) Restriccin con nombre. En ese caso la ponemos al final Lenguaje SQL Puerto Cruz Mateos Gestin de Bases de Datos. UNIQUE (VALORES NICOS) Esta restriccin OBLIGA a que el contenido de una o ms columnas no puedan repetir valores. Ejemplo: CREATE TABLE CLIENTES ( COD_CLIENTE INT NOT NULL , DNI_CLIENTE VARCHAR(9) UNIQUE)
O TAMBIN PODRIAMOS PONER DNI_CLIENTE VARCHAR(9) CONSTRAINT dni_un UNIQUE Si la restriccin se refiere a varios campos, ponemos:
Restriccin con nombre. CREATE TABLE CLIENTES ( COD_CLIENTE INT NOT NULL , DNI_CLIENTE VARCHAR(9), DIRECCION VARCHAR(50), CONSTRAINT Clientes_un UNIQUE(DNI_CLIENTE, DIRECCIN) Lenguaje SQL Puerto Cruz Mateos Gestin 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 estn vacos 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 TAMBIN PODRIAMOS PONER COD_CLIENTE INT CONSTRAINT Clientes_PK PRIMARY KEY, DNI_CLIENTE VARCHAR(9) UNIQUE) Si la clave est formada por ms 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));
Restriccin con nombre. Lenguaje SQL Puerto Cruz Mateos Gestin de Bases de Datos. FOREING KEY (CLAVE SECUNDARIA O FORANEA) Una clave secundaria est formada por uno ms campos de la tabla que estn 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 Gestin 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 modificacin y borrado. Para evitarlos podemos aadir clasulas detrs 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 hara nada. Se aplicaran las clasulas cuando se eliminen filas y la clave principal est relacionada con las claves secundarias. Estas opciones son vlidas tambin para la modificacin de tablas (UPDATE).
Lenguaje SQL Puerto Cruz Mateos Gestin 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 Gestin de Bases de Datos. CHECK (RESTRICCIONES DE VALIDACION) Marcan una condicin 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 mnimo valor para el campo stock_mnimo ser 3.
Lenguaje SQL Puerto Cruz Mateos Gestin 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_MXIMO INT, CONSTRAINT Stock_mxi CHECK (STOCK_MINIMO<STOCK_MAXIMO) );
En este caso, el stock mximo ser siempre mayor que el mnimo, que a su vez est obligado a ser mayor de 3.
Lenguaje SQL Puerto Cruz Mateos Gestin de Bases de Datos. AADIR RESTRICCIONES Si queremos aadir restricciones despus 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 aaden con ALTER TABLE MODIFY colocando NOT NULL en el campo a modificar.