Tm13 introduccion al_sql

102
Técnicas de Modelamiento Introducción al SQL Técnicas de Modelamiento Introducción al SQL Prof. César Luza Montero Facultad de Ingeniería de Sistemas e Informática Universidad Nacional Mayor de San Marcos Copyright © 2008, Cesar Luza, Lima-Perú Copyright © 2008, Cesar Luza, Lima-Perú

Transcript of Tm13 introduccion al_sql

Page 1: Tm13 introduccion al_sql

Técnicas de Modelamiento

Introducción al SQL Técnicas de Modelamiento

Introducción al SQL

Prof. César Luza MonteroFacultad de Ingeniería de Sistemas e Informática

Universidad Nacional Mayor de San MarcosCopyright © 2008, Cesar Luza, Lima-PerúCopyright © 2008, Cesar Luza, Lima-Perú

Page 2: Tm13 introduccion al_sql

¿Lenguaje de programación?

Programa Lenguaje

CompiladorInstrucción

Interpretador

Interactivo

Fuente

Ejecutable

Exploración

Aplicación

Page 3: Tm13 introduccion al_sql

Segmento de Programa SQL

Desafío cognitivo

CREATE TABLE TIPO_USUARIO(idTipoUsuario int Identity(1,1),descTipoUsuario varchar(20) NOT NULL,CONSTRAINT PK_TIPO_USUARIO PRIMARY KEY(idTipoUsuario))

CREATE TABLE USUARIO(idUsuario char(8)NOT NULL,idTipoUsuario int NOT NULL,apelUsuario varchar(35)NOT NULL,nomUsuario varchar(35) NOT NULL,direccion varchar(50)NULL,habilitado bit NOT NULL,fechaExpCarnet smalldatetime NOT NULL,fechaVencCarnet smalldatetime NOT NULL,CONSTRAINT PK_USUARIO_idUsuario PRIMARY KEY(idUsuario),CONSTRAINT FK_USUARIO_idTipoUsuario FOREIGN KEY (idTipoUsuario)

REFERENCES TIPO_USUARIO(idTipoUsuario))

Page 4: Tm13 introduccion al_sql

Contenido

Mapa de contenidos

El SQL

Definición Comandos Consultas Ejemplos

Page 5: Tm13 introduccion al_sql

Definición de SQL

� SQL = Structured Query Language� Es el lenguaje más usado para bases de

datos relacionales� Lenguaje declarativo de alto nivel� Desarrollado por IBM (1974-1977)� Se convirtió en un standard definido por :

– ANSI (American National Standards Institute) e– ISO (International Standards Organization)

http://bochica.udea.edu.co/~jfduitam/DB-Course/SQL_archivos/frame.htm

Page 6: Tm13 introduccion al_sql

Definición de SQL

� SQL esta compuesto por lenguajes para :– Definición de Datos

• DDL (Data Definition Language)– Para definir estructuras de datos.

– Manipulación • DML (Data Manipulation Language)

– Para manipular datos

– Control• DCL (Data Control Language)

– Para recuperación, control de concurrencias, seguridad y protección

Page 7: Tm13 introduccion al_sql

Lenguaje de Definición de datos DDL

Nivel lógico Global

Nivel Externo Nivel Físico

Definición de

esquemaCREATE TABLE CREATE VIEW CREATE INDEX

Evolución de

esquema

ALTER TABLEDROP TABLE

DROP VIEW DROP INDEX

Los comandos DDL permiten controlar el esquema, es decir permiten construir, cambiar y remover definiciones

de tablas.

Page 8: Tm13 introduccion al_sql

Lenguaje de Manipulación de datos DML

Actualizaciones� Altas� Bajas� Cambios

INSERT INTO ,,,

DELETE FROM …

UPDATE ..

Consultas SELECT

Page 9: Tm13 introduccion al_sql

Lenguaje de Control de datos

Recuperación y Control de concurrencias

COMMIT

ROLLBACK ..

Seguridad y ProtecciónGRANTREVOKE

Page 10: Tm13 introduccion al_sql

Comandos DDL

� CREATE TABLE: – Nos permite crear una tabla de datos vacía.

� CREATE VIEW: – Permite crear una vista para un usuario

� CREATE INDEX: – Crea un índice que nos puede auxiliar para

las consultas.

Page 11: Tm13 introduccion al_sql

Comandos DDL

� CreateCREATE TABLE [nombre_basedatos].nombre_tabla

(column datatype [, ...]

[[CONSTRAINT npk] PRIMARY KEY (column [,...]),]

[[CONSTRAINT nuk] UNIQUE (column [,...]),]

[[CONSTRAINT nck] CHECK (condition) ]

[[CONSTRAINT nfk] FOREIGN KEY (column [,...]),]

REFERENCES [schema.]table (column [,...]) ]

) ;

Page 12: Tm13 introduccion al_sql

Comandos DDL

� Create– Los tipo de datos de las columnas sirven para

que decirle al DBMS que valor es permitido almacenar en cada atributo.

– Una selección de tipos incluye:• INTEGER• REAL• DECIMAL : Including DECIMAL(5) and DECIMAL(4,2)• VARCHAR• CHAR • DATE

Page 13: Tm13 introduccion al_sql

Comandos DDL

� Create– Ejemplos

CREATE TABLE Departamento(Dep_Codigo SMALLINT NOT NULL,Dep_Nombre VARCHAR (30),Dep_Localizacion VARCHAR (10),Dep_Telefono NUMERIC (10), constraint dep_pk PRIMARY KEY (Dep_Codigo),constraint dep_nom UNIQUE (Dep_Nombre), constraint dep_loc CHECK

(Dep_Localizacion in (‘Lima’, ‘Trujillo’, ‘Ica’)));

Page 14: Tm13 introduccion al_sql

Comandos DDL

Create– Ejemplos

CREATE TABLE empleado(Emp_Codigo smallint not null,Emp_Nombre varchar(30),Emp_Cargo varchar(11),Emp_Fecha_Alta datetime,Emp_Salario numeric (10),Emp_Cod_Dep smallint,constraint emp_pk PRIMARY KEY (Emp_Codigo),constraint emp_fk FOREIGN KEY (Emp_Cod_Dep) references Departamento (Dep_Codigo) on delete cascade,constraint emp_ck CHECK (Emp_salario > 0));

Page 15: Tm13 introduccion al_sql

Comandos DDL

CREATE table conductor (

nombre varchar(30) PRIMARY KEY, fechaNac date NOT NULL); CREATE TABLE carro (

nroPlaca varchar(8) PRIMARY KEY, marca varchar(20), color varchar(30), precio decimal(8,2), propietario varchar(30) references conductor ( nombre )

);

Page 16: Tm13 introduccion al_sql

Comandos DDL

CREATE table conductor (

nombre varchar(30) , fechaNac date NOT NULL,

PRIMARY KEY (NOMBRE)); CREATE TABLE carro (

nroPlaca varchar(8), marca varchar(20), color varchar(30), precio decimal(8,2), propietario varchar(30) PRIMARY KEY (nroPlaca),FOREINGN KEY (propietario) references conductor ( nombre )

);

Page 17: Tm13 introduccion al_sql

Comandos DDL

� ALTER TABLE: – Permite modificar la estructura de la tabla:

• agregar o borrar columnas• cambiar la definición de columnas• agregar o borrar constraints

� DROP TABLE: – Permite borrar una tabla.

� DROP INDEX: – Borra el índice indicado.

Page 18: Tm13 introduccion al_sql

Comandos DDL

� ALTER TABLE tableADD column datatype [DEFAULT expr][, column datatype]...;

� ALTER TABLE tableMODIFY (column datatype [DEFAULT expr][, column datatype]...);

� ALTER TABLE tableDROP COLUMN column;

� ALTER TABLE tableADD [CONSTRAINT nfk] FOREIGN KEY (column [,...]),]REFERENCES table((column [,...]);

� ALTER TABLE tableDROP CONSTRAINT constraint [CASCADE];

Page 19: Tm13 introduccion al_sql

Comandos DDL

� DROP TABLE tablename [CASCADE];� Ejemplo:

– DROP TABLE empleados;

� La principal dificultad con el drop de una tabla es la integridad referencial.

Page 20: Tm13 introduccion al_sql

Comandos DML

� INSERT: – Agrega una nueva fila en la tabla.

� DELETE: – Borra filas existentes de una tabla

� UPDATE: – Modifica filas existentes en una tabla.

� SELECT: – Permite realizar consultas de una o más

tablas

Page 21: Tm13 introduccion al_sql

DML Insert

� INSERT INTO table [(column [, column...])]VALUES (value [, value...]);– Esta sintaxis agrega una sola fila por vez.

� Ejemplos:– INSERT INTO departamento (dep_codigo, dep_nombre)

VALUES (50, ‘CONTABILIDAD');– INSERT INTO departamentos VALUES (50,

‘CONTABILIDAD‘, ’Lima’,’4610035’ );

Page 22: Tm13 introduccion al_sql

DML Insert

� También pueden insertarse un conjunto de filas en un comando

INSERT INTO gerentes (gcod, gnombre, gsalario)

SELECT ecod, enombre, esalario

FROM empleados

WHERE cargo = ‘GERENTE';

Page 23: Tm13 introduccion al_sql

DML Update

� Modifica filas existentes en una tablaUPDATE table

SET column = value [, column = value, ...]

[WHERE condition];

� EjemplosUPDATE empleados

SET dcod = 20

WHERE ecod = 7782;

Page 24: Tm13 introduccion al_sql

DML Delete

� Borra filas existentes en una tablaDELETE [FROM] table

[WHERE condition];

� EjemplosDELETE FROM departamentos

WHERE ddescr = ‘FINANZAS';

Page 25: Tm13 introduccion al_sql

DML Select

� El proceso más importante que podemos llevar a cabo en una base de datos es la consulta de los datos.

� De nada serviría una base de datos si no podemos consultarla.

� Es además la operación que efectuaremos con mayor frecuencia.

� La sentencia SELECT nos permite consultar los datos almacenados en una tabla de la base de datos.

Page 26: Tm13 introduccion al_sql

DML Select

� El formato de la sentencia select es:

SELECT [ALL | DISTINCT ] <nombre_campo> [{,<nombre_campo>}]FROM <nombre_tabla>|<nombre_vista> [{,<nombre_tabla>|<nombre_vista>}][WHERE <condicion> [{ AND|OR <condicion>}]][GROUP BY <nombre_campo> [{,<nombre_campo >}]][HAVING <condicion>[{ AND|OR <condicion>}]][ORDER BY <nombre_campo>|<indice_campo> [ASC | DESC] [{,<nombre_campo>|<indice_campo> [ASC | DESC ]}]]

Page 27: Tm13 introduccion al_sql

DML SelectSELECT

Palabra clave que indica que la sentencia de SQL que queremos ejecutar es de selección

ALL Indica que queremos seleccionar todos los valores. .Es el valor por defecto y no suele especificarse casi nunca

DISTINCT Indica que queremos seleccionar sólo los valores distintos

FROM

Indica la tabla (o tablas) desde la que queremos recuperar los datos. En el caso de que exista más de una tabla se denomina a la consulta "consulta combinada" o "join". En las consultas combinadas es necesario aplicar una condición de combinación a través de una cláusula WHERE

WHERE Especifica una condición que debe cumplirse para que los datos sean devueltos por la consulta. Admite los operadores lógicos AND y OR.

GROUP BY Especifica la agrupación que se da a los datos. Se usa siempre en combinación con funciones agregadas

HAVING

Especifica una condición que debe cumplirse para que los datos sean devueltos por la consulta. Su funcionamiento es similar al de WHERE pero aplicado al conjunto de resultados devueltos por la consulta. Debe aplicarse siempre junto a GROUP BY y la condición debe estar referida a los campos contenidos en ella

ORDER BYPresenta el resultado ordenado por las columnas indicadas. El orden puede expresarse con ASC (orden ascendente) y DESC (orden descendente). El valor predeterminado es ASC.

Page 28: Tm13 introduccion al_sql

DML Select

� Base Datos de ejemplo

– A fin de entender mejor el uso de las consultas con SQL usaremos una simple base de datos de ejemplo

– La base de datos esta formada por dos tablas: CARRO y CONDUCTOR

– Cada carro tiene un solo propietario Conductor– Un conductor puede ser propietario de varios carros

CONDUCTOR

CARRO

Page 29: Tm13 introduccion al_sql

DML Select

Nombre FechaNacimiento

Jim Smith 11 Jan 1980

Bob Smith 23 Mar 1981

Bob Jones 3 Dec 1986

NROPLACA MARCA COLOR PRECIO PROPIETARIO

F611 AAA FORD ROJO 12000 Jim SmithJ111 BBB SKODA AZUL 11000 Jim SmithA155 BDE MERCEDES AZUL 22000 Bob SmithK555 GHT FIAT VERDE 6000 Bob JonesSC04 BFE SMART AZUL 13000

CONDUCTOR

CARRO

FK

PK

PK

Page 30: Tm13 introduccion al_sql

DML Select simple

� SELECT column FROM tablename� SELECT column1,column2,column3 FROM tablename� SELECT * from tablename

SELECT * from CARRO;SELECT * from CARRO;NROPLACA MARCA COLOR PRECIO PROPIETARIO

F611 AAA FORD ROJO 12000 Jim Smith

J111 BBB SKODA AZUL 11000 Jim Smith

A155 BDE MERCEDES AZUL 22000 Bob Smith

K555 GHT FIAT VERDE 6000 Bob Jones

SC04 BFE SMART AZUL 13000

Page 31: Tm13 introduccion al_sql

DML Select simple

SELECT nroplaca from CARRO;

NROPLACAF611 AAA

J111 BBB

A155 BDE

K555 GHT

SC04 BFE

COLOR

PROPIETARIO

ROJO Jim Smith

AZUL Jim Smith

AZUL Bob Smith

VERDE Bob Jones

AZUL

SELECT color, propietario from CARRO;

Los espacios y saltos de líneas no importan. Una buena practica es poner ”;” al final de la consulta.

Las mayúsculas o minúsculas (excepto entre comillas simples) es los mismo.

Las sentencias siguientes son validas:SELECT NROPLACA FROM CARRO;

SElecT nroplaca From Carro

Page 32: Tm13 introduccion al_sql

DML Select clausula where

� Usted puede tener condiciones (reglas) en su consulta� Esas condiciones son comprobadas para cada fila que su

consulta produce� Si la condición es verdadera, la columna es mostrada� Si la condición es falsa, la columna no es mostrada� La condición empieza con WHERE

SELECT columnasFROM tablaWHERE condición

Page 33: Tm13 introduccion al_sql

DML Select con condición Simple

� Una condición simple puede ser mostrar los carros de color ROJO� La condición será color = 'ROJO'

NROPLACA

F611 AAA

J111 BBB

A155 BDE

K555 GHT

SC04 BFE

NROPLACA

F611 AAA

SELECT * from CARRO where color = ‘ROJO’;

NROPLACA

MARCA COLOR PRECIO PROPIETARIO

F611 AAA FORD ROJO 12000 Jim Smith

SELECT nroplaca FROM CARRO;

SELECT nroplaca from CARRO WHERE color = 'ROJO‘;

CASE SENSITIVE.‘ROJO’ no es lo mismo que ‘Rojo’ o ‘rojo’

Page 34: Tm13 introduccion al_sql

DML Select Comparaciones

� Las comparaciones validas incluyen: =,!=,<>,<,<=,>,>=– Color = ‘ROJO’ El color debe ser rojo– Color != ‘ROJO’ El color no es rojo– Color <> ‘ROJO’ Igual que !=– Precio > 10000 Mayor que 10000– Precio >= 10000 Mayor o igual a 10000– Precio < 10000 Menor que 10000– Precio <=10000 Menor o igual a 10000

� Números – Usted puede decir ‘10000’ o 10000.� Los Strings siempre tienen comillas

Page 35: Tm13 introduccion al_sql

DML Select Comparando Fechas

� Las comparaciones de fechas pueden ser delicadas� Usted puede usar todos lo comparadores para las fechas

NOMBRE

FECHANACIMIENTO

Jim Smith 11 Jan 1980

Bob Smith

23 Mar 1981

Bob Jones

3 Dec 1986

NOMBRE

FECHANACIMIENTO

Bob Jones

3 Dec 1986

SELECT nombre, fechanacimiento from CONDUCTOR where fechanacimiento = ‘3 Dec 1986’

SELECT nombre, fechanacimiento from CONDUCTOR

� FECHA1>FECHA2 indica que FECHA1 es en el futuro después de FECHA2.

SELECT nombre,fechanacimiento from CONDUCTORWHERE FECHANACIMIENTO >= ‘1 Jan 1981’

NOMBRE FECHANACIMIENTO

Bob Smith 23 Mar 1981

Bob Jones 3 Dec 1986

Page 36: Tm13 introduccion al_sql

DML Select Clausula BETWEEN

� Cuando trata con fechas, algunas veces se desea comprobar si el valor de un campo cae entre dos fechas

� La manera mas fácil de hacerlo es con BETWEEN� Por ejemplo, Encontrar todos los conductores que nacieron

entre 1995 y 1999SELECT nombre,fechanacimiento from CONDUCTORWHERE FECHANACIMIENTO between ‘1 Jan 1985’

and ’31 Dec 1999’� Between trabaja para otras cosas también, no solo fechas…

SELECT nroplaca from CARRO where precio between 5000 and 10000;

Page 37: Tm13 introduccion al_sql

DML Select Clausula NULL

� NULL indica que algo no tiene valor� No es un valor, y usted no puede usar operadores de comparación

normales � Por ejemplo, buscar los carros sin propietarios

Malo: SELECT nroplaca from carro where propietario = NULLMalo: SELECT nroplaca from carro where propietario = ‘NULL’

� Hay dos operadores especiales: IS NULL y IS NOT NULL

NROPLACASC04 BFE

SELECT nroplaca from carroWHERE propietario is null

NROPLACA

F611 AAA

J111 BBB

A155 BDE

K555 GHT

SC04 BFE

SELECT nroplaca from carroWHERE propietario is not null

Page 38: Tm13 introduccion al_sql

DML Select Clausula LIKE

� Algunas veces se desea tener una condición que involucra un string parcial o substrings en comodines

� LIKE permite esto, y se introduce en reemplazo de ‘=‘� Si el string contiene ‘%’ o ‘_’, LIKE los usa para soportar comodines.

– % - Matches 0 o mas caracteres en el string– _ - Matches exactamente 1 carácter en el string

� Nombre LIKE ‘Jim Smith’ e.g. Jim Smith� Nombre LIKE ‘_im Smith’ e.g. Tim Smith� Nombre LIKE ‘___ Smith’ e.g. Bob Smith� Nombre LIKE ‘% Smith’ e.g. Frank Smith� Nombre LIKE ‘% S%’ e.g. Brian Smart� Nombre LIKE ‘Bob %’ e.g. Bob Martin� Nombre LIKE ‘%’ i.e. match cualquiera� LIKE es mas costoso que =� Si usted no esta usando wildcards, siempre use = mas que LIKE.

Page 39: Tm13 introduccion al_sql

DML Select Operadores Lógicos

� Combinar condiciones en una simple clausula WHERE puede ser de utilidad

� AND y OR nos permiten hacer esto� NOT también nos permite modificar el comportamiento de las

condiciones� Cuando esas combinaciones se juntan, pueden ocurrir

problemas en el orden� Esto se resuelve usando paréntesis

Page 40: Tm13 introduccion al_sql

DML Select Operador AND

� AND combina condiciones donde todas deben ser verdaderas para filtrar

� Revisemos la tabla CARRO:

NROPLACA MARCA COLOR PRECIO PROPIETARIO

F611 AAA FORD ROJO 12000 Jim Smith

J111 BBB SKODA AZUL 11000 Jim Smith

A155 BDE MERCEDES AZUL 22000 Bob Smith

K555 GHT FIAT VERDE 6000 Bob Jones

SC04 BFE SMART AZUL 13000

Page 41: Tm13 introduccion al_sql

DML Select Operador AND

SELECT nroplaca from carro SELECT nroplaca from carrowhere color = ‘AZUL’ WHERE nroplaca LIKE ‘%5’

NROPLACAJ111 BBB

A155 BDE

SC04 BFE

NROPLACA

A155 BDE

K555 GHT

SELECT nroplaca from carroWHERE color = ‘AZUL’ and nroplaca LIKE ‘%5%’;

NROPLACA

A155 BDE

Page 42: Tm13 introduccion al_sql

DML Select Múltiples AND

� Usted puede tener muchas condiciones como LIKE y AND juntas

� Por ejemplo:

SELECT nroplacaFROM carroWHERE color = ‘AZUL’AND nroplaca like ‘%5%’AND propietario like ‘Bob %’;

Page 43: Tm13 introduccion al_sql

DML Select Operador OR

� OR es semejante a ‘uno u otro’. Basta que una de las condiciones sea verdadera entonces el filtro es verdadero.

� Por ejemplo: Buscar los carros de color rojo o azul

SELECT nroplaca,color from CARROWHERE color = ‘ROJO’ OR color = ‘AZUL’

NROPLACA

COLOR

F611 AAA ROJOJ111 BBB AZULA155 BDE AZULSC04 BFE AZUL

Page 44: Tm13 introduccion al_sql

DML Select Operador NOT

� NOT invierte la condición establecida� Por ejemplo: WHERE color = ‘ROJO’� Puede invertirse como:

– WHERE color != ‘ROJO’– WHERE NOT color = ‘ROJO’

� NOT no es realmente util en este ejemplo, pero es apropiado en muchos conjuntos de condiciones complejas.

Page 45: Tm13 introduccion al_sql

DML Select Precedencia

� La precedencia es el orden en la cual las condiciones son evaluadas y combinadas juntas

� Esto no es el orden en que ellos son escritos� El orden de las condiciones combinadas juntas es:

primero el AND, luego el OR y finalmente el NOT.� Considere: Buscar el carro que tiene 5 en el

nroplaca y es azul o rojo

SELECT nroplaca,color from carroWHERE color = ‘ROJO’ -- Line 1OR color = ‘AZUL’ -- Line 2AND nroplaca LIKE ‘%5%’ -- Line 3

Page 46: Tm13 introduccion al_sql

DML Select Paréntesis

� Rescribirlo como:SELECT nroplaca,color from carroWHERE (color = ‘ROJO’OR color = ‘AZUL’ )AND nroplaca LIKE ‘%5%’

� Podría ser aclarado como:SELECT nroplaca,color from carroWHERE ( color = ‘ROJO’ OR color = ‘AZUL’ )AND nroplaca LIKE ‘%5%’

Page 47: Tm13 introduccion al_sql

DML Select clausula DISTINCT

� SELECT color from carro; � SELECT DISTINCT color from carro;

COLOR

ROJO

AZUL

AZUL

VERDE

AZUL

COLOR

ROJO

AZUL

VERDE

Encontrar todos los colores usados en los carrosEncontrar todos los colores usados en los carros

Page 48: Tm13 introduccion al_sql

DML Select clausula ORDER BY

� Podria ser simpatico mostrar los resultados en forma ordenada

� SELECT marca from carro;

MARCA

FORD

FIAT

MERCEDES

SKODA

SMART

MARCA

FORD

SKODA

MERCEDES

FIAT

SMART

MARCA

SMART

SKODA

MERCEDES

FIAT

FORD

� ASC: Ordena alfabeticamente o numericamente:

� ORDER BY … ASC es por defecto.

� SELECT marca from carro

ORDER BY marca;

� DESC: Ordena en forma descendente alfabetico or numerico

� ORDER BY … DESC debe ser seleccionado.

� SELECT marca from carro ORDER BY marca DESC;

Page 49: Tm13 introduccion al_sql

DML Select Multi Column Sort

� ORDER BY puede tomar multiples columnas

SELECT marca,color FROM carroORDER BY color,marca;

MARCA COLOR

SKODA AZUL

SMART AZUL

MERCEDES AZUL

FORD ROJO

FIAT VERDE

Page 50: Tm13 introduccion al_sql

DML Select clausula IN

� Cuando usted tiene una lista de OR, todos sobre el mismo atributo, entonces, IN podria ser una manera simple de declararlos:

� Mas que:SELECT nroplaca, marca FROM carroWHERE marca = ‘SKODA’ or marca = ‘SMART’

� Se tiene:SELECT nroplaca, marca FROM carroWHERE marca in (‘SKODA’,’SMART’);

Page 51: Tm13 introduccion al_sql

DML Select Funciones de agregación� Las funciones de agregacióon le permite escribir

consultas para producir estadisticas sobre los datos en la base de datos

� Esas funciones son algunas veces llamadas SET functions.

� Estas incluyen:– AVG (calcula el promedio)– SUM– MAX– MIN– COUNT

Page 52: Tm13 introduccion al_sql

DML Select Función AVERAGE

SELECT precio FROM carro;

SELECT avg(precio) FROM carro;

PRECIO

12000

11000

22000

6000

13000

AVG(PRECIO)

12800

Page 53: Tm13 introduccion al_sql

DML Select Función SUM

� Suma todos los valores de la columna

SELECT sum(precio) FROM carro;

SUM(PRECIO)

64000

Page 54: Tm13 introduccion al_sql

DML Select Función MAX

� Cual es el maximo valor en la columna

SELECT max(precio) FROM carro;

MIN(PRECIO)

22000

Page 55: Tm13 introduccion al_sql

DML Select Función MIN

� Cual es el minimo valor en la columna

SELECT min(precio) FROM carro;

MIN(PRECIO)

22000

Page 56: Tm13 introduccion al_sql

DML Select Función COUNT

� Cuantas filas componen una columnaSELECT count(precio) FROM carro;

COUNT(PRECIO)

5

� Count(*) es simlar, pero tambiencuenta cuando los precios son nulosSELECT count(*) FROM carro;

Page 57: Tm13 introduccion al_sql

DML Select Función COUNT DISTINCT� Algunas veces se desea contar no el numero de filas de una

columna, sino cuantos valores diferentes podrian encontrase en una columna

� Hay una variante especial de count para hacer esto:

SELECT count(color) from carro;

SELECT count(DISTINCT color) from carro;

COUNT(PRECIO)

5

COUNT(PRECIO)

3

Page 58: Tm13 introduccion al_sql

DML Select clausula GROUP BY

� Hasta el momento las funciones de agregación solo han sido mostradas en consultas con solo la simple agregación sobre la linea select

� Usted puede combinar funciones y no-funciones sonre la linea select

� Para hacer esto necesita GROUP BY.

� Pregunta: Cual es el carro mas caro por cada color� Intuitivamente lo siguiente parece correcto , pero no ejecutara � SELECT color,max(precio)

FROM carro;

Page 59: Tm13 introduccion al_sql

DML Select clausula GROUP BY

SELECT color,precioFROM carro;

SELECT color,max(precio)FROM carroGROUP BY color;

COLOR PRECIO

ROJO 12000

AZUL 11000

AZUL 22000

VERDE 6000

AZUL 13000

COLOR PRECIO

ROJO 12000

AZUL 22000

VERDE 6000

Page 60: Tm13 introduccion al_sql

DML Select clausula HAVING

� HAVING permite condiciones para cada grupo de un GROUP BY.

� Considere el problema “Quien tiene mas de 1 carro”.

� Podriamos decir algo parecido:SELECT propietario from carro where count(propietario) > 1

� Las funciones de agregación no son permitidas en WHERE.� Ellos son permitidas en HAVING.

Page 61: Tm13 introduccion al_sql

DML Select clausula HAVING

SELECT propietario,count(nroplaca)FROM carroGROUP BY propietarioHAVING count(nroplaca) > 1

ORSELECT propietarioFROM carroGROUP BY propietarioHAVING count(nroplaca) > 1

count(*) Trabaja bien solo en este caso.

Page 62: Tm13 introduccion al_sql

SQL – JOINs y VIEWs

Page 63: Tm13 introduccion al_sql

DML Select múltiples tablas

� Consultar mas de una tabla de la base de datos es generalmente necesario

� La forma básica es solo listar todas las tablas necesarias� Usted debe decirle al DBMS como las tablas podrían ser

unidas (joins)� En este apartado se tratan estos temas

Page 64: Tm13 introduccion al_sql

DML Select Consultas individuales

SELECT * from conductor;NOMBRE FECHANACIMIENTO

Jim Smith 11 Jan 1980

Bob Smith 23 Mar 1981

Bob Jones 3 Dec 1986

NROPLACA MARCA COLOR PRECIO PROPIETARIO

F611 AAA FORD RED 12000 Jim Smith

J111 BBB SKODA BLUE 11000 Jim Smith

A155 BDE MERCEDES BLUE 22000 Bob Smith

K555 GHT FIAT GREEN 6000 Bob Jones

SC04 BFE SMART BLUE 13000

SELECT * from carro

Page 65: Tm13 introduccion al_sql

DML Select Consultas juntas sin restricción

NROPLACA MARCA COLOR

PRECIO

PROPIETARIO

NOMBRE FECHNACIMIENTO

F611 AAA FORD RED 12000 Jim Smith Jim Smith 11 Jan 1980

J111 BBB SKODA BLUE 11000 Jim Smith Jim Smith 11 Jan 1980

A155 BDE MERCEDES

BLUE 22000 Bob Smith Jim Smith 11 Jan 1980

K555 GHT FIAT GREEN

6000 Bob Jones Jim Smith 11 Jan 1980

SC04 BFE SMART BLUE 13000 Jim Smith 11 Jan 1980

F611 AAA FORD RED 12000 Jim Smith Bob Smith 23 Mar 1981

J111 BBB SKODA BLUE 11000 Jim Smith Bob Smith 23 Mar 1981

A155 BDE MERCEDES

BLUE 22000 Bob Smith Bob Smith 23 Mar 1981

K555 GHT FIAT GREEN

6000 Bob Jones Bob Smith 23 Mar 1981

SC04 BFE SMART BLUE 13000 Bob Smith 23 Mar 1981

F611 AAA FORD RED 12000 Jim Smith Bob Jones 3 Dec 1986

J111 BBB SKODA BLUE 11000 Jim Smith Bob Jones 3 Dec 1986

A155 BDE MERCEDES

BLUE 22000 Bob Smith Bob Jones 3 Dec 1986

K555 GHT FIAT GREEN

6000 Bob Jones Bob Jones 3 Dec 1986

SC04 BFE SMART BLUE 13000 Bob Jones 3 Dec 1986

SELECT * FROM carro, conductor

Page 66: Tm13 introduccion al_sql

DML Select Enlace por foreign key

NROPLACA

MARCA COLOR

PRECIO

PROPIETARIO

NOMBRE FECHANACIMIENTO

F611 AAA FORD RED 12000 Jim Smith Jim Smith 11 Jan 1980

J111 BBB SKODA BLUE 11000 Jim Smith Jim Smith 11 Jan 1980

A155 BDE MERCEDES BLUE 22000 Bob Smith Jim Smith 11 Jan 1980

K555 GHT FIAT GREEN

6000 Bob Jones Jim Smith 11 Jan 1980

SC04 BFE SMART BLUE 13000 Jim Smith 11 Jan 1980

F611 AAA FORD RED 12000 Jim Smith Bob Smith 23 Mar 1981

J111 BBB SKODA BLUE 11000 Jim Smith Bob Smith 23 Mar 1981

A155 BDE MERCEDES BLUE 22000 Bob Smith Bob Smith 23 Mar 1981

K555 GHT FIAT GREEN

6000 Bob Jones Bob Smith 23 Mar 1981

SC04 BFE SMART BLUE 13000 Bob Smith 23 Mar 1981

F611 AAA FORD RED 12000 Jim Smith Bob Jones 3 Dec 1986

J111 BBB SKODA BLUE 11000 Jim Smith Bob Jones 3 Dec 1986

A155 BDE MERCEDES BLUE 22000 Bob Smith Bob Jones 3 Dec 1986

K555 GHT FIAT GREEN

6000 Bob Jones Bob Jones 3 Dec 1986

SC04 BFE SMART BLUE 13000 Bob Jones 3 Dec 1986

Page 67: Tm13 introduccion al_sql

DML Select JOIN Tradicional

SELECT *FROM carro, conductorWHERE propietario = nombre;

NROPLACA MARCA COLOR PRECIO

PROPIETARIO

NOMBRE FECHANACIMIENTO

F611 AAA FORD RED 12000 Jim Smith Jim Smith 11 Jan 1980

J111 BBB SKODA BLUE 11000 Jim Smith Jim Smith 11 Jan 1980

A155 BDE MERCEDES BLUE 22000 Bob Smith Bob Smith 23 Mar 1981

K555 GHT FIAT GREEN 6000 Bob Jones Bob Jones 3 Dec 1986

Page 68: Tm13 introduccion al_sql

DML Select JOIN Moderno

SELECT *FROM carro JOIN conductor ON ( propietario = nombre );

NROPLACA

MARCA COLOR PRECIO PROPIETARIO

NOMBRE

FECHANACIMIENTO

F611 AAA FORD RED 12000 Jim Smith Jim Smith 11 Jan 1980

J111 BBB SKODA BLUE 11000 Jim Smith Jim Smith 11 Jan 1980

A155 BDE MERCEDES

BLUE 22000 Bob Smith Bob Smith 23 Mar 1981

K555 GHT FIAT GREEN 6000 Bob Jones Bob Jones

3 Dec 1986

Page 69: Tm13 introduccion al_sql

DML Select OUTER JOIN

� Este es un carro sin propietario.� Algunas veces deseamos ver las filas que fallan a la condición join por

el valor NULL� Para ver los NULL en el joins usaremos OUTER JOIN.� El JOIN discutido hasta este punto es conocido como INNER JOIN.� Realmente outer join significa que deseamos forzar que todas las filas

de una de las tablas aparezca en el resultado. � Hay algunas variantes del OUTER JOIN, dependiendo de cuales filas

desea usted no perder.

NROPLACA

MARCA COLOR

PRECIO PROPIETARIO NOMBRE FECHANACIMIENTO

SC04 BFE SMART BLUE 13000 Bob Jones 3 Dec 1986

Considere la ultima fila del join sin restricción

Page 70: Tm13 introduccion al_sql

DML Select OUTER JOIN

� Considere: Select *

FROM carro JOIN conductor on (propietario = nombre)

To the RIGHT of the JOIN

To the LEFT of the JOIN� Si usted desea todas las filas de CARRO siempre en la respuesta,

necesita un LEFT OUTER JOIN� Si usted necesita todas las filas de CONDUCTOR siempre en la

respuesta, necesita un RIGHT OUTER JOIN

Page 71: Tm13 introduccion al_sql

DML Select OUTER JOIN

SELECT *FROM carro LEFT JOIN conductor ON ( propietario = nombre);

nroplaca marca color precio propietario nombre fecnac

F611 AAA FORD RED 12000 Jim Smith Jim Smith 11 Jan 1980

J111 BBB SKODA BLUE 11000 Jim Smith Jim Smith 11 Jan 1980

A155 BDE MERCEDES BLUE 22000 Bob Smith Bob Smith 23 Mar 1981

K555 GHT FIAT GREEN 6000 Bob Jones Bob Jones 3 Dec 1986

SC04 BFE SMART BLUE 13000

SELECT *FROM carro RIGHT JOIN conductor ON ( propietario = nombre);

Page 72: Tm13 introduccion al_sql

DML Select FULL OUTER JOIN

� Con LEFT OUTER join, usted no pierde las filas de la tabla izquierda� Con RIGHT OUTER join, usted no pierde las filas de la tabla derecha.� Si usted desea mostrar todas las filas de ambos lados

– Necesita FULL OUTER join, conocido como FULL JOIN.� Considere una nueva fila; David Davis, para CONDUCTOR. David no

es propietario de ningún carro.

nombre fechanacimiento

Jim Smith 11 Jan 1980

Bob Smith 23 Mar 1981

Bob Jones 3 Dec 1986

David Davis 1 Oct 1975

Page 73: Tm13 introduccion al_sql

DML Select Ejemplo: LEFT y RIGHT

SELECT *FROM carro LEFT JOIN conductor ON ( propietario = nombre);

nroplaca marca color precio propietario nombre fecnac

F611 AAA FORD RED 12000 Jim Smith Jim Smith 11 Jan 1980

J111 BBB SKODA BLUE 11000 Jim Smith Jim Smith 11 Jan 1980

A155 BDE MERCEDES BLUE 22000 Bob Smith Bob Smith 23 Mar 1981

K555 GHT FIAT GREEN 6000 Bob Jones Bob Jones 3 Dec 1986

SC04 BFE SMART BLUE 13000

SELECT *FROM carro RIGHT JOIN conductor ON ( propietario = nombre );nroplaca marca color precio propietario nombre fecnac

F611 AAA FORD RED 12000 Jim Smith Jim Smith 11 Jan 1980

J111 BBB SKODA BLUE 11000 Jim Smith Jim Smith 11 Jan 1980

A155 BDE MERCEDES BLUE 22000 Bob Smith Bob Smith 23 Mar 1981

K555 GHT FIAT GREEN 6000 Bob Jones Bob Jones 3 Dec 1986

David Davis 1 Oct 1975

Page 74: Tm13 introduccion al_sql

DML Select Ejemplo: Full

SELECT *FROM carro FULL JOIN conductor ON ( propietario = nombre);

nroplaca marca color precio propietario nombre fecnac

F611 AAA FORD RED 12000 Jim Smith Jim Smith 11 Jan 1980

J111 BBB SKODA BLUE 11000 Jim Smith Jim Smith 11 Jan 1980

A155 BDE MERCEDES BLUE 22000 Bob Smith Bob Smith 23 Mar 1981

K555 GHT FIAT GREEN 6000 Bob Jones Bob Jones 3 Dec 1986

SC04 BFE SMART BLUE 13000

David Davis 1 Oct 1975

Page 75: Tm13 introduccion al_sql

DML Select Naming

� Algunas veces los nombres de las columnas pueden ser ambiguos.� Tome dos tablas, llamados ALPHA y BRAVO. Asumimos que cada

tabla tiene una columna llamada CODIGO.

� La consulta: SELECT CODIGO from ALPHA,BRAVO;

� Falla, porque CODIGO esta en ambas tablas. � El DBMS no puede trabajar el nombre de columna que se desea.� Se puede decirle al DBMS con exactitud anteponiendo el nombre de

la tabla al nombre de la columna, separados por un punto.

� SELECT alpha.codigo from ALPHA, BRAVO;

Page 76: Tm13 introduccion al_sql

DML Select Aliases

� Si se escribe una consulta grande, puede escribir el mismo nombre largo de tabla una y otra vez.

� Esto puede provocar errores en la digitación� SQL permite renombrar las tabla durante la consulta.� Se escribe el nuevo nombre inmediatamente después del

nombre de la tabla en el FROM, separado por espacio.� Mas que: SELECT carro.propietario FROM carro;� Puede decir: SELECT c.propietario FROM carro c;

� Tambien trabaja en JOIN.SELECT c.nroplaca, c.propietario, d.fechanacimientoFROM carro c JOIN conductor d on (c.propietario = d.nombre)

Page 77: Tm13 introduccion al_sql

DML Select Selfjoin

� Un selfjoin, o un equijoin, es donde una misma tabla es usado dos veces en una línea FROM

� Indica la necesidad de usar una sola tabla en dos formas diferentes simultáneamente

� Considere la pregunta “Quienes son propietarios de un carro del mismo color que del de Bob Smith”?

Color

BLUE

SELECT propietario FROM carroWHERE color = ‘BLUE’AND propietario != ‘Bob Smith’AND propietario not null;

Propietario

Jim Smith

SELECT color FROM carro WHERE propietario = ‘Bob Smith’;

Page 78: Tm13 introduccion al_sql

DML Select Selfjoin

SELECT other.propietarioFROM carro bobsmith, carro otherWHERE bobsmith.color = other.color -- 1AND bobsmith.propietario = ‘Bob Smith’ -- 2AND bobsmith.propietario != other.propietario -- 3AND other.propietario NOT NULL -- 4;

Page 79: Tm13 introduccion al_sql

VIEWS

� Las Vistas (VIEWS) son para una base de datos lo que las subrutinas son para los lenguajes de programación

� Una vista nos permite almacenar una consulta en la base de datos, así podemos accesarlo después por su nombre.

� Tratamos las vista en la misma forma que una tabla norma cuando escribimos consultas

Page 80: Tm13 introduccion al_sql

VIEWS

� Escribamos una consulta que nos diga cuantos conductores y cuantos carros esta el al base de datos

� Podríamos escribirlo separadamente

SELECT count(*) from CONDUCTOR;SELECT count(*) from CARRO;

� Sin embargo, son dos consultas y queremos hacerlo en una sola

� Almacenemos las dos consultas en dos diferentes VIEWs

Page 81: Tm13 introduccion al_sql

VIEWS

CREATE VIEW count1 (total) AS select count(*) from conductor;CREATE VIEW count2 (total) AS select count(*) from carro;

Select * from count1;

Select * from count2;

Select count1.total,count2.totalfrom count1,count2;

Total

3

Total

5

Total Total

3 5

Page 82: Tm13 introduccion al_sql

Borrando una VIEW

� Cuando finaliza con una VIEW puede crear su propio borrado, con el comando DROP VIEW.

� Para nuestro ejemplo…

DROP VIEW count1;

DROP VIEW count2;

Page 83: Tm13 introduccion al_sql

SQL - Subqueries

Page 84: Tm13 introduccion al_sql

Subqueries

� Un Subquery es una sentencia select dentro de otra� Usado en la cláusula WHERE � Los Subqueries pueden retornar muchas filas.� Los Subqueries pueden retornar solo una columna.� Se utiliza como reemplazo de una Vista o de un selfjoin.� Algunos programadores lo ven como más fácil de entender

que otras � El principal inconveniente es que pueden ser mucho más

lentos que selfjoin o las Vistas

Page 85: Tm13 introduccion al_sql

Ejemplo Simple

� Quien en la base de datos es mayor que Jim Smith?

SELECT fecnac FROM conductor WHERE nombre = ‘Jim Smith’;

SELECT nmbre FROM conductor WHERE fecnac > ’11 Jan 1980’;

fecnac

11 Jan 1980

name

Bob Smith

Bob Jones

Page 86: Tm13 introduccion al_sql

Ejemplo Simple

� Select juntos:

SELECT nombre FROM conductorWHERE fecnac > (SELECT fecnac

FROM conductorWHERE nombre = ‘Jim Smith’)

;

� Esta consulta solo trabajará si hay solo 1 Jim Smith.

Page 87: Tm13 introduccion al_sql

ANY y ALL

� Para soportar subqueries que retornan mas de 1 fila se necesita algun operador adicional… ANY and ALL.

� ANY – cambia la regla de que debe ser verdadera para al menos un de las filas retornadas desde el subquery.

� ALL – cambia la regla de que debe ser verdadera para todos y cada una de las filas retornadas desde el subquery.

� Los operadores ANY o ALL va inmediatamente antes de abrir el paréntesis.

Page 88: Tm13 introduccion al_sql

Ejemplo 1

� Que carros son del mismo color de los carros propedad de Jim Smith?

� Jim es propietario de 2 carros, uno es Rojo y el otro Azul. Estamos buscando los carros que sean Rojo o Azul.

SELECT nroplaca FROM carro

WHERE color = ANY ( SELECT color

FROM carro

WHERE propietario = ‘Jim Smith’

)

Page 89: Tm13 introduccion al_sql

Ejemplo 2

� Listar los conductores mas jovenes que todas las personas propietarias de carros azules.

� Estamos buscando las edades de los conductores quienes osn propietarios de carros de color azul, y listar los conductores que son menores que todas esas edades.

SELECT nombre,fecnac FROM conductorWHERE fecnac < ALL (

SELECT fecnacFROM carro JOIN conductor ON (propietario=nombre)WHERE color = ‘BLUE’

) ;

Page 90: Tm13 introduccion al_sql

IN and NOT IN

� We earlier saw IN working for sets like (‘A’,’B’).� A subquery itself returns its result as a set.� Therefore we can use IN and NOT IN on

subqueries.

� Question: Which cars are the same colour as one of Jim Smith’s cars?

SELECT regno FROM carWHERE colour IN (SELECT colour FROM car

WHERE owner = ‘Jim Smith’);

Page 91: Tm13 introduccion al_sql

Example of NOT IN

� Question: Which cars DO NOT have the same colour as one of Jim Smith’s cars?

SELECT regno FROM car

WHERE colour NOT IN (SELECT colour FROM car

WHERE owner = ‘Jim Smith’)

;

Page 92: Tm13 introduccion al_sql

EXISTS

� If a question involves discovering uniqueness, then it can probably be easily solved using the operator EXISTS or NOT EXISTS.

� The EXISTS operator tests the result of running a subquery, and if any rows are returned it is TRUE, else it is FALSE.

� NOT EXISTS does the opposite of EXISTS.

� Note that subqueries can actually refer to tables defined outside the brackets which define the subquery. This is exceptionally useful, but can be slow to execute and confusing to look at.

Page 93: Tm13 introduccion al_sql

� Question: List the colours which are only used once in the database.

SELECT colourFROM car aWHERE exists (

SELECT colour -- The row does not matterFROM car b -- unique name from aWHERE a.colour = b.colour -- Same colour as aAND a.regno != b.regno -- Different car from a

);

Page 94: Tm13 introduccion al_sql

UNION

� Sometimes you might write two or more queries which produce the same types of answer, and you want to combine the rows of these answers into a single result.

� UNION does this, and basically allows you to join different SELECT statement together.

� UNION automatically removes duplicate rows.

� For the next example, assume a row has been added to the DRIVER table for David Davis, but that he owns no cars.

� Question: List all drivers in the DRIVER table, together with how many cars they own.

Page 95: Tm13 introduccion al_sql

SELECT name,count(*)

FROM driver JOIN car on (name = owner)

David Davis is missing, as he did not satisfy the JOIN condition.

NAME Count(*)

Jim Smith 2

Bob Smith 1

Bob Jones 1

Page 96: Tm13 introduccion al_sql

� Write a query just for David Davis…

SELECT name,0

FROM driver

WHERE name NOT IN (select owner from car)

NAME

David Davis 0

Page 97: Tm13 introduccion al_sql

� Link the two queries together:SELECT name,count(*)FROM driver JOIN car on (name = owner)UNIONSELECT name,0FROM driverWHERE name NOT IN (select owner from car)

NAME Count(*)

Jim Smith 2

Bob Smith 1

Bob Jones 1

David Davis 0

Page 98: Tm13 introduccion al_sql

View Manipulation

When is a view ‘materialised’ or populated with rows of data?

� When it is defined or� when it is accessed

If it is the former then subsequent inserts, deletes and updates would not be visible. If the latter then changes will be seen.

Some systems allow you to chose when views are materialised, most do not and views are materialised whenever they are accessed thus all changes can be seen.

Page 99: Tm13 introduccion al_sql

VIEW update, insert and delete

Can we change views?� Yes, provided the

primary key of all the base tables which make up the view are present in the view.

Base Table - A Base Table - BA# B#

View Definition

A# B#View

Page 100: Tm13 introduccion al_sql

VIEW cont...

� This view cannot be changed because we have no means of knowing which row of B to modify

Base Table - A Base Table - BA# B#

View Definition

A#View

Page 101: Tm13 introduccion al_sql

SELECT - Order of Evaluation

SELECT [DISTINCT] column_name 5,6 eliminate unwanted data

FROM label_list 1 Cartesian Product[WHERE condition ] 2

eliminate unwanted rows[GROUP BY column_list 3 group rows[HAVING condition ]] 4 eliminate unwanted

groups[ORDER BY column_list[DESC]] 7 sort rows

The last four components are optional.

Page 102: Tm13 introduccion al_sql

Muchas Gracias…