Mandatos de SQL*Plus
Mandatos de SQL*Plus
Veamos una serie de comandos propios del programa SQL*Plus y que no forman parte propiamente dicha del lenguaje relacional SQL pero que pueden resultar muy útiles durante el trabajo con este programa. Estas órdenes o comandos propios de SQL*Plus no necesitan terminarse con un punto y coma.
Comando DESCRIBE
DESCRIBE permite obtener las definiciones de las columnas para una tabla, vista o sinónimo. Su sintaxis de aplicación es:
Para obtener información concerniente a la tabla con los datos de población:
Comando SPOOL
Con este comando puede enviarse la salida por pantalla hacia un fichero de texto lo que puede resultar muy útil para luego estudiar detenidamente la salida, imprimirla, etc. Con el argumento OFF se detiene el envío de la salida al fichero.
SPOOL nombre_fichero
SPOOL OFF |
Comando HOST
Este comando permite la ejecución de órdenes del sistema operativo sin abandonar SQL*PLUS.
Por ejemplo para obtener el listado del directorio actual en la cuenta de usuario UNIX se ha de ejecutar:
Para visualizar el contenido de todos los ficheros involucrados en el proceso de carga de datos:
HOST more sevilla.dat
HOST more carga.ctl
HOST more carga.log |
Si tan solo se ejecuta el comando HOST sin argumentos entonces se obtiene un shell del sistema operativo (lo cual puede verse fácilmente a partir del prompt) y pueden ejecutarse cuantas órdenes del sistema operativo se desee hasta que se ejecute el comando exit, regresando así al SQL*Plus en su modo normal de funcionamiento.
Comando START
Mediante este comando pueden ejecutarse secuencialmente las sentencias SQL contenidas en un fichero. Este fichero de comandos contiene simplemente el texto de una serie de sentencias en lenguaje SQL para ser ejecutadas. Es usual que los ficheros de comandos finalicen en .SQL.
|
START nombre_fichero_comandos |
Es muy interesante la posibilidad de pasar argumentos variables necesarios para la ejecución de las sentencias SQL contenidas en el fichero de comandos de modo que cada vez que se invoque un fichero de comandos con esta orden pueden pasarse diferentes argumentos.
Consultas
Número de municipios
|
SELECT COUNT(*) FROM poblacion;
SELECT COUNT(*) FROM poblacion WHERE hombres > mujeres;
SELECT COUNT(*) FROM poblacion WHERE mujeres > hombres;
SELECT nombre FROM poblacion WHERE hombres = mujeres;
|
El número de filas de la tabla es su cardinalidad.
Población total
|
SELECT SUM(hombres) "Poblacion masculina" FROM poblacion;
SELECT SUM(mujeres) "Poblacion femenina" FROM poblacion;
SELECT SUM(hombres) + SUM(mujeres) "Poblacion total" FROM poblacion;
|
Un texto entrecomillado a continuación de una columna de salida permite asignar un nombre alternativo a esa columna en el listado de resultados.
Población de los municipios
|
SELECT nombre "Municipio", hombres + mujeres "Poblacion" FROM poblacion;
|
Listado ordenado de municipios según población
|
SELECT nombre FROM poblacion ORDER BY hombres DESC;
SELECT nombre FROM poblacion ORDER BY mujeres DESC;
SELECT nombre FROM poblacion ORDER BY hombres + mujeres DESC;
|
Lógicamente cada una de estas ordenaciones puede producir resultados distintos de manera que un mismo municipio puede ocupar posiciones diferentes en cada uno de los listados de salida.
Consultas de máximos
|
SELECT MAX(hombres), MAX(mujeres) FROM poblacion;
SELECT MAX(hombres + mujeres) FROM POBLACION;
SELECT nombre FROM poblacion WHERE hombres =
(SELECT MAX(hombres) FROM poblacion);
|
Consultas condicionales ordenadas
Se desea obtener un listado de los municipios con mayor población masculina que femenina.
|
SELECT nombre AS municipio FROM poblacion WHERE hombres > mujeres;
|
Se desea ordenar el listado según la magnitud de la diferencia entre la población de ambos sexos.
SELECT nombre AS municipio,
hombres - mujeres AS diferencia FROM poblacion
WHERE hombres > mujeres ORDER BY 2 DESC; |
Se desea ordenar el listado según la magnitud relativa, expresada en porcentaje, de la diferencia entre la población de ambos sexos en relación a la población total de cada municipio.
SELECT nombre AS municipio,
(hombres-mujeres)/(hombres+mujeres)*100 AS porcentaje
FROM poblacion WHERE hombres > mujeres ORDER BY 2; |
Cálculos de medias
|
SELECT AVG(hombres) FROM poblacion;
SELECT AVG(mujeres) FROM poblacion;
SELECT AVG(hombres+mujeres) FROM poblacion;
SELECT AVG(hombres+mujeres) FROM poblacion WHERE hombres > mujeres;
SELECT AVG(hombres+mujeres) FROM poblacion WHERE mujeres > hombres;
SELECT AVG(hombres+mujeres) FROM poblacion WHERE mujeres > hombres
AND UPPER(nombre) != 'SEVILLA';
|
La función UPPER devuelve la cadena que recibe como argumento en la que todos los caracteres se han convertido a mayúsculas. Aquí se utiliza para que sea indiferente la manera en que se hayan almacenado los nombres de los municipios en la base de datos.
Consultas condicionales con argumentos
Supóngase que se desea calcular el número de municipios cuya población total está entre 10.000 y 25.000 habitantes.
SELECT COUNT(*) FROM poblacion WHERE hombres + mujeres
BETWEEN 10000 AND 25000; |
Si se desea calcular la misma cantidad pero con número de habitantes diferente (por ejemplo, 5.000 y 20.000) hay que volver a escribir una sentencia SELECT idéntica en todo a la anterior excepto en los valores concretos a utilizar en la cláusula WHERE de la consulta. El paso de argumentos variables que posibilita el comando START ya comentado proporciona una manera cómoda y potente de realizar varias veces la misma consulta cambiando en cada caso los parámetros variables (en este caso, mínimo y máximo de la población de un municipio). Hay que crear un fichero de comandos denominado por ejemplo pregunta.sql con el siguiente contenido:
REM Esto es una prueba
SELECT COUNT(*) FROM poblacion WHERE hombres + mujeres
BETWEEN &1 AND &2;
|
El fichero puede crearse invocando externamente un editor de texto:
La sentencia REM permite introducir líneas de comentario en los archivos de órdenes SQL. Este fichero de comandos puede invocarse de la siguiente forma:
|
START pregunta.sql 5000 20000
|
con lo que se ejecuta realmente la sentencia:
SELECT COUNT(*) FROM poblacion WHERE hombres + mujeres
BETWEEN 5000 AND 20000;
|
Nótese que en el fichero de comandos los argumentos se han indicado mediante el símbolo & seguido del número de argumento (entre comillas si el argumento sería realmente sustituido por una expresión de tipo cadena en la ejecución).