Documente Academic
Documente Profesional
Documente Cultură
B.2.
La importacin de tablas................................................................................4
C. Los sub-SELECT..................................................................................................4
D. Algunas conceptos de rendimiento........................................................................6
D.1. Optimizacin de las consultas mediante la utilizacin de HINTS ...........8
E. Presentacin de SQLPLUS...................................................................................9
F.
E.1.
El comando SPOOL.......................................................................................9
E.2.
El comando SET............................................................................................9
E.3.
F.2.
Lenguaje SQL
Pgina 1 de 17
de
control
para
un
fichero
con
separadores:
LOAD DATA
INFILE 'Carga_peliculas.csv'
BADFILE 'Carga_peliculas.csv.bad'
DISCARDFILE 'Carga_peliculas.dsc'
DISCARDMAX 999
TRUNCATE
INTO TABLE PELICULAS
FIELDS TERMINATED BY ','
(IDENT_PELICULAS,TITULO,GENERO1,GENERO2,
FECHA_ESTRENO,PAIS,IDENT_DIRECTOR ,DISTRIBUIDOR,SINOPSIS)
Ejemplo de un fichero
carga_peliculas_fija.csv
de
control
con
posicin
LOAD DATA
INFILE 'Carga_peliculas_fija.csv'
BADFILE 'Carga_peliculas_fija.csv.bad'
DISCARDFILE 'Carga_peliculas_fija.dsc'
DISCARDMAX 999
TRUNCATE
INTO TABLE PELICULAS
(IDENT_PELICULAS
POSITION ( 1 : 1 )
TITULO
POSITION ( 2 : 32 )
GENERO1
POSITION ( 33 : 40 )
GENERO2
POSITION ( 41 : 50 )
FECHA_ESTRENO
POSITION ( 51 : 58 )
"TO_DATE(:FECHA_ESTRENO,'DD/MM/YY')",
PAIS
POSITION ( 59 : 59 )
IDENT_DIRECTOR
POSITION ( 60 : 60 )
DISTRIBUIDOR
POSITION ( 61 : 77 )
SINOPSIS
POSITION ( 78 : 239)
Lenguaje SQL
de
inicio
de
INTEGER EXTERNAL,
CHAR,
CHAR,
CHAR,
INTEGER EXTERNAL,
INTEGER EXTERNAL,
CHAR,
CHAR)
Pgina 2 de 17
fin:
Lenguaje SQL
Pgina 3 de 17
En MySql tambin es posible extraer toda la base de datos sin indicar ningn
nombre de tabla.
mysqldump -h<nombre o direccin de mquina, por defecto localhost>
-u <usuario> -p<contrasea> <nombre base de datos> >TODALABASE.dmp
La importacin de tablas
Ejemplo de importacin para una base de datos Oracle
Los sub-SELECT
Lenguaje SQL
Pgina 4 de 17
= ACTOR.IDENT_ACTOR AND
= (SELECT PAIS.IDENT_PAIS FROM PAIS
PAIS.DESCRIPCION = 'FRANCIA')
ORDER BY PELICULAS.TITULO, ACTOR.APELLIDO;
Para recuperar la descripcin del pas sin hace una unin, podemos escribir la
consulta del siguiente modo.
SELECT SUBSTR(PELICULAS.TITULO,1,20) TITULO,
PELICULAS.FECHA_ESTRENO,
SUBSTR((DIRECTOR.APELLIDO||' '||DIRECTOR.NOMBRE),1,25)
DIRECTOR,
SUBSTR(RTRIM(ACTOR.APELLIDO||' '||ACTOR.NOMBRE),1,25)
ACTOR,
ACTOR.FECHA_NACIMIENTO NACIDO,ACTOR.NUM_PELICULAS
NUM_PELICULAS,
ESTA.PRESUPUESTO,ESTA.NUM_ENTRADAS_ESPANA NUM_ENTRADAS,
(SELECT PAIS.DESCRIPCION FROM PAIS WHERE PAIS.IDENT_PAIS =
ACTOR.NACIONALIDAD) PAIS
FROM
PELICULAS PELICULAS, DIRECTOR DIRECTOR, CASTING CAST,
ACTOR ACTOR, ESTADISTICA ESTA
WHERE
PELICULAS.IDENT_DIRECTOR = DIRECTOR.IDENT_DIRECTOR AND
PELICULAS.IDENT_PELICULAS = CAST.IDENT_PELICULAS AND
PELICULAS.IDENT_PELICULAS = ESTA.IDENT_PELICULAS AND
CAST.IDENT_ACTOR
= ACTOR.IDENT_ACTOR
ORDER BY PELICULAS.TITULO, ACTOR.APELLIDO;
Lenguaje SQL
Pgina 5 de 17
Otra posibilidad, las subconsultas con la misma tabla que la tabla principal. Por
ejemplo si se quieren mostrar los actores que tienen el mismo nombre que otro
actor.
SELECT SUBSTR(PELICULAS.TITULO,1,20) TITULO,
PELICULAS.FECHA_ESTRENO,
SUBSTR((DIRECTOR.APELLIDO||' '||DIRECTOR.NOMBRE),1,25)
DIRECTOR,
SUBSTR(RTRIM(ACT1.APELLIDO||' '||ACT1.NOMBRE),1,25) ACTOR,
ACT1.FECHA_NACIMIENTO NACIDO,ACT1.NUM_PELICULAS
NUM_PELICULAS,
ESTA.PRESUPUESTO,ESTA.NUM_ENTRADAS_ESPANA NUM_ENTRADAS
FROM
PELICULAS PELICULAS, DIRECTOR DIRECTOR, CASTING CAST,
ACTOR ACT1, ESTADISTICA ESTA
WHERE
PELICULAS.IDENT_DIRECTOR = DIRECTOR.IDENT_DIRECTOR AND
PELICULAS.IDENT_PELICULAS = CAST.IDENT_PELICULAS AND
PELICULAS.IDENT_PELICULAS = ESTA.IDENT_PELICULAS AND
CAST.IDENT_ACTOR
= ACT1.IDENT_ACTOR AND
EXISTS (SELECT * FROM ACTOR ACT2 WHERE ACT2.NOMBRE =
ACT1.NOMBRE AND ACT2.APELLIDO <> ACT1.APELLIDO)
ORDER BY PELICULAS.TITULO, ACT1.APELLIDO;
Pgina 6 de 17
o
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
Para mostrar la estructura, los ndices y las restricciones de una tabla con
SQLPLUS, se puede utilizar este tipo de script
SET FLU OFF
SET PAGESIZE 255
SET WRAP OFF
SET VER OFF
SET ARRAYSIZE 1
COL TIPO FORMAT A15
COL NOT_NULL FORMAT A8
PROMPT .
PROMPT .-------------------------.
PROMPT ESTRUCTURA DE LA TABLA TELEFONO :
PROMPT .----------------------------.
PROMPT .
SELECT UPPER(A.COLUMN_NAME) NOM,A.DATA_TIPO || '(' ||
DECODE(A.DATA_TIPO,'NUMBER',A.DATA_PRECISION,
A.DATA_LENGTH) || ')' TIPO,
DECODE(A.NULLABLE,'N','
N','') NOT_NULL,
Lenguaje SQL
Pgina 7 de 17
Pgina 8 de 17
Presentacin de SQLPLUS
El comando SPOOL
Es posible redirigir el resultado de todo lo que se ejecuta en pantalla. Para ello hay
que utilizar el comando SPOOL.
Ejemplo:
SPOOL Fichero_Lista_Peliculas;
SELECT PELICULAS.TITULO, PELICULAS.FECHA_ESTRENO,
DIRECTOR.APELLIDO, ACTOR.APELLIDO, ACTOR.FECHA_NACIMIENTO,
ESTA.PRESUPUESTO
FROM PELICULAS PELICULAS, DIRECTOR DIRECTOR, CASTING CAST, ACTOR
ACTOR, ESTADISTICA ESTA WHERE
PELICULAS.IDENT_DIRECTOR = DIRECTOR.IDENT_DIRECTOR AND
PELICULAS.IDENT_PELICULAS = CAST.IDENT_PELICULAS AND
PELICULAS.IDENT_PELICULAS = ESTA.IDENT_PELICULAS AND
CAST.IDENT_ACTOR
= ACTOR.IDENT_ACTOR
ORDER BY PELICULAS.TITULO, ACTOR.NOM DESC;
SPOOL OFF;
El comando SET
Muestra por defecto todos los nmeros con el signo $ delante y un punto
entre los miles de millones, los millones y los miles.
Ejemplo de utilizacin:
SELECT PELICULAS.TITULO, PELICULAS.FECHA_ESTRENO,
SUBSTR(DIRECTOR.APELLIDO||' '||DIRECTOR.NOMBRE,1,30)
DIRECTOR,ESTA.RECAUDACION_USA,ESTA.RECAUDACION_MUNDIAL
FROM PELICULAS PELICULAS, DIRECTOR DIRECTOR, ESTADISTICA ESTA WHERE
PELICULAS.IDENT_DIRECTOR = DIRECTOR.IDENT_DIRECTOR AND
PELICULAS.IDENT_PELICULAS = ESTA.IDENT_PELICULAS
ORDER BY PELICULAS.TITULO;
Lenguaje SQL
Pgina 9 de 17
Pgina 10 de 17
SET SERVEROUTPUT ON
CREATE OR REPLACE TRIGGER T_BOR_PELICULAS
BEFORE DELETE
ON PELICULAS
FOR EACH ROW
DECLARE
BEGIN
DBMS_OUTPUT.PUT_LINE( 'No puede eliminar PELICULAS') ;
DBMS_OUTPUT.PUT_LINE( 'Contacte con el Administrador');
RAISE_APPLICATION_ERROR(-20502, 'Comando no autorizado');
END;
/
Si ahora slo queremos aplicar el trigger a los actores nacidos antes del 31/12/1950
hay que aadir la siguiente clusula WHEN:
Lenguaje SQL
Pgina 11 de 17
Lenguaje SQL
Pgina 12 de 17
Lenguaje SQL
Pgina 13 de 17
SET HEADING OFF FEEDBACK OFF ECHO OFF VERIFY OFF SPACE 0 PAGESIZE
0 TERMOUT OFF WRAP OFF
SET LINESIZE 300
SET COLSEP ";"
SPOOL Extraccion_Actores.TXT
SELECT * FROM ACTOR;
Lenguaje SQL
Pgina 14 de 17
COLUMN
COLUMN
SELECT
FROM
UNION
SELECT
VARIAB1 NOPRINT
VARIAB2 NOPRINT
'A' VARIAB1, 0 VARIAB2, 'SELECT '
DUAL
Pgina 15 de 17
Celda J3
="INSERT INTO PELICULAS VALUES
("&A3&",'"&B3&"','"&C3&"','"&D3&"',TO_DATE('"&E3&"','DD/MM/YYYY'),
"&F3&","&G3&",'"&H3&"','"&I3&"');"
Celda J4
="INSERT INTO PELICULAS VALUES
("&A4&",'"&B4&"','"&C4&"','"&D4&"',TO_DATE('"&E4&"','DD/MM/YYYY'),
"&F4&","&G4&",'"&H4&"','"&I4&"');"
Celda J5
="INSERT INTO PELICULAS VALUES
("&A5&",'"&B5&"','"&C5&"','"&D5&"',TO_DATE('"&E5&"','DD/MM/YYYY'),
"&F5&","&G5&",'"&H5&"','"&I5&"');"
Celda J6
="INSERT INTO PELICULAS VALUES
("&A6&",'"&B6&"','"&C6&"','"&D6&"',TO_DATE('"&E6&"','DD/MM/YYYY'),
"&F6&","&G6&",'"&H6&"','"&I6&"');"
Lenguaje SQL
Pgina 16 de 17
from clie;
Lenguaje SQL
Pgina 17 de 17