You are on page 1of 53

Fundamentos de SQL

UNIVERSIDAD AUTNOMA DEL ESTADO DE MXICO

FACULTAD DE INGENIERA

INGENIERA EN COMPUTACIN

CUADERNO DE EJERCICIOS
FUNDAMENTOS DE SQL
Asignatura: Fundamentos de Bases de Datos

Elaborado por: Mara de Lourdes Rivas Arzaluz

Octubre 2011

1
Ma. de Lourdes Rivas Arzaluz

Fundamentos de SQL

Tabla de contenido
Introduccin ......................................................................................................................................................... 3 Convenciones de Sintaxis .................................................................................................................................... 4 Tablas para ejercicios........................................................................................................................................... 5 1. Sentencia SQL bsica ....................................................................................................................................... 6 2. Restringir y ordenar datos............................................................................................................................... 9 3. Ordenamiento ................................................................................................................................................ 13 4. Tabla Dual ....................................................................................................................................................... 15 5. Mltiples Tablas ......................................................................................................................................... 17

6. Funciones........................................................................................................................................................ 20 Funciones que operan con un slo rengln................................................................................................. 20 Funciones que operan con varios renglones ............................................................................................... 30 7. Uniones ...................................................................................................................................................... 33 Natural Join .................................................................................................................................................... 33 Outer Join ....................................................................................................................................................... 38 Cross Join ........................................................................................................................................................ 41 8. 9. 10. Conjuntos ................................................................................................................................................... 43 Consultas Anidadas ................................................................................................................................... 46 Manipulacin de datos ......................................................................................................................... 50

INSERT............................................................................................................................................................. 50 DELETE ............................................................................................................................................................ 51 UPDATE ........................................................................................................................................................... 52 Ejercicios Resueltos............................................................................................. Error! Marcador no definido. Bibliografa.......................................................................................................................................................... 53

2
Ma. de Lourdes Rivas Arzaluz

Fundamentos de SQL

Introduccin
SQL significa Lenguaje de Consulta Estructurado (Structured Query Language, por sus siglas en ingls). Originalmente, SQL se llamaba SEQUEL (Structured English Query Language) y fue diseado e implementado por IBM Reserch como una interfaz para un sistema de Bases de Datos Relacional conocido como SYSTEM R. Actualmente, SQL es el lenguaje estndar de los Sistemas de Bases de Datos relacionales comerciales. El SQL est basado en algebra relacional, que tiene que ver con la teora de conjuntos. Y en la unidad de competencia 3 de la unidad de aprendizaje de FUNDAMENTOS DE BASES DE DATOS, se cubre el contenido de SQL, posterior a cubrir algebra relacional, con el propsito de que el alumno comprenda de manera sencilla la forma en que trabaja el lenguaje SQL. Los ejercicios, tanto los de ejemplo, como los propuestos estn basados en tablas del usuario HR que se incluye en las instalaciones del Sistema de Bases de Datos de Oracle, el modelo de datos de estas tablas est incluido tambin al inicio del trabajo-para que se tome como base para comprender mejor los ejercicios. Sin embargo, la sintaxis que se utiliza es SQL:1999 estndar, por consiguiente los ejercicios propuestos y hasta los ejemplos, podrn ser probados en cualquier otro Sistema de Bases de Datos, siempre y cuando se tenga el esquema de tablas referido. El objetivo de este trabajo es proporcionar al alumno una gua para aprender el lenguaje SQL de manera sencilla y rpida, la mayor parte de este trabajo se enfoca a la consulta de los datos, pero no se puede dejar el aspecto sobre la manipulacin de los datos, la cual se cubre en la ltima parte de este trabajo.

3
Ma. de Lourdes Rivas Arzaluz

Fundamentos de SQL

Convenciones de Sintaxis
En este manual en muchos apartados se indica sintaxis de comandos y sirve para aprender a utilizar el comando, e indica la forma de escribir dicho comando en el programa utilizado para escribir SQL. Ejemplo: SELECT * | {[DISTINCT] columna | expresin [alias], ...} FROM tabla; Otras veces se describen cdigos de ejemplo de un comando. Por ejemplo SELECT nombre FROM cliente; Los ejemplos sirven para escenificar una instruccin concreta, la sintaxis se utiliza para indicar las posibilidades de un comando. Para indicar la sintaxis de un comando se usan smbolos especiales. [] (corchetes). Los corchetes sirven para encerrar texto que no es obligatorio en el comando, es decir para indicar una parte opcional. | (barra vertical). Este smbolo (|) , la barra vertical, indica opcin, es decir que se puede elegir entre varias opciones. ... (puntos suspensivos) Indica que se puede repetir el texto anterior de la sentencia en el comando continuamente (significa: y as sucesivamente). {} (llaves) Las llaves sirven para indicar opciones mutuamente exclusivas pero obligatorias. Es decir, opciones de las que slo se puede elegir una opcin, pero de las que es obligado elegir una. Ejemplo: SELECT { * | columna | expresin } FROM tabla;

4
Ma. de Lourdes Rivas Arzaluz

Fundamentos de SQL

Tablas para ejercicios


El siguiente diagrama representa el conjunto de tablas que sern utilizadas durante el desarrollo de este trabajo. Estas tablas pertenecen al usuario HR, el cual se crea en la instalacin automtica de la Base de Datos de Oracle.

ESQUEMA HR

Ref: Oracle Corporation (2007). SQL Reference. Mxico: Oracle Corporation.

5
Ma. de Lourdes Rivas Arzaluz

Fundamentos de SQL

1. Sentencia SQL bsica


SELECT Recupera datos de una o ms tablas. Sintaxis: SELECT * | {[DISTINCT|UNIQUE] columna | expresin [[AS] alias], ...} FROM tabla; Donde: * DISTINCT/UNIQUE Columna Expresin Alias Tabla

El asterisco significa que se seleccionan todas las columnas No se muestran los valores duplicados y acta sobre el rengln completo. Es el nombre de una columna de la tabla que se desea mostrar. Una expresin vlida SQL. Es un nombre que se le da a la cabecera de la columna en el resultado de esta instruccin. Nombre de la tabla donde se van a seleccionar los datos.

Ejemplos A continuacin se presentan varias consultas relativas a la sintaxis de la sentencia SELECT basados en las tablas incluidas al inicio de este trabajo. La siguiente consulta obtiene toda la informacin de todos los atributos de la tabla employees.
SQL> SELECT * FROM employees; EMPLOYEE_ID FIRST_NAME LAST_NAME EMAIL PHONE_NUMBER ----------- --------------- --------------- --------------- -----------HIRE_DAT JOB_ID SALARY COMMISSION_PCT MANAGER_ID DEPARTMENT_ID -------- ---------- ---------- -------------- ---------- ------------196 Alana Walsh AWALSH 650.507.9811 24/04/98 SH_CLERK 3100 124 50 197 Kevin 23/05/98 SH_CLERK . . . . . . Feeney 3000 KFEENEY 124 650.507.9822 50

6
Ma. de Lourdes Rivas Arzaluz

Fundamentos de SQL

Ahora, se obtendr slo los atributos de first_name, last_name y salary de la tabla employees.
SQL> SELECT first_name, last_name, salary from employees; FIRST_NAME --------------Donald Jennifer Michael Pat Steven . . . . . . LAST_NAME SALARY --------------- ---------OConnell 2600 Whalen 4400 Hartstein 13000 Fay 6000 King 24000

A continuacin, se utiliza la clusula UNIQUE, que no permite se desplieguen renglones duplicados.


SQL> select UNIQUE job_id from employees; JOB_ID ---------AC_ACCOUNT AC_MGR AD_ASST FI_ACCOUNT FI_MGR HR_REP IT_PROG . . . . . .

Finalmente, la siguiente consulta obtendr informacin acerca de los atributos de first_name, last_name y pct_commission, la clusula DISTINCT se actuar por todo el regln completo.
SQL> SELECT DISTINCT first_name, last_name, salary, commission_pct 2 FROM employees; FIRST_NAME --------------Pat Bruce Valli Ismael Alexander Guy Karen Julia Ki John Oliver . . . . . . LAST_NAME SALARY COMMISSION_PCT --------------- ---------- -------------Fay 6000 Ernst 6000 Pataballa 4800 Sciarra 7700 Khoo 3100 Himuro 2600 Colmenares 2500 Nayer 3200 Gee 2400 Seo 2700 Tuvault 7000 ,15

7
Ma. de Lourdes Rivas Arzaluz

Fundamentos de SQL

Ejercicios 1. Instrucciones: Con base en la informacin de las tablas del esquema HR, genere las consultas que muestren los resultados que se estn pidiendo:

1. 2. 3. 4. 5. 6.

Selecciona toda la informacin de la tabla regions Selecciona el department_name, manager_id, location_id de la tabla departments. Selecciona sin duplicados, el first_name de la tabla employees. Selecciona el atributo country_name y region_id de la tabla countries Selecciona todas las columnas de la tabla jobs Selecciona el first_name, last_name, email, hire_date de la table de employees.

8
Ma. de Lourdes Rivas Arzaluz

Fundamentos de SQL

2. Restringir y ordenar datos


Se pueden realizar consultas que restringen los datos de salida de las tablas. Para esto, se utiliza la clusula WHERE. Esta clusula permite colocar una condicin que deben de cumplir los registros para que sean desplegados. En el caso de los registros que no cumplan la condicin, no aparecern en los resultados. Sintaxis: SELECT expresiones FROM tabla [WHERE condicin]; expresiones Tabla condicin Una expresin vlida SQL Nombre de la tabla donde se van a seleccionar los datos Expresin que deben cumplir los registros Las expresiones que se pueden utilizar en la condicin son: Operadores de comparacin (=, >, <, >=,<=) Rangos (between y not between) Caracteres iguales (like y not like) Valores desconocidos (is null e is not null) Listas (in y not in) Combinaciones (and, or) not niega una expresin booleana y palabras claves como like, null, between e in

Ejemplos La siguiente sentencia selecciona todas las columnas de la tabla employees pero solo de aquellos registros cuyo department_id sea igual a 110.
SQL> SELECT first_name, departmet_id FROM employees WHERE department_id = 30; FIRST_NAME DEPARTMENT_ID --------------- ------------Den 30 Alexander 30 Shelli 30 Sigal 30 Guy 30 Karen 30 . . . . . .

9
Ma. de Lourdes Rivas Arzaluz

Fundamentos de SQL

A continuacin, se muestra todos los atributos de la tabla employees, pero slo de aquellos registros cuyo atributo salary se encuentra entre 3000 y 10000 pesos. Es importante mencionar que al utilizar la clausula BETWEEN se incluyen los lmites de los rangos.
SQL> SELECT first_name, last_name, salary FROM employees WHERE NOT (salary BETWEEN 3000 AND 10000); FIRST_NAME --------------Donald Douglas Michael Shelley Steven Neena Lex Nancy Den Shelli Sigal . . . . . . LAST_NAME SALARY --------------- ---------OConnell 2600 Grant 2600 Hartstein 13000 Higgins 12000 King 24000 Kochhar 17000 De Haan 17000 Greenberg 12000 Raphaely 11000 Baida 2900 Tobias 2800

La siguiente consulta muestra todas las columnas de la tabla employees y combina dos condiciones utilizando el conector AND. La primera condicin especifica que el atributo hire_date sea menor al 01ENE-1999 y la segunda condicin establece que el atributo salary sea mayor o igual a 10000 pesos.
SQL> SELECT first_name, last_name, salary, hire_date FROM employees WHERE hire_date < '01-ENE-1999' AND salary >= 10000; FIRST_NAME --------------Michael Hermann Shelley Steven Neena Lex Nancy Den John Karen Alberto . . . . . . LAST_NAME SALARY HIRE_DAT --------------- ---------- -------Hartstein 13000 17/02/96 Baer 10000 07/06/94 Higgins 12000 07/06/94 King 24000 17/06/87 Kochhar 17000 21/09/89 De Haan 17000 13/01/93 Greenberg 12000 17/08/94 Raphaely 11000 07/12/94 Russell 14000 01/10/96 Partners 13500 05/01/97 Errazuriz 12000 10/03/97

10
Ma. de Lourdes Rivas Arzaluz

Fundamentos de SQL

El siguiente ejercicio, selecciona los registros de la tabla employees pero slo aquellos donde el atributo department_id no es 50 ni 80, y adems muestra la etiqueta Contratado. Esta etiqueta es una expresin vlida, cualquier cadena constante que se requiera aparezca en la clausula SELECT, deber colocarse con comillas simples, en caso contrario, el sistema podr considerarla como un nombre de columna o alias y enviar un mensaje de error. El nmero de registros arrojados en los resultados, corresponde al nmero de registros que contiene la tabla de employees y que cumplen con la condicin.
SQL> SELECT 'Contratado' FROM employees 2 WHERE department_id NOT IN (50, 80); 'CONTRATAD ---------Contratado Contratado Contratado Contratado Contratado . . . . . .

La forma de utilizar la clausula LIKE se especifica en la siguiente sentencia, donde muestra los atributos first_name, last_name, email de aquellos empleados cuyo job_id inicie con una A mayscula. Como se observa en la consulta, se utiliza el smbolo %, el cual es un comodn que sustituye un valor nulo, 1 carcter o un conjunto de caracteres.
SQL> SELECT first_name, last_name, email , job_id FROM employees WHERE job_id LIKE A%; FIRST_NAME --------------William Shelley Jennifer Steven Neena Lex . . . . . . LAST_NAME --------------Gietz Higgins Whalen King Kochhar De Haan EMAIL --------------WGIETZ SHIGGINS JWHALEN SKING NKOCHHAR LDEHAAN JOB_ID ---------AC_ACCOUNT AC_MGR AD_ASST AD_PRES AD_VP AD_VP

11
Ma. de Lourdes Rivas Arzaluz

Fundamentos de SQL

Cuando se require condicionar el valor de un atributo con un valor nulo, la forma de realizarlo se muestra en la siguiente sentencia, la cual muestra los atributos first_name, salary y commission, de aquellos registros cuya comisin es nula.
SQL> SELECT first_name, salary, commission_pct FROM employees WHERE commission_pct IS NULL; FIRST_NAME SALARY COMMISSION_PCT --------------- ---------- -------------Donald 2600 Douglas 2600 Jennifer 4400 Michael 13000 Hermann 10000 Shelley 12000 William 8300 Steven 24000 Neena 17000 . . . . . .

Es importante mencionar que el valor nulo no significa un valor 0 o un espacio vaco, el valor nulo nos indica un valor desconocido o ausente. Ejercicios 2. Instrucciones: Haciendo uso de la informacin del esquema HR, selecciona la informacin que se te pide: 1. Selecciona el first_name, last_name, salary, deparment_id de la tabla employees donde el first_name contenga la cadena AL. 2. Seleccione toda la informacin de la tabla employees donde el atributo commission_pct es nulo. 3. Selecciona el employee_id de la tabla job_history, de los empleados que han trabajado en el departamento 20. 4. Selecciona el street_address, postal_code y city de la tabla locations donde el atributo state_province sea igual a MONTANA. 5. Selecciona los atributos job_title, min_salary, max_salary de la tabla jobs, donde el atributo job_title no sea President ni Programmer. 6. Seleccione los atributos de job_id, job_title, min_salary, max_salary de la tabla de jobs, donde el salario no se encuentre entre el intervalo de 9000 y 15000 pesos

12
Ma. de Lourdes Rivas Arzaluz

Fundamentos de SQL

3. Ordenamiento
El orden inicial de los registros obtenidos por un SELECT no guarda ms que una relacin respecto al orden en el que fueron introducidos. Para ordenar con base a criterios ms interesantes, se utiliza la clusula ORDER BY. En esa clusula se coloca una lista de atributos que indica la forma de ordenar. Se ordena primero por el primer atributo de la lista, si hay coincidencias por el segundo, si ah tambin las hay por el tercero, y as sucesivamente. Se puede colocar las palabras ASC O DESC (por defecto se toma ASC). Esas palabras significan en ascendente (de la A a la Z, de los nmeros pequeos a los grandes) o en descendente (de la Z a la A, de los nmeros grandes a los pequeos). Sintaxis: SELECT expresiones FROM tabla [WHERE condicin] [ORDER BY listaDeAtributosOAlias [ASC|DESC]]; expresiones Tabla condicin listaDeAtributosOAlias ASC|DESC Una expresin vlida SQL Nombre de la tabla donde se van a seleccionar los datos Expresin que deben cumplir los registros Lista de atributos o alias a ordenar. Los alias son cadenas tipo carcter que se renombra durante el desplegado el nombre de las columnas Orden en el cual se quieren mostrar las columnas

Ejemplos A continuacin, se muestra los atributos de first_name, last_name y phone_number de la tabla employees donde el atributo department_id es igual a 90. La informacin se muestra ordenada por el atributo first_name en orden ASCENDENTE.
SQL> SELECT first_name, last_name, phone_number FROM employees WHERE department_id = 90 ORDER BY first_name ASC; FIRST_NAME -------------------Lex Neena Steven LAST_NAME ----------------------De Haan Kochhar King PHONE_NUMBER -------------------515.123.4569 515.123.4568 515.123.4567

13
Ma. de Lourdes Rivas Arzaluz

Fundamentos de SQL La siguiente sentencia muestra los atributos de first_name, last_name de la tabla employees de aquellos registros cuyo atributo de department_id es menor de 90 y adems, ordena la informacin con base en los atributos first_name, last_name en orden descendente.

SQL> SELECT first_name, last_name from employees WHERE department_id < 90 ORDER BY first_name, last_name DESC; FIRST_NAME -------------------Adam Alana Alberto Alexander Alexander Alexis Allan Alyssa Anthony Britney . . . . . . LAST_NAME ------------------------Fripp Walsh Errazuriz Khoo Hunold Bull McEwen Hutton Cabrio Everett

Ejercicios 3. Instrucciones: Utiliza las tablas del usuario HR y realiza las siguientes sentencias: 1. Seleccione todos los registros de la tabla employees donde el atributo department_id sea mayor de 20 y mostrar la informacin de acuerdo al atributo salary en orden ascendente. 2. Seleccione los atributos first_name, last_name, salary, department_id de la tabla employees donde el atributo first_name o last_name contenga una A y mostrarlos en orden ascendente. 3. Seleccione todos los empleados que fueron trabajan en el departamento 20 o 40 y mostrarlo en orden ascendente por department_id y salario. 4. Seleccione el atributo employee_id y first_name de aquellos empleados donde el atributo commission_pct es nulo, mostrarlos en orden alfabtico de manera descendente de acuerdo al atributo first_name. 5. Seleccionar todos los empleados que pertenezca al departamento 20, 30 y 40 y su salario se encuentre entre 10000 y 50000 pesos, desplegar la informacin ordenada en forma descendente de acuerdo al atributo department_id y salary.

14
Ma. de Lourdes Rivas Arzaluz

Fundamentos de SQL

4. Tabla Dual
Es una tabla que crea Oracle al momento de la creacin de la Base de Datos. La tabla DUAL est en el esquema de SYS, pero es accesible a todos los usuarios. Tiene una columna llamada DUMMY con tipo de dato VARCHAR2(1), contiene un solo rengln X. Es til para calcular expresiones constantes. Debido a que la tabla DUAL tiene un solo rengln, el resultado que regresa es un solo rengln.

Ejemplos La siguiente sentencia despliega la fecha actual del sistema utilizando la funcin SYSDATE
SQL> SELECT sysdate FROM dual; SYSDATE -------10/10/11

Tambin pueden realizarse operaciones dentro del entorno de Oracle como se observa en el siguiente ejemplo:
SQL> SELECT 4+6 FROM dual; 4+6 ---------10

Se puede obtener informacin del usuario utilizando las variables del sistema USER y UID.
SQL> SELECT USER, UID FROM dual; USER UID ------------------------------ ---------HR 55

15
Ma. de Lourdes Rivas Arzaluz

Fundamentos de SQL

Ejercicios 4. Instrucciones: Lee cuidadosamente lo que se te pide y realiza las siguientes sentencias, puedes utilizar cualquier usuario vlido de la Base de Datos Oracle: 1. 2. 3. 4. 5. Mostrar el mensaje LA FECHA ACTAUL ES: con la fecha del sistema. Realizar la operacin de 9*9 Mostrar el mensaje SOY EL USUARIO: que concatene al nombre del usuario. Calcular la fecha actual ms 3 meses Mostrar el mensaje HOLA MUNDO con una sentencia SELECT

16
Ma. de Lourdes Rivas Arzaluz

Fundamentos de SQL

5. Mltiples Tablas
Algunas veces es necesario utilizar datos de ms de una tabla. Las bases de datos relacionales se basan en que los datos se distribuyen en tablas que se pueden relacionar mediante un atributo. Ese atributo es el que permite integrar los datos de las tablas. En la figura 1, el reporte despliega datos desde dos tablas que estn separadas.

Fig. 1. Consulta de ms de una tabla

Sintaxis: SELECT expresiones FROM tabla1, tabla2, . tablaN [WHERE condicin[es]] expresiones Una expresin vlida SQL tabla1, tabla2, Nombre(s) de la tabla(s) de donde se van a seleccionar los datos tablaN condicin[es] Expresin que deben cumplir los registros. Adems, se deben incluir las condiciones que permitan asociar una tabla con la otra.

Es importante mencionar que de acuerdo al no. de tablas involucradas, el no de condiciones para asociar cada una de las tablas con la otra ser igual al no. de tablas menos uno. Es decir, si en la consulta se involucran 5 tablas, el no. de condiciones es 4, adems de las condiciones que restringirn las registros. En el caso donde se omita alguna condicin podra generar un producto cartesiano entre las tablas que no tienen la condicin de asociacin.

17
Ma. de Lourdes Rivas Arzaluz

Fundamentos de SQL

Ejemplos A continuacin, la consulta muestra el nombre del empleado, pero slo de aquellos empleados que no se encuentran en los departamentos Marketing o Shipping. Cmo el nombre del empleado y el nombre de los departamentos se encuentran en tablas diferentes, es necesario utilizar y relacionar las tablas necesarias para obtener esa informacin, en ese caso: employees y departments.
SQL> SELECT first_name FROM employees, departments WHERE employees.department_id = departments.department_id AND department_name NOT IN ('Marketing','Shipping'); FIRST_NAME -------------------Jennifer Den Karen Alexander Shelli Sigal Guy Susan Bruce . . . . . .

La siguiente consulta involucra 5 tablas, debido a que se requiere informacin de todas ellas, y como se observa en las condiciones, debe de existir 5-1 =4 condiciones para ir asociando una tabla con la otra, adems incluye una condicin sobre el nombre del departamento que coincida con Shipping.
SQL> SELECT first_name, city, country_name, region_name FROM employees e, departments d, locations l, countries c, regions r WHERE e.department_id= d.department_id AND d.location_id = l.location_id 5 AND l.country_id = c.country_id 6 AND c.region_id = r.region_id 7 AND department_name like 'Shipping'; FIRST_NAME CITY COUNTRY_NAME REGION_NAME --------------- ---------- ------------------------ --------------Donald South San United States of America Americas Francisco Douglas South San Francisco South San Francisco South San Francisco United States of America Americas

Matthew

United States of America Americas

Adam . . . . . .

United States of America Americas

18
Ma. de Lourdes Rivas Arzaluz

Fundamentos de SQL

La siguiente consulta muestra informacin sobre el nombre del empleado, el nombre del departamento y la provincia, informacin que se encuentra en tres tablas distintas y que debern asociarse o relacionarse por medio de un atributo.

SQL> SELECT e.first_name, d.department_name, l.state_province FROM employees e, departments d, locations l WHERE e.department_id = d.department_id AND d.location_id = l.location_id; FIRST_NAME -------------------Donald Douglas Jennifer Michael Pat Susan Hermann . . . . . . DEPARTMENT_NAME -----------------------------Shipping Shipping Administration Marketing Marketing Human Resources Public Relations STATE_PROVINCE -------------------California California Washington Ontario Ontario Bavaria

Ejercicios 5. Instrucciones: Lee cuidadosamente lo que se te pide y realiza las siguientes sentencias: 1. Seleccionar el atributo first_name, last_name, min_salary y max_salary de los empleados cuyo departamento es 10. 2. Seleccionar los atributos last_name, start_date, end_date, job_title de todos los empleados que son MANAGER. 3. Seleccionar el atributo country_name de las empleadas que se llaman Jennifer 4. Seleccionar el atributo country_name de los departmentos que coinciden con SALES 5. Mostrar el atributor region_name, al cual pertenece el empleado LEX 6. Seleccionar el atributo country_name, donde trabajan los empleados cuyo atributo salary es mayor de 15000.

19
Ma. de Lourdes Rivas Arzaluz

Fundamentos de SQL

6. Funciones
Existen formas para realizar clculos avanzados o instrucciones que permiten facilitar el manejo de ciertas expresiones. Una funcin recibe datos (parmetros) y devuelve un resultado. La sintaxis se muestra a continuacin: Sintaxis: nombreFuncin [(parmetro1, [, parmetro2, ])]

nombreFuncin [(parmetro1, [, parmetro2, ])]

Funcin vlida Lista de parmetros que recibe la funcin. Si la funcin no especifica parmetros, no es necesario colocar los parntesis.

Existen dos tipos de funciones: Funciones que operan con un sola rengln. Funciones que operan con varios renglones.

Funciones que operan con un slo rengln


Regresan un slo rengln de resultado para cada rengln de la tabla o vista. Funciones de cadena Funciones que permite manipular cadenas. LOWER(texto) UPPER(texto) INITCAP(texto) || INSTR(cadena, carcter, inicio, n) RTRIM(cadena) LTRIM(cadena) TRIM(cadena) Convierte el texto a minsculas. Convierte el texto a maysculas. Cambia la primera letra de una palabra a maysculas. Une o concatena cadenas. Busca la ensima ocurrencia de un carcter en una cadena, comenzando a buscar en inicio. Elimina los espacios a la derecha de cadena Elimina los espacios a la izquierda de cadena Elimina los espacios en blanco a la izquierda y la derecha de cadena.

20
Ma. de Lourdes Rivas Arzaluz

Fundamentos de SQL

LENGTH(cadena) REPLACE(cadena, cadenaABuscar, cadenaReemplazo) LPAD(cadena, longitud,caracteres) LTRIM(cadena,caracteres)

Obtiene el tamao de la cadena Buscar en cadena una determinada cadenaABuscar y la cambia por cadenaReemplazo

Da a la cadena determinada longitud aadiendo un conjunto de caracteres a su izquierda Suprime un conjunto de caracteres en la parte izquierda de una cadena

Ejemplos El siguiente ejemplo despliega atributo last_name en maysculas de la tabla employees


SQL> SELECT last_name, UPPER(last_name) FROM employees; LAST_NAME --------------Abel Ande Atkinson Austin Baer Baida Banda Bates Bell Bernstein Bissot . . . . . . UPPER(LAST_NAME) ------------------------ABEL ANDE ATKINSON AUSTIN BAER BAIDA BANDA BATES BELL BERNSTEIN BISSOT

A continuacin, se seleccionan los atributos email y email formateada a la primera letra con mayscula.
SQL> SELECT email, INITCAP(email) "Mayscula" FROM employees; EMAIL --------------ABANDA ABULL ACABRIO AHUNOLD AHUTTON AKHOO AMCEWEN AWALSH BERNST . . . . . . Mayscula ------------------------Abanda Abull Acabrio Ahunold Ahutton Akhoo Amcewen Awalsh Bernst

21
Ma. de Lourdes Rivas Arzaluz

Fundamentos de SQL

La siguiente consulta elimina los caracteres especificados en el segundo argumento.


SQL> SELECT RTRIM('Esta es una prueba: ./././','./') Quita caracteres FROM DUAL; Quita caracteres ------------------Esta es una prueba:

El siguiente ejemplo muestra el atributo first_name y su longitud de los registros de la tabla employees.
SQL> SELECT first_name, LENGTH(first_name) FROM employees; FIRST_NAME LENGTH(FIRST_NAME) --------------- -----------------Ellen 5 Sundar 6 Mozhe 5 Hermann 7 Elizabeth 9 Sarah 5 David 5 Laura 5 . . . . . .

En seguida se muestra un ejemplo donde se reemplaza cualquier ocurrencia de J con BL.


SQL> SELECT REPLACE('JACK y JUE','J','BL') "Reemplaza" FROM DUAL; Reemplaza -----------BLACK y BLUE

Funciones numricas Permite realizar operaciones con valores numricos ROUND(n, decimales) TRUNC(n, decimales) Redondea n al nmero de decimales indicado. Trunca n al nmero de decimales especificado

22
Ma. de Lourdes Rivas Arzaluz

Fundamentos de SQL

ABS(n) a+b a-b CEIL(n) FLOOR(n) POWER(n, b) SQRT(n) SIGN(n) COS(n) TAN(n)

Obtiene el valor absoluto de n. Suma de a y b Diferencia de a y b Entero ms pequeo o igual a n Entero menor o igual a n Obtiene el valor de n elevado a la b potencia Obtiene la raz cuadrada de n Devuelve 1 si n es positivo, 0 si el n es 0 y -1 si n es negativo Calcula el coseno de n (n tiene que estar en radianes) Calcula la tangente de n (n tiene que estar en radianes)

Ejemplos La siguiente consulta utiliza la funcin TRUNC la cual recibe como parmetro un nmero con decimales.
SQL> SELECT TRUNC(15.79,1) "Trunca" FROM DUAL; Truncate ---------15,7

El siguiente ejemplo es similar al anterior, slo que aqu utiliza la funcin de ROUND.
SQL> SELECT ROUND(15.79,1) "Redondea" FROM DUAL; Redondea ---------15,8

23
Ma. de Lourdes Rivas Arzaluz

Fundamentos de SQL

En seguida se muestra el resultado de aplicar la funcin de Tangente a valor de 135.


SQL> SELECT TAN(135 * 3.14159265359/180) "Tangente de 35 grados" FROM DUAL; Tangente de 35 grados ---------------------1

El siguiente ejemplo muestra el atributo employee_id y su salario correspondiente al valor mayor entero menor y o igual que l.
SQL> SELECT employee_id, salary, FLOOR(salary) FROM employees; EMPLOYEE_ID SALARY FLOOR(SALARY) ----------- ---------- ------------198 2600 2600 199 2600 2600 200 4400 4400 203 6500 6500 204 10000 10000 205 12000 12000 206 8300 8300 100 24000 24000 . . . . . .

A continuacin se muestra el resultado de elevar 3 al cuadrado.


SQL> SELECT POWER(3,2) "3 elevado al cuadrado " FROM DUAL; 3 elevado al cuadrado ----------------------

Funciones para fechas Manipulan valores tipo fecha SYSDATE ADD_MONTHS(fecha,a) GRATEST(f1, f2, ) Devuelve la fecha actual del sistema Aade a meses a fecha Devuelve la mayor de las fechas establecidas en la lista de parmetros. Devuelve la menos de las fechas establecidas en la lista de

LEAST(f1, f2, )

24
Ma. de Lourdes Rivas Arzaluz

Fundamentos de SQL parmetros. LAST_DAY(fecha) MONTHS_BETWEEN(f1, f2) NEXT_DAY(fecha,da) Devuelve el ltimo da del mes de fecha. Muestra los meses que se encuentra entre las fechas f1 y f2. Indica cual es el da que corresponde a aadir a la fecha el da indicado. El da puede ser el texto 'Lunes', 'Martes', 'Mircoles',... (si la configuracin est en espaol) o el nmero de da de la semana (1=lunes, 2=martes,...) Fecha siguiente al da de la semana dado Redondea la fecha al valor de aplicar el formato a la fecha. El formato puede ser: TRUNC(fecha [formato]) 'YEAR' Hace que la fecha muestre el ao completo 'MONTH' Hace que la fecha refleje el mes completo ms cercano a la fecha 'HH24' Redondea la hora a las 00:00 ms cercanas 'DAY

TO_DATE(fecha,da) ROUND(fecha,formato)

Trunca la fecha al valor de aplicar el formato a la fecha. El formato puede ser: 'YEAR' Hace que la fecha muestre el ao completo 'MONTH' Hace que la fecha refleje el mes completo ms cercano a la fecha 'HH24' Redondea la hora a las 00:00 ms cercana

Ejemplos A continuacin se muestra la fecha actual mostrando solo el da.


SQL> SELECT ROUND(TO_CHAR(SYSDATE,DD)) Fecha FROM DUAL; FECHA ---------10

El siguiente ejemplo muestra el ltimo da del mes de acuerdo a la fecha de contratacin y posteriormente le agrega 5 meses.

25
Ma. de Lourdes Rivas Arzaluz

Fundamentos de SQL

SQL> SELECT last_name, hire_date, ADD_MONTHS(LAST_DAY(hire_date), 5) "Fecha de Evaluacion" FROM employees; LAST_NAME ------------------------OConnell Grant Whalen Hartstein . . . . . . HIRE_DAT -------21/06/99 13/01/00 17/09/87 17/02/96 Fecha de -------30/11/99 30/06/00 29/02/88 31/07/96

A continuacin, la consulta muestra dos fechas, la del sistema y la de la fecha de contratacin, y muestra cul de las dos es la mayor
SQL> SELECT sysdate, hire_date, GREATEST(sysdate, hire_date) "Fecha mayor" FROM employees; SYSDATE HIRE_DAT -------- -------24/10/11 21/06/99 24/10/11 13/01/00 24/10/11 17/09/87 24/10/11 17/02/96 . . . . . . Fecha ma -------24/10/11 24/10/11 24/10/11 24/10/11

La siguiente consulta muestra el no. de meses que existe entre las dos fechas establecidas.
SQL> SELECT sysdate, hire_date, ROUND(MONTHS_BETWEEN(sysdate, hire_date)) FROM employees; SYSDATE HIRE_DAT No. de meses -------- -------- -----------24/10/11 21/06/99 148 24/10/11 13/01/00 141 24/10/11 17/09/87 289 24/10/11 17/02/96 188 . . . . . . "No. de meses"

Funciones de conversin Oracle es capaz de convertir datos automticamente a fin de que la expresin final tenga sentido. TO_CHAR Obtiene una cadena a partir de un nmero o una fecha. Para fechas:

Se debe indicar el formato de conversin, que es una cadena que

26
Ma. de Lourdes Rivas Arzaluz

Fundamentos de SQL puede incluir estos smbolos (en una cadena de texto): o YY: Formato de ao en dos cifras o MM: Mes en formato de dos cifras o MON Las tres primeras letras del mes o MONTH Nombre completo del mes o DY Da de la semana en tres letras o DAY Da completo de la semana o HH24 Hora de 0 a 23 o MI Minutos (0 a 59) o SS Segundos (0 a 59) Para nmeros o 9 Posicin del nmero o 0 Posicin del nmero (muestra ceros) o $ Formato dlar o D Posicin del smbolo decimal (en espaol, la coma) o . Posicin del decimal TO_NUMBER Convierte textos en nmeros. Se indica el formato de la conversin (utilizando los mismos smbolos que la funcin TO_CHAR Convierte textos en fechas. Como segundo parmetro se utilizan los cdigos de formato fechas utilizados en TO_CHAR

TO_DATE

Ejemplos La consulta siguiente consulta cambia el formato de la fecha actual al especificado en la funcin.
SQL> SELECT TO_CHAR(SYSDATE, 'DD/MONTH/YYYY, DAY HH:MI:SS') FROM DUAL; TO_CHAR(SYSDATE,'DD/MONTH/YYYY,DAYHH:M -------------------------------------10/OCTUBRE /2011, LUNES 08:05:52

27
Ma. de Lourdes Rivas Arzaluz

Fundamentos de SQL

El siguiente ejemplo, convierte la cadena especificada a un valor tipo fecha.


SQL> SELECT TO_DATE('January 15, 1989, 11:00 A.M.', 'Month dd, YYYY, HH:MI A.M.', 'NLS_DATE_LANGUAGE = American') Fecha FROM DUAL; FECHA -------15/01/89

A continuacin, la consulta convierte la cadena a un valor numrico , de acuerdo al formato especificado.


SQL> SELECT TO_NUMBER('100,00', '9G999D99') "Convierte a Num" FROM DUAL; Convierte a Num --------------100

Funciones de condicin Oracle es capaz de convertir datos automticamente a fin de que la expresin final tenga sentido. CASE Es una instruccin que permite establecer condiciones de salida (al estilo if-then-else). Sintaxis: CASE expresin WHEN valor1 THEN resultado1 [WHEN valor2 THEN resultado2 .... ... ELSE resultadoElse ] END DECODE Esta funcin evala una expresin y se colocan a continuacin pares valor, resultado de forma que si se la expresin equivale al valor, se obtiene el resultado indicado. Se puede especificar un ltimo parmetro con el resultado a efectuar en caso de no encontrar ninguno de los valores indicados. Su sintaxis es: DECODE(expresin, valor1, resultado1

28
Ma. de Lourdes Rivas Arzaluz

Fundamentos de SQL [, valor2, resultado2,...] [, valorPordefecto]) TO_DATE Convierte textos en fechas. Como segundo parmetro se utilizan los cdigos de formato fechas utilizados en TO_CHAR

Ejemplos A continuacin se muestra el uso de la funcin DATE para convertir una cadena en tipo fecha, con base en el formato que se le est indicando.
SQL> SELECT TO_DATE('01-ENE-2011','DD-MON-YYYY') Fecha FROM dual; FECHA -------01/01/11

El siguiente ejemplo utiliza la funcin CASE, en la cual de acuerdo al valor de la comisin realiza una operacin.
SQL> SELECT salary, CASE commission_pct WHEN WHEN WHEN ELSE END "Total Salario" FROM employees;

0.15 THEN salary*0.85 0.20 THEN salary * 0.80 0.30 THEN salary * 0.70 salary

SALARY Total Salario ---------- ------------2600 2600 2600 2600 4400 4400 13000 13000 6000 6000 6500 6500 10000 10000 . . . . . .

29
Ma. de Lourdes Rivas Arzaluz

Fundamentos de SQL

El siguiente ejemplo genera los mismos resultados que el ejemplo anterior, pero utiliza la funcin de DECODE.
SQL> SELECT salary, DECODE (commission_pct,0.15, salary * 0.20, salary * 0.30, salary * Salary) "Total FROM employees; SALARY Total Salario ---------- ------------2600 2600 2600 2600 4400 4400 13000 13000 6500 6500 10000 10000 12000 12000 8300 8300 24000 24000 . . . . . . 0.85, 0.80, 0.70, Salario"

Funciones que operan con varios renglones


Es muy comn utilizar consultas en las que se desee agrupar los datos a fin de realiza clculos en vertical, es decir calculados a partir de datos de distintos registros. Para ello se utiliza la clusula GROUP BY que permite indicar en base a qu registros se realiza la agrupacin. El estndar ISO define cinco funciones de agregacin: COUNT: devuelve el nmero de valores en una columna especificada; SUM: devuelve la suma de los valores contenidos en una columna especificada; AVG: devuelve la media de los valores contenidos en una columna especificada; MIN: devuelve el valor ms pequeo contenido en una columna especificada; MAX: devuelve el valor mximo contenido en una columna especificada. Estas funciones operan sobre una nica columna de una tabla y devuelven un nico valor. COUNT y MAX se aplican a atributos tanto numricos como no numricos, pero SUM y AVG slo pueden operaciones nicamente los restantes valores no nulos. COUNT(*) es un caso especial de COUNT que se emplea para contar todos los renglones de una tabla, independientemente de si existen valores nulos o valores duplicados. Una consulta que incluya la clusula GROUP BY se llama consulta agrupada, porque rene los datos de las tablas indicadas en la instruccin SELECT y genera un nico rengln de resultado para cada grupo. Las columnas especificadas en la clusula GROUP BY se denominan columnas de agrupamiento. El estndar

30
Ma. de Lourdes Rivas Arzaluz

Fundamentos de SQL ISO exige que la clusula SELECT y la clusula GROUP BY estn estrechamente integradas. Cuando se emplea GROUP BY, cada elemento de la lista SELECT debe tener un nico valor para cada grupo. Adems, la clusula SELECT slo puede contener: nombres de columnas; funciones de agregacin; constantes; una expresin en la que se combinan alguno de los elementos anteriores.

Sintaxis: SELECT expresiones FROM tabla [WHERE condicin] [GROUP BY agrupadoPor [HAVING condicionesDeGgrupo]]; expresiones Tabla condicin agrupadoPor condicionesDeGrupo Una expresin vlida SQL Nombre de la tabla donde se van a seleccionar los datos Expresin que deben cumplir los registros Nombres de las columnas por las que se agruparan los datos Restringe los valores generados de los grupos para la cual la condicin es verdadera

Ejemplos La siguiente consulta muestra el salario mximo agrupado por identificador de departamento (department_id) pero slo de aquellos departamentos cuyo salario mximo sea mayor a 10000.
SQL> SELECT department_id, MAX(salary) FROM employees WHERE department_id < 100 GROUP BY department_id HAVING MAX(salary) > 10000; DEPARTMENT_ID MAX(SALARY) ------------- ----------30 11000 20 14000 90 24000 80 14000

31
Ma. de Lourdes Rivas Arzaluz

Fundamentos de SQL La siguiente consulta agrupa el total de empleados por nombre de regin y posteriormente por identificador de localidad. Observe que la funcin de COUNT se le coloc un alias a la columna resultante.
SQL> SELECT region_name, l.location_id, COUNT(e.employee_id) Total FROM employees e, departments d, locations l, countries c, regions r WHERE e.department_id = d.department_id AND d.location_id = l.location_id AND l.country_id = c.country_id AND c.region_id = r.region_id GROUP BY region_name, l.location_id; REGION_NAME LOCATION_ID TOTAL ------------------------- ----------- ---------Americas 1500 45 Americas 1400 5 Europe 2400 1 Americas 1800 2 Europe 2500 34 Americas 1700 18 Europe 2700 1 . . . . . .

Ejercicios 6. Instrucciones: Utiliza las tablas del usuario HR y realiza las siguientes sentencias: 1. 2. 3. 4. 5. 6. 7. 8. Mostar el resultado de trucar el siguiente valor: 769.87437. Obtener 9 elevado a la 2. potencia. Mostrar el resultado de redondear a 3 decimales el valor de 235.86775. Mostrar el atributo last_name en minsculas de todos los empleados cuyo department_name es IT. Mostrar la siguiente informacin: El puesto job_id es de first_name , de todos los empleados Seleccione los identificadores de puestos, donde se encuentre MGR, sustituirlo por MANAGER Seleccionar el atributo first_name de la tabla de employees y haga uso de la funcin DECODE para mostrar algunos de los nombres de departamentos en lugar del identificador. Mostrar los atributos first_name, last_name y la fecha en que se terminan los contratos, de acuerdo al atributo hire_date, considerando que slo se les contrata por 3 meses.

32
Ma. de Lourdes Rivas Arzaluz

Fundamentos de SQL

7. Uniones
Permite relacionar renglones de 2 o ms tablas. A continuacin se muestra la sintaxis del estndar SQL:1999. Sintaxis: SELECT tabla1.columna, tabla2.columna FROM tabla1 [NATURAL JOIN tabla2] | [JOIN tabla2 USING (columna] | [JOIN tabla2 ON (tabla1.column_name = tabla2.columna)] | [LEFT | RIGHT | FULL OUTER JOIN tabla2 ON (tabla1.columna = tabla2.columna)] | [CROSS JOIN tabla2];

tabla1.columna NATURAL JOIN JOIN tabla2 USING (columna) JOIN tabla ON tabla1.columna LEFT |RIGHT | FULL OUTER JOIN CROSS JOIN

Nombre de la tabla y columna desde donde los datos son recuperados Une dos tablas que coinciden en el mismos nombre de columna Realiza un equijoin basado en el nombre de la columna Realiza un equjoin basado en la condicin de la clausuala ON. Se utilice ests sentencias para realizar un join Regresa el producto cartesiano de dos tablas

Natural Join
Se pueden unir dos tablas automticamente basadas en una columna que coincidan con el tipo de dato y los nombres de columnas. El natural join utiliza todas las columnas que coinciden con los nombres de las columnas y su tipo de dato para unir las tablas. La clusula USING puede utilizarse para especificar solo aquellas columnas que deberan utilizarse en el join. Las columnas que son referenciadas en la clusula USING no deberan tener nombre de tablas o alias en cualquier lugar de la sentencia SQL. Con el uso de la clusula USING, cuando se quiere determinar, por ejemplo, el nombre de un departamento, se comparan los valores de la columna department_id de la tabla de employees con los valores de la tabla de departments. La relacin entre la tabla de employees y la tabla de departments es un equijoin; esto es, los valores de la columna department_id en ambas tablas deben ser iguales.

33
Ma. de Lourdes Rivas Arzaluz

Fundamentos de SQL Normalmente, este tipo de joins involucra la llave primaria y la llave primaria de las tablas. Los equijoins tambin se le llaman simple joins o inner joins. Un join natural es bsicamente un equijoin con todas las columnas que coinciden en el mismo nombre. La clusula ON establece condiciones o columnas especficas para la unin. Se puede utilizar la clusula ON para unir columnas que tienen distintos nombres. Algunas veces se necesita unir una tabla hacia s misma, estos joins se les conoce como self join, que es la unin de una tabla a s misma, sta tabla aparece 2 veces en la clusula FROM y es seguida por los alias de la tabla. Cuando se requiere unir ms de dos tablas en una misma consulta, se pueden utilizar varios joins dependiendo del nmero de tablas a unir. An cuando la sintaxis de SQL:1999 nos indica la manera de generar los joins, es importante mencionar que los equijoins pueden realizarse a travs de la comparacin de columnas utilizando el signo =.

Ejemplos La siguiente consulta muestra el uso de un join natural que asocia la tabla de departamentos con la tabla de locations a travs del atributo de location_id, en cual est contenido en ambas tablas.
SQL> SELECT department_id, department_name, location_id, city FROM departments NATURAL JOIN locations DEPARTMENT_ID ------------60 50 10 30 90 100 110 . . . . . . DEPARTMENT_NAME LOCATION_ID CITY ------------------ ----------- -------------------IT 1400 Southlake Shipping 1500 South San Francisco Administration 1700 Seattle Purchasing 1700 Seattle Executive 1700 Seattle Finance 1700 Seattle Accounting 1700 Seattle

34
Ma. de Lourdes Rivas Arzaluz

Fundamentos de SQL

En la consulta siguiente se puede observar el uso de la clusula USING a travs del atributo location_id, el cual se encuentra en ambas tablas. Observe que no es necesario anteponerle el nombre de la tabla a la columna cuando se referencia en la sentencia.
SQL> SQL> SELECT l.city, d.department_name FROM locations l JOIN departments d USING (location_id) WHERE location_id = 1400; CITY DEPARTMENT_NAME -------------------- -----------------Southlake IT

A continuacin se muestra el uso de USING en un equijoin, en donde el valor de department_id de la tabla de employees coinciden con los valores del atributo department_id de la tabla de departments.
SQL> SELECT employees.employee_id, employees.last_name, departments.location_id, department_id FROM employees JOIN departments USING (department_id); EMPLOYEE_ID ----------200 201 202 114 119 115 116 117 118 . . . . . . LAST_NAME LOCATION_ID DEPARTMENT_ID ------------------------- ----------- ------------Whalen 1700 10 Hartstein 1800 20 Fay 1800 20 Raphaely 1700 30 Colmenares 1700 30 Khoo 1700 30 Baida 1700 30 Tobias 1700 30 Himuro 1700 30

El uso de la clusula ON permite unir tablas con nombres de columnas distintas, sin embargo, en el ejemplo siguiente los nombres de las columnas son iguales en ambas tablas, pero se estn haciendo referencia con el alias de su correspondiente tabla.

35
Ma. de Lourdes Rivas Arzaluz

Fundamentos de SQL

SQL> SELECT e.employee_id, e.last_name, e.department_id, 2 d.department_id, d.location_id 3 FROM employees e JOIN departments d 4 ON (e.department_id = d.department_id); EMPLOYEE_ID ----------200 201 202 114 119 115 116 117 118 203 . . . . . . LAST_NAME DEPARTMENT_ID DEPARTMENT_ID LOCATION_ID -------------------- ------------- ------------- ----------Whalen 10 10 1700 Hartstein 20 20 1800 Fay 20 20 1800 Raphaely 30 30 1700 Colmenares 30 30 1700 Khoo 30 30 1700 Baida 30 30 1700 Tobias 30 30 1700 Himuro 30 30 1700 Mavris 40 40 2400

La siguiente consulta muestra la unin de una tabla hacia s misma, en el ejemplo se observa que la informacin de un jefe se encuentra en la misma tabla est la informacin de los empleados.
SQL> SELECT e.last_name emp, m.last_name mgr FROM employees e JOIN employees m ON (e.manager_id = m.employee_id); EMP ------------------------Fay Gietz Zlotkey Cambrault Errazuriz Partners Russell Mourgos Vollman Fripp . . . . . . MGR ------------------------Hartstein Higgins King King King King King King King King

36
Ma. de Lourdes Rivas Arzaluz

Fundamentos de SQL

El ejemplo muestra el uso de joins para unir ms de dos tablas.


SQL> SELECT employee_id, city, department_name FROM employees e JOIN departments d ON d.department_id = e.department_id JOIN locations l ON d.location_id = l.location_id; EMPLOYEE_ID ----------198 199 200 201 202 203 204 205 206 100 101 . . . . . . CITY -------------------South San Francisco South San Francisco Seattle Toronto Toronto London Munich Seattle Seattle Seattle Seattle DEPARTMENT_NAME -----------------Shipping Shipping Administration Marketing Marketing Human Resources Public Relations Accounting Accounting Executive Executive

El ejemplo muestra el mismo ejemplo anterior, pero utiliza el signo = para comparar las columnas de las tablas involucradas.
SQL> SELECT employee_id, city, department_name FROM employees e, departments d, locations l WHERE d.department_id = e.department_id AND d.location_id = l.location_id; EMPLOYEE_ID ----------198 199 200 201 202 203 204 205 206 100 101 . . . . . . CITY -------------------South San Francisco South San Francisco Seattle Toronto Toronto London Munich Seattle Seattle Seattle Seattle DEPARTMENT_NAME -----------------Shipping Shipping Administration Marketing Marketing Human Resources Public Relations Accounting Accounting Executive Executive

37
Ma. de Lourdes Rivas Arzaluz

Fundamentos de SQL

Outer Join
Regresa todos los renglones que satisfacen la condicin de unin y tambin los renglones de una tabla para la cual ningn rengln de la otra tabla satisface la condicin de unin. Cuando se unen tablas con las clusulas NATURAL JOIN, USING, u ON da como resultado un inner join. Cualquier rengln que no coincide, no es desplegado en la salida. Para regresar los renglones que no coinciden, se puede utilizar un outer join. Un outer join regresa todos los renglones que satisfacen la condicin del join y adems, regresa los renglones de una tabla para la cual no todos los renglones de la otra tabla satisfacen la condicin del join. Existen tres tipos de outer joins: LEFT OUTER RIGHT OUTER FULL OUTER Para una consulta que realice un outer join de las tablas A y B y regrese todos los renglones de A (left outer join), utilizar: LEFT [OUTER] JOIN en la clusula FROM, o aplicar el operador (+) a todas las columnas de B de la clusula WHERE. Para todos los renglones de A que no coincidan con B, la consulta regresar valores nulos. Un outer join de las tablas A y B, que regresen todos los renglones de B (right outer join), utilizar RIGHT [OUTER] JOIN en la clusula FROM, o aplicar el operador (+) a todas las columnas de A de la clusula WHERE. Para todos los renglones de B que no se relacionen con A, la consulta regresar valores nulos. Un outer join de las tablas A y B, que regrese todos renglones de A y B, mostrando nulos aquellos que no satisfacen la condicin del join (full outer join), utiliza FULL [OUTER] JOIN en la clusula FROM.

38
Ma. de Lourdes Rivas Arzaluz

Fundamentos de SQL

Ejemplos En seguida se observa el manejo de informacin faltante con sintaxis SQL:1999, en este caso, aparecen todos los departamentos an cuando no tienen empleados asignados.
SQL> SELECT d.department_name, e.first_name FROM departments d LEFT OUTER JOIN employees e ON d.department_id = e.department_id ORDER BY d.department_id DESC; DEPARTMENT_NAME --------------------Payroll Recruiting Retail Sales Government Sales IT Helpdesk IT Support Shareholder Services Control And Credit Accounting Accounting Finance . . . . . . FIRST_NAME --------------------

Shelley William John

Con sintaxis de Oracle, la consulta muestra exactamente la misma informacin


SQL> SELECT d.department_name, e.first_name FROM departments d, employees e WHERE d.department_id = e.department_id(+) ORDER BY d.department_id DESC; DEPARTMENT_NAME --------------------Payroll Recruiting Retail Sales Government Sales IT Helpdesk IT Support Shareholder Services Control And Credit Accounting Accounting Finance . . . . . . FIRST_NAME --------------------

Shelley William John

39
Ma. de Lourdes Rivas Arzaluz

Fundamentos de SQL

Para este caso, haciendo uso de la sintaxis SQL:1999, aparecen todos los empleados an aquellos que no tienen departamento asignado.
SQL> SELECT d.department_name, e.first_name FROM departments d RIGHT OUTER JOIN employees e ON d.department_id = e.department_id ORDER BY d.department_id DESC; DEPARTMENT_NAME FIRST_NAME ------------------ -------------------Kimberely Accounting Shelley Accounting William Finance Ismael Finance Daniel Finance John Finance Nancy Finance Luis Executive Steven Executive Lex . . . . . .

Mismo ejemplo anterior, pero con sintaxis de Oracle.


SQL> SELECT d.department_name, e.first_name FROM departments d, employees e WHERE d.department_id (+) = e.department_id ORDER BY d.department_id DESC; DEPARTMENT_NAME FIRST_NAME ------------------ -------------------Kimberely Accounting Shelley Accounting William Finance Ismael Finance Daniel Finance John Finance Nancy Finance Luis Executive Steven Executive Lex . . . . . .

40
Ma. de Lourdes Rivas Arzaluz

Fundamentos de SQL

La consulta muestra el uso de FULL OUTER JOIN con la sintaxis SQL:1999, donde aparecen todos los empleados an aquellos que no tienen departamento asignado y todos los departamentos an aquellos que no tienen empleados asignados. Oracle no tiene sintaxis definida, por lo cual slo se muestra el ejemplo con sintaxis de SQL estndar.
SQL> SELECT d.department_name, e.first_name FROM departments d FULL OUTER JOIN employees e ON d.department_id = e.department_id ORDER BY d.department_id DESC; DEPARTMENT_NAME FIRST_NAME --------------------- -------------------Kimberely Payroll Recruiting Retail Sales Government Sales IT Helpdesk IT Support Shareholder Services Control And Credit Accounting Shelley Accounting William Finance John . . . . . .

Cross Join
Se genera cuando una condicin del join es invlida u omitida. La consulta combina cada rengln de una tabla con cada rengln de la otra tabla, es decir, se genera un producto cartesiano.

Ejemplos Un producto cartesiano se puede generar por la ausencia de condiciones, si consideramos que la tabla de empleados tiene 107 registros y la tabla de departamentos 27 registros, se obtendr una consulta de 2889 registros, debido a que cada rengln de la tabla de empleados se combina con cada una de los renglones de la tabla de departamentos.

41
Ma. de Lourdes Rivas Arzaluz

Fundamentos de SQL

SQL> SELECT last_name, department_name FROM employees CROSS JOIN departments; LAST_NAME ------------------------Abel Ande Atkinson Austin Baer Baida Banda Bates Bell . . . . . . DEPARTMENT_NAME -----------------Administration Administration Administration Administration Administration Administration Administration Administration Administration

Mismo ejemplo anterior, pero con sintaxis de Oracle.


SQL> SELECT last_name, department_name FROM employees, departments; LAST_NAME ------------------------Abel Ande Atkinson Austin Baer Baida Banda Bates Bell . . . . . . DEPARTMENT_NAME -----------------Administration Administration Administration Administration Administration Administration Administration Administration Administration

Ejercicios 7. Instrucciones: Utiliza las tablas del usuario HR y realiza las siguientes sentencias aplicando la sintaxis SQL:1999: 1. Consultar los nombres de los empleados y los nombres de las ciudades donde trabajan. 2. Genera una consulta que muestre los nombres de los empleados y la fecha de inicio y fecha de trmino en cada uno de sus puestos, an aquellos que no tienen la informacin completa. 3. Mostrar una consulta que el producto cartesiano del atributo city y location_id con el atributo country_name.

42
Ma. de Lourdes Rivas Arzaluz

Fundamentos de SQL

8. Conjuntos

Fig. 7.1 Operadores de Conjuntos Ref: Oracle Corporation (2007). SQL Reference. Mxico: Oracle Corporation.

La figura 7.1 muestra la forma de cmo se aplica cada uno de operadores de conjuntos, la parte sombreada en amarillo son los elementos resultantes. UNION [ALL]: contiene los elementos que forman parte de ambos conjuntos. INTERSECT: contiene los elementos que son comunes en ambos conjuntos. MINUS: contiene los elementos que forman parte del primer conjunto pero no del segundo. Para utilizar cualquiera de los operadores de conjuntos cada una de las consultas que involucraran las operaciones de conjuntos debern cumplir las siguientes condiciones: - Mismo dominio (mismo tipo de datos) - Misma aridad (no. de atributos)

Ejemplos A continuacin se muestra un ejemplo del uso del operador UNION, el cual combina los atributos especificados en la primera consulta con los de la segunda consulta, el resultado ser la unin de ambas tablas.

43
Ma. de Lourdes Rivas Arzaluz

Fundamentos de SQL

SQL> SELECT FROM UNION SELECT FROM EMPLOYEE_ID ----------100 101 101 101 102 102 103 104 107 . . . . . .

employee_id, job_id, department_id employees employee_id, job_id, department_id job_history; JOB_ID DEPARTMENT_ID ---------- ------------AD_PRES 90 AC_ACCOUNT 110 AC_MGR 110 AD_VP 90 AD_VP 90 IT_PROG 60 IT_PROG 60 IT_PROG 60 IT_PROG 60

La siguiente consulta utiliza el operador de INTERSECT, y nos muestra informacin que existe tanto en la tabla de employees, como en la tabla de job_history.
SQL> SELECT employee_id, job_id, department_id FROM employees INTERSECT SELECT employee_id, job_id, department_id FROM job_history; EMPLOYEE_ID JOB_ID DEPARTMENT_ID ----------- ---------- ------------176 SA_REP 80

Con el operador MINUS, podemos conocer informacin de los empleados que se encuentra en la tabla job_history, pero que no estn en la tabla de employees.
SQL> SELECT FROM MINUS SELECT FROM EMPLOYEE_ID ----------101 101 102 114 122 176 200 200 201 employee_id, job_id, department_id job_history employee_id, job_id, department_id employees; JOB_ID DEPARTMENT_ID ---------- ------------AC_ACCOUNT 110 AC_MGR 110 IT_PROG 60 ST_CLERK 50 ST_CLERK 50 SA_MAN 80 AC_ACCOUNT 90 AD_ASST 90 MK_REP 20

44
Ma. de Lourdes Rivas Arzaluz

Fundamentos de SQL

Ejercicios 8. Instrucciones: Genere la consulta que muestre los resultados que se estn pidiendo: 1. Selecciona informacin del empleado que se encuentre en la tabla de employees, pero que no est en la tabla de job_history.

45
Ma. de Lourdes Rivas Arzaluz

Fundamentos de SQL

9. Consultas Anidadas
Se les conoce como consultas anidadas o subconsultas y se trata de una tcnica que permite utilizar el resultado de una tabla SELECT en otra consulta SELECT. Permite solucionar problemas en los que el mismo dato aparece dos veces. Especficamente para Oracle no tiene lmites en el nmero de niveles de subconsultas en la clusula FROM. Y se pueden anidar hasta 255 niveles en la clusula WHERE. Se pueden colocar una subconsulta en diferentes partes de una sentencia SQL, incluyendo las siguientes: Clusula WHERE Clusula HAVING Clusula FROM Sintaxis: SELECT expresiones FROM tabla [WHERE condicin] operador (SELECT listaExpresiones FROM tabla); expresiones tabla condicin operador Una expresin vlida SQL Nombre de la tabla donde se van a seleccionar los datos Expresin que deben cumplir los registros Incluye una condicin de comparacin, como: >, = o IN. Las condiciones de comparacin se clasifican en dos clases: operadores de una slo rengln fila (>, =, >=, <, <>, <=) y operadores de mltiples filas (IN, ANY, ALL)

La subconsulta generalmente se ejecuta primero, y su resultado se utiliza para completar la condicin de la consulta principal. Una subconsulta que utilice los valores >,<,>=,... tiene que devolver un nico valor, de otro modo ocurre un error. Para evitar esto, se pueden utilizar los siguientes operadores:

46
Ma. de Lourdes Rivas Arzaluz

Fundamentos de SQL

Operador ANY

ALL

IN

NOT IN

Descripcin Compara con cualquier registro de la consulta. La subconsulta que permite que la comparacin sea cierta. Compara con todos los registros de la consulta. La instruccin resulta cierta si es cierta toda comparacin con los registros de la subconsulta No usa comparador, ya que sirve para comprobar si un valor se encuentra en el resultado de la subconsulta. Comprueba si un valor no se encuentra en una subconsulta.

Propsitos Para definir el conjunto de renglones que sern insertados en una tabla, con un INSERT o un CREATE TABLE. Para definir el conjunto de renglones que se incluirn en una vista, utilizando CREATE VIEW. Para proveer valores para condiciones en una clusula WHERE, HAVING o START en sentencias SELECT, UPDATE y DELETE. Para definir una tabla se coloca el subconsulta en la clusula FROM con si fuera el nombre de la tabla en sentencias INSERT, UPDATE, y DELETE. Para definir el conjunto de renglones que se incluirn en una vista o vista materializada, utilizando CREATE VIEW.

Ejemplos La sentencia DELETE, obtiene la condicin a partir de los resultados que genera la subconsulta.
SQL> DELETE FROM employees e WHERE salary = (SELECT MIN(salary) FROM employees);

47
Ma. de Lourdes Rivas Arzaluz

Fundamentos de SQL

La siguiente consulta despliega informacin de los empleados que tiene su salario mayor o igual al promedio del departamento al que pertenecen. Observe que las subconsultas debern estar encerradas entre parntesis.
SQL> SELECT department_id, last_name, first_name, salary FROM employees e WHERE salary >= (SELECT AVG(salary) FROM employees WHERE e.department_id=department_id) ORDER BY department_id; DEPARTMENT_ID ------------10 20 30 40 50 50 50 50 . . . . . . LAST_NAME ------------------------Whalen Hartstein Raphaely Mavris OConnell Grant Weiss Fripp FIRST_NAME SALARY -------------------- ---------Jennifer 4400 Michael 14000 Den 11000 Susan 6500 Donald 10000 Douglas 10000 Matthew 8000 Adam 8200

A continuacin, se muestra un ejemplo del uso de las subconsultas en la clusula from, donde cada subconsulta proporcionar informacin para la consulta principal.
SQL> SELECT a. department_id "Departamento", a.num_emp/b.total_emp "%Empleados", a.num_sal/b.total_sal "%Salarios" FROM (SELECT department_id, COUNT(*) num_emp, SUM(salary) num_sal FROM employees GROUP BY department_id) a, (SELECT COUNT(*) total_emp, SUM(salary) total_sal FROM employees) b; Departamento -----------10 20 30 40 50 60 70 80 90 . . . . . . %Empleados ---------,009345794 ,018691589 ,056074766 ,009345794 ,420560748 ,046728972 ,009345794 ,317757009 ,028037383 %Salarios ---------,006212934 ,02965264 ,035159559 ,009178198 ,241739622 ,040666478 ,014120305 ,429963287 ,081897769

48
Ma. de Lourdes Rivas Arzaluz

Fundamentos de SQL

Se puede crear una tabla a partir de los datos de la subconsulta. La estructura de la nueva tabla est basada en los campos de la consulta base.
SQL> CREATE TABLE nueva_tabla (id, nombre) AS SELECT employee_id, first_name FROM employees WHERE employee_id = 2;

De manera igual que el ejemplo anterior, se puede crear una vista a partir de una subconsulta.
SQL> CREATE VIEW v_emp_dep1 AS SELECT employee_id, last_name, (salary*1.15) Salario FROM employees WHERE employee_id = 1;

Ejercicios 9. Instrucciones: Utiliza las tablas del usuario HR y realiza las siguientes sentencias: 1. Obtener el campo first_name y last_name de los empleados que tienen el salario mximo de toda la empresa. 2. Crear la tabla tab_sal_dept que contenga informacin del campo department_name, y la suma total de salarios por cada departamento. 3. Generar una consulta con los campos first_name, last_name de los empleados cuyo jefe es JOHN 4. Genere una consulta que muestre el campo first_name de los empleados que trabajan en el departamento Accounting e IT

49
Ma. de Lourdes Rivas Arzaluz

Fundamentos de SQL

10. Manipulacin de datos


SQL es un lenguaje de manipulacin de datos que puede usarse tambin para consultar, pero tambin para modificar los datos de la base de datos. Las instrucciones que permiten modificar los datos son: INSERT: adiciona nuevos registros a una tabla; UPDATE: actualiza datos de una tabla; DELETE: elimina registros de una tabla.

INSERT
Existen dos formas de utilizar la sentencia INSERT. La primera tiene la siguiente sintaxis: Sintaxis: INSERT INTO tabla [(columna1 [, columna2...])] VALUES (valor1 [,valor2]); tabla columna valor Nombre de la tabla en la cual se van a insertar los datos Es el nombre de la columna de la tabla Es el correspondiente valor para la columna

En el caso de que no se especifiquen las columnas, la lista de valores debe seguir el orden de las columnas segn fueron creados (es el orden de columnas segn las devuelve el comando DESCRIBE). La lista de atributos a rellenar se indica si no queremos rellenar todos los atributos. Los atributos no rellenados explcitamente con la orden INSERT, se rellenan con su valor por defecto (DEFAULT) o bien con NULL si no se indic valor alguno. Si algn atributo tiene restriccin de tipo NOT NULL, ocurrir un error si no rellenamos el atributo con algn valor. La segunda forma de la instruccin INSERT permite copiar mltiples registros de una o ms tablas en otra tabla, de la siguiente manera: Sintaxis: INSERT INTO tabla [(columna1 [, columna2...])] SELECT ..; tabla columna SELECT Nombre de la tabla en la cual se van a insertar los datos Es el nombre de la columna de la tabla Puede ser cualquier instruccin vlida. Los renglones que se insertan en la tabla especificada sern idnticos a la tabla de resultados producida por la subseleccin.

50
Ma. de Lourdes Rivas Arzaluz

Fundamentos de SQL

Ejemplos Para insertar un rengln en la tabla departments, se especifican cada uno de los valores correspondientes a cada una de las columnas de la tabla de departments.
SQL> INSERT INTO departments (department_id, department_name, manager_id, location_id) VALUES(70,'Public Relations',100,1700);

Para insertar varios renglones en una tabla, utilice una subconsulta, a partir de la cual tomara los valores de los campos de la consulta base, como se muestra a continuacin:
SQL> INSERT INTO salaes_reps(id, name, salary, commission_pct) SELECT employee_id, last_name, salary, commission_pct FROM employees WHERE job_id LIKE '%REP%';

DELETE
Esta instruccin permite borrar renglones de una tabla especificada. Su sintaxis es: Sintaxis: DELETE [FROM] tabla [WHERE condicin] Tabla Condicin Nombre de la tabla en la cual se van a eliminar los datos Condicin que deben cumplir los registros a eliminarse

Ejemplos La siguiente sentencia elimina renglones de la tabla departments, pero slo de aquellos renglones que cumplen con la condicin.
SQL> DELETE FROM departments WHERE department_name = 'Finance';

51
Ma. de Lourdes Rivas Arzaluz

Fundamentos de SQL

Todos los renglones de la tabla departments son eliminados debido a que no incluye ninguna condicin.
SQL> DELETE FROM departments;

UPDATE
Esta instruccin permite modificar los renglones existentes. Su sintaxis es: Sintaxis: UPDATE tabla SET columna1=valor1 [,columna2=valor2...] [WHERE condicin] tabla condicin valor condicin Nombre de la tabla en la cual se van a eliminar los datos. Condicin que deben cumplir los registros a eliminarse. Es el correspondiente valor o una consulta para una columna. Identifica los renglones que sern actualizados. Puede incluir nombres de columnas, expresiones, constantes, subconsultas y operadores de comparacin.

Ejemplos El siguiente ejemplo actualiza el salario de la tabla employees, pero slo de aquellos renglones que cumplen con la condicin.
SQL> UPDATE employees SET salary = 10000 WHERE salary IS NULL;

Ejercicios 10. Instrucciones: Utiliza las tablas del usuario HR y realiza las siguientes sentencias: 1. Inserta un registro en la tabla departments. 2. Eliminar todos los registros de la tabla employees cuyo campo employee_id sea igual a 1, y a dems el campo salary sea mayor a 1000. 3. Sobre el campo department_name, actualizar el valor de IT a Information Tecnologies 4. Eliminar los registros de la tabla employees donde el campo employee_id se encuentre en la tabla de jobs 5. Aumentar un 5% al campo salary de aquellos empleados que pertenezca a la regin EUROPE.

52
Ma. de Lourdes Rivas Arzaluz

Fundamentos de SQL

Bibliografa
Connolly, Begg (2005). Sistemas de Bases de Datos. Espaa: Pearson Addisson-Wesley. Date C. J. (2001) Introduccin a los Sistemas de Bases de Datos, Mxico: Addisson Wesley Longman. Elmasri Ramez, Navathe Shamkant. (2008). Fundamentos de Bases de Datos. Espaa: Pearson AddissonWesley. Oracle Corporation (2007). SQL Reference. Mxico: Oracle Corporation. Ricardo Catherine. (2009). Bases de Datos. Mxico: Mac Graw Hill

53
Ma. de Lourdes Rivas Arzaluz

You might also like