Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases...

72
1 Base de Datos El lenguaje SQL

Transcript of Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases...

Page 1: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

1

Base de Datos

El lenguaje SQL

Page 2: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

2

Fundamentos de lenguajes de consulta

El lenguaje SQLDDL • Creación de objetos• Modificación • DestrucciónDML• Consultas• Altas• Modificaciones• Borrados

Contenido del Capitulo

Page 3: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

3

Fundamentos (1)

Structured Query LanguageDiseñado e implementado por IBM Research

Versión standard ANSI 1986: SQL-86 o SQL1Versión standard revisada: SQL-92 o SQL2

Ventajas :Conjunto de comandos único y con sintaxis conocidaIndependencia de cómo se implementan las funciones

Page 4: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

4

Fundamentos (2)

Considerado el standard en las bases relacionales

Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases de Datos.

Algunas desventajas : No todos los DBMS’s implementan exactamente la misma sintaxis para todo comandoAlgunos DBMS’s implementan comandos adicionales propios que agregan funcionalidad pero quitan portabilidad

Page 5: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

5

Comandos SQL

DDLCREATEDROPALTER

DMLSELECTINSERTUPDATEDELETE

Page 6: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

6

Manejo de Tablas1. Restricciones de Integridad2. Tablas

CreaciónModificaciónEliminación

DDL – Tablas

Page 7: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

7

DDL – Restricciones de Integridad

Las siguientes restricciones implementan las categorías mencionadas:

PRIMARY KEYUNIQUEFOREIGN KEYNOT NULL

ObservacionesConstraints son mecanismos ya implementados en el DBMS para proveer integridad sobre los datos.

Page 8: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

8

DDL – Restricciones de Integridad

Tipo de Integridad Tipo de Constraint

Domain DEFAULTCHECK

Entity PRIMARY KEYUNIQUEFOREIGN KEY

Referential FOREIGN KEYCHECK

Page 9: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

9

DDL – Restricciones de Integridad

Ej1CREATE TABLE Empleados( IdEmp INT NOT NULL PRIMARY KEY, Apellido VARCHAR(30) NOT NULL, Nombre VARCHAR(30) NOT NULL, Direccion VARCHAR(100) NOT NULL, FecNac DATETIME NOT NULL, Salario MONEY NOT NULL CONSTRAINT check_salario CHECK (Salario > 0))

Page 10: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

10

DDL – Restricciones de Integridad

Ej5 : “Todo libro se identifica por un ISBN. Todo libro es escrito por sólo UN autor”

CREATE TABLE Autores ( idAutor INT NOT NULL PRIMARY KEY, Nombre VARCHAR(100) NOT NULL);

CREATE TABLE Libros ( ISBN INT NOT NULL PRIMARY KEY, idAutor INT NOT NULL, Nombre VARCHAR(100) NOT NULL, Precio MONEY NOT NULL,

FOREIGN KEY (idAutor ) REFERENCES Autores (idAutor ));

Page 11: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

11

CREATE TABLECrea una nueva tabla.Dependiendo del DBMS exigirá crearla bajo un Esquema determinado.Sintaxis :

CREATE TABLE table_name ( { < column_definition >

| < table_constraint > } [ ,...n ] )

< column_definition > ::= column_name data_type [ DEFAULT constant_expression ] [ < column_constraint > ] [ ...n ]

DDL – Tablas

Page 12: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

12

CREATE TABLE (2)(definición de restricciones por COLUMNA)

< column_constraint > ::= [ CONSTRAINT constraint_name ] { [ NULL | NOT NULL ]

| [{PRIMARY KEY | UNIQUE }] | [[ FOREIGN KEY ]

REFERENCES ref_table [ ( ref_column ) ] [ ON DELETE { CASCADE | NO ACTION } ] [ ON UPDATE { CASCADE | NO ACTION } ]

] | CHECK ( logical_expression )

}

DDL – Tablas

Page 13: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

13

CREATE TABLE (3)(definición de restricciones a nivel de TABLA)

< table_constraint > ::= [ CONSTRAINT constraint_name ] { [ { PRIMARY KEY | UNIQUE }

{ ( column [ ASC | DESC ] [ ,...n ] ) } ]

| FOREIGN KEY [ ( column [ ,...n ] ) ] REFERENCES ref_table [ ( ref_column [ ,...n ] ) ]

[ ON DELETE { CASCADE | NO ACTION } ] [ ON UPDATE { CASCADE| NO ACTION } ]

}

DDL – Tablas

Page 14: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

14

Ej:PostgreSQL :

CREATE TABLE Empleados (

CI character(8) PRIMARY KEY ,

Nombre character varying(100),

Direccion character varying(200),

Fec_Nacimiento date )

WITH ( OIDS=FALSE);

MS-SQLServer :CREATE TABLE Empleados (

CI character(8) PRIMARY KEY ,

Nombre varchar(100),

Direccion varchar(200),

Fec_Nacimiento smalldatetime

);

DDL – Tablas

MySQL :CREATE TABLE Empleados (

CI character(8) PRIMARY KEY ,

Nombre varchar(100),

Direccion varchar(200),

Fec_Nacimiento date

);

Page 15: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

15

DDL – Tablas

ALTER TABLEContinuación de sintaxis

ALTER TABLE

| DROP { [ CONSTRAINT ] constraint_name | COLUMN column } [ ,...n ]

| { [ WITH CHECK | WITH NOCHECK ] CHECK | NOCHECK } CONSTRAINT

| { ENABLE | DISABLE } TRIGGER

}

Page 16: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

16

DDL – Tablas

ALTER TABLE : EjemplosAgregar una nueva columna

CREATE TABLE documentos ( colA INT);ALTER TABLE documentos ADD colB VARCHAR(20) NULL ;

Eliminar una columnaCREATE TABLE documentos ( colA INT, colB VARCHAR(20) NULL) ;

ALTER TABLE documentos DROP COLUMN colB;

Page 17: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

17

DDL – Tablas – Usos de ALTER (1)

1 - Crear claves foráneas“La ciudad se identifica por un código, pero un código de ciudad puede repetirse en diferentes departamentos (entidad débil Ciudad)”CREATE TABLE DEPARTAMENTOS (

IdDep int primary key,NomDep varchar(100) not null);

CREATE TABLE CIUDADES (IdDep int,IdCiud int,NomCiud varchar(100) not null CONSTRAINT PK_CIUDADES PRIMARY KEY(IdDep,IdCiud)

);ALTER TABLE CIUDADES ADD CONSTRAINT FK_DEPTOS

FOREIGN KEY(IdDep)REFERENCES DEPARTAMENTOS (IdDep);

Page 18: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

18

DDL – Tablas

DROP TABLEElimina :

La definición de la tabla Todos sus datosObjetos asociados : índices, triggers, constraints, especificaciones de permisos

No siempre pueden eliminarse : solo cuando no existen constraints de otras tablas hacia ella.Cualquier vista o stored procedure referenciado deben ser explícitamente eliminados antes con DROP VIEW o DROP PROCEDURE.No pueden eliminarse tablas del sistema

SintaxisDROP TABLE table_name

Page 19: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

19

SELECTSentencia única de consulta en bases de datos relacionalesImplementación de operaciones vistas en Algebra Relacional (selección , proyección, join, etc.)Permite obtener datos de varias tablas simultáneamente.Los resultados siempre serán conjuntos de tuplas : No necesariamente se devuelven en orden.La ejecución de esta sentencia NO MODIFICA dato alguno ni genera cambios en la base.

Puede afectar el rendimiento general del DBMS si se hace descuidadamente

DML – SELECT

Page 20: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

20

Formato de la sentencia :

SELECT [ALL|DISTINCT] columnas deseadas

FROM tablas

[WHERE condición][GROUP BY lista-nombre-columna o lista-posición][HAVING condición de grupo][ORDER BY nombre-columna o posición]

DML – SELECT

Page 21: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

21

Seleccionando todas las columnas

Ejemplo:SELECT * FROM SECCIONES

DML – SELECT

IdSec NomSec IdSecSup

1 Directorio 1

2 Tecnologia 1

5 Marketing 4

4 Ventas 1

3 Finanzas 1

Page 22: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

22

Seleccionando columnas específicas (proyeccion)Ejemplo:

SELECT NomEmp, Direccion FROM EMPLEADOS

DML – SELECT

NomEmp Direccion

Juan Perez Sarando 619 apto. 101

Roberto Martínez Tiburcio Gomez 1420

Sandra Perez Of. 17 m. S/N

Mariana de Leon Ruta 8 Km. 28 Paraje El Grillo

Andres Gomez Cno. Del Andaluz Km. 8 ½

Page 23: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

23

Seleccionando valores únicos:Ejemplo:

SELECT cuentaFROM Movimientos

CUENTA100021000210004100021000310004

SELECT DISTINCT cuentaFROM Movimientos

CUENTA100021000410003

DML – SELECT

Page 24: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

24

DML – SELECT : WHERE

La cláusula WHERE:Especifica un criterio de selección de registros a ver (selección)

SELECT lista_de_columnasFROM nombre_de_tablas

WHERE condiciónSELECT cliente, cuenta, productoFROM cuentasWHERE producto = 1

CLIENTE CUENTA PRODUCTO

10002 100 110002 125 110004 789 1

SELECT cliente, cuenta, productoFROM cuentasWHERE producto <> 1

CLIENTE CUENTA PRODUCTO

10015 110 610003 351 510004 454 2

Page 25: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

25

DML – SELECT : WHERE

DelimitadoresEn Strings o Fechas suelen ser comillas dobles o apóstrofesSe usan para delimitar los literales usados en el SELECT y evitar la confusión entre el nombre de una columna y su contenido:

Ej:FecNacimiento = ’01/01/2001’apellido = ‘PEREZ’CI >= “1000000-0”

SELECT cliente, nombreFROM clientesWHERE apellido = ‘PEREZ’

CLIENTE APELLIDO10007 PEREZ10008 PEREZ10001 PEREZ

Page 26: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

26

DML – Operadores Relacionales

Significado Simbolo Ejemplo

Igual = Cuenta = 12003

No igual <> , != Cuenta <> 12003

Mayor que > FecNac > ’01/01/2001’

Menor que < FecNac < ’01/01/2001’

Mayor o igual >= Saldo >= 12000

Menor o igual <= Saldo <= 12000

Pertenece a una lista IN Apellido IN (‘PEREZ’,’MARTINEZ’)

En un rango de valores BETWEEN Sueldo BETWEEN 12000 and 24000

Contiene un string LIKE Nombre LIKE ‘%JUAN%’

Page 27: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

27

DML – Uso del NULL

SELECT persona, direccionFROM personasWHERE direccion IS NULL

PERSONA DIRECCIÓN

100451006310036

SELECT persona, direccionFROM personasWHERE direccion IS NOT NULL

PERSONA DIRECCIÓN

10015 18 DE JULIO 232310034 18 DE JULIO 232510030 18 DE JULIO 2324

Dependiendo del programa de consulta puede mostrar NADA o la palabra NULL

Page 28: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

28

DML – Operadores Lógicos

Operador Significado

AND Devuelve TRUE (verdadero) cuando ambas condiciones son verdaderas

OR Devuelve TRUE (verdadero) cuando al menos UNA de las 2 condiciones es verdadera

NOT Devuelve la negación de la condición

IMPORTANTE : Los operadores poseen prioridad de asociación.El AND posee la más alta prioridad.Si necesitamos condiciones complejas con AND y OR debemos utilizar PARÉNTESIS.

Page 29: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

29

DML – Operadores Lógicos

1) Listar las personas que viven en “La Paloma” (en el departamento de Rocha).

SELECT persona, nombreFROM personasWHERE ciudad = “La Paloma”

AND departamento = “Rocha”

2) Listar las personas que viven en Rocha o Durazno.SELECT persona,nombreFROM personasWHERE departamento = “Rocha”

OR departamento = “Durazno”

Page 30: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

30

DML – Operadores Lógicos

3) Ejemplo combinado de AND y OR¿Cuales son los títulos de las películas del estudio “MGM” que fueron filmadas luego de 1970 ó cuya duración es menor a 90 minutos?Incorrecto :

SELECT NomPeliculaFROM PeliculasWHERE anio > 1970 OR duracion < 90 AND NomEstudio = ‘MGM’

Error : el AND tiene mayor precedencia , el compilador entiende anio > 1970 OR (duracion < 90 AND NomEstudio = ‘MGM’)

Correcto :SELECT NomPeliculaFROM PeliculasWHERE (anio > 1970 OR duracion < 90) AND NomEstudio = ‘MGM’

Page 31: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

31

DML – Más búsquedas

Buscando en un rango de valores (BETWEEN)2 Ejemplos equivalentes:

SELECT fecha,cuenta,importeFROM movimientos WHERE sucursal = 1 AND

(importe >= 10000 ANDimporte <= 20000)

SELECT fecha,cuenta,importeFROM movimientos WHERE sucursal = 1 AND

importe BETWEEN 10000 AND 20000

Page 32: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

32

DML – Más búsquedas

Buscando en un conjunto de valores (IN)2 Ejemplos equivalentes:

SELECT cliente,nombre FROM clientesWHERE cliente = 10052

OR cliente = 10035OR cliente = 10028OR cliente = 10068

SELECT cliente,nombre FROM clientes WHERE cliente IN (10052,10035,10028,10068)

Page 33: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

33

DML – Más búsquedas : LIKE (1)

Uso del operador LIKE : busquedas por caracteres o patrones

Mascara Significado

% (En Access es *) Equivale a cero o más caracteres cualesquiera.

_ (guión inferior) Representa a UN caracter cualquiera.

[v1-v2] Intervalo de valores posibles, una ocurrencia

^[v1-v2] Excluye el intervalo de valores, una ocurrencia

Page 34: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

34

DML – Uso de LIKE (2)

Búsquedas en Strings (char, varchar, char varying, etc.)

Ej: Nombres que finalizan en Pérez

SELECT cliente, nombreFROM clientesWHEREnombre LIKE “%Perez”

CLIENTE NOMBRE10002 Juan Perez10013 Pedro Perez10016 Alberto Perez10012 Francisco Perez

Page 35: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

35

DML – Uso de LIKE (3)

Búsquedas en Strings (char, varchar, char varying, etc.)Nombres que terminan en Pere y el último carácter es cualquiera:

SELECT cliente,nombreFROM clientesWHERE nombre LIKE “%Pere_”

CLIENTE NOMBRE10002 Juan Perez10013 Pedro Perez10016 Alberto Perez10012 Francisco Perez10022 Luiz Peres

Page 36: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

36

DML – Uso de LIKE (4)

Otros ejemplos

SELECT cliente,nombreFROM clientesWHERE NombreLIKE “[a-zA-Z]%Pere_”

CLIENTE NOMBRE10002 Juan Perez10013 Pedro Perez10016 Alberto Perez10012 Francisco Perez10044 Frank Peret10022 Luiz Peres

SELECT cliente,nombre FROM clientes WHERE NombreLIKE “^[A-J]%Pere_”

CLIENTE NOMBRE10013 Pedro Perez10022 Luiz Peres

Page 37: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

37

DML – La cláusula ORDER BY

SELECT no devuelve los registros en algun orden preestablecidoORDER BY indica en que orden quiero que muestre el resultadoPueden ser varias columnas, en ese caso se respeta el orden de izquierda a derecha.ASC o DESC indican Ascendente o Descendente, ASC es el default

Sintaxis

SELECT camposFROM tablas[WHERE condición]...ORDER BY nombre-columnas o posiciones [ASC | DESC]

Page 38: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

38

DML – La cláusula ORDER BY

Un ejemplo

SELECT cliente, nombreFROM clientesWHERE nombre LIKE “%Perez”ORDER BY nombre ASC

CLIENTE NOMBRE10016 Alberto Perez10034 Francisco Perez10012 Francisco Perez10002 Juan Perez10022 Luiz Peres10013 Pedro Perez

Page 39: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

39

DML – Operadores Aritméticos

Permiten formar expresiones complejasUtilidad :

Devolver valores calculados (no incluidos en campos)Expresar condiciones (en WHERE o HAVING)Nuevos campos en Vistas

Operadores:+ suma- resta* multiplicaciòn/ división% módulo (resto)

Page 40: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

40

DML – Operadores Aritméticos

Ejemplo 1 “Necesitaria ver la cotizacion de las monedas y cuanto sería si subieran todas un 5%”

SELECT moneda, cotización, cotización * 1.05FROM cotizacionesORDER BY cotizacion DESC

MONEDA COTIZACION (expression)1 15,70 16.4854 2,70 2.8353 2,20 2.315 0,89 0.9345

Page 41: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

41

DML – Operadores Aritméticos

Ejemplo 2“Quiero todas los articulos cuyo precio de compra sea menor al 80% del precio de venta”

Select *From ARTICULOSWhere precio_compra < (precio_venta * 0.8)

Page 42: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

42

DML – Etiquetas

Los campos calculados devueltos en SELECT no poseen nombre : se les puede inventar un nombre “on-the-fly”

select moneda, cotización, ‘nueva_cotizacion’ = cotización * 1.05from cotizacioneswhere moneda <> moneda_valORDER BY nueva_cotizacion DESC

Tambien pueden utilizarse para presentar otro nombre para el campo :

select “Codigo Articulo” = IdArt, “Nombre Articulo” = NomArtfrom ARTICULOSwhere ….

Page 43: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

43

DML – Joins

Permite recuperar información de varias tablas vinculadas lógicamente entre si.Implementa la operación Join del Algebra Relacional.

Ej: “Quiero saber todos los datos de los Clientes más sus Nº de cuenta”Tengo las tablas : CLIENTES (nro_cliente, nom_cliente, direccion)CUENTAS (nro_cliente,nro_cuenta, cod_moneda)

Consulta con Join :

SELECT Clientes.*, Cuentas.nro_cuentaFROM Clientes , Cuentas

WHERE Clientes.nro_cliente = Cuentas.nro_cliente

Listamos todos los datos de Clientes + Nº de Cuenta

Incluimos 2 tablas en el FROM

Obligatorio : condición de Join

Page 44: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

44

DML – Joins : ¿ Que son ?Es la implementación del Producto Cartesiano (T1 x T2) + SelecciónSi no se especifica una condición el conjunto resultante no posee sentido práctico.

Nro_cliente Nom_cliente Dirección

1000 Ana Dir1

1100 Pedro Dir2

1200 Maria Dir3

1300 Roberto Dir4

Nro_cliente Nro_cuenta Cod_moneda

1000 3521 1

1200 3687 0

Nro_cliente Nom_cliente Dirección Nro_cliente Nro_cuenta Cod_moneda

1000 Ana Dir1 1000 3521 1

1000 Ana Dir1 1200 3687 0

1100 Pedro Dir2 1000 3521 1

1100 Pedro Dir2 1200 3687 0

1200 Maria Dir3 1000 3521 1

1200 Maria Dir3 1200 3687 0

1300 Roberto Dir4 1000 3521 1

1300 Roberto Dir4 1200 3687 0

Clientes Cuentas

Select *

From Clientes, Cuentas

Solo tienen sentido los que coinciden en nro_cliente

Page 45: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

45

DML – Joins : ¿ Que son ?Aplicando la condición de Join :

Nro_cliente Nom_cliente Dirección Nro_cliente Nro_cuenta Cod_moneda

1000 Ana Dir1 1000 3521 1

1200 Maria Dir3 1200 3687 0

Select *

From Clientes, Cuentas

Where Clientes.nro_cliente = Cuentas.nro_cliente

El campo Nro_cliente aparece 2 veces : uno por cada tabla donde apareceSolucion : a) Exponer en el SELECT solo los campos que queremos verb) Utilizar ALIAS (opcional)

Page 46: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

46

DML – Joins : AliasSon un modo de “renombrar” las tablas para mayor comodidadPermite hacer más legible joins de varias tablas.

Ej: “Listado de todos los Clientes con su Nº de cuenta y moneda”

SELECT CLI.nom_cliente, CU.nro_cuenta, M.nom_monedaFROM Clientes CLI, Cuentas CU, Monedas MWHERE

CLI.nro_cliente = CU.nro_clienteAND CU.cod_moneda = M.cod_moneda

Page 47: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

47

DML – Sintaxis ANSI del Join

SELECT Cuentas.*, Clientes.nro_cliente, Clientes.nom_clienteFROM

Clientes, CuentasWHERE Cuentas.nro_cliente = Clientes.nro_cliente

and Clientes.nom_cliente like ‘%PEREZ%’;

Page 48: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

4848

Creando un JOIN:Usualmente se desea recuperar información de más de una tabla.Por ejemplo:

CLIENTES CUENTAS

Cliente 10001 Cliente 10001Cliente 10002 Cliente 10001……………... Cliente 10001……………… ………………Cliente 10050 Cliente 10002

Page 49: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

4949

Creación de JOINs1º creación del Producto Cartesiano2º refinamiento aplicando restricciones y eliminando filas sin significado relevante incluyendo una claúsula WHERE válida

Page 50: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

5050

Información adicional en las cláusulas de la sentencia Select:

SELECT Indicar que columnas se quiere seleccionar de cada una de las tablas

FROM Especificar las tablas de las que se esta seleccionando informacion en la SELECT.

WHERE Indicar las columnas de las tablas seleccionadas que se igualarán para establecer el join.

Page 51: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

5151

ConsideracionesClave Primaria (Primary Key)Se define como el conjunto de 1 o más campos de un registro que conforman su clave, determinando la unicidad de cada fila en la tabla.

Clave Externa (Foreign Key)Asocia los campos de una tabla con un conjunto idéntico de campos, definidos como Clave Primaria en otra tabla. Esta asociación permite el chequeo de integridad referencial y actualizaciones automáticas.

Page 52: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

5252

Algunas particularidades

Primary Key – Foreign Key Es muy común realizar joins entre tablas que se encuentran enuna Relación de 1 a muchos.

Las columnas que se igualarán para establecer el join no tienenporque tener el mismo nombre.

NOTA: Recordemos que el valor null significa sin valor odesconocido. A traves de él no se puede hacer un join.

El orden en el que se escriben las condiciones del join noafecta el significado del mismo.

Page 53: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

5353

Equi-Join:Theta-Join basado en condición de igualdad

R SR.B=S.D

R(A,B) S(C,D)

C D 2 7 6 8

A B 3 4 5 7

R.A R.B S.C S.D 5 7 2 7

R.A R.B S.C S.D 3 4 2 7 3 4 6 8 5 7 2 7 5 7 6 8

R S Resultado

Page 54: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

5454

Más sobre el ejemplo:

SELECT clientes.cliente,clientes.nombre, cuenta, moneda, saldo

FROM clientes, cuentasWHERE clientes.cliente = cuentas.cliente;

Problema?

Page 55: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

5555

Si el cliente No tiene cuenta, no figura en el resultado

cliente nombre cuenta moneda saldo

10007 CUENTA 10007 100071 1 51112.3100000010007 CUENTA 10007 100072 1 -31484.5600000010009 CUENTA 10009 100092 1 -5468.7200000010010 CUENTA 10010 100101 1 -425920.7500000010010 CUENTA 10010 100102 1 0.0000000010011 CUENTA 10011 100112 1 0.00000000

Page 56: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

5656

Un error común:

SELECT cliente, clientes.nombre, cuenta,moneda, saldo

FROM clientes, cuentasWHERE clientes.cliente = cuentas.cliente;

Columna ambigua, existe en ambas tablas.

324: Ambiguous column (cliente).

Page 57: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

5757

Natural JoinEmp (name, dept)

Name Dept Jack Physics Tom ICS

Contact (name, addr)Name Addr Jack Irvine Tom LA Mary Riverside

Name Dept Addr Jack Physics Irvine Tom ICS LA

Emp Contact: Todos los nombre, departamentos y direccionesEmp.name Emp.Dept Contact.name Contact.addr

Jack Physics Jack Irvine Jack Physics Tom LA Jack Physics Mary Riverside

Tom ICS Jack Irvine Tom ICS Tom LA Tom ICS Mary Riverside

Emp Contact

Resultado

Page 58: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

5858

Natural – JoinEs un Equi-Join en el cual una de las columnas duplicadas es eliminada de la tabla resultante, usualmente utilizadas en la condición de Join

SELECT monedas.*, fecha, cotizacionFROM monedas, cotizacionesWHERE monedas.moneda =

cotizaciones.moneda ;

Page 59: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

5959

Resultado: se evita la información redundante

moneda nombre moneda_val fecha cotizac1 PESO URUGUAYO 1 01/03/2002 1.00 2 DOLAR AMERICANO 1 01/03/2002 15.603 PESO ARGENTINO 1 01/03/2002 8.004 REAL 1 01/03/2002 6.705 EURO 1 01/03/2002 14.001 PESO URUGUAYO 1 04/03/2002 1.002 DOLAR AMERICANO 1 04/03/2002 15.753 PESO ARGENTINO 1 04/03/2002 8.004 REAL 1 04/03/2002 6.705 EURO 1 04/03/2002 14.00

Page 60: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

6060

Join con muchas tablas:

SELECT clientes.nombre, productos.nombre, monedas.nombre

FROM clientes, cuentas, productos, monedasWHERE cuentas.cliente = clientes.cliente

AND cuentas.producto = productos.producto AND cuentas.moneda = monedas.moneda

Page 61: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

6161

Resultado

nombre nombre nombre

CLIENTE 10010 CAJA DE AHORRO PESO URUGUAYOCLIENTE 10101 CAJA DE AHORRO PESO URUGUAYOCLIENTE 10397 CAJA DE AHORRO PESO URUGUAYOCLIENTE 10080 CAJA DE AHORRO PESO URUGUAYOCLIENTE 10131 CAJA DE AHORRO PESO URUGUAYOCLIENTE 10404 CAJA DE AHORRO DOLAR AMERICANOCLIENTE 10453 CAJA DE AHORRO PESO URUGUAYO

Page 62: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

6262

Los ALIAS:SELECT CE.nombre cliente,

P.nombre producto, M.nombre moneda

FROM clientes CE, cuentas CU, productos P, monedas M

WHERE CU.cliente = CE.clienteAND CU.producto = P.productoAND CU.moneda = M.moneda

Page 63: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

6363

Resultado

cliente producto moneda

CLIENTE 10010 CAJA DE AHORRO PESO URUGUAYOCLIENTE 10101 CAJA DE AHORRO PESO URUGUAYOCLIENTE 10397 CAJA DE AHORRO PESO URUGUAYOCLIENTE 10080 CAJA DE AHORRO PESO URUGUAYOCLIENTE 10131 CAJA DE AHORRO PESO URUGUAYOCLIENTE 10404 CAJA DE AHORRO DOLAR AMERICANOCLIENTE 10453 CAJA DE AHORRO PESO URUGUAYO

Page 64: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

6464

El OUTER Join:

Page 65: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

6565

El OUTER Join:

El Join común (INNER Join) trae solamente los registros de ambas tablas que cumplan con las condiciones del JOIN. Por ejemplo cuando recuperamos los clientes con sus cuentas NO trae los clientes sin cuentas.

Es por ello que existe el OUTER Join que trae todos los registros de la tabla principal y si no existen registros de la otra que cumplan la condición de Join pone sus campos en NULO (NULL) y en caso contrario los trae.

Existen 3 tipos: left, right, o full, según cual se considere la tabla “dominante”.

Page 66: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

6666

Left Outer JoinLeft Outer Join

RName Dept Jack Physics Tom ICS

SName Addr Jack Irvine Mike LA Mary Riverside

Left outer joinR S

Name Dept Addr Jack Physics Irvine Tom ICS NULL

Rellena con nulos para tuplas sin correspondiente a la derecha

R.name R.Dept S.name S.addr Jack Physics Jack Irvine

Jack Physics Mike LA Jack Physics Mary Riverside

Tom ICS Jack Irvine Tom ICS Mike LA Tom ICS Mary Riverside

R S

Page 67: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

6767

Ejemplo de Left OUTER Join :

SELECT C.cliente, C.nombre,U.cuentaFROM clientes C LEFTOUTER JOIN

cuentas U ON (c.cliente = u.cliente)

Page 68: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

6868

Resultado Outer Join Simple

cliente nombre cuenta 10005 CLIENTE 1000510006 CLIENTE 1000610007 CLIENTE 10007 10007110007 CLIENTE 10007 10007210008 CLIENTE 1000810009 CLIENTE 10009 10009210010 CLIENTE 10010 10010110010 CLIENTE 10010 10010210011 CLIENTE 10011 10011210011 CLIENTE 10011 10011110012 CLIENTE 10012 10012110012 CLIENTE 10012 10012210013 CLIENTE 1001310014 CLIENTE 10014

Page 69: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

6969

Right Outer JoinRight Outer Join

RName Dept Jack Physics Tom ICS

S

Right outer joinR S

Name Dept Addr Jack Physics Irvine Mike NULL LA Mary NULL Riverside

Name Addr Jack Irvine Mike LA Mary Riverside

R.name R.Dept S.name S.addr Jack Physics Jack Irvine

Jack Physics Mike LA Jack Physics Mary Riverside

Tom ICS Jack Irvine Tom ICS Mike LA Tom ICS Mary Riverside

R S

Rellena con nulos para tuplas sin correspondiente a la izquierda

Page 70: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

7070

Full Outer JoinFull Outer Join

RName Dept Jack Physics Tom ICS

S

Full outer joinR S

Name Dept Addr Jack Physics Irvine Tom ICS NULL Mike NULL LA Mary NULL Riverside

Rellena con blancos para las tuplas sin correspondiente tanto a la derecha como a la izquierda

Name Addr Jack Irvine Mike LA Mary Riverside

R.name R.Dept S.name S.addr Jack Physics Jack Irvine

Jack Physics Mike LA Jack Physics Mary Riverside

Tom ICS Jack Irvine Tom ICS Mike LA Tom ICS Mary Riverside

R S

Page 71: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

7171

Self Join

Utilidad: comparación de valores en una columna con otros valores en la misma columna.

SELECT X.cod_orden, X.peso, X.fecha_envio,Y.cod_orden, Y.peso, Y.fecha_envio

FROM Ordenes X, Ordenes YWHERE X.peso >= 5*Y.peso AND

X.fecha_envio IS NOT NULL ANDY.fecha_envio IS NOT NULL

Page 72: Base de Datos - itsp-informatica.webnode.com.uy · Considerado el standard en las bases relacionales Se está extendiendo con los conceptos de OO y otros conceptos recientes de Bases

7272

Resultado

Este SELECT encuentra pares de órdenes cuyo peso difiere en por lo menos un factor de 5 y cuyas fechas de envío no son nulas.

cod_orden peso fecha_envio cod_orden peso fecha_envio1004 95.8 05/03/1991 1011 10.4 07/03/19911004 95.8 05/03/1991 1020 14.0 07/16/19911007 125.9 06/03/1991 1015 20.6 07/30/19911007 125.9 06/03/1991 1020 14.0 07/16/19911007 125.9 06/03/1991 1022 15.0 07/16 /1991