36
Contenido de la sesión 1 • Bases de Datos Relacionales • Lenguaje SQL • SQL*Plus • Sentencia SELECT de SQL • Ejercicios guiados • Ejercicios de sesión y opcionales

Contenido de la sesión 1 Bases de Datos Relacionales Lenguaje SQL SQL*Plus Sentencia SELECT de SQL Ejercicios guiados Ejercicios de sesión y opcionales

Embed Size (px)

Citation preview

Page 1: Contenido de la sesión 1 Bases de Datos Relacionales Lenguaje SQL SQL*Plus Sentencia SELECT de SQL Ejercicios guiados Ejercicios de sesión y opcionales

Contenido de la sesión 1

• Bases de Datos Relacionales• Lenguaje SQL• SQL*Plus• Sentencia SELECT de SQL• Ejercicios guiados• Ejercicios de sesión y opcionales

Page 2: Contenido de la sesión 1 Bases de Datos Relacionales Lenguaje SQL SQL*Plus Sentencia SELECT de SQL Ejercicios guiados Ejercicios de sesión y opcionales

¿Qué es un Sistema de Bases de Datos?

SGBD (Sistema Gestor de Bases de Datos)

Punto de vista físico:

Datos almacenados en uno o más ficheros, en uno o más discos.

Punto de vista lógico (usuario):

Los datos y sus relaciones se encuentran en un único lugar (base de datos). El acceso a éstos se realiza a través del SGDB.

Usuario

Sistema de Bases de Datos

Lenguaje de Consulta

Page 3: Contenido de la sesión 1 Bases de Datos Relacionales Lenguaje SQL SQL*Plus Sentencia SELECT de SQL Ejercicios guiados Ejercicios de sesión y opcionales

SGBD Relacional

Punto de vista lógico (usuario):

Es un SGBD donde, tanto los datos como sus relaciones, se encuentran almacenados en tablas (filas y columnas).

Usuario

SGBDR

Sistema de Bases de Datos

SQL

Page 4: Contenido de la sesión 1 Bases de Datos Relacionales Lenguaje SQL SQL*Plus Sentencia SELECT de SQL Ejercicios guiados Ejercicios de sesión y opcionales

Base de datos relacional

Todos los datos están organizados en tablas...

CLIENTES

codcli nombre dirección codpostal codpue

290 Luis Gil ... ... ... .. ... ...

108 José Riu ...

entidad propiedades

Page 5: Contenido de la sesión 1 Bases de Datos Relacionales Lenguaje SQL SQL*Plus Sentencia SELECT de SQL Ejercicios guiados Ejercicios de sesión y opcionales

Base de datos relacional

ARTICULOS

codart descrip precio stock stock_min

X54 Bombilla ... ... ... ... ... ...

F78 Cable ... ...

entidad propiedades

... Y las filas de una tabla no están ordenadas

Page 6: Contenido de la sesión 1 Bases de Datos Relacionales Lenguaje SQL SQL*Plus Sentencia SELECT de SQL Ejercicios guiados Ejercicios de sesión y opcionales

La base de datos de prácticas

TABLA CLIENTESCODCLI NUMBER(5)NOMBRE VARCHAR2(50)DIRECCION VARCHAR2(50) CODPOSTAL VARCHAR2(5)

CODPUE VARCHAR2(5)

TABLA ARTICULOSCODART VARCHAR2(8)DESCRIP VARCHAR2(40)PRECIO NUMBER(7,2)STOCK NUMBER(6)STOCK_MIN NUMBER(6)

Page 7: Contenido de la sesión 1 Bases de Datos Relacionales Lenguaje SQL SQL*Plus Sentencia SELECT de SQL Ejercicios guiados Ejercicios de sesión y opcionales

Objetos mas complejos...

Codfac: 1437Fecha: 25/02/2002IVA: 16 Dto. 5%

1. Bombilla X54 12 u. 2,10 25,22. Tubo neón FG 1 u. 18 183. Enchufe SW56 20 u. 1,90 38

Total : 81,2

¿entidad?¿propiedades?

¿todo esto en una tabla?

Page 8: Contenido de la sesión 1 Bases de Datos Relacionales Lenguaje SQL SQL*Plus Sentencia SELECT de SQL Ejercicios guiados Ejercicios de sesión y opcionales

... en una tabla no ¡¡ pero en dos sí !!

FACTURAS LINEAS_FAC

codfac fecha .... codfac linea cant ....

1437 25/2/02 ... 1437 1 12 ...

1437 2 1 ...

cabecera líneas

...en una base de datos relacional

Page 9: Contenido de la sesión 1 Bases de Datos Relacionales Lenguaje SQL SQL*Plus Sentencia SELECT de SQL Ejercicios guiados Ejercicios de sesión y opcionales

La base de datos de prácticas

TABLA CLIENTESCODCLI NUMBER(5)NOMBRE VARCHAR2(50)DIRECCION VARCHAR2(50) CODPOSTAL VARCHAR2(5)

CODPUE VARCHAR2(5)

TABLA ARTICULOSCODART VARCHAR2(8)DESCRIP VARCHAR2(40)PRECIO NUMBER(7,2)STOCK NUMBER(6)STOCK_MIN NUMBER(6)

TABLA FACTURASCODFAC NUMBER(6)FECHA DATECODCLI NUMBER(5) IVA NUMBER(2) DTO NUMBER(2)

TABLA LINEAS FACCODFAC NUMBER(6)LINEA NUMBER(2)CANT NUMBER(5)CODART VARCHAR2(8)PRECIO NUMBER(7,2)DTO NUMBER(2)

Page 10: Contenido de la sesión 1 Bases de Datos Relacionales Lenguaje SQL SQL*Plus Sentencia SELECT de SQL Ejercicios guiados Ejercicios de sesión y opcionales

Nulos

• Cuando el valor de una columa para una determinada fila es desconocido, se dice que es nulo.

• Bien porque ...– ... se desconoce el valor de una propiedad para

cierta ocurrencia de una entidad. Ej. No se conoce el pueblo de un cliente.

– ... una propiedad no se aplica a alguna ocurrencia de una entidad. Ej. ¿DNI de un niño?

Page 11: Contenido de la sesión 1 Bases de Datos Relacionales Lenguaje SQL SQL*Plus Sentencia SELECT de SQL Ejercicios guiados Ejercicios de sesión y opcionales

Clave Primaria

Columna o conjunto de columnas cuyos valores identifican de forma única a cada una de las filas de la tabla.

CLIENTES(codcli, nombre, ...)FACTURAS(codfac, fecha, ...)LINEAS_FAC(codfac, linea, cant, ...)

La clave primaria siempre es NO NULA.

Page 12: Contenido de la sesión 1 Bases de Datos Relacionales Lenguaje SQL SQL*Plus Sentencia SELECT de SQL Ejercicios guiados Ejercicios de sesión y opcionales

La base de datos de prácticas

TABLA CLIENTESCODCLI NUMBER(5)NOMBRE VARCHAR2(50)DIRECCION VARCHAR2(50) CODPOSTAL VARCHAR2(5)

CODPUE VARCHAR2(5)

TABLA ARTICULOSCODART VARCHAR2(8)DESCRIP VARCHAR2(40)PRECIO NUMBER(7,2)STOCK NUMBER(6)STOCK_MIN NUMBER(6)

TABLA FACTURASCODFAC NUMBER(6)FECHA DATECODCLI NUMBER(5) IVA NUMBER(2) DTO NUMBER(2)

TABLA LINEAS FACCODFAC NUMBER(6)LINEA NUMBER(2)CANT NUMBER(5)CODART VARCHAR2(8)PRECIO NUMBER(7,2)DTO NUMBER(2)

Page 13: Contenido de la sesión 1 Bases de Datos Relacionales Lenguaje SQL SQL*Plus Sentencia SELECT de SQL Ejercicios guiados Ejercicios de sesión y opcionales

Clave Ajena

¿Cómo se sabe de qué cliente es cada factura? ¿y cómo se sabe qué artículo se pide en cada línea? ... mediante las claves ajenas.Una clave ajena es una o varias columnas que hacen referencia a la clave primaria (CP) de otra tabla.

CLIENTES(codcli, nombre, ...)FACTURAS(codfac, fecha, codcli, ...)

Page 14: Contenido de la sesión 1 Bases de Datos Relacionales Lenguaje SQL SQL*Plus Sentencia SELECT de SQL Ejercicios guiados Ejercicios de sesión y opcionales

La base de datos de prácticas

TABLA CLIENTESCODCLI NUMBER(5)NOMBRE VARCHAR2(50)DIRECCION VARCHAR2(50) CODPOSTAL VARCHAR2(5)

CODPUE VARCHAR2(5)

TABLA ARTICULOSCODART VARCHAR2(8)DESCRIP VARCHAR2(40)PRECIO NUMBER(7,2)STOCK NUMBER(6)STOCK_MIN NUMBER(6)

TABLA FACTURASCODFAC NUMBER(6)FECHA DATECODCLI NUMBER(5) IVA NUMBER(2) DTO NUMBER(2)

TABLA LINEAS FACCODFAC NUMBER(6)LINEA NUMBER(2)CANT NUMBER(5)CODART VARCHAR2(8)PRECIO NUMBER(7,2)DTO NUMBER(2)

Page 15: Contenido de la sesión 1 Bases de Datos Relacionales Lenguaje SQL SQL*Plus Sentencia SELECT de SQL Ejercicios guiados Ejercicios de sesión y opcionales

Clave Ajena

• FACTURAS.codcli es una CAj a CLIENTES:– El tipo de datos de CAj y CP debe ser el mismo.– Los valores que aparecen en la CAj deben coincidir con alguno

de los valores de la CP (integ. referencial).– ¿Todos los valores de la CP deben aparecer en la CAj?– En la CP no se pueden repetir valores ¿en la CAj se pueden

repetir valores?– Una CAj representa una relación entre entidades.– La CP es siempre no nula ¿las CAj también?– ¿Se tienen que llamar igual una CAj y la CP que referencia?

El cliente que pagala factura.

No, puede haber clientesque no tengan facturas.

Sí, un cliente puedetener varias facturas.

No necesariamente. Puede ser nula en las facturas de

clientes que se han borrado.De 1 a 1 ó de 1 a muchos.No, pero así el esquemade la BD es más legible.

Page 16: Contenido de la sesión 1 Bases de Datos Relacionales Lenguaje SQL SQL*Plus Sentencia SELECT de SQL Ejercicios guiados Ejercicios de sesión y opcionales

Evitando problemas ...

CLIENTES(codcli,nombre,..., población,provincia)

Al dar de alta un cliente, hay que escribir su población y su provincia. Posibles problemas:

– ¿ Y si no escribimos el nombre de una población siempre igual (Vila-real / Villarreal) ?

– ¿ Y si nos equivocamos de provincia con una población?

Solución: “repartir” en varias tablas.

Page 17: Contenido de la sesión 1 Bases de Datos Relacionales Lenguaje SQL SQL*Plus Sentencia SELECT de SQL Ejercicios guiados Ejercicios de sesión y opcionales

Modelo Relacional: La BD de prácticas

TABLA CLIENTESCODCLI NUMBER(5)NOMBRE VARCHAR2(50)DIRECCION VARCHAR2(50) CODPOSTAL VARCHAR2(5)

CODPUE VARCHAR2(5)

TABLA ARTICULOSCODART VARCHAR2(8)DESCRIP VARCHAR2(40)PRECIO NUMBER(7,2)STOCK NUMBER(6)STOCK_MIN NUMBER(6)

TABLA FACTURASCODFAC NUMBER(6)FECHA DATECODCLI NUMBER(5) IVA NUMBER(2) DTO NUMBER(2)

TABLA LINEAS FACCODFAC NUMBER(6)LINEA NUMBER(2)CANT NUMBER(5)CODART VARCHAR2(8)PRECIO NUMBER(7,2)DTO NUMBER(2)

TABLA PUEBLOSCODPUE VARCHAR2(5)NOMBRE VARCHAR2(40)CODPRO VARCHAR2(2)

TABLA PROVINCIASCODPRO VARCHAR2(2)NOMBRE VARCHAR2(30)

Page 18: Contenido de la sesión 1 Bases de Datos Relacionales Lenguaje SQL SQL*Plus Sentencia SELECT de SQL Ejercicios guiados Ejercicios de sesión y opcionales

Observaciones

ARTICULOS.precio : precio a día de hoy.LINEAS_FAC.precio : precio al que se vendió el

artículo en la factura. Era el precio que había en la factura en la fecha de la misma.

FACTURAS.dto : descuento sobre el importe total de la factura.

LINEAS_FAC.dto : descuento sobre el importe del artículo que se pide en la línea.

Page 19: Contenido de la sesión 1 Bases de Datos Relacionales Lenguaje SQL SQL*Plus Sentencia SELECT de SQL Ejercicios guiados Ejercicios de sesión y opcionales

Introducción a SQL

• SQL (Structured Query Language) es un lenguaje estándar para trabajar con bases de datos relacionales (Oracle, Informix, MySQL, dBase IV, DB2, PostgreSQL, Access, ...).

• Permite:– Definición de datos– Consultas de datos– Manipulación de datos– Control de acceso– ... ...

Page 20: Contenido de la sesión 1 Bases de Datos Relacionales Lenguaje SQL SQL*Plus Sentencia SELECT de SQL Ejercicios guiados Ejercicios de sesión y opcionales

SQL: Crear una tabla

CREATE TABLE clientes ( codcli NUMBER(5), nombre VARCHAR2(50), direccion VARCHAR2(50), codpostal VARCHAR2(5), codpue VARCHAR2(5),CONSTRAINT cp_clientes PRIMARY KEY (codcli),CONSTRAINT ca_cli_pue FOREIGN KEY (codpue)REFERENCES pueblos);

Page 21: Contenido de la sesión 1 Bases de Datos Relacionales Lenguaje SQL SQL*Plus Sentencia SELECT de SQL Ejercicios guiados Ejercicios de sesión y opcionales

SQL: Insertar datos en una tabla

INSERT INTO clientes (codcli, nombre, direccion, codpostal, codpue) VALUES ( 111 , 'GARCIA GIRONA, MANUEL' ,'BARON DE CARCER, 88-8', '05933', '31527');

Page 22: Contenido de la sesión 1 Bases de Datos Relacionales Lenguaje SQL SQL*Plus Sentencia SELECT de SQL Ejercicios guiados Ejercicios de sesión y opcionales

SQL: Consultar una tabla

SELECT codcli, nombre, codpostalFROM clientesWHERE codpue LIKE ‘31%’AND codcli BETWEEN 100 AND 250ORDER BY codpostal, nombre;

Page 23: Contenido de la sesión 1 Bases de Datos Relacionales Lenguaje SQL SQL*Plus Sentencia SELECT de SQL Ejercicios guiados Ejercicios de sesión y opcionales

SQL: Actualizar datos de una tabla

UPDATE clientesSET codpostal = ‘12100’WHERE codpue = ‘22517’;

Page 24: Contenido de la sesión 1 Bases de Datos Relacionales Lenguaje SQL SQL*Plus Sentencia SELECT de SQL Ejercicios guiados Ejercicios de sesión y opcionales

SQL: Borrar datos de una tabla

DELETE FROM clientesWHERE codpostal LIKE ‘46%’;

Page 25: Contenido de la sesión 1 Bases de Datos Relacionales Lenguaje SQL SQL*Plus Sentencia SELECT de SQL Ejercicios guiados Ejercicios de sesión y opcionales

SQL: Eliminar una tabla

DROP TABLE clientes;

¡SQL es mucho más, pero esto es lo básico!¿Cómo hablamos?

Yo

SGBDRSQL BD

Page 26: Contenido de la sesión 1 Bases de Datos Relacionales Lenguaje SQL SQL*Plus Sentencia SELECT de SQL Ejercicios guiados Ejercicios de sesión y opcionales

Introducción a SQL*Plus

• SQL*Plus es una herramienta de Oracle.• Permite “hablar en SQL” con el SGBD:

– Introducir, editar, almacenar, recuperar y ejecutar sentencias SQL.

– Dar formato a los resultados de las consultas, almacenarlos, imprimirlos...

– Visualizar las definiciones de columna de las tablas.

Page 27: Contenido de la sesión 1 Bases de Datos Relacionales Lenguaje SQL SQL*Plus Sentencia SELECT de SQL Ejercicios guiados Ejercicios de sesión y opcionales

Introducción a SQL*Plus

• Para trabajar con Oracle en anubis:– Introducir al final del fichero .profile o bien .bashrc:

. /oracle/variables– Ejecutarlo: . .profile o bien . .bashrc– Ejecutar SQL*Plus:

$> sqlplususuario: orausepassword: orauseSQL>

¡¡sólo el primer día!!

Page 28: Contenido de la sesión 1 Bases de Datos Relacionales Lenguaje SQL SQL*Plus Sentencia SELECT de SQL Ejercicios guiados Ejercicios de sesión y opcionales

Introducción a SQL*Plus

• Ejecutando una sentencia SQL:SQL> SELECT * FROM provincias;

• Algunas órdenes de SQL*Plus:– Editar un fichero:

SQL> ed fichero– Ejecutar una sentencia almacenada en un fichero:

SQL> start fichero– Visualizar definiciones de columna de una tabla:

SQL> desc tabla– Salir de SQL*Plus:

SQL> quit ó también SQL> exit

Page 29: Contenido de la sesión 1 Bases de Datos Relacionales Lenguaje SQL SQL*Plus Sentencia SELECT de SQL Ejercicios guiados Ejercicios de sesión y opcionales

Consulta de datos: SELECT

Formato básico de una sentencia SELECT:

SELECT [ DISTINCT ] { * | col [ , col ] }FROM tabla[ WHERE condición_búsqueda ] ;

Page 30: Contenido de la sesión 1 Bases de Datos Relacionales Lenguaje SQL SQL*Plus Sentencia SELECT de SQL Ejercicios guiados Ejercicios de sesión y opcionales

Consulta de datos: SELECT

Algunas sentencias sencillas:

SELECT *FROM clientes;

CODCLI NOMBRE DIRECCION CODPOSTAL CODPUE20 José Pérez Barcelona 2 13004 140013 María Gil Peñas 5 15008 145612 Luis Sorlí Prim 7 1200327 Laura Puig Peñas 24 15008 1456

TABLA CLIENTES

CODCLI NOMBRE DIRECCION CODPOSTAL CODPUE20 José Pérez Barcelona 2 13004 140013 María Gil Peñas 5 15008 145612 Luis Sorlí Prim 7 1200327 Laura Puig Peñas 24 15008 1456

RESULTADO

Page 31: Contenido de la sesión 1 Bases de Datos Relacionales Lenguaje SQL SQL*Plus Sentencia SELECT de SQL Ejercicios guiados Ejercicios de sesión y opcionales

Consulta de datos: SELECT

SELECT nombre, codpostalFROM clientes; TABLA CLIENTES

NOMBRE CODPOSTALJosé Pérez 13004María Gil 15008Luis Sorlí 12003Laura Puig 15008

RESULTADO

CODCLI NOMBRE DIRECCION CODPOSTAL CODPUE20 José Pérez Barcelona 2 13004 140013 María Gil Peñas 5 15008 145612 Luis Sorlí Prim 7 1200327 Laura Puig Peñas 24 15008 1456

Page 32: Contenido de la sesión 1 Bases de Datos Relacionales Lenguaje SQL SQL*Plus Sentencia SELECT de SQL Ejercicios guiados Ejercicios de sesión y opcionales

Consulta de datos: SELECT

SELECT codpostalFROM clientes; TABLA CLIENTES

CODPOSTAL13004150081200315008

RESULTADO

CODCLI NOMBRE DIRECCION CODPOSTAL CODPUE20 José Pérez Barcelona 2 13004 140013 María Gil Peñas 5 15008 145612 Luis Sorlí Prim 7 1200327 Laura Puig Peñas 24 15008 1456

Page 33: Contenido de la sesión 1 Bases de Datos Relacionales Lenguaje SQL SQL*Plus Sentencia SELECT de SQL Ejercicios guiados Ejercicios de sesión y opcionales

Consulta de datos: SELECT

SELECT DISTINCT codpostalFROM clientes; TABLA CLIENTES

CODPOSTAL130041500812003

RESULTADO

CODCLI NOMBRE DIRECCION CODPOSTAL CODPUE20 José Pérez Barcelona 2 13004 140013 María Gil Peñas 5 15008 145612 Luis Sorlí Prim 7 1200327 Laura Puig Peñas 24 15008 1456

Page 34: Contenido de la sesión 1 Bases de Datos Relacionales Lenguaje SQL SQL*Plus Sentencia SELECT de SQL Ejercicios guiados Ejercicios de sesión y opcionales

Consulta de datos: SELECT

SELECT codpueFROM clientesWHERE codcli < 25;

TABLA CLIENTES

CODPUE14001456

RESULTADO

CODCLI NOMBRE DIRECCION CODPOSTAL CODPUE20 José Pérez Barcelona 2 13004 140013 María Gil Peñas 5 15008 145612 Luis Sorlí Prim 7 1200327 Laura Puig Peñas 24 15008 1456

Page 35: Contenido de la sesión 1 Bases de Datos Relacionales Lenguaje SQL SQL*Plus Sentencia SELECT de SQL Ejercicios guiados Ejercicios de sesión y opcionales

Consulta de datos: SELECT

SELECT NVL(codpue, ’Desconocido!!!’)FROM clientesWHERE codcli < 25;

TABLA CLIENTES

CODPUE14001456Desconocido!!!

RESULTADO

CODCLI NOMBRE DIRECCION CODPOSTAL CODPUE20 José Pérez Barcelona 2 13004 140013 María Gil Peñas 5 15008 145612 Luis Sorlí Prim 7 1200327 Laura Puig Peñas 24 15008 1456

Page 36: Contenido de la sesión 1 Bases de Datos Relacionales Lenguaje SQL SQL*Plus Sentencia SELECT de SQL Ejercicios guiados Ejercicios de sesión y opcionales

Consulta de datos: SELECT

SELECT *FROM clientesWHERE codpue IS NULL;

TABLA CLIENTES

RESULTADOCODCLI NOMBRE DIRECCION CODPOSTAL CODPUE12 Luis Sorlí Prim 7 12003

CODCLI NOMBRE DIRECCION CODPOSTAL CODPUE20 José Pérez Barcelona 2 13004 140013 María Gil Peñas 5 15008 145612 Luis Sorlí Prim 7 1200327 Laura Puig Peñas 24 15008 1456