6 Consultas Simples y Sqlplus

9
ESCRIBIENDO CONSULTAS SIMPLES Y SQL*PLUS Una consulta (query) es una solicitud de información de las tablas de la base de datos. Las consultas simples son aquellas que obtienen información de una única tabla. La base de la consulta es la cláusula SELECT. La forma simple de una consulta es: SELECT <column_name> FROM table_name; Donde column_name especifica las columnas con los alias o, en el caso de que sean todas, el símbolo *. Si los alias contienen espacios en blanco, deben estar entre comillas dobles (“”). También estará entre comillas dobles si no queremos que se especifique en mayúsculas. La palabra clave DISTINCT asegura que la consulta no devolverá filas duplicadas. El DISTINCT se aplica a toda la fila, y no a la primera columna. SELECT DISTINCT deptno, salary FROM emp; Tabla dual La tabla dual está disponible para todos los usuarios de la base de datos. Tiene una columna y una fila. La tabla DUAL es usada para seleccionar variables del sistema o para evaluar una expresión. SELECT sysdate, user FROM dual; Limitando las filas La cláusula WHERE es usada para limitar el número de filas tratadas. Oracle trata los símbolos _ y % como patrones si la condición es LIKE. El símbolo _ es substituido por un carácter, mientras que % es substituido por cualquier cadena de caracteres. Si queremos buscar por el símbolo _, utilizaremos la cláusula ESCAPE. SELECT * FROM emp WHERE ename LIKE 'A\_%' ESCAPE ‘/’;

Transcript of 6 Consultas Simples y Sqlplus

Page 1: 6 Consultas Simples y Sqlplus

ESCRIBIENDO CONSULTAS SIMPLES Y SQL*PLUS Una consulta (query) es una solicitud de información de las tablas de la base de datos. Las consultas simples son aquellas que obtienen información de una única tabla. La base de la consulta es la cláusula SELECT. La forma simple de una consulta es: SELECT <column_name> FROM table_name; Donde column_name especifica las columnas con los alias o, en el caso de que sean todas, el símbolo *. Si los alias contienen espacios en blanco, deben estar entre comillas dobles (“”). También estará entre comillas dobles si no queremos que se especifique en mayúsculas. La palabra clave DISTINCT asegura que la consulta no devolverá filas duplicadas. El DISTINCT se aplica a toda la fila, y no a la primera columna. SELECT DISTINCT deptno, salary FROM emp; Tabla dual La tabla dual está disponible para todos los usuarios de la base de datos. Tiene una columna y una fila. La tabla DUAL es usada para seleccionar variables del sistema o para evaluar una expresión. SELECT sysdate, user FROM dual; Limitando las filas La cláusula WHERE es usada para limitar el número de filas tratadas. Oracle trata los símbolos _ y % como patrones si la condición es LIKE. El símbolo _ es substituido por un carácter, mientras que % es substituido por cualquier cadena de caracteres. Si queremos buscar por el símbolo _, utilizaremos la cláusula ESCAPE. SELECT * FROM emp WHERE ename LIKE 'A\_%' ESCAPE ‘/’;

Page 2: 6 Consultas Simples y Sqlplus

Para encontrar los valores a nulo se debe utilizar la condición IS NULL. Los operadores =, !=, <, >, etc. No funcionan cuando se realizan comparaciones con NULL. SELECT * FROM emp WHERE comm IS NULL; Ordenar filas Una consulta puede incluir la cláusula ORDER BY para ordenar las filas del resultado basándonos en los datos de las columnas. Sin esta cláusula, no existe ninguna garantía de que las filas tengan un orden determinado. El orden de las filas será ascendente. Si queremos un orden descendente, debemos especificarlo con la palabra reservada DESC. SELECT * FROM emp WHERE deptno = 30 ORDER BY ename; Nota: Se pueden utilizar alias en el ORDER BY SELECT ename "Employee", SALARY "Salary" FROM emp WHERE deptno = 30 ORDER BY salary desc, "Employee"; Si utilizamos la palabra clave DISTINCT en la SELECT, sólo podemos utilizar en el ORDER aquellas columnas listadas en la SELECT. Si existen operadores en la SELECT, el ORDER BY también debe tenerlos. Fallaría la consulta: SELECT DISTINCT 'Name: ' || ename "Employee", SALARY "Salary" FROM emp WHERE deptno = 30 ORDER BY deptno DESC, "Employee" Además de por el nombre de columna o el alias, se puede especificar el orden que ocupa la columna en la consulta. Esto es muy útil si las expresiones del SELECT son muy largas. También son útiles si realizamos operaciones de unión, intersección, etc con la consulta. SELECT 'Name: ' || ename "Employee", SALARY "Salary" FROM emp WHERE deptno = 30 ORDER BY 2, 1

Page 3: 6 Consultas Simples y Sqlplus

SQL *Plus SQL*Plus está disponible en todas las plataforma en las que se ejecuta Oracle. Se sirve con el cliente de Oracle. También está presente en el servidor. Se puede ejecutar cualquier comando de base de datos o bloque PL/SQL en SQL*Plus (siempre que se disponga de permisos). Conceptos:

1. Command. Una instrucción que se ejecuta en SQL*Plus. Puede ser un comando SQL*Plus o un comando SQL.

2. Block. Unidad lógica de SQL o PLSQL 3. Table. Unidad básica de almacenamiento en Oracle 4. Query. Sentencia SELECT que recupera información de una o

más tablas o vistas 5. Query results. También conocido como conjunto resultado.

Datos que devuelve una consulta 6. Report. Resultados formateados de alguna forma más legible

SQL *Plus básico Cuando se inicia SQL*Plus, se abre una ventana que nos pide el usuario, la contraseña y la cadena de conexión. La cadena de conexión es el alias de la base de datos. Si omitimos esta cadena, SQL*Plus intenta conectarse a la base de datos local definida en la variable ORACLE_SID. Una vez entramos en el programa podemos cambiar de conexión ejecutando: CONNECT USERNAME/PASSWORD@CONNECTSTRING; Si omitimos la contraseña, nos aparecerá una contraseña donde se nos solicitará. Si omitimos la cadena de conexión, se intentará conectar a una base de datos local. Para salir de SQL*Plus, debemos utilizar el comando EXIT. En plataformas donde es necesario devolver un código, utilizaremos la instrucción QUIT. EXIT y QUIT son sinónimos. Entrar y ejecutar comandos El prompt por defect será SQL> Si queremos cambiar el prompt, utilizaremos la instrucción SET SQLPROMPT.

Page 4: 6 Consultas Simples y Sqlplus

Un comando puede ser introducido en múltiples líneas, y no son sensibles a caja. Siempre tendremos en el buffer de Oracle el último comando ejecutado. El buffer puede ser editado o guardado en un fichero. Se puede finalizar un comando de diferentes formas:

1. Con un punto y coma (;). El comando está completo y debe ejecutarse

2. Barra en una línea vacía (/). Se ejecuta el comando del buffer, También se utiliza para ejecutar un PL/SQL

3. Línea en blanco. El comando es almacenado en el buffer Nota: Sólo los comandos SQL y PL/SQL son almacenados en el buffer. Los comandos SQL*Plus no se almacenan El símbolo de resta es utilizado para indocar que se continúa una línea: La instrucción siguiente fallará, ya que entiende el – como una continuación y no como una resta SQL> SELECT 800 - > 400 FROM DUAL; SELECT 800 400 FROM DUAL En cambio funcionará: SQL> SELECT 800 2 - 400 FROM DUAL; 800-400 ---------- 400 Editar el buffer SQL*Plus Hay 2 formas de editar el buffer:

1. Usar el comando EDIT para pasar el buffer a un fichero. El nombre por defecto del fichero será afiedt.buf. Para definir el editor, por ejemplo poner el notepad, utilizaremos: DEFINE_EDITOR = NOTEPAD

2. Usar los comando de edición SQL. Especificando el número de línea, modificaremos la correspondiente línea del buffer.

Page 5: 6 Consultas Simples y Sqlplus
Page 6: 6 Consultas Simples y Sqlplus
Page 7: 6 Consultas Simples y Sqlplus

Script Files SQL*Plus provee de instrucciones tanto para guardar el buffer SQL en un fichero como para ejecutar instrucciones desde el propio fichero. Los SQL almacenados en un fichero son llamados scrips. Para guardar en el sistema operativo: SAVE <fichero> -- Por defecto no sobrescribe. Utilizar REPLACE para ello. La extensión por defecto será sql Con EDIT <fichero> editaremos un fichero Con GET <fichero> llevamos el contenido de un fichero al buffer Con START <fichero> (o @ <fichero>) ejecutamos el fichero @@<fichero> dentro de un fichero ejecuta el fichero <fichero> dentro del directorio donde se está ejecutando Hay dos tipos de comentarios que podemos utilizar en el fichero: REMARKS (REM) o /* */ Las líneas marcadas con REM no aparecerán cuando se ejecute el código. Las marcadas con /* */ sí Personalización Muchos de los parámetros de SQL*Plus se pueden personalizar mediante la instrucción SET. Se puede guardar la personalización actual con la instrucción: STORE SET <fichero>. Producir una salida más legible Con SQL*Plus es posible:

- Definir el tamaño de una columna - Visualizar cabeceras con sentido - Formatear números y fechas - “Envolver” la información

Con la instrucción siguiente comprobamos el estado del tamaño de pantalla SQL> show pagesize lines

Page 8: 6 Consultas Simples y Sqlplus

Con la siguiente, modificamos dichos tamaños SQL> SET PAGESIZE 78 LINESIZE 55 Deshabilitamos la respuesta de la Quero, donde nos dice el número de filas mostradas SQL> SET FEEDBACK OFF Renombramos una columna. La barra vertical hace que el nombre de la columna aparezca en dos filas COLUMN ENAME HEADING "Employee|Name" Cambiar la cabecera y el formato: COLUMN sal FORMAT "$9,999" HEADING "Salary" Copiar un formato de otra columna COLUMN COMM LIKE SAL HEADING "Incentive". Aceptar valores en tiempo de ejecución Con el & le indicamos que lo que viene a continuación es una variable. Si ejecutamos un fichero con el texto: SELECT empno, ename FROM emp WHERE deptno = &dept; Nos pedirá el valor de dept: Enter value for dept: 10 También se puede definir el valor antes: SQL> DEFINE dept = 10 SQL> l 1 SELECT empno, ename 2 FROM emp 3* WHERE deptno = &dept SQL> / Si tenemos un fichero llamado query1 con el texto SELECT empid, ename FROM emp WHERE deptno = &1 AND empid = &2;

Page 9: 6 Consultas Simples y Sqlplus

Podemos ejecutarlo: SQL> START query1 10 732 Con ACCEPT podemos asignar un texto a una solicitud de valor: ACCEPT DEPTNUMB NUMBER PROMPT "Enter Department Number: "