Lo Esencial Del Lenguaje SQL - CAPÍTULO 2 - LDD

Embed Size (px)

DESCRIPTION

A.1. Fecha y horas 1A.2. El comando CREATE 1A.3. Crear un tabla a partir de otra 3A.4. Utilización de sinónimos 4A.5. Las SECUENCIAS 5B. La eliminación de tablas 6C. La modificación de tablas 6C.1. Renombrar una tabla (RENAME) 6D. Las vistas 6D.1. La eliminación de vistas 7E. Los índices 7E.1. La creación de un índice 7E.2. La eliminación de un índice 7F. La integridad de los datos 7F.1. La FOREIGN KEY 8F.2. Valores por defecto 8F.3. La cláusula « NOT NULL » 9F.4. La cláusula « UNIQUE » 9F.5. CHECK 10F.6. Corrección de los ejercicios de aplicación 10

Citation preview

Writer_technique

A.1.Fecha y horas1A.2.El comando CREATE1A.3.Crear un tabla a partir de otra3A.4.Utilizacin de sinnimos4A.5.Las SECUENCIAS5B.La eliminacin de tablas6C.La modificacin de tablas6C.1.Renombrar una tabla (RENAME)6D.Las vistas6D.1.La eliminacin de vistas7E.Los ndices7E.1.La creacin de un ndice7E.2.La eliminacin de un ndice7F.La integridad de los datos7F.1.La FOREIGN KEY8F.2.Valores por defecto8F.3.La clusula NOT NULL9F.4.La clusula UNIQUE9F.5.CHECK10F.6.Correccin de los ejercicios de aplicacin10

Fecha y horas

SELECT SYSDATE FROM DUALparaOracleoSELECT NOW() paraMySql

El comandoCREATESintaxisOracle:CREATE TABLETELEFONO(NUMERO INTEGER,TIPOCHAR(2),MARCAINTEGER,FECHA_COMPRADATE,PRECIONUMBER(9,2),NUM_PROPIETARIOINTEGER,COLORVARCHAR(25));

SintaxisMySql: (sustitucin deNUMBER por DECIMAL

CREATE TABLETELEFONO(NUMERO INTEGER,TIPOCHAR(2),MARCAINTEGER,FECHA_COMPRADATE,PRECIODECIMAL (9,2),NUM_PROPIETARIOINTEGER,COLORVARCHAR(25));SintaxisOracleyMySql:

CREATE TABLETIPO_TEL (TIPOCHAR(2),DESC_TIPOVARCHAR(25));

CREATE TABLEMARCA_TEL (MARCAINTEGER,DESC_MARCVARCHAR(25),PAISVARCHAR(30));

Aadir un comentario a una tabla:

COMMENT ON TABLETELEFONOIS 'Listade telfonos de la empresa';

Aadir un comentario sobre una columna

COMMENT ON COLUMNTELEFONO.TIPOIS 'Indica si es un telfonode tipoSMARTPHONE,CON TAPAuOTRO';

Ejemplo de scriptSQL ORACLEque permite mostrar las columnas de una tabla as como sus comentarios

SET FLU OFFSET PAGESIZE 255SET FEEDBACK OFFSET WRAP OFFSET VER OFFSET ARRAYSIZE 1COL type FORMAT A15COL not_null FORMAT A8PROMPT .PROMPTEstructura de la tabla TELEFONO:PROMPT .SELECT UPPER(a.column_name) nombre,a.data_type || '(' ||DECODE(a.data_type,'NUMBER',a.data_precision,a.data_length)|| ')' tipo,DECODE(a.nullable,'N',' N','') not_null, b.commentscomentarioFROM user_tab_columns a, user_col_comments bWHERE a.table_name = 'TELEFONO'AND b.table_name = 'TELEFONO'AND a.table_name = b.table_nameAND a.column_name = b.column_nameORDER BY a.column_id;

EnMYSQL,los comentarios se introducen al crear la tabla aadiendo el comandoCOMMENT:

CREATE TABLETELEFONO(NUMERO INTEGER COMMENT 'Nmero de telfono',TIPOVARCHAR(2) COMMENT 'Tipo',MARCAINTEGER COMMENT 'Nombrede la Marca',FECHA_COMPRADATE,PRECIODECIMAL(9,2) COMMENT 'Precio sin contrato',PROPIETARIOVARCHAR(25),NUM_PROVEEDORINTEGER);

Para mostrar las columnas y los comentarios enMySql,hay que utilizar este comando:

SHOW FULL COLUMNS FROMTELEFONO;

Crear un tabla a partir de otraconORACLEhay que utilizar la siguiente sintaxis

CREATE TABLE SAV_TELEFONOAS SELECT * FROMTELEFONO;

conMYSQLla sintaxis es la siguiente(el ASdesaparece)

CREATE TABLE SAV_TELEFONOSELECT * FROMTELEFONO;

Ejemplos de copia de estructura:

CREATE TABLE SAV_TELEFONOAS SELECT * FROMTELEFONOWHERE 1=2;

Ejemplo de copia a partir de la estructura:

CREATE TABLE SAV_TELEFONOAS SELECT NUMERO,NUM_PROPIETARIOFROMTELEFONOWHERE 1=2;

ConMySqlhay que copiar laestructurade unatablaen otra utilizandoun LIKECREATE TABLESAV_TELEFONOLIKETELEFONO;

Ejemplo de copia de una parte de la estructura y seleccin de filas(sintaxisOracle):

CREATE TABLE SAV_TELEFONOAS SELECT NUMERO,NUM_PROPIETARIO,COLORFROMTELEFONOWHERETIPO= 'SP';

Utilizacin de sinnimosSloOracle:

CREATE SYNONYMTELEFONOFOR ALEXANDRE.TELEFONO;

Ejemplos:

CREATE SYNONYMTELEFONOFOR ALEXANDRE.TE_ANYO_2014_BARCELONA;CREATE SYNONYMTELEFONOFOR ALEXANDRE.TEL_ESPANYA_OESTE_010402;

Las SECUENCIAS

CREATE SEQUENCE S_NUMERO START WITH 5 INCREMENT BY 1MINVALUE 2 MAXVALUE 999999 CYCLE;

SELECT S_NUMERO.NEXTVAL FROM DUAL;SELECT S_NUMERO.CURRVAL FROM DUAL;

CREATE OR REPLACE TRIGGER TR_NUMEROBEFORE INSERT ONTELEFONOFOR EACH ROWDECLARE

BEGINSELECT S_NUMERO.NEXTVALINTO :NEW.NUMERO FROM DUAL;
END;/

INSERT INTOTELEFONOVALUES(S_NUMERO.NEXTVAL,'DE',5,to_date('01/01/2009','DD/MM/YYYY'),99,122120,'BLANCO');

Ejemplo de columna autoincrementada enMySql:

CREATE TABLETELEFONO(NUMERO INTEGERAUTO_INCREMENT,TIPOVARCHAR(2),MARCAINTEGER,FECHA_COMPRADATE,PRECIODECIMAL(9,2),NUM_PROPIETARIOINTEGER,COLORVARCHAR(25),CONSTRAINT PK_TELEFONOPRIMARY KEY (NUMERO,TIPO,MARCA));

Paraeliminarunasecuencia hay que utilizar elDROP SEQUENCE

DROP SEQUENCE S_NUMERO;

Paramodificarunasecuencia hay que utilizar elALTER SEQUENCE

ALTER SEQUENCE S_NUMERO MAXVALUE 888888;Modificar el incremento de 1 a 5:

ALTER SEQUENCE S_NUMERO INCREMENT BY 5;

La eliminacin de tablas

DROP TABLETELEFONO;

La modificacin de tablasAadir una columna

ALTER TABLETELEFONOADD TEL_NUM_PIN INTEGER;

Eliminar una columna

ALTER TABLETELEFONODROP COLUMN TEL_NUM_PIN;

Renombrar una tabla(RENAME)

RENAMETELEFONOTO SAV_TELEFONO;

Las vistas

CREATE VIEW TEL_DATE ASSELECTTELEFONO.FECHA_COMPRA,TELEFONO.TIPO,TIPO_TEL.DESC_TIPO,TELEFONO.MARCA,MARCA_TEL.DESC_MARCAFROMTELEFONO,TIPO_TEL,MARCA_TELWHERETELEFONO.TIPO=TIPO_TEL.TIPOANDTELEFONO.MARCA=MARCA_TEL.MARCA;

La eliminacin de vistas

DROP VIEW TEL_DATE;

Los ndicesLacreacin de un ndiceCREATE INDEX I2_TIPOONTELEFONO(TIPO);CREATE INDEX I3_TIPMAR ONTELEFONO(TIPO,MARCA);CREATE INDEX I4_COLORONTELEFONO(COLORDESC);

Ejemplo de consulta que permite visualizar los ndices de una tabla enOracle:

PROMPT .PROMPTndices de la tabla TELEFONOPROMPT .BREAK ON "INDEX" ON "SCRIPT"SELECT index_name "INDEX",LOWER(column_name) "COLUMNA(S)"FROM user_ind_columnsWHERE table_name = UPPER('TELEFONO')ORDER BY index_name, column_position;La eliminacin de un ndice

DROP INDEX I2_TIPO;DROP INDEX I4_COLOR;

La integridad de los datosEjemplo de declaracin dePRIMARY KEYcon1columna:

CREATE TABLETELEFONO(NUMERO INTEGERPRIMARY KEY,TIPOVARCHAR(2),MARCAINTEGER,FECHA_COMPRADATE,PRECIODECIMAL(9,2),NUM_PROPIETARIOINTEGER,COLORVARCHAR(25))Automticamente la columna nmero serNOT NULLyUNIQUE.

Ejemplo de declaracin dePRIMARY KEYcon varias columnas:

CREATE TABLETELEFONO(NUMERO INTEGER ,TIPOVARCHAR(2),MARCAINTEGER,FECHA_COMPRADATE,PRECIODECIMAL(9,2),NUM_PROPIETARIOINTEGER,COLORVARCHAR(25),CONSTRAINT PK_TELEFONOPRIMARY KEY (NUMERO,TIPO,MARCA));

Ejemplo de creacin de unaPRIMARY KEYen una tabla existente:

ALTER TABLETELEFONOADDCONSTRAINT PK_TELEFONOPRIMARY KEY (NUMERO,TIPO,MARCA);

La FOREIGN KEYEjemplo de creacin de clave fornea:

ALTER TABLETIPO_TEL ADDCONSTRAINT PK_TELEFONOPRIMARY KEY (TIPO);

CREATE TABLETELEFONO(NUMERO INTEGER,TIPOVARCHAR(2),MARCAINTEGER,FECHA_COMPRADATE,PRECIODECIMAL(9,2),NUM_PROPIETARIOINTEGER,COLORVARCHAR(25),CONSTRAINT FK_TIPOFOREIGN KEY (TIPO) REFERENCESTIPO_TEL );

Valores por defectoEjemplo de valores por defecto:En la creacin de la tabla

CREATE TABLETELEFONO(NUMERO INTEGER PRIMARY KEY,TIPOVARCHAR(2)DEFAULT 'OT',MARCAINTEGER,FECHA_COMPRADATEDEFAULT CURRENT_DATE,PRECIODECIMAL(9,2)DEFAULT 0,NUM_PROPIETARIOINTEGER,COLORVARCHAR(25));

Una vez se ha creado la tabla podemos modificar el valor por defecto del siguiente modo:

ALTER TABLETELEFONOMODIFYTIPODEFAULT 'SP';

Aadir una columna y asignar un valor por defecto:

ALTER TABLETELEFONOADD (USUARIOVARCHAR2(25) DEFAULT USER);

LaclusulaNOT NULL

SELECT COUNT(*) FROMTELEFONOWHERECOLORNOT IN ('ROJO','NEGRO','BLANCO')ORCOLORIS NULL;

La clusulaUNIQUE

CREATE TABLETELEFONO(NUMERO INTEGER PRIMARY KEY,TIPOVARCHAR(2) DEFAULT 'OT',MARCAINTEGER,FECHA_COMPRADATE DEFAULT CURRENT_DATE,PRECIODECIMAL(9,2) DEFAULT 0,NUM_PROPIETARIOINTEGERUNIQUE,COLORVARCHAR(25));Modificar una columna:

ALTER TABLETELEFONOMODIFY (NUM_PROPIETARIOUNIQUE)

CHECKEjemplo de posibles controles segn la normaSQL92:

CREATE TABLETELEFONO(NUMERO INTEGER PRIMARY KEY,TIPOVARCHAR(2)CHECK (VALUE IN (SELECTTIPOFROMTIPO_TEL)),MARCAINTEGERCHECK (VALUE BETWEEN 1 AND 99),FECHA_COMPRADATE,PRECIODECIMAL(9,2)CHECK (VALUE > 0),NUM_PROPIETARIOINTEGER,COLORVARCHAR(25));

EjemploOracle

CREATE TABLETELEFONO(NUMERO INTEGER PRIMARY KEY,TIPOVARCHAR(2),MARCAINTEGER CONSTRAINTMARCA_CTRLCHECK (MARCABETWEEN 1 AND 99),FECHA_COMPRADATE,PRECIODECIMAL(9,2) CONSTRAINTPRECIO_CTRLCHECK (PRECIO> 0),NUM_PROPIETARIOINTEGER,COLORVARCHAR(25));Correccin de los ejercicios de aplicacin

1erEjercicio

DROP TABLEPELICULAS;CREATE TABLEPELICULAS(IDENT_PELICULAINTEGER PRIMARY KEY,TITULOVARCHAR(50),GENERO1VARCHAR(20),RECAUDACIONDECIMAL(15,2),FECHA_ESTRENODATE,PAISSMALLINT,NUM_ENTRADASINTEGER,SINOPSISVARCHAR(2000),FECHA_INTRODUCCIONTIMESTAMP);Consulta de creacin del ndice

CREATE INDEX I2_GENEROPAISONPELICULAS(GENERO1,PAIS);

2EjercicioConsulta para aadir una columna.

ALTER TABLEPELICULASADD (NUM_DIRECTORINTEGER);

Aadir una clave fornea:

-Creacin de la tabla DirectorDROP TABLEDIRECTOR;

CREATE TABLEDIRECTOR(NUM_DIRECTOR INTEGER PRIMARY KEY,NOMBREVARCHAR(50));

-Aadir la restriccin de integridad

ALTER TABLEPELICULASADD CONSTRAINT FK_DIRECTORFOREIGN KEY (NUM_DIRECTOR) REFERENCESDIRECTOR;

Aadir un valor por defecto en la columnaRECAUDACIONcon el valor0.

ALTER TABLEPELICULASMODIFYRECAUDACIONDEFAULT 0;

Poner las columnasTITULOyPAIScomoNOT NULL

ALTER TABLEPELICULASMODIFYTITULONOT NULL;ALTER TABLEPELICULASMODIFYPAISNOT NULL;

Eliminar la restriccin

ALTER TABLEPELICULASDROP CONSTRAINT FK_DIRECTOR;

3erEjercicio

Crear una vistaPELICULAS2apartir de la tablaPELICULASque contenga las cuatro primeras columnas de la tablaPELICULASy la columnaSINOPSIS

CREATE VIEWPELICULAS2 ASSELECTIDENT_PELICULA,TITULO,GENERO1,SINOPSISFROMPELICULAS;

Elimina resta vista.

DROP VIEWPELICULAS2;

4Ejercicio

Crear unasecuencia en la columna IDENT_PELICULAque comience en el nmero 12 y tenga un valor mximo de9999.

CREATE SEQUENCE S_PELICULASSTART WITH 12 INCREMENT BY 1MINVALUE 12 MAXVALUE 9999 CYCLE;

Renombrar la tablaPELICULAScomoPELICULASOLD.

RENAMEPELICULASTOPELICULASOLD;

Crear una nueva tablaPELICULASapartir de la tablaPELICULASOLD.

CREATE TABLEPELICULASAS SELECT * FROMPELICULASOLD;

Eliminar la tabla PELICULASy la tablaPELICULASOLD

DROP TABLEPELICULAS;DROP TABLEPELICULASOLD;Captulo 2: LENGUAJE DE DEFINICIN DE DATOS LDD -DescargaLenguaje SQLPginade