apuntes sql (rincon del vago)

Upload: alex-gonzalez-granados

Post on 19-Jul-2015

367 views

Category:

Documents


0 download

TRANSCRIPT

INTRODUCCIN: EL LENGUAJE DE CONSULTA SQL. INTRODUCCIN: EL LENGUAJE DE CONSULTA SQL. La mayor parte de BD actuales son relacionales, mas especficamente sistemas SQL. La primera definicin del SQL cuyo nombre original era SEQUEL fue realizada por Chamberlain y otros de IBM en el Research Laboratory de San Jos. La aplicacin prctica construida a partir de esta definicin se llam System R. Finalmente el ANSI y la ISO tomaron el SQL como norma y lo definieron como un standard. El SQL tiene dos partes bien diferenciadas: las sentencias que se utilizan par definir los datos que se denominan LDD y las que se emplean para manipularlos que se denominan LMD. En este capitulo se ver el SQL (ISO 9075 DE 1992). Todos los sistemas relacionales actuales utilizan dicho lenguaje con algunas modificaciones o aadidos. Por tanto en este tema estudiaremos este lenguaje. LENGUAJE DE DEFINICIN DE DATOS (SQL esttico). Esta constituido bsicamente por las siguientes sentencias: CREATE TABLE, CREATE VIEW, CREATE DOMAIN, CREATE ASSERTION, CREATE INDEX, ALTER TABLE, DROP TABLE, DROP VIEW, DROP INDEX. En los siguientes apartados describiremos el lenguaje SQL empleando la notacin BNF extendida. Esta notacin utiliza unos smbolos que no son propios del SQL y cuyo significado es el siguiente: [] Indican opcionalidad. Lo que se site dentro de los corchetes puede o no escribirse. | Indica una alternativa. Se debe elegir entre lo que hay a la derecha de la barra o la izquierda. Lo que hay entre estos corchetes es un smbolo no terminal, es decir que requiere definicin. Lo que hay a la izquierda de los puntos suspensivos puede repetirse cero o ms veces. {} Agrupa elementos ::= Este smbolo se emplea para definir . En la descripcin de las instrucciones de SQL todos los smbolos escritos en negrita se consideran terminales y por tanto propios del SQL. CREATE TABLE. Se emplea para crear una tabla de la base de datos. Esta instruccin la tienen todos los SGBD relacionales aunque con modificaciones respecto de la SQL ISO92 CREATE [ {GLOBAL | LOCAL} TEMPORARY] TABLE

1

( | [, | ]); ::= {|} [] [] ::= CHAR[ACTER] | SMALLINT | INTEGER | DECIMAL | NUMERIC | REAL | FLOAT | DOUBLE PRECISION | CHARACTER VARYING | DATE | TIME | BIT | TIMESTAMP | INTERVAL | BIT VARYING ::= DEFAULT {| | USER | SYSTEM | NULL } ::= NOT NULL | | | ::= UNIQUE | PRIMARY KEY ( [, ] ) NOTA: UNIQUE se emplea para especificar las claves alternativas FOREIGN KEY ( [, ] ) REFERENCES [ ( [, ] ) ] [ { ON UPDATE | ON DELETE } CASCADE | SET NULL | SET DEFAULT ] ::= ::= CHECK () NOTA: se utiliza para expresar una condicin que deben cumplir un conjunto de atributos de la tabla ::= [] | | Ejemplo CREATE TABLE PROFESOR ( Cod_profe Char(5) PRIMARY KEY, Nombre Char(15) NOT NULL, 2

DNI Int NOT NULL, Direccin Char(25) NOT NULL, Materia Char(10), Tipo Char NOT NULL, Cd_profe_e Char(5), Cd_area Char(5), NOT NULL, Catedrtico Bit, FOREIGN KEY (Cd_profe_e) REFERENCES PROFESOR ON UPDATE CASCADE, FOREIGN KEY (Cd_area) REFERENCES AREA ON UPDATE CASCADE, CHECK( ( (Cd_prof_e = NULL) And (Catedrtico =1)) Or ((Cd_prof_e = NOT NULL) And (Catedrtico =0)) CHECK (Cd_profe Cd_profe_e) ); CREATE DOMAIN Se utiliza para crear un dominio, es decir un conjunto de valores que puede tomar un atributo o campo de una tabla. Es algo parecido a los tipos de datos definidos por el usuario en los lenguajes de programacin. Esta instruccin no la soportan actualmente todos los SGBD, por ejemplo no la soporta Oracle ni SQLbase. CREATE DOMAIN [AS] [] [] ::= [CONSTRAINT ] [] ::= {INITIALLY DEFERRED | INITIALLY INMEDIATE} [[NOT] DEFERRABLE] | [NOT] DEFERRABLE] {INITIALLY DEFERRED | INITIALLY INMEDIATE} Ejemplo CREATE DOMAIN C_PER Char(5); CREATE DOMAIN C_BECA Char(5); CREATE ASSERTION 3

Se utiliza para establecer restricciones en la base de datos. Por ejemplo para que el sistema compruebe las cardinalidades mnimas o las condiciones que deben cumplir un conjunto de atributos pertenecientes a varias tablas. No est disponible en todos los SGBD CREATE ASSERTION [] Ejemplo Suponemos una base de datos que recoge informacin de cursos impartidos por profesores. Entonces para indicar al sistema que cada curso puede ser impartido por menos de cuatro profesores escribiramos, una vez creadas las tablas de la base de datos: CREATE ASSERTION Profesor_curso CHECK NOT EXIST ( SELECT COUNT(*) FROM IMPARTE GROUP BY COD_CURSO HAVING COUNT(*)>=4) CREATE VIEW Crea una vista de una tabla. Una vista es una tabla virtual que no se sustenta en sus propios datos almacenados y separados fsicamente. Lo que se almacena es la definicin de la vista en trminos de otras tablas en el diccionario de datos del sistema. CREATE VIEW [( [,]) AS [WITH CHECK OPTION] La clusula WITH CHECK OPTION indica que las operaciones de modificacin e insercin realizadas con la vista deben verificarse para garantizar que toda fila modificada o insertada cumpla la condicin definida en . Ejemplo CREATE VIEW Buenos_proveedores AS SELECT S#, SITUACION, CIUDAD FROM PROVEEDORES WHERE SITUACION>15 WITH CHECK OPTION; Esto define una vista de la tabla PROVEEDORES denominada Buenos_proveedores de la cual slo se muestran filas compuestas por los campos S#, SITUACION, CIUDAD donde SITUACION>15. Cada vez que 4

se intente modificar o introducir una fila en la tabla de proveedores a travs de esta vista se comprobar si el campo SITUACION tiene un valor mayor de 15 denegndose la operacin en caso contrario . CREATE INDEX Esta sentencia no forma parte del estndar SQL92 sin embargo la incluyen la mayora de los SGBD tales como Oracle, Informix, SQLServer, DB2, Access. En concreto aqu veremos la del SQL de DB2. Nos permite crear un ndice para una tabla basado en una o varias de sus columnas. CREATE [UNIQUE] INDEX ON ( [ASC | DESC] [, [ASC | DESC]]) [CLUSTER] La clusula CLUSTER indica que se trata de un ndice de agrupamiento, es decir que el sistema sita los registros relacionados de forma lgica lo ms prximos posibles unos de otros en el soporte. La clusula UNIQUE se emplea para indicar que no se permite que dos registros de la tabla indicada tengan el mismo valor en el campo o combinacin de campos ndices. Esto sirve para que se cumpla la unicidad de las claves primarias en el sistema DB2. Ejemplo CREATE UNIQUE INDEX XS ON PROVEEDORES (S#); CREATE UNIQUE INDEX XP ON PIEZAS (P#) CLUSTER; CREATE SYNONYM Esta sentencia no forma parte del estndar SQL92 sin embargo la incorporan la mayora de las implementaciones. Crea un nombre de alias para una tabla o vista. El alias puede ser til para proporcionar un nombre corto para un nombre de tabla largo o para tratar la tabla a travs de su alias como si fuese una copia lo cual nos puede servir para unir una tabla consigo misma. CREATE SYNONYM FOR {|