Docu mento:
ENGUAJE SQL
Unid d :
NIDAD II - SQL
Cantiidad de p ginas:
5
REPASO QL, DDL DML OBJE IVOS •
•
Repasar las sentencia que form n el lengua je de definición de datos (DDL D ta Definition Language) d SQL, es decir, el subc njunto de órdenes que nos permitirán crear o edi ar tablas de la base de d tos. Repasar el lenguaje de consultas para el acceso las tablas de la BD.
MATE IAL: TECN LOGIA ORA LE
TEMA • • • • • • • • • • • • • •
Definición e Datos Creación d Tablas Restricciones de Colum as Restricciones de Tablas Renombrar Tablas Eliminar Tablas Modificar ablas Crear y Borrar Sinónim s Crear Dominios Consultas I Select From Where Diccionario de Datos
“F rmamos ciudadano profesion ales ales para para el el mundo mundo EAM 2010 ® ‐ Armeni Q.
SQL
En realidad SQL n es un leng aje en si, c mo podría ser un lenguaje de prog amación de 3ª gener ción (C, Pascal…), sino que en un subl nguaje orien tado a acceso y manipulación de base de datos elacionales. Con SQL co o única her amienta sól podemos acceder a las bases de datos, pero no tenemos las estructuras típicas de u lenguaje de programaci n. Una b ena analogí a podría ser un sistema perativo. El interfaz de comandos d un SO nos da todo lo que necesitamos para acceder al istema de f icheros, per sólo pode os hacer eso, acced r a ficheros. SQL actúa de la misma m nera, nos d todo lo que necesitamos para acceder a bases e datos, pero no podem s hacer más. Se dic que SQL es structurado porque trab ja con conju ntos de resul tados (result set) abstractos como nidades co pletas, Un conjunto de r sultados es el esquema ásico de un tabla: N filas x N columnas; este squema se trata como n todo y e la idea pri cipal de SQ L, a la hora de recup rar un conju to de result dos, éste se trata de la isma forma tenga el número de filas que tenga 0‐N) y tenga el número d columnas que tenga (1‐ ). Adem s SQL es consistente, sto significa que los " stilos" de l s distintas sentencias son unifor es, por lo q e el aprendizaje es rápid .
El lenguaje de d finición de datos ( DL) El DDL (Data Definition Language) es el conj nto de sentencias que está orientad s a la creaci n, modificación y configuración de objetos e base de d tos. Entre sus principal s funciones se tienen: • Definir y cr ar una nuev tabla. • Suprimir una tabla que a no se necesita. • Cambiar la definición de una tabla existente. • Definir una tabla virtual (o vista) de datos. • Construir un índice para hacer más r pido el acce o a una tabl . • Controlar el almacenamiento físico de los datos p r parte del S GBD.
Tipos e datos:
“F rmamos ciudadano profesion ales ales para para el el mundo mundo EAM 2010 ® ‐ Armeni Q.
Oracle maneja tipos de datos para manejar desde núm ros hasta o jetos como fotos, archivos, cada dato se debe specificar de una manera especial: Los valores alfanuméric s van encerrados entre c milla simple: 'Alfanumérico' Los valores numéricos s n número simples: 123 Las fechas an encerrad s entre comillas simples: '1/12/2000' Los valores binarios no pueden ser representados (son fotos, videos…)
Los dif erentes tipos de datos qu maneja Oracle son los si guientes:
Tipo de dato CHAR(b) Almac na cadenas de caracteres de longitud fija, desde a 2.000 bytes de ocupa ión. El núm ro de car cteres que se pueden al acenar se ri e según la si guiente fórm ula. nº aracteres = bytes / char un byte, por lo que coincide el úmero de c Si se introduce un alor de 10 c racteres en 90 posiciones restantes. Así la si uiente expr
cter set Par a ASCII, el c njunto de c racteres ocupa racteres máximos con la ocupación del tipo de dato. n campo de CHAR(100), se rellenará on espacios las sión es cierta:
' ola pepe' = ' ola pepe
'
Si se intenta introducir un valor demasiado grande p ra el camp , se intentará eliminar los espaci s finales, y si cabe sin es acios, se introduce. Si aú así no cabe se retorna un error.
Tipo de dato VARC AR2(b) Almac na cadenas de caracteres de longitu variable. Si se define u a columna e longitud 100 bytes, y se introduce en ella un alor de 10 bytes, la colu na ocupará 10 y no 100 como hacía con el tipo de dato CHAR.
Tipo de dato VARC AR(b) En Or cle10g es equivalente a VARCHAR2
Tipo de dato NCHAR(b) Almac na un valor alfanumérico de longitud fija con posi ilidad de ca bio de jueg de caracteres. Puede almacenar t nto caracteres ASCII, EBCDIC, UNICODE…
Tipo de dato NVARCHAR2(b) Almac na un valo alfanuméri o de longit d variable on posibilidad de cambio de juego de caract res. Puede almacenar ta to caracteres ASCII, EBCDIC, UNICODE…
Tipo de dato NUM ER(p,s)
“F rmamos ciudadano profesion ales para el mundo EAM 2010 ® ‐ Armeni Q.
Almac na valores uméricos e punto flotante que pueden ir desd 1.0 x 10 130 hasta 9.9…(38 nueve )… 9 x 10125. El almacena iento interno de los valo res numéric s en notació científica: ‐
Mantisa 10exponente La ma tisa (parte e una repre entación en punto flotan te que contiene los dígit s significati os del número a representar) puede conten r cualquier número, entero o deci al, positivo o negati o. El expo ente podrá contener ualquier nú mero entero, positivo o negativo. El parámetro “p” indica la precisi n (número e dígitos co ntando los ecimales) q e contendrá el número como má imo. Oracle garantiza lo datos con recisiones e 1 a 38. El parámetro “s” indica la escala, e to es, el m ximo de dí itos decimales. Hay qu tener en cuenta que una colum a definida UMBER(10,5), podrá contener com máximo c alquier nú ero siempr y cuand el número de dígitos enteros más el número de ígitos decimales no supere 10 (y no 15). La esc la puede ir de ‐84 a 127. Para definir número enteros, se puede omitir el parámetro s o bien poner un 0 n su lugar. Se puede e pecificar un a escala ne ativa, esto lo que hace es redon ear el núm ro indicado a las posiciones indicad s en la escala. Por ejemplo un núm ro definido como NUMBER(5,‐2), redondeará siempre a c ntenas. Así si intentam s introducir el valor 1355, en realidad se almacenará 1400.
Tipo de dato FLOA (b) Almac na un número en punto decimal sin restricción de dígitos deci ales. El par la pre isión binaria máxima qu puede moverse en el ra ngo 1 a 126.. Si se emite 126. Una columna FLOAT(126) s equivalen e a una colu mna NUMB R(38), aunq está e que la col mna NUMB R no podrá contener decimales y la columna FL cualquier escala.
metro b indica el defecto s rá e la diferencia AT si y en con
Tipo de dato DATE Almac na un valor de fecha y hora. Par un tipo de dato DATE, racle almacena interna ente los siguiente datos: ƒ Siglo ƒ Año ƒ Mes ƒ Día Hora ƒ Minuto ƒ Segundo El f ormato por defecto de las fech s es: 'DD‐ MON‐YY Y' Esto es: Dos dígitos para el dí a Las tres primeras siglas del año (de ende del idioma instalado). Cuatro dí gitos para el año. Por ejemplo: '1‐JAN‐2001' ó ' ‐DEC‐1943' Este formato pued ser alterado en cualquie momento. Intern mente un f cha se almacena como l número d e días desde cierto punt de inicio ( or ejemplo el año 0). Esto permit que las fechas puedan ser tratadas en operaciones aritméti as normales:
“F rmamos ciudadano profesion ales para el mundo EAM 2010 ® ‐ Armeni Q.
'1‐JAN‐2001' + 10 = '11‐JAN‐2001' '1‐JAN‐200 ' ‐ 1 = '31‐DEC‐1999' '10‐MAY‐2000' ‐ '1‐ MAY‐2 00' = 9
Tipos e datos bin rios Permiten almacenar informació en formato "crudo", val res binarios tal y como s almacenan en el disc duro o como residen en memoria. Estas columna se pueden tilizar tanto para almace ar grand s cantidade de datos (hasta 4Gb.), como para al macenar dir ctamente cualquier tipo de ficher (ejecutables, sonidos, ideos, fotos documentos Word, lib erías…) o para transportar datos de una base de datos a tra, ya que el formato b inario es el único formato común entre cualquier sistema i formático.
Tipo de dato LONG Almac na caracteres de longi ud variable hasta 2 G . Este tipo de dato s soporta p ra compatibilidad con versiones anteriores. En racle8 y sig uientes versi ones se deben usar los ti os de datos CLOB y NLOB para alm cenar grand s cantidade de datos alf anuméricos.
Tipo de dato ROWID Repre enta una dirección de la ase de datos, ocupada p or una única fila. El ROWID de una fila es un identificador único para una fila dentro e una base de datos. No hay dos filas con el mis o ROWI . Este tipo d dato sirve para guardar unteros a filas concretas. El ROWID s compone d :
‐Número de datafile donde se al acena la fil (se pueden ver en DBA _DATA_FILE ) ‐ Direcció del bloque onde está la fila ‐Posición dentro del loque Siemp e que queramos obtener una fila de l firma más ápida posible, debemos acerlo a tra és de su ROWID. Un so típico suele ser obte er un listad o de ROWIDs con un SELECT, y desp és acced r a cada una de las filas directamente on la condición del ROWIID.
Sente cias sobre T blas Create Table Crea una tabla en l base de dat s, sintaxis General de la entencia CR ATE TABLE: CREATE TABLE nombre_tabla( COLU NA TIPO [N T NULL], COLU NA TIPO [N T NULL], ... {CONS RAINT nom re_clave_pr maria PRIM RY KEY (columnas_clave)} {CONS RAINT nom re_clave_fo ánea FOREI N KEY(colu nas_clave) EFERENCES abla_detalle( colum as_clave ) {ON D LETE CASCA E} } )
“F rmamos ciudadano profesion ales para el mundo EAM 2010 ® ‐ Armeni Q.
Un ejemplo de la u ilización de esta sentenci es:
Figur 1 Tabla Factura
La cre ción de la tabla FACTURA, definida en la figura 1, s ría la siguie te: CREATE TABLE FAC URA( REFER NCIA VARC AR2(10) NO NULL, DESCRIPCION VAR HAR2(50), C_PAI NUMBER(3), C_CLIENTE NUMBE (5), IMPO TE NUMBER 12), CONSTRAINT PK_F CTURA PRIMARY KEY( RE ERENCIA ) CONSTRAINT FK_CLIENTE(C_PAI ,C_CLIENTE) REFERENCE CLIENTE(C_PAIS, C_CLIE TE) ON DELETE CASCA E);
Restri ciones de columnas: NOT NULL: La colu na no permitirá valores ulos. CONS RAINT: Per ite asociar u nombre a una restricción. DEFAULT valor: La columna tendrá un valor por defecto. El SBGD utiliza este valo cuando no se especi ica un valor para dicha columna. PRIM RY KEY: Per ite indicar que esta colu na es la cla UNIQ E: Obliga a ue los valor s de una col mna tomen con ig al valor). Se implementa reando un í dice para di CHECK (condición): Permite indi car una condición que de
e primaria. valores únic os (no puede haber dos filas ha(s) colum a(s). e de cumpli esa column .
Restri ciones de tablas:
“F rmamos ciudadano profesion ales para el mundo EAM 2010 ® ‐ Armeni Q.
PRIM RY KEY (columna1, columna2...): Permite indic ar las colu nas que f rman la cl ve primaria.
FOREI N KEY (col mna1, colu na2....) REFERENCES NombreTabla: Indica las columnas que son clave a jena referenciando a una clave candid ta de otra t bla. UNIQ E (columna , columna2...): El valor combinado de una o varias columnas es único. CHECK (condición): Permite indicar una condición que deben cumplir las filas de la tabla. Puede afecta a varias col mnas. EJEMPLOS areas( odigo, nom re, departa ento) (código es la clave primaria) departamentos(co igo_dpto, nombre) (códi o_dpto es la clave primaria) La tabla areas tiene una clave aj na areas.departamento ‐ departame tos CREATE TABLE areas ( codigo char(3) not ull, nombre char(55) n t null, departamento char(3) not null, Primary key(codigo), Foreig key(depart mento) REF RENCES departamentos ON DELETE SET NU L); ON DELETE Set Null Significa q e si se borra algún dep rtamento d la tabla departamentos el campo departamento de las fila de la tabla reas que le r everenciaba se pone co o Null. ON U DATE CASCADE Signific que si se modifica el código_dpto de una f ila de la tabla departamento, también se modificara en las ilas de la tabla áreas que le referencian. CREATE TABLE dep rtamentos ( codigo _dpto char(3) not null, nombre char(40) n t null, Primary key(codigo dpto) );
Reno brar una ta la: RENA E TABLE TO
Eliminar una tabla de la base de datos: DROP ABLE [C SCADE, RES RICT] Ejemplos: – DRO TABLE DEP RTAMENTO CASCADE (La tabla se borra, sí como las posibles restricciones relat ivas a esta tabla)
“F rmamos ciudadano profesion ales para el mundo EAM 2010 ® ‐ Armeni Q.
– DRO TABLE DEP RTAMENTO RESTRICT (La tabla se borra s lo si no se h ce referencia a ella en ni nguna restricción, p.e. en la definición de claves ajenas)
Ver la descripción e una tabla: Para v r un resumen de la definición de una abla se utiliz a el siguient comando:
DESCRIBE nombre tabla;
Modificar una tabl ALTER TAB E: La sentencia Alter able se utiliza para cam iar una tabl a existente, dentro de la tabla pode os Add (añadir) o Dro (borrar) col mnas y rest icciones (PRIMARY KEY, FORING KEY, NIQUE, CHECK CONSTRAINT) o m dificar (modify) campos. u sintaxis es: ALTER TABLE { ADD [NOT NU L] MODI Y [DEFAULT valor | DROP DEF UL| tipo de ato] DROP nombre col mna> [CASCADE | RESTRICT] ADD [ RIMARY KEY (nombre col mna) | FOREI N KEY (nombre columna) REFERENCE nombre_ta la | UNIQU (nombre colum a) | CHECK (condición) DROP ONSTRAINT nombre‐restricción [CAS ADE| RESTR ICT] EJEMPLOS Agreg r a la tabla areas el camp Responsable de tipo char(30) alter t ble areas A D responsable char(30) n t null; Modificar el campo nombre de l tabla departamentos a c har(50) alter t ble departa entos MODIFY nombre char(50);
EJERCICIOS (D FINICIÓN DE DATOS) Utiliza do oracle 10g crear las tablas correspondientes al siguiente esquema d relacional relativo la gestión d los préstamos de una bi lioteca: Libro (LI_id, autor, itulo, editor, clase, precio) Usuario (carnet, nombre, dirección, ciudad) Clase (CL_id, tiemp _de_presta o) Prestamo (numero, carnet, fech _inicio, fecha_fin) Ciudad(código, no bre)
“F rmamos ciudadano profesion ales para el mundo EAM 2010 ® ‐ Armeni Q.
base de d to
La información de la tablas refe idas debe manejarse en ascada para la actualización y en setnull para la eliminación. 1. Cr e las tablas el esquema anterior. 2. Agregar a la ta la Usuario el campo Fech _Ingreso (q e sea obligatorio). 3. Agregar a la tabla Libro el campo Prestado (que se obligatorio , y asignarle por defecto el valor 1. 4. Agregar al cam o clase la condición de q e debe ser u n entero ent re 0 y 5.
“F rmamos ciudadano profesion ales para el mundo EAM 2010 ® ‐ Armeni Q.
LENGUAJ DE MANIPILACIO DE DATOS DML El DDL (Data Definition Language) es el conj nto de sentencias que está orientad s a la creaci n, modificación y conf iguración de objetos en b se de datos. El DDL es el subco junto más extenso dent o de SQL as í que sólo vamos a hacer una referencia rápida a algunas se tencias.
Ventas Referencia 1 2 3 4 5 6
Codigo_Cliente 1 2 1 3 4 2
Codigo Ciudad 12 11 10 11 13 12
Total 50000,12 34343,00 23444,12 2372382, 3232323, 1 234000,0
Figura 2 Tabla Ejemplo de ventas
Instru ción INSERT La sen encia INSER nos permit introducir nuevas filas e una tabla d base de datos. La sintaxis básica e : INSER INTO tabla[ campos )] VALUES( lista de va ores ); Los nombres de los campos son opcionales y si no se pon en se supon rá que se agregarán valores a todos los campos de la tabl en su ord n original,si se ponen, se podrán indicar cualquier número de column s, en cualquier orden. La list de valores es el registro ue se insertará en la tablla. Los tipos e datos deb n coincidir con los ca pos indicados o con la efinición de la tabla si omitimos el n ombre de los atributos. as colum as que no s incluyan se inicializarán on NULL, (si no se ha definido valor en el DEFAULT . Ejemplo: INSER INTO FACT RA VALUES('A111', 'Fa tura nueva', 1, 5, 50000); Existe otra sintaxis ara insertar el resultado de una consu lta: INSER INTO tabla{ campos )} SELEC . . . Este ti o de INSERT permite introducir un gr n número d e registros e una sola sentencia, al igual que con el INSERT normal, los ipos de dat s del SELEC deben coincidir con los de los cam os indica os en la sen encia. Ejemplo: INSER INTO FACT RA(C_PAIS, _CLIENTE) (SELECT C_PAIS, C_ LIENTE FRO CLIENTE);
“F rmamos ciudadano profesion ales para el mundo EAM 2010 ® ‐ Armeni Q.
Instru ción DELETE La sentencia DELETE nos permite eliminar n evas filas en una tabla d e base de datos conform a una condición, es equivalente al SELECT, per en vez de m ostrar las fil s que cumplan la condici n, las eli ina. Su sintaxis es: DELET {FROM} tabla {WHE E condición}; Si se omite la cláus la WHERE s borrarán todas las filas d e la tabla, las condicione pueden ser las mismas que las aplicadas en una sentencia S LECT.
Instru ción SELECT La sen encia SELEC es la encargada de la recuperación (s lección) de atos, con cualquier tipo e condición, agrupación u ordena ión. Una sentencia SELECT retorna u único conjunto de resultados, por lo que podrá ser aplicada en cualquier lugar donde se espere un conjunto de resultado s. La sintaxis básica e : SELEC [campos, o eración, fun ión] FROM [tablas|consulta] WHER condición GROU BY columnas de agrupación HAVING condición grupada ORDE BY columnas de ordenación; Todas las cláusulas son opcional s excepto S LECT y FRO .
Clausulas en el Sel ct: Estas se scriben después del Sele t y antes del from SELEC [ALL | DISTINCT | UNIQUE ] : Lista de ombre de c lumnas o e presiones q e se desean mostrar, deben estar separadas po comas. Ejemplo: Select codigo_cliente f om ventas; Codi o_Cliente 1 2 1 3 4 2
“F rmamos ciudadano profesion ales para el mundo EAM 2010 ® ‐ Armeni Q.
*: indica que mue tre todos los campos d las tablas
resultados del from, este no pued ir
acompañado de ni gún nombre de campo. Ejemplo: Select * from ventas;
Ventas Referencia 1 2 3 4 5 6
Codigo_Cliente 1 2 1 3 4 2
Codigo Ciudad 12 11 10 11 13 12
Total 50000,12 34000,00 23500,12 23750000,2 3200323, 1 234000,0
DISTINCT: Elimina l s filas duplic adas en el resultado de la consulta. Ejemplo: SELEC DISTINC co igo_cliente FROM ventas; Codi o_Cliente 1 2 3 4
UNIQ E: es igual q e DISTINCT. ALL: uestra todo los resultados generados por la consulta, este e el valor po defecto de un select no es necesario escribirlo. NOTAS: ‐ Las c lumnas ambiguas se preceden del no bre de la tabla: . columna> ‐ * refiere a todas l s columnas e todas las tablas.
Cláusula WHERE. Sirve para indicar la condición q WHER 400 0 and total
e deben cu plir las filas resultantes. or una o v rias expresiones condicionales conectadas por los OT. Una ex resión condicional tiene una de las f rmas indica as
300000
“F rmamos ciudadano profesion ales para el mundo EAM 2010 ® ‐ Armeni Q.
Codi o_Cliente 1 2
“F rmamos ciudadano profesion ales para el mundo EAM 2010 ® ‐ Armeni Q.
“F rmamos ciudadano profesion ales para el mundo EAM 2010 ® ‐ Armeni Q.
Figura 3. Operadores ló icos
CLAUSULA ORDER BY: Esta clau ula se utiliza para orden r el resultado de una consulta según l o las col mnas seleccionadas, est clausula se scribe al fin l de la consulta. Sintaxis: … ORDER Y CAMPO1 [DESC|ASC][, AMPON [DE SC|ASC]]. (valor por defecto es ASC) Si se desea ordenar más de un campo, estos se separan p or coma, cuando esto ocurre el resultado de la consulta ordena teniendo en cuenta el primer campo indicado, luego sin desorganizar este campo, ordena el siguiente, y así hasta llegar al ultimo atriibuto. Ejemplo: Mostrar l s datos de las ventas, o denando po r cliente de forma desce dente y por el total de la factura en forma ascendente. SELEC * FROM ventas ORDE BY codigo_cliente DESC, total ASC;
Ventas Referencia Codigo_Cliente Codigo Ciudad Total 5 4 13 3200323, 1 4 3 11 23750000,2 2 2 11 34000,00 6 2 12 234000,0 3 1 10 23500,12 1 1 12 50000,12 En este ejemplo s observa que primero s ordena de forma descendente el c digo_cliente, y despu s se ordena el total de fo ma descendente, sin des rdenar el codigo_cliente.
CLAUSULA GROUP BY: Una consulta con GROUP BY se utiliza para c nsiderar los registros cu os ciertos campos ti nen el mis o valor, y procesarlos de la misma manera, para contarlos, sumarlos, hacer la media…, esto quiere q e los valore s iguales se agrupan en uno solo, or ejemplo para calcular el total c mprado po cada client , se deben omar los dif erentes valores del ca po codigo_ liente y mostrar un valor. Las fu ciones más omunes que se pueden utilizar son: Max(c mpo): calcula el máximo valor almacenado en el campo indi ado, con re pecto al grupo descrito. Min(c mpo): calcula el mínimo valor almacenado en el campo indicado, con re pecto al grupo descrito. Sum(c mpo): Sum los valores almacenados en el cam po indicado, que pertenezcan al grupo especi icado. Avg(campo): calcul el valor me io o prome io de los vallores almacenados en el campo indica o, que pertenezcan al grupo especificado. la función que se desee calc lar se debe escribir en el SELECT unto con l s campos que conformarán el grupo (de necesitarse), en la clausula GR UP BY que a después del FROM O EL WHER (de haber condición) se specifica el los atributo s que gener n el grupo.
“F rmamos ciudadano profesion ales para el mundo EAM 2010 ® ‐ Armeni Q.
Sintaxis: SELEC [campos|funcion] FROM tabla [WHE E condicion] GROU BY campos grupo; Si en el SELECT solo se especifica la función no se escribe l GROUP BY. Ejemplos: calcular el total compra o por cada cliente. (el gr po lo forma el codigo_cli nte) SELECT codigo_cliente, sum(total) FROM ventas GROUP BY odigo_cliente; odigo_Cliente Sum(total) 1 73500 ,24 2 26800 0,00 3 23750 000,2 4 32003 23,01
Calcular el otal vendido (la función es el único ca po a mostr r, no hay gr pos) SELECT su (total) FROM ventas; Sum(total) 735 0,24 268 00,00 237 0000,2 320 323,01 272 1823,45
CLAUSULA HAVIN : No se pueden usar fu ciones de a grupación en la cláusula WHERE de un SELEC . O sea, no se puede usar el WHE E para, de forma selectiva eliminar datos que no intere an del resultado de una consulta agru ada. Sintaxis: SELEC [campos|funcion] FROM tabla [WHE E condicion] GROU BY campos grupo HAVING function c ndición valo ; Ejemplo: Mostrar el total comp ado por cad cliente, per o que super n un 10000 0 de pesos. (el grupo lo forma el c digo_cliente) SELEC codigo_clie te, sum(total) FROM ventas GROU BY codigo_ liente;
“F rmamos ciudadano profesion ales para el mundo EAM 2010 ® ‐ Armeni Q.
odigo_Cliente 3 4
Sum(total) 23750 000,2 32003 23,01
“F rmamos ciudadano profesion ales para el mundo EAM 2010 ® ‐ Armeni Q.
CONSULTAS CON COM INACION EN TRE TABLA (JOIN)
Todas las explicaci nes que est n a continu ción utilizan las siguient s dos tablas para ilustrar el efecto de diferentes clases de u iones JOIN. Tabla mpleado Apellido Raffer y 31 Jordán Steinberg Róbinson Smith Gaspa
IDDepartamento 1 3 3 4 4 6
Tabla epartamento Nomb eDepartamento Venta Ingeni ría Produ ción Marketing
IDDep rtamento 31 33 34 35
La tabla Empleado contiene a los empleados con el núm ro del departamento al que pertenec n; mientras que la tabla Departamento, contie e el nombre de los depa tamentos de la empresa, se puede notar que e iste un empleado que ti ne asignado un número de departamento que no se encue tra en la tabla Departa ento (Gasp r), igualmente, en la ta la Departa ento existe un departamento al cual no pertenece emple do alguno ( Marketing). Esto servirá para presentar algunos ejemplos ás adelante.
Combinación inter a (INNER JOIN o JOIN) Con esta operación es calculado el producto cruzado de t odos los registros; así cada registro en la tabla es combinado con cada registro de l tabla B; per o sólo perm necen aquellos registros en la tabl combinada que satisfac n las condiciones que se especifiquen. Este es el tipo de JOIN ás utiliza o por lo que es considerado el tipo de combinació predeterminado. SQL e pecifica dos formas dife entes para expresar est s combinaciiones. La pri era, conocida como explícita usa la palabra J IN, mientras que la segunda es implí ita y usa ',' ara separar las tablas a combinar n la sentencia FROM de la declaració n SELECT. Entonces siem re se gener el produ to cruzado del cual se seleccionan las combinaciones que cumplan lo que indica la sentencia WHERE. Es necesario tener especial cuidado cuando e combinan columnas con valores nulos NULL ya que el val r nulo no se combina on otro val r o con ot o nulo, excepto cuando se le agre an predic dos tales como IS NULL o IS NOT NUL .
“F rmamos ciudadano profesion ales para el mundo EAM 2010 ® ‐ Armeni Q.
Como ejemplo, la iguiente consulta toma todos los registros de la abla Empleado y encuentra todas las combinaciones en la tabla Depart mento. La s entencia JOI compara l s valores en la colum a IDDepartamento en a bas tablas. uando no e xiste esta co respondencia entre algu as combi aciones, éstas no se muestran; es decir que si el n mero de de artamento e un empleado no coincide con los números e departamento de la abla Departamento, no se mostrará el emple do con su respectivo departamento en la tabla res ultante. Las dos consultas siguientes son similares, y se realizan de manera explicita (A) e implícita (B). A. Eje plo de la se tencia INNE JOIN explícita: SELEC * FROM empleado IN ER JOIN de artamento N empleado.IDdepartam nto = depar amento.IDd partamento B. Eje plo de la se tencia JOIN implícita: SELEC * FROM empleado, epartamento WHER empleado.IDdepartamento = departamento.IDDepartamento Result do Empleado.Apellido
Empleado.IDd partamento
departamento.N ombreDepartamento
departam nto.IDDepartamento
Smith Jordán Róbinson Steinberg Raffer y
34 33 34 33 31
Producción Ingeniería Producción Ingeniería Ventas
34 33 34 33 31
El empleado Gaspar y el depart mento de Marketing no on presentados en los resultados ya que ninguno de éstos ti ne registros correspondi ntes en la o tra tabla. No existe un de artamento con número 36 ni exist un empleado con número de identific ación 35. A la combinación q e utiliza co paraciones entro del pr dicado JOIN se le llama t eta‐ join. C. Eje plo de com inación tipo theta: SELEC * FROM empleado IN ER JOIN de artamento N empleado.IDDepartamento < departamento.IDD epartament
“F rmamos ciudadano profesion ales para el mundo EAM 2010 ® ‐ Armeni Q.
Natur l (Natural join): Es un especializa ión de la combinación de equivalen ia, anterior ente mencionada. En este caso se comparan todas las columnas que tengan el mismo nombr en ambas tablas. La tabla result nte contiene sólo una columna por ca a par de col mnas con el mismo nombre. D. Eje plo de com inación natural: SELEC * FROM empleado ATURAL JOI departamento El resultado es un oco diferente al de el ej mplo D, ya ue esta vez la columna I Departame to se mu stra sola un vez en la ta la resultant . Empleado.Apellido
Empleado.I departamento
departamento.Nombre epartamento
Smith Jordán Róbinson Steinberg Raffer y
34 33 34 33 31
Producci n Ingenierí a Producci n Ingenierí a Ventas
El uso de esta la sentencia NAT RAL puede producir res ltados ambiguos y generar problema si la bas de datos cambia, porq e al añadir, quitar, o re nombrar las columnas, puede perder el sentid la senten ia; por est razón es preferible e presar el predicado usando las otras expresiones nombradas anteriormente (ejemplos A y B).
Cruza a (Cross joi ): Presenta el produc o cartesiano de todos los registros de las dos tablas, el código SQL para realizar este producto cartesiano enu cia las tablas que ser n combinadas, pero no incluye al ún predic do que filtr el resultado. E. Eje plo de combinación cruz da explícita: SELEC * FROM empleado ROSS JOIN departamento F. Eje plo de combinación cruz da implícita: res SELEC * FROM empleado, epartamento; Empleado.Apellido
Empleado.IDd partamento
departamento.N ombreDepartamento
departam nto.IDDepartamento
Raffer y
31
Ventas
31
“F rmamos ciudadano profesion ales para el mundo EAM 2010 ® ‐ Armeni Q.
Jordán Steinberg Smith Róbinson Gaspa Raffer y Jordán Steinberg Smith Róbinson Gaspa Raffer y Jordán Steinberg Smith Róbinson Gaspa Raffer y Jordán Steinberg Smith Róbinson Gaspa
33 33 34 34 36 31 33 33 34 34 36 31 33 33 34 34 36 31 33 33 34 34 36
Ventas Ventas Ventas Ventas Ventas Ingeniería Ingeniería Ingeniería Ingeniería Ingeniería Ingeniería Producción Producción Producción Producción Producción Producción Marketing Marketing Marketing Marketing Marketing Marketing
31 31 31 31 31 33 33 33 33 33 33 34 34 34 34 34 34 35 35 35 35 35 35
Esta clase de combinaciones so usadas poc s veces, generalmente s les agregan condiciones de filtrad con la sent ncia WHERE para hallar r sultados es ecíficos.
Combinación externa (OUTER J IN): Mediante esta operación no se requiere que cada registr o en las tablas a tratar tenga un registro equivalente en la tra tabla. El registro es mantenido e n la tabla c mbinada así no existe otro registro que le corr sponda. Este ti o de operación se subdi ide dependi ndo de la t bla a la cual se le admitirán los regist os que n tienen correspondenci , ya sean de tabla izqui erda, de ta la derecha, o combinación compl ta.
De tabla izquierda (LEFT OUTER JOIN o LEFT JOIN): El resultado de est operación iempre contiene todos lo s registros d e la tabla de la izquierda (la primera tabla que e menciona en la consulta), aun cuan do no exista un registro correspondie te en la t bla de la de echa, para u o de la izquierda. La sentencia LEFT UTER JOIN retorna la pa eja de todo los valores de la tabla izquierda con los valore de la tabla de la derecha correspon ientes, o re torna un val r nulo NULL en caso de no corres ondencia.
“F rmamos ciudadano profesion ales para el mundo EAM 2010 ® ‐ Armeni Q.
A diferencia del resultado presentado en los ejemplos A y B (de combinación inter a) donde no se mostr ba el empleado cuyo de artamento o existía; en el siguiente ejemplo se presentarán los emple dos con s respectivo departame to, e inclu ive se presentará el empleado, cuyo departamento no existe. G. Eje plo de tabla izquierda para la combin ción extern : SELEC distinct * FROM empleado LEFT OUTER J IN departa ento N empleado.IDDepartamento = departamento.IDD epartament ; Empleado.Apellido
Empleado.IDd partamento
departamento.N ombreDepartamento
departam nto.IDDepartamento
Jordán Raffer y Róbinson Smith Gaspa Steinberg
33 31 34 34 36 33
Ingeniería Ventas Producción Producción NULL Ingeniería
33 31 34 34 NULL 33
de tabla derecha ( IGHT OUTER JOIN o RIGHT JOIN): Esta operación inv rsa a la anterior; el resultado de est a operación siempre contiene todos los registros de la tabl de la derec a (la segun a tabla que se menciona en la consul a), aun cuando no exi ta un registro correspondiente en la t bla de la izq ierda, para no de la derecha. La sentencia RIGHT OUTER JOIN retorna la pareja de tod s los valore de la tabla erecha con los valore de la tabla de la izquier a correspondientes, o re torna un valor nulo NUL en caso de no corres ondencia. H. Eje plo de tabla derecha para la combina ión externa: SELEC * FROM empleado IGHT OUTER JOIN depart mento N empleado.IDDepartamento = departamento.IDD epartament Empleado.Apellido
Empleado.IDd partamento
departamento.N ombreDepartamento
departam nto.IDDepartamento
Smith Jordán Róbinson Steinberg Raffer y NULL
34 33 34 33 31 NULL
Producción Ingeniería Producción Ingeniería Ventas Marketing
34 33 34 33 31 35
En est caso el áre de Marketing fue presentada en los r sultados, aunque aún no hay emplea os registrados en dich área.
“F rmamos ciudadano profesion ales para el mundo EAM 2010 ® ‐ Armeni Q.
combi ación completa (FULL O TER JOIN): Esta operación pr senta los resultados de tabla izquierda y tabla derecha aunque no ten an corres ondencia e la otra tabl . La tabla combinada co tendrá, ent nces, todos los registros de ambas tablas y pre entará valor s nulos NUL s para regist ros sin parej . I. Ejemplo de combinación externa completa: SELEC * FROM empleado FULL OUTER JOIN departam nto ON empleado.IDDepartamento= departamento.IDDepart mento
Empleado.Apellido
Empleado.IDd partamento
departamento.N ombreDepartamento
departam nto.IDDepartamento
Smith Jordán Róbinson Gaspa Steinberg Raffer y NULL
34 33 34 36 33 31 NULL
Producción Ingeniería Producción NULL Ingeniería Ventas Marketing
34 33 34 NULL 33 31 35
Como se puede notar, en este caso se encuentra el em leado Gasp r con valor ulo en su á ea corres ondiente, y se muestra además el departamento de Mark ting con valor nulo en los emple dos de esa rea. Algun s sistemas de bases de d tos no soportan esta funcionalidad, pero esta puede ser emul da a trav s de las com inaciones d tabla izquierda, tabla derecha y de la setencia de nion union. J. El mismo ejemplo puede expr sarse así: SELEC * FROM empleado LE T JOIN departamento N empleado.IDDepartamento = departamento.IDD epartament UNIO SELEC * FROM empleado RI HT JOIN departamento N empleado.IDDepartamento = departamento.IDD epartament WHER empleado.IDDepartam nto IS NULL
ALG NAS FUN IONES Q E EXISTE EN SQL “F rmamos ciudadano profesion ales para el mundo EAM 2010 ® ‐ Armeni Q.
Entre las funciones que mane an cadenas de caracteres se encue ntran las siguientes:
cad1 cad2: Concatena las cadenas de c racteres. L s nombres de columnas son cadenas validas. LENG H (cadena): Encuentra la longitud e la caden . SUBSTR (cad,posic_inicial [,long]):
E cuentra la subcadena de "lon " caracter s,
empe ando en "p sic_inicial". UPPER (cadena):
ambia los c aracteres minúsculas p r mayúsculas.
LOWE (cadena): Cambia los caracteres
ayúsculas or minúsculas.
TO_N MBER (cad na): Convierte los datos carácter (compuesto s por números) en val re numé icos. TO_C AR (cadena): Conviert un campo numérico e tipo carácter. LPAD (cadena,lo g_n [,cara ]): especificado
(p r defecto
Rellena la izqui erda de la cadena con el "car c"
lancos), h sta que la
longitud de la cadena nueva sea
"long_n". RPAD (cad,long_n [,caract]): Rellena la
erecha de la cadena c on el "carac" especificado
(por defecto blan os), hasta que la longit d de la cad ena nueva s ea "long_n". NVL ( ad1,cad2): Si cad1 es nulo retorna cad2. En o ro caso ret rna cad1. DECO E (cadena,caso1,rcad1, .,defecto) :
La salid
es el res ltado
"rc d1" donde la
cadena iguale la currencia d caso1 y asi sucesivam ente. El últ imo argumento es el va lor por d fecto. INITC P(cadena): uelve may scula la let a inicial de la cadena. LTRIM(cadena,grupo): Va re oviendo
e izquierd
a derecha los cara teres que se
encuentran en el rupo.
“F rmamos ciudadano profesion ales para el mundo EAM 2010 ® ‐ Armeni Q.
RTRIM(cadena,grupo): Va re oviendo
e derecha a izquierda los cara teres que se
encuentran en el rupo. TO_C AR (fecha,formato):
onvierte u a fecha a cadena de caracteres para po er
impri irse. TO_D TE (fecha,f rmato): Convierte cad na de cara teres a fech as.
“F rmamos ciudadano profesion ales para el mundo EAM 2010 ® ‐ Armeni Q.