Sei sulla pagina 1di 39

Iniciacin

BasesdeDatosRelaciones
&
LenguajeSQL

BASESDEDATOSRELACIONALESYLENGUAJESQL

DISTRIBUIDOPOR:

CENTRODEINFORMTICAPROFESIONALS.L.

C/URGELL,100
08011BARCELONA
TFNO:934265087

C/RAFAELAYBARRA,10
48014BILBAO
TFNO:944483133

www.cipsa.net

RESERVADOSTODOSLOSDERECHOS.QUEDAPROHIBIDOTODOTIPODE
REPRODUCCINTOTALOPARCIALDEESTEMANUAL,SINPREVIO
CONSENTIMIENTOPORELESCRITORDELEDITOR

CIPSA
2

BASESDEDATOSRELACIONALESYLENGUAJESQL

1.ConceptodeBasedeDatos
Hoy en da las empresas necesitan manejar gran cantidad de datos, con lo cual
necesitarantenermedios,hardwareysoftwarequepermitanaccederalainformacin
deformarpida,sencillayfiable.
Tradicionalmente, la informacin se almacenaba en un conjunto de ficheros, y estos
ficherosnoguardabanningunarelacinentresconloquelosdatospodanrepetirse
envariosdeellos(loquesuponatenerinformacinredundante).Amenudosetiene
la idea que una Base de Datos es similar a un almacn de datos o a un conjunto de
ficheros.Estoescierto,porqueunaBasedeDatosesunconjuntodeficheros,perono
es cierto que cualquierconjunto de ficheros constituya una Base de Datos. Para que
seaunaBasedeDatossedebendarunaseriedecondiciones,queesprecisamentelo
queestudiaremos.
LasBasesdeDatossurgenafinalesdelosaos60.EnunaBasedeDatossealmacenan
todos los datos que necesite una empresa, adems los programas que utilizan esos
datosnosepreocupandesualmacenamientofsico.
1.1.ModeloER
Unabasededatossedefinecomounconjuntodedatosrelacionadosyalmacenados
sinredundanciasinnecesarias.
Estosdatostienenqueserviravariasaplicaciones(Word,ExcelVisualBasic),esdecir,
tienequeexistirunaindependenciadelosdatosylosprogramasquelosmanejan.
Estos tambin deben ser compartibles entre varios usuarios manteniendo en todo
momento la integridad y seguridad de la informacin (que se puedan utilizar
mecanismosparaevitarquelosdatosseanperjudicadosporcambiosnoautorizados,
porejemplo)yredundanciamnima.
A lo largo de la historia de las Bases de Datos, se han propuesto muchos modelos
conceptuales de datos, sin embargo, el ms utilizado en la prctica es el modelo
EntidadRelacin(modeloER).FuecreadoporPeterChenamediadosdelossesenta,
paralarepresentacinconceptualdelosdatosyestablecerlasrelacionesquedeben
existirentreellos.
ElmodeloERsebasaenunapercepcindeunmundoreal(anlisisdeunproyectoen
concreto)queconsisteenunconjuntodeobjetosbsicosdenominadosentidades,as
como de las relaciones existentes entre ellos. Las entidades se diferencian unas de
otrasporelconjuntodesuspropiedadesllamadasatributos.
CIPSA
3

BASESDEDATOSRELACIONALESYLENGUAJESQL

1.2.ConceptosdelmodeloER
El modelo ER se basa en una serie de conceptos sobre los que se construyen los
principiosderepresentacindeinformacinrelacionada.

1.2.1Entidades

Una Entidad es una persona, lugar, cosa u objeto real o abstracto de inters para la
BasedeDatosydelcualsedeseaalmacenarinformacin.
Llamaremosentidadalaestructuragenrica,yocurrenciadeentidadacadaunadelas
realizacionesconcretasdelamisma,porejemplo,enlaBasedeDatosdeuninstituto
la entidad ser el alumno y cada uno de los alumnos ser una ocurrencia de esa
entidad.
UnaBasedeDatosincluirunacoleccindeentidades,cadaunadelascualestendr
unnmerocualquieradeocurrencias.
Larepresentacingrficadeunaentidadesunrectnguloetiquetadoconelnombre
delamisma.
Ejemplo:
SupongamosquequeremosinformatizarlosdatosdeunaUniversidad.Eneste
caso,algunasdelasentidadesatenerencuentaseranlassiguientes:
PROFESOR

Almacenar informacin sobre los profesores que imparten


docenciaenlaUniversidad.

P.A.S.

Los datos de personal de administracin y servicios se


almacenarnenestaentidad.

ALUMNO

Contendr datos de los alumnos que se han matriculado en la


Universidad.

MATRICULA

Contendr informacin de las matrculas realizadas por los


alumnos.

NOMINA

Almacenar las nminas del personal contratado por la


Universidad.

stas son nicamente algunas de las entidades que formaran parte del sistema de
informacin de la Universidad. En realidad, son muchas ms: horarios, actividades,
deportes,equipo_rector

CIPSA
4

BASESDEDATOSRELACIONALESYLENGUAJESQL

Ejemplo:
Sisedeseadisearunsistemadegestindeinformacinenunvideoclub,las
entidadesprincipalesaconsiderarseran:
SOCIO

Los datos de los socios del videoclub quedaran reflejados en


estaentidad.

PELICULA

Almacenara la informacin de las pelculas disponibles en el


videoclub.

Ejemplo:
Entre las entidades utilizadas para informatizar un taller de automviles
podemosdestacar:
Almacenarinformacinsobrelosvehculosquesonreparados
eneltaller.

AUTOMOVIL

MECANICO

Contendrdatosdelosmecnicosdelosquedisponeeltaller.

1.2.2.Relaciones
Lasentidadesporssolasnodescribenlarealidaddeunsistemadeinformacin.No
basta con identificar objetos, hay adems que establecer las asociaciones existentes
entrelosmismos.Paraello,seintroduceelconceptodeRelacin.
Una relacin es una asociacin entre varias entidades. Grficamente se representa
medianteunromboetiquetadoconelnombredelarelacinyunidomediantelneasa
lasentidadesqueasocia.
Ejemplo:
En la Base de Datos de un instituto podemos tener dos entidades Alumno y
Asignatura. La relacin Matriculado asocia Alumno con Asignatura. En todo
caso,estamosrepresentandoelmodeloconceptualdecmovaaserlaBasede
Datos.

ALUMNO

MATRICULADO

ASIGNATURA

CIPSA
5

BASESDEDATOSRELACIONALESYLENGUAJESQL

Alnmerodeentidadesqueparticipanenlarelacinseledenominagradode
larelacinystaspuedenserbinarias,terciarias,,hastaenearias.

ALUMNO

MATRICULADO

ASIGNATURA

FORMULARIO

1.2.3.Cardinalidaddelasrelaciones
Sellamacardinalidadalnmeromximodeocurrenciasdeunaentidadquepueden
intervenirporcadaocurrenciadelaotraentidadasociadaenlarelacin.Existentres
tiposderelaciones,enfuncindelndeocurrenciasqueimplican:
De uno a uno (1:1). Como mximo puede intervenir una ocurrencia de una
entidad por cada ocurrencia de la otra entidad. Por ejemplo, si quiero
relacionarOrquestaconDirectortitular,veoqueslopuedehaberundirector
titularpororquestaluego:

1:1
ORQUESTA

DIRIGE

DIR.TITULAR

Relacin1:1Unaorquestatieneunnicodirectortitular,yundirectortitular
slopuededirigirunaorquesta.Acadaocurrenciadeorquestalecorresponde
unaocurrenciadedirectortitular.

CIPSA
6

BASESDEDATOSRELACIONALESYLENGUAJESQL

Deunoan(1:N).Sellamadeunoamuchossiparaunadelasentidadespuede
haberunnmeroindefinido(mayorqueuno)deocurrenciasdelaotraentidad,
porejemplo,enunaBasedeDatosdeunaeditorialguardoinformacinsobre
lasdistintaseditorialesyloslibrosquehayenlabiblioteca.Unaeditorialpuede
editarmuchoslibros.

1:N
EDITORIAL

EDITA

LIBRO

Relacin1:N Unaeditorialpuedepublicarunoomslibros,mientrasqueun
librosloeseditadoporunaeditorial.

De N a M (N:M).Sellamade muchos a muchos sisedaelcasoanteriorpara


ambasentidades,porejemplo,sirelacionoelautorconloslibros,yhaylibros
escritosporvariosautores.Acadaocurrenciadelibrolopuedencorresponder
(escribir) muchos autores. A cada autor le puede corresponder uno o varios
libros.

1:NN:M

EDITORIAL

EDITA

LIBRO

ESCRIBE

AUTOR

RelacinN:MUnlibropuedeestarescritoporunoovariosautoresyunautor
puedehaberescritounoomslibros.Larelacinesde1:Nenambossentidos.

CIPSA
7

BASESDEDATOSRELACIONALESYLENGUAJESQL

1.2.4.Atributos

Unatributoesunaunidadbsicaeindivisibledeinformacinacercadeunaentidado
unarelacinquesirveparaidentificarlaodescribirla.Secorrespondeconcadaunade
laspropiedadesocaractersticasquetieneunaentidadorelacin.

Si tomamos como entidad a la mujer vemos que tiene como atributos: Nombre, DNI,
direccin,fechadenacimiento,fechadealtaenlaempresa,salario,etc.Todosestos
atributossoncamposquedefinenunaentidad(camposquedefinenunregistro).
Ejemplo:
Entidad alumno: son atributos del alumno: DNI, nombre, domicilio, fecha de
nacimiento.
DNI
Nombre

Direccin

ALUMNO

Fecha_Nacimiento

Entretodoslosatributosquedefinenaunaentidad,debemoselegirunoovariosque
identifiquen de forma nica a cada uno de los elementos representados por esa
entidad.Aesteatributooconjuntodeatributosselellamaclaveprimaria.Puedeque
existamsdeunidentificadorquecumplaesacondicin.Entalcaso,unodeellosser
laclaveprimaria,yelrestoclavesalternativas.Slopuedehaberunaclaveprimaria.
Se define como clave externa a aqul o aquellos atributos de una entidad que son
claveprimariaenotraentidad.

CIPSA
8

BASESDEDATOSRELACIONALESYLENGUAJESQL

1.2.5.ReglasdeIntegridad
Se denominan reglas de integridad al conjunto de reglas que garantizan la
consistencia de la informacin. Estas reglas actan fundamentalmente sobre los
dominios,lasclavesprimariasylasclavesajenas.Tenemosdos:

Regladeintegridaddelaentidad:elatributoqueesclaveopartedelaclaveno
puedetomarvaloresnulos.

Regla de integridad referencial: un valor no nulo de una clave externa debe


coincidirconunvalordeunaclaveprimariadeotrarelacin.Sihayunaclave
ajena,debeexistirunatuplaparaesaclaveajena.

CIPSA
9

BASESDEDATOSRELACIONALESYLENGUAJESQL

2.BasesdeDatosRelacionales
Unabasededatosrelacionalseconstruyeempleandolossiguienteselementos:
Tablas

Las tablas constituyen la forma de estructurar los datos, organizados mediante filas
(registros)ycolumnas(campos).Paraqueunatablaformepartedeunabasededatos
relacionaldebecumplirlossiguientesrequisitos:

Debetenerunsolotipodefila,cuyoformatoquedadefinidoporelesquemadelatablaola
relacin,esdecir,todaslasfilasdelatablahandetenerlasmismascolumnas.

Cadacolumnadebesernicaynopuedenexistircolumnasduplicadas.

Cadacolumnadebeestarespecificadaporunnombreconcreto.

El valor de una columna para una fila determinada debe ser nico, no pueden existir
mltiplosvaloresenunaposicindeunacolumna.

Losvaloresdeunacolumnadebenperteneceraldominioquerepresentan,yesposiblequeun
mismodominioseutiliceparadefinirlosvaloresdevariascolumnas.

El concepto tabla se corresponde con una entidad en el modelo ER. Las tablas
tambin se emplean para implementar relaciones de cardinalidad NM en el modelo
entidadrelacin.
Registros

Los registros se corresponden con cada fila de una tabla relacional o relacin. Cada
registrorepresentaaunelementodelaentidadrepresentadaporlatabla.

Campos
Loscampossonlascolumnasdecadatabla.Cadacolumnarepresentaunainformacin
quesedeseaalmacenardecadaelementoentidad,ysecorrespondeconsusatributos
enelmodeloentidadrelacin.

Claveprincipaloprimaria(primarykey):

Unaclaveprimariasonunoovarioscamposcuyosvaloresidentificandemaneranica
a cada elemento, de manera que no puede haber dos elementos con los mismos
valoresenlatabla.
CIPSA
10

BASESDEDATOSRELACIONALESYLENGUAJESQL

Clavealternativa

Lasclavesalternativassoncamposcuyosvaloresnoserepitenentreloselementosde
laentidad,peronoformanpartedelaclaveprimaria.

Claveextranjera

Esunacolumnacuyovalorsecorrespondeconelvalordelaclaveprimariaderegistros
presentes normalmente otra tabla con los que existe una relacin. Los valores de la
claveextranjerasirvendenexodeuninpararelacionarelementosdedosentidades
distintas.

Valoresnulos

Un valor nulo es aquel que recibe un campo en un registro cuando no existe valor
asociado al mismo. Los campos pueden admitir o no valores nulos en funcin de la
obligatoriedad de los datos. Los campos que se establecen como clave primaria no
puedentenervaloresnulos.

CIPSA
11

BASESDEDATOSRELACIONALESYLENGUAJESQL

2.1.PasodelmodeloERaunabasededatosrelacional
Elmodeloentidadrelacinsirvedeguaenlacreacinymantenimientodelasbases
dedatosrelacionales.Paracrearunabasededatosrelacionalessiempreconveniente
disearantesunmodeloER.
LacreacindeunabasededatosarelacionalapartirdeunmodeloERsebasaenlos
siguientesprincipios:
Toda entidad se transforma en una relacin o tabla. A cada entidad del
modelo ER le corresponder una tabla en la base de datos relacional y se
mantendrntantolosatributoscomolaclaveprimaria.

MODELOER

MODELORELACIONAL:

CLIENTE(CODIGO,NOMBRE,APELLIDOS,DNI,TFNO)
Tabla:
CLIENTE
Campos:
CODIGO, NOMBRE, APELLIDOS, DNI y TFNO.
Clave primaria: CODIGO.

Todoatributodeunaentidadodeunarelacinsetransformaenunacolumna
(atributo)delatablaqueformalaentidadolarelacin.

Elidentificadornicodelaentidadseconvierteenclaveprimariadelatabla.Se
distinguedelrestodelosatributosporquesesubraya.

Elnombredelosatributos,entidadesyrelacionesdelmodeloERpermanece
paraelmodelorelacional,identificandolasrelacionesysusatributos.Aveces,
podremos usar el plural de las entidades. Tambin es posible usar como
nombre de la relacin o tabla de una relacin parte de cada uno de los
nombresdelasentidadesquerelacionan.
CIPSA
12

BASESDEDATOSRELACIONALESYLENGUAJESQL

2.1.a.Relaciones11

[1:1].Siunadelasentidadesposeecardinalidad(0,1)ylaotra(1,1),conviene
propagarlaclavedelaentidadconcardinalidad(1,1)alatablaresultantede
laentidaddecardinalidad(0,1)

Ejemplo: Un empleado ocupa un solo puesto de trabajo, y ese puesto de trabajo es


ocupadoporunsoloempleadooporninguno.Enestecasolaclavesepropagadesde
la entidad PUESTO TRABAJO con cardinalidad (1,1), a la entidad EMPLEADO con
cardinalidad(0,1).
MODELOER

MODELORELACIONAL:

PUESTO TRABAJO(COD_PUESTO,DESCRIPCION,OFICINA,DESPACHO,MESA)
EMPLEADO(COD_EMPLEADO,NOMBRE,DIRECCION,TFNO,COD_PUESTO)
Tabla:
PUESTO_TRABAJO
Campos:
COD_PUESTO, DESCRIPCION, OFICINA, DESPACHO, MESA
Clave primaria: COD_PUESTO
Tabla:
Campos:
Clave primaria:
Clave Externa:

EMPLEADO
COD_EMPLEADO, NOMBRE, DIRECCION, TFNO, COD_PUESTO
COD_EMPLEADO
COD_PUESTO

CIPSA
13

BASESDEDATOSRELACIONALESYLENGUAJESQL

[1:1]. Si ninguna de las entidades participa de forma total, es decir, si las


entidadesqueseasocianposeencardinalidades(0,1).Enestecaso,lasclaves
pasan a formar parte de una nueva tabla incluyendo los atributos de la
relacin,siloshubiera.

Ejemplo:Unpolicapuedeonotenerunarma,ycadaarmapuedeestarasignadaono
aunpolica.
MODELOER

MODELORELACIONAL:

POLICIA(DNI, NOMBRE)
ARMA(COD_ARMA,TIPO_ARMA)
POLICIA_ARMA(DNI,COD_ARMA,F_ENTREGA)
Tabla:
POLICIA
Campos:
DNI, NOMBRE
Clave primaria: DNI
Tabla:
ARMA
Campos:
COD_ARMA, TIPO_ARMA
Clave primaria: COD_ARMA
Tabla:
Campos:
Clave primaria:
Clave externa:

POLICIA_ARMA
DNI, COD_ARMA, F_ENTREGA
DNI, COD_ARMA
DNI, COD_ARMA

CIPSA
14

BASESDEDATOSRELACIONALESYLENGUAJESQL

[1:1].Siambaspartesparticipandeformatotal,esdecir,siambasparticipan
con(1,1):

Ejemplo:Supngasequeunpolicatieneasignadaunayslounaarma,ycadaarma
estigualmenteasignadaaunnicopolica.Secreaunanicatablaconlosatributos
de las dos entidades. La clave primaria puede ser cualquiera de las claves de cada
entidad,perosetomarlaquepertenezcaalaentidadmsdominante.

MODELOER

MODELORELACIONAL:

POLICIA(DNI,NOMBRE,COD_ARMA,TIPO_ARMA,F_ENTREGA)
Tabla:
POLICIA
Campos:
DNI, NOMBRE, COD_ARMA, TIPO_ARMA, F_ENTREGA
Clave primaria: DNI

CIPSA
15

BASESDEDATOSRELACIONALESYLENGUAJESQL

2.1.b.Relaciones1:N

[1:N]. En una relacin con cardinalidad 1:N, en la que ambas entidades


participaldeformatotal;Laclavedelaentidadqueparticipaconcardinalidad
mxima1pasaaformarpartedelaotratabla.

Ejemplo:Unaeditorialeditamuchasrevistas,perocadarevistaesnicamenteeditada
porunaeditorial.
MODELOER

MODELORELACIONAL:

REVISTA(TITULO,PRECIO,COD_EDITORIAL)
EDITORIAL(COD_EDITORIAL,NOMBRE,DIRECTOR)
Tabla:
EDITORIAL
Campos:
COD_EDITORIAL, NOMBRE, DIRECTOR
Clave primaria: COD_EDITORIAL
Tabla:
Campos:
Clave primaria:
Clave externa:

REVISTA
TITULO, PRECIO, COD_EDITORIAL
TITULO
COD_EDITORIAL

CIPSA
16

BASESDEDATOSRELACIONALESYLENGUAJESQL

[1:N]. En caso de que una de las entidades participa de forma parcial; se


generaunanuevatablaconlosidentificadoresdeambas.

Ejemplo: Una revista es editada por una editorial, mientras que una editorial puede
imprimir varias o ninguna revista. Este caso es semejante al de relaciones con
cardinalidad1:Ndondeunadelasentidadesparticipadeformaparcial.
MODELOER

MODELORELACIONAL:

REVISTA(TITULO,PRECIO)
EDITORIAL(COD_EDITORIAL,NOMBRE,DIRECTOR)
REVISTA_EDITORIAL(TITULO, COD_EDITORIAL)
Tabla:
REVISTA.
Campos:
TITULO, PRECIO
Clave primaria: TITULO
Tabla:
EDITORIAL.
Campos:
COD_EDITORIAL, NOMBRE, DIRECTOR
Clave primaria: COD_EDITORIAL
Tabla:
Campos:
Clave primaria:
Clave externa:

REVISTA_EDITORIAL
TITULO, COD_EDITORIAL
TITULO, COD_EDITORIAL
TITULO

CIPSA
17

BASESDEDATOSRELACIONALESYLENGUAJESQL

2.1.c.RelacionesN:M

[N:M].TodarelacindegradoN:M(muchosamuchos)seconvierteenuna
tablaquetendrcomoclaveprimarialaconcatenacindelosatributosclave
delasentidadesqueasociaylosatributosasociadosalarelacinsiloshay.
Nosetieneencuentalacardinalidadysiempreseaplicaestaregla.

Ejemplo: Un cliente puede comprar muchos artculos. Los artculos pueden ser
compradospormuchosclientes.

MODELOER

MODELORELACIONAL:

CLIENTE(COD_CLIENTE, NOMBRE, DIRECCION, TFNO)


ARTICULO(COD_ARTICULO, DENOMINACION, PRECIO, STOCK)
COMPRA(COD_CLIENTE,COD_ARTICULO, FECHA_VENTA, UNI_VENTA)
Tabla:
CLIENTE
Campos:
COD_CLIENTE, NOMBRE, DIRECCION, TFNO
Clave primaria: COD_CLIENTE
Tabla:
ARTICULO
Campos:
COD_ARTICULO, DENOMINACION, PRECIO, STOCK
Clave primaria: COD_ARTICULO
Tabla:
Campos:
Clave primaria:
Clave externa:

COMPRA
COD_CLIENTE, COD_ARTICULO, FECHA_VENTA, UNI_VENTA
COD_CLIENTE, COD_ARTICULO
COD_CLIENTE, COD_ARTICULO

Cada entidad se convierte en una tabla y los atributos en sus correspondientes


campos.LarelacinN:MseconvierteenunatablaCOMPRAcuyaclaveprimariaestar
formada por la concatenacin de claves de las tablas anteriores. Estas a su vez se
conviertenenclavesexternaenlastablasCLIENTEyARTICULO.
La tabla COMPRA contiene adems los campos correspondientes a los atributos que
intervienenenlarelacin:FECHA_VENTA,yUNI_VEND.
CIPSA
18

BASESDEDATOSRELACIONALESYLENGUAJESQL

2.1.d.RelacionesTernarias

En las relaciones de ms de dos entidades (relaciones Narias) cada entidad se


convierteentabla,ascomolarelacin,quevaacontenerlosatributospropiosdeella
ms las claves de todas las entidades. La clave de la tabla resultante ser la
concatenacindelasclavesdelasentidades.Hayquetenerencuentadoscasos:

[N:N:N].SilarelacinesN:N:N,esdecir,sitodaslasentidadesparticipancon
cardinalidadmximaN,laclavedelatablaresultanteeslaunindelasclaves
delasentidadesquerelaciona.Esatablaincluirlosatributosdelarelacinsi
loshubiera.

Ejemplo:SupngaseunarelacinternariaentrelasentidadesPROFESORES,CURSOS,y
ASIGNATURAS en la que un profesor imparte en varios cursos, varias asignaturas, y
ademslasasignaturassonimpartidasporvariosprofesoresenvarioscursos:
MODELOER

MODELORELACIONAL:

PROFESOR(COD_PROFESOR, DIRECCION,NOMBRE,TFNO,ESPECIALIDAD)
CURSO(COD_CURSO,DESCRIPCION,NIVEL,TURNO)
ASIGNATURA(COD_ASIGNATURA, NOMBRE)
IMPARTE(COD_PROFESOR, COD_CURSO, COD_ASIGNATURA)

CIPSA
19

BASESDEDATOSRELACIONALESYLENGUAJESQL

[N:N:N].Silarelacines1:N:N,esdecir,unadelasentidadesparticipacon
cardinalidad mxima 1, entonces,la clave deesta entidad no pasa a formar
partedelaclavedelatablaresultante,peroformapartedelarelacincomo
atributoms.

Ejemplo:Supngaseelcasodeunatiendadeventadecoches,enlaqueunempleado
vende muchos coches a muchos clientes, pero los coches son vendidos por un solo
empleado.Enlaventahayquetenerencuentalaformadepagoylafechadeventa.
DadoelsiguienteesquemaER,transformarloalmodelorelacional.
MODELOER

MODELORELACIONAL:

EMPLEADO(COD_EMPLEADO,NOMBRE,TFNO,SALARIO,FECHA_ALTA)
CLIENTE(COD_CLIENTE, NOMBRE, TFNO)
COCHE(COD_COCHE, MODELO, PRECIO, MATRICULA)
VENTA(COD_CLIENTE,COD_COCHE,COD_EMPLEADO,FORMA_PAGO,
FECHA_VENTA)

CIPSA
20

BASESDEDATOSRELACIONALESYLENGUAJESQL

3.LenguajeSQL
3.1.Introduccin
El lenguaje de consulta estructurado (SQL) es un lenguaje de base de datos
normalizadoquepermitelamanipulacindelosdatosylaestructuradeunabasede
datos.
EllenguajeSQLestcompuestoporcomandos,clusulas,operadoresyfuncionesde
agregado. Estos elementos se combinan en las instrucciones para crear, actualizar y
manipularlasbasesdedatos.
3.1.1.ComandosdeSQL
LoscomandosbsicosqueconformanSQLpuedendividirseendoscategoras:
DLL ( Lenguaje de definicin de datos ) que permiten crear y definir
nuevasbasesdedatos,camposendices.

DML ( Lenguaje de manipulacin de datos ) que permiten generar


consultasparaordenar,filtraryextraerdatosdelabasededatos.

ComandosDLL
Comando

Descripcin

CREATE

Utilizadoparacrearnuevastablas,camposendices

DROP

Empleadoparaeliminartablasendices

ALTER

Utilizadoparamodificarlastablasagregandocamposocambiandoladefinicindelos
campos.

ComandosDML
Comando

Descripcin

SELECT

Utilizado para consultar registros de la base de datos que satisfagan un criterio


determinado

INSERT

Utilizadoparacargarlotesdedatosenlabasededatosenunanicaoperacin.

UPDATE

Utilizadoparamodificarlosvaloresdeloscamposyregistrosespecificados

DELETE

Utilizadoparaeliminarregistrosdeunatabladeunabasededatos

CIPSA
21

BASESDEDATOSRELACIONALESYLENGUAJESQL

3.1.2.Clusulas
Lasclusulasdefinencondicionesquepermitenpararestringirlosdatosquesedesean
seleccionaromanipular.
Clusula

Descripcin

FROM

Utilizadaparaespecificarlatabladelacualsevanaseleccionarlosregistros

WHERE

Utilizada para especificar las condiciones que deben reunir los registros que se van a
seleccionar

GROUPBY Utilizadaparasepararlosregistrosseleccionadosengruposespecficos
HAVING

Utilizadaparaexpresarlacondicinquedebesatisfacercadagrupo

ORDERBY

Utilizadaparaordenarlosregistrosseleccionadosdeacuerdoconunordenespecfico

3.1.3.OperadoresdeComparacin
Losoperadoresdecomparacinpermitendefinirexpresionescondicionalesnecesarias
paraindicarlosvaloresquesedeseanobteneromanipular.
Operador

Uso

<

Menorque

>

Mayorque

<>

Distintode

<=

MenorIgualque

>=

MayorIgualque

Igualque

BETWEEN

Utilizadoparaespecificarunintervalodevalores.

LIKE

Utilizadoenlacomparacindeunmodelo

3.1.4OperadoresLgicos
Los operadores lgicos permiten declarar expresiones condicionales compuestas por
variascomparacionescombinadasmedianteoperadoreslgicos.
OperadorUso
AND

Es el "y" lgico. Evalua dos condiciones y devuelve un valor de verdad slo si ambas son
ciertas.

OR

Esel"o"lgico.Evaladoscondicionesydevuelveunvalordeverdadsialgunadelasdoses
cierta.

NOT

Negacinlgica.Devuelveelvalorcontrariodelaexpresin.

CIPSA
22

BASESDEDATOSRELACIONALESYLENGUAJESQL

3.1.5.FuncionesdeAgregado
Las funciones de agregado se usan dentro de una clusula SELECT en grupos de
registrosparadevolverunnicovalorqueseaplicaaungrupoderegistros.
Funcin Descripcin
AVG

Utilizadaparacalcularelpromediodelosvaloresdeuncampodeterminado

COUNT Utilizadaparadevolverelnmeroderegistrosdelaseleccin
SUM

Utilizadaparadevolverlasumadetodoslosvaloresdeuncampodeterminado

MAX

Utilizadaparadevolverelvalormsaltodeuncampoespecificado

MIN

Utilizadaparadevolverelvalormsbajodeuncampoespecificado

CIPSA
23

BASESDEDATOSRELACIONALESYLENGUAJESQL

3.2.Consultas(SELECT)

El comando SELECT se emplea en consultas ( tambin llamadas sentencias SELECT ),


que recupera una o varias filas de datos (registros), compuestas por las columnas
(campos) de una o varias tablas. Las sentencias SELECT pueden emplearse solas, o
comopartedeotrassentenciasSELECT(subconsultas).UnasentenciaSELECTtieneuna
seriedepartesbsicas

SELECT <lista de columnas>


[ FROM <tablas> ] [ INNER JOIN <tabla_sub> ON <condiciones> ]
[ WHERE <condiciones de registros> ]
[ GROUP BY <expresin de agrupamiento> ]
[ HAVING <condiciones de agrupamiento> ]
[ ORDER BY <expresion de ordenacin> [ ASC | DESC ] ]

3.2.1.ComandoSELECT<Listadecolumnas>

Especificalascolumnasquevanadevolverse.Puedensertodaslascolumnasdeuna
tabla,partedeellas,unacombinacindecolumnasdevariastablas,ocolumnascuyo
valorsecalculeenbasealdeotras:

Sealatabla:VEHICULOprovistadelossiguientesdatos:

Siseindicaunasterisco(*)equivaleaindicarquesedevuelvantodaslascolumnasde
cadafila:
SELECT * FROM VEHICULO

CIPSA
24

BASESDEDATOSRELACIONALESYLENGUAJESQL

Tambinesposibleindicarexplcitamentequcolumnasdeseanobtenerse.
SELECT MATRICULA, MARCA, MODELO FROM VEHICULO

Los nombres de las columnas pueden indicarse precedidas del nombre de la tabla
correspondiente. Esto es especialmente til cuando se realizan consultas de varias
tablasenlasqueelnombredelascolumnaspuedecoincidir,ypermitequeeleditorde
SQLmuestrelosnombresdelascolumnasalescribirlasconsultas.
Tambin es posible indicar en vez del nombre de una columna, una expresin que
genereunresultadoporcadafiladevuelta.Porejemplo:
SELECT MATRICULA, MARCA + '/' + MODELO FROM VEHICULO

En estos casos el nombre de las columnas puede identificarse asignando un


sobrenombreoaliasmediantelaclusulaAS
SELECT MATRICULA, MARCA + '/' + MODELO AS DESCRIPCION
FROM VEHICULO

Devolver:

PuedelimitarselacantidaddefilasdevueltasindicandolapartculaTOP.Estapermite
indicarelnmerodefilasmximoquedeseaobtenerse:
SELECT TOP 5 * FROM VEHICULO

Si se aade la partcula PERCENT, permite expresar la cantidad de filas que desea


obtenersecomoeltantoporcientosobreeltotaldefilasdevueltasporlaconsulta.
SELECT TOP 50 PERCENT * FROM VEHICULO
Devuelvelamitaddeltotaldetodaslascolumnasdelatablavehculo.

CIPSA
25

BASESDEDATOSRELACIONALESYLENGUAJESQL

Existenocasionesenlasquesedeseanmostrarlosresultadosordenadosporelvalor
deunacolumna.SupngaseunatablaSANCIONESque almacena la hora y fecha en
que se ha puesto cada sancin y el cdigo del agente que la interpuso. La siguiente
consultamostraratodoslosregistrosordenadosporelcdigodelagente:
SELECT FECHA_HORA, CODIGO_AGENTE
FROM SANCION
ORDER BY CODIGO_AGENTE
FECHA_HORA
----------------------2007-12-30 00:00:00.000
2007-12-12 00:00:00.000
2007-12-24 00:00:00.000
2007-12-26 00:00:00.000
2007-12-28 00:00:00.000
2007-12-27 00:00:00.000
2007-12-27 00:00:00.000
2007-12-25 00:00:00.000
2007-11-13 00:00:00.000
2007-12-22 00:00:00.000
2007-11-19 00:00:00.000

CODIGO_AGENTE
------------0001
0001
0001
0001
0002
0002
0002
0003
0003
0004
0004

(11 filas afectadas)

Sideseamosrecibirslolamitaddelasfilas,podemoshacer:
SELECT TOP 50 PERCENT FECHA_HORA, CODIGO_AGENTE
FROM SANCION
ORDER BY CODIGO_AGENTE
FECHA_HORA
----------------------2007-12-30 00:00:00.000
2007-12-12 00:00:00.000
2007-12-24 00:00:00.000
2007-12-26 00:00:00.000
2007-12-28 00:00:00.000
2007-12-27 00:00:00.000

CODIGO_AGENTE
------------0001
0001
0001
0001
0002
0002

(6 filas afectadas)

Comoconsecuenciadelalimitacin,paraelcdigodeagente0002slosemuestran
dosregistroscuandoenrealidadhaytres.Siapesardelalimitacinenelnmerode
filas devueltas, nos interesa que se muestren todos los registros de cada valor de la
columnaordenadadebeaadirselaclusulaWITHTIES.
SELECT TOP 50 PERCENT WITH TIES FECHA_HORA, CODIGO_AGENTE
FROM SANCION
ORDER BY CODIGO_AGENTE
FECHA_HORA
----------------------2007-12-30 00:00:00.000
2007-12-12 00:00:00.000
2007-12-24 00:00:00.000
2007-12-26 00:00:00.000
2007-12-28 00:00:00.000
2007-12-27 00:00:00.000
2007-12-27 00:00:00.000

CODIGO_AGENTE
------------0001
0001
0001
0001
0002
0002
0002

(7 filas afectadas)

CIPSA
26

BASESDEDATOSRELACIONALESYLENGUAJESQL

3.2.2.ClusulaFROM<tablas>

La clusula FROM permite indicar las tablas de las que provienen las columnas
indicadasenlaclusulaSELECT.

Al nombre de cada tabla puede asignrsele un sobrenombre o alias mediante la


clusulaAS.Unavezindicadounaliasstepuedeemplearsecomoelpropionombre
delatablaparacalificarelnombredelascolumnas:

SELECT S.CODIGO_AGENTE
FROM SANCION AS S

LaclusulaFROMpuedehacerreferenciaaunanicatablaoavariassilainformacin
a recuperar est repartida en diferentes tablas. Estas consultas se denominan
consultasmulttablayrequierendeunproceso decombinacinquedeterminecmo
componenlasfilasdediferentestablas.

3.2.3.ClusulaINNERJOIN<tabla_sub>ON<condiciones>

La composicin interna es un modo de combinar las filas de dos tablas relacionadas


entresmedianteclaveprimarias/externas.

Supngase dos tablas: SANCIONES que almacena la fecha y la matricula de los


vehculos sancionados, y VEHICULOS que almacena la matricula, marca y modelo de
cadavehculo.

Losdatosdeambastablassonlossiguientes:
MATRICULA
--------2548BBV
3258CGX
4568CCX
5842FFV
5961BNG
6527DBC
AB3698Z
B1548WS
IB3678L
M1234ZY
V9521PP

MARCA
---------NISSAN
OPEL
RENAULT
SKODA
CITROEN
FORD
SEAT
VOLKSWAGEN
AUDI
PEUGEOT
TOYOTA

MODELO
---------PRIMERA
VECTRA
LAGUNA
OCTAVIA
C5
FOCUS
TOLEDO
POLO
A4
307
AVENSIS

(11 filas afectadas)

CIPSA
27

BASESDEDATOSRELACIONALESYLENGUAJESQL

NUMERO_SANCION
-------------1
2
3
4
5
6
7
8
9
10
11

FECHA_HORA
----------------------2007-12-12 00:00:00.000
2007-12-24 00:00:00.000
2007-12-27 00:00:00.000
2007-12-30 00:00:00.000
2007-12-25 00:00:00.000
2007-11-13 00:00:00.000
2007-12-22 00:00:00.000
2007-11-19 00:00:00.000
2007-12-26 00:00:00.000
2007-12-28 00:00:00.000
2007-12-27 00:00:00.000

CODIGO_AGENTE
------------0001
0001
0002
0001
0003
0003
0004
0004
0001
0002
0002

MATRICULA_VEHICULO
-----------------2548BBV
5961BNG
M1234ZY
4568CCX
IB3678L
2548BBV
IB3678L
3258CGX
AB3698Z
M1234ZY
V9521PP

COSTE_SANCION
---------------100,00
125,00
137,00
158,00
215,00
300,00
250,00
180,00
235,00
550,00
375,00

(11 filas afectadas)

Si deseamos obtener la fecha de cada sancin junto con la marca y modelo del
vehculomultadopodemoscombinarambastablasempleandolosvaloresdelcampo
clave primaria MATRICULA en la tabla VEHICULO, y el campo clave externa
MATRICULA_VEHICULOenlatablaSANCION.

SELECT SANCION.FECHA_HORA, VEHICULO.MATRICULA, VEHICULO.MARCA,


VEHICULO.MODELO
FROM SANCION INNER JOIN VEHICULO
ON SANCION.MATRICULA_VEHICULO = VEHICULO.MATRICULA

Elresultadoser:
FECHA_HORA
----------------------2007-12-12 00:00:00.000
2007-12-24 00:00:00.000
2007-12-27 00:00:00.000
2007-12-30 00:00:00.000
2007-12-25 00:00:00.000
2007-11-13 00:00:00.000
2007-12-22 00:00:00.000
2007-11-19 00:00:00.000
2007-12-26 00:00:00.000
2007-12-28 00:00:00.000
2007-12-27 00:00:00.000

MATRICULA
--------2548BBV
5961BNG
M1234ZY
4568CCX
IB3678L
2548BBV
IB3678L
3258CGX
AB3698Z
M1234ZY
V9521PP

MARCA
---------NISSAN
CITROEN
PEUGEOT
RENAULT
AUDI
NISSAN
AUDI
OPEL
SEAT
PEUGEOT
TOYOTA

MODELO
---------PRIMERA
C5
307
LAGUNA
A4
PRIMERA
A4
VECTRA
TOLEDO
307
AVENSIS

(11 filas afectadas)

Lacomposicininternaslodevuelveaquellasfilasrelacionadasentreambastablas.Si
unafiladeunatabla,noestasociadaaalgunafiladelaotra;NOsemuestra.
En este caso esa cualidad de la composicin interna hace que slo se muestren los
datos de aquellos vehculos vinculados a alguna sancin. Todos los vehculos que no
asociadosaalgunasancin,oaquellassancionesnoasociadasaningunasancin;NO
semostrarn.

CIPSA
28

BASESDEDATOSRELACIONALESYLENGUAJESQL

3.2.4.ClusulaWHERE<condiciones>

Estaclusulapermiteindicarunacondicinquedeterminarquefilassemuestrandela
tabla o tablas indicadas en la clusula FROM. Para ello se emplean expresiones
condicionales que restringuen las filas devueltas por la consulta a aquellas que las
cumplan:

Lasexpresionescondicionalespuedencomponerseempleando:

Operadoresdecomparacin:>,<,>=,<=,<>,=,<>,!=,!<,!>
Estos operadores permiten establecer comparaciones con el valor de una o varias
columnasdecadafila.
Sea:TablaCONDUCTORES:
DNI
--------23670002V
34567123P
34567543N
34890234S
45123456C
45345220B
51101001R
54234000W
56900001M
65123111L

NOMBRE
---------ANA
SCAR
VANESSA
M CARMEN
DAVID
JESS
JAIME
JESS
SCAR
ANA

APELLIDOS
-------------------GRCIA MURCIA
GRCIA LPEZ
GONZLEZ PRIETO
LPEZ HERRERA
ESTVEZ MOLINA
GONZLEZ VZQUEZ
GARCA DE LA CRUZ
GMEZ BAENA
ALCNTARA BAENA
CRUZ RIAO

EDAD
----------23
24
32
35
39
41
22
53
48
45

LICENCIA
-------A
B
B
B
C
C
D
B
A
A

(11 filas afectadas)

Ejemplos:
Consultaquedevuelvetodosaquellosconductoresconedadmayora25aos:
SELECT DNI, NOMBRE, APELLIDOS, EDAD
FROM CONDUCTOR
WHERE EDAD > 25

ConsultaquedevuelveaquelconductorcuyoDNIes23670002V
SELECT DNI, NOMBRE, APELLIDOS, EDAD
FROM CONDUCTOR
WHERE DNI = '23670002V'

CIPSA
29

BASESDEDATOSRELACIONALESYLENGUAJESQL

Operadoreslgicos:AND,OR,NOT,LIKE,BETWEEN
Estosoperadorespermitenindicarcondicionescompuestasporvariascomparaciones
combinadasmedianteoperadoresANDoOR:
ElresultadodeunacondicincompuestaempleandolosoperadoreslgicosANDoOR,
dependedelresultadodelascomparacionesquecombinadas:
<expresin1> Operador <expresin2> Resultado
Verdad

AND

Falso

Falso

Verdad

AND

Verdad

Verdad

Falso

AND

Verdad

Falso

Falso

AND

Falso

Falso

Verdad

OR

Falso

Verdad

Verdad

OR

Verdad

Verdad

Falso

OR

Verdad

Verdad

Falso

OR

Falso

Falso

Ejemplos:
Consultaquedevuelvetodosaquellosconductorescuyaedadestpordebajodelos
20aosoporencimadelos25aos.
SELECT DNI, NOMBRE, APELLIDOS, EDAD
FROM CONDUCTOR
WHERE EDAD < 20 OR EDAD > 25

Consultaquedevuelvetodosaquellosconductorescuyaedadestcomprendidaentre
20y25aos.
SELECT DNI, NOMBRE, APELLIDOS, EDAD
FROM CONDUCTOR
WHERE EDAD >= 20 AND EDAD <= 25

El operador LIKE establece comparaciones con el valor de cadenas de texto. Pueden


ademsemplearsecaracterescomodnparaestablecercomparacionesparciales:
SELECT DNI, NOMBRE, APELLIDOS, EDAD, LICENCIA
FROM CONDUCTOR
WHERE NOMBRE LIKE 'ANA' AND APELLIDOS LIKE 'GRCIA MURCIA'

ConsultaquedevuelvetodosaquellosconductorescuyoDNIterminaenlaletraK
SELECT DNI, NOMBRE, APELLIDOS, EDAD
FROM CONDUCTOR
WHERE DNI LIKE '%K'

CIPSA
30

BASESDEDATOSRELACIONALESYLENGUAJESQL

CaracteresComodn
Los caracteres comodn permiten establecer un patrn que pueden cumplir un
subconjuntodecadenasdetexto.
Elcaractercomodin%representacualquierconjuntodecaracteres.
Elcaractercomodn_representaunslocaracter.
Tipodecoincidencia

Modelo
Coincide
Planteado

Nocoincide

Varioscaracteresenmedio

'a%a'

'aa','aBa','aBBBa'

'aBC'

Uncarcterespecial

'a_a'

'aLa'axaaBa

'aax'xxxaa

Varioscaracteresalfinal

'ab%

abcdefg,abc

cab,aab

Varioscaracteresalprincipio

%bac

xxbac03bac

acaaaac

RangodecaracteresAZ

'[az]'

'f','p','j'

'2','&'

FueradeunrangodecaracteresAZ '[!az]'

'9','&','%'

'b','a'

Undgito

'[09]'

'0','2','3','5'

'a','h','?'

Distintodeundgito

'[!09]'

'A','a','&','~'

'0','1','9'

Combinada

'a[!bm]%' 'An9','az0','a99'

'abc','aj0'

Operadoresdesubconsultas:SOME,ANY,ALL,IN.
Ejemplos:
ConsultaquedevuelvetodoslosconductorescuyaslicenciassonAoB:
SELECT DNI, NOMBRE, APELLIDOS, EDAD, LICENCIA
FROM CONDUCTOR
WHERE LICENCIA IN ( 'A', 'B' )

ConsultaquedevuelvetodoslosconductorescuyosDNIestpresenteenalgunafilade
otratablaADMITIDOS:
SELECT DNI, NOMBRE, APELLIDOS, EDAD, LICENCIA
FROM CONDUCTOR
WHERE DNI = ANY( SELECT DNI FROM ADMITIDOS )

Consultaquedevuelvetodoslosconductorescuyaedadessuperioraldetodoslasfilas
delatablaADMITIDOS:
SELECT DNI, NOMBRE, APELLIDOS, EDAD, LICENCIA
FROM CONDUCTOR
WHERE EDAD > ALL( SELECT EDAD FROM ADMITIDOS )

CIPSA
31

BASESDEDATOSRELACIONALESYLENGUAJESQL

3.2.5.ClusulaGROUPBY<expresindeagrupamiento>

Estaclusulapermiteindicarunaovariascolumnas(columnasdeagrupamiento)para
laqueseagrupanlasfilasconelmismovalorenunanicasolafilaresultado.

La siguiente consulta agrupa las filas de la tabla sancin con el mismo valor de la
columna matrcula mostrando una nica fila por cada matrcula. El resultado es el
conjuntodelasmatriculasqueaparecenenlatablaSANCIONES.

SELECT SANCION.MATRICULA_VEHICULO
FROM SANCION
GROUP BY SANCION.MATRICULA_VEHICULO

EnlaclusulaSELECTasociadaaunaconsultadeagrupamientoslopuedenincluirse:
LascolumnasdeagrupamientoindicadasenlaclusulaGROUPBY
Funcionesdeagregadoquedevuelvanunresultadoparacadagrupodefilas.
Ejemplo:
SELECT SANCION.MATRICULA_VEHICULO, SANCION.FECHA_HORA
FROM SANCION
GROUP BY SANCION.MATRICULA_VEHICULO
Mens. 8120, Nivel 16, Estado 1, Lnea 1
La columna 'SANCION.FECHA_HORA' de la lista de seleccin no es vlida, porque no
est contenida en una funcin de agregado ni en la clusula GROUP BY.

EstoproduciraunerroralnopoderdevolverseunnicovalorFECHA_HORAparacada
grupodesanciones.

Funcionesdeagregado

Se denominan funciones de agregado a aquellas que devuelven un nico resultado


calculadosapartirdelosvaloresdevariasfilasseleccionadas.Estosvalorespuedenser
recuentos,sumatorios,medias,mximosomnimos...etc:
COUNT>Devuelveelnmerodefilasseleccionadas.Tienetresusos:
o
o
o

COUNT(*)>Contabilizatodaslasfilas.
COUNT(ALLcolumna)>ContabilizatodaslasfilasexceptoaquellasconelvalorNULL
enlacolumnaindicada.
COUNT( DISTINCT( columna )) > Contabiliza todas las filas eliminando aquellas con
valoresNULLyvaloresduplicados.

SUM>Devuelveelsumatoriodelosvaloresdeunacolumna.
MIN / MAX > Devuelve los valores mximo y mnimo de los valores de una
columna.
AVG>Devuelvelamediadelosvaloresdeunacolumna.

CIPSA
32

BASESDEDATOSRELACIONALESYLENGUAJESQL

Las funciones de agregado se disponen en la clusula SELECT y operan sobre los


valores de las filas seleccionadas. La siguiente consulta muestra los costes de las
sancionesinterpuestasporelagente'0001'
SELECT SANCION.COSTE_SANCION
FROM SANCION WHERE SANCION.CODIGO_AGENTE = '0001'
COSTE_SANCION
--------------------100,00
125,00
250,00
235,00
(4 filas afectadas)

Lasiguienteconsultadevuelveelnmerodesancionesinterpuestas,elcostemximo,
elmnimo,elsumatorioylamedia.
SELECT COUNT(*) AS NUMERO_SANCIONES,
SUM(SANCION.COSTE_SANCION) AS SUMATORIO,
MAX(SANCION.COSTE_SANCION) AS MAXIMO,
MIN(SANCION.COSTE_SANCION) AS MINIMO,
AVG(SANCION.COSTE_SANCION) AS MEDIA
FROM SANCION WHERE SANCION.CODIGO_AGENTE = '0001'
NUMERO_SANCIONES SUMATORIO
MAXIMO
MINIMO
MEDIA
---------------- --------------------- --------------------- --------------------- ----4
710,00
250,00
100,00
177,50
(1 filas afectadas)

LasfilasconvaloresNULLnosecontabilizanalemplearfuncionesdeagregadoSUM,
MAX,MINyAVG.
La funcin DISTINCT permite eliminar aquellas filas con valores duplicados para una
determinada columna. Esta funcin pueden emplearse combinada con las funciones
de agregado SUM, MIN, MAX, AVG, COUNT., para omitir en los clculos filas con
valoresrepetidos:
SELECT SANCION.MATRICULA_VEHICULO
FROM SANCION
MATRICULA_VEHICULO
-----------------2548BBV
5961BNG
M1234ZY
4568CCX
IB3678L
2548BBV
IB3678L
3258CGX
AB3698Z
M1234ZY
V9521PP
(11 filas afectadas)

CIPSA
33

BASESDEDATOSRELACIONALESYLENGUAJESQL

Lasiguienteconsultadevuelvelasmatrculasdetodoslosvehculossancionados.Para
ellosemuestranlosvaloresdelacolumnaMATRICULA_VEHICULOdetodaslasfilasde
la tabla SANCIONES, pero eliminando los valores repetidos mediante la funcin
DISTINCT.
SELECT DISTINCT(SANCION.MATRICULA_VEHICULO)
FROM SANCION
MATRICULA_VEHICULO
-----------------2548BBV
3258CGX
4568CCX
5961BNG
AB3698Z
IB3678L
M1234ZY
V9521PP
(8 filas afectadas)

Si se desea contabilizar el total de vehculos multados ( independientemente del


nmerodevecesquehayansidomultados)bastaaadirlafuncinCOUNT:
SELECT COUNT(DISTINCT(SANCION.MATRICULA_VEHICULO))
AS TOTAL_VEHICULOS
FROM SANCION
TOTAL_VEHICULOS
--------------8
(1 filas afectadas)

ElusodefuncionesagregadoenlaSELECTenlasconsultasdeagrupamientodevuelve
unresultadocalculadoapartirdelosvaloresdelasfilasdecadagrupo.

Ejemplo: La siguiente consulta devuelve todos las matrculas que aparecen en


SANCIONES,juntoconelnmerodefilas,yelsumatoriodelosvaloresdelacolumna
COSTESporgrupo.
SELECT SANCION.MATRICULA_VEHICULO,
COUNT(*) AS MULTAS,
SUM(SANCION.COSTE_SANCION ) AS COSTE
FROM SANCION
GROUP BY SANCION.MATRICULA_VEHICULO

MATRICULA_VEHICULO
-----------------2548BBV
3258CGX
4568CCX
5961BNG
AB3698Z
IB3678L
M1234ZY
V9521PP

MULTAS
----------2
1
1
1
1
2
2
1

COSTE
--------------------400,00
180,00
158,00
125,00
235,00
465,00
687,00
375,00

(8 filas afectadas)

CIPSA
34

BASESDEDATOSRELACIONALESYLENGUAJESQL

3.2.6.ClusulaHAVING<condicindeagrupamiento>

Esta clusula permite indicar una expresin condicional que indica qu las filas
resultantes de cada agrupamiento se incluyen en los resultados. Las condiciones se
expresanempleandolosmismosoperadoresqueenlaclusulaWHERE.

Ejemplo: Supngase que deseamos obtener la cuanta total de las sanciones


interpuestasporaquellosagentesquehansuperadolos500:

SELECT SANCION.CODIGO_AGENTE,
COUNT(*) AS MULTAS,
SUM(SANCION.COSTE_SANCION ) AS COSTE
FROM SANCION
GROUP BY SANCION.CODIGO_AGENTE
HAVING SUM(SANCION.COSTE_SANCION) > 500
ORDER BY SANCION.CODIGO_AGENTE
CODIGO_AGENTE
------------0001
0002
0003

MULTAS
----------4
3
2

COSTE
--------------------618,00
1062,00
515,00

(3 filas afectadas)

Slosemuestranlasfilasdelosagrupamientosquesatisfacenlacondicinindicadaen
laclusulaHAVING.

LaclusulaWHEREpuedeemplearsejuntoconHAVING.
En el caso de una consulta de agrupamiento ambas clusulas pueden emplearse al
tiempoperoteniendoclaroqufilasrestringen.LaclusulaWHERErestringelasfilas
que participan en cada grupo. La clusula HAVING restringe las filas ya agrupadas a
mostrar
Ejemplo: La siguiente consulta muestra la cuanta total de sanciones impuestas por
aquellosagentesquehansuperadolos500,exceptuandoaquellasimpuestasendas
festivos.
SELECT SANCION.CODIGO_AGENTE,
COUNT(*) AS MULTAS,
SUM(SANCION.COSTE_SANCION ) AS COSTE
FROM SANCION
WHERE SANCION.DIAS_FESTIVO = false
GROUP BY SANCION.CODIGO_AGENTE
HAVING SUM(SANCION.COSTE_SANCION) > 500
ORDER BY SANCION.CODIGO_AGENTE

La clusula WHERE restringe las filas de cada grupo a aquellas que representan
sancionesimpuestasendasnofestivos.LaclusulaHAVINGeliminaaquellasfilasya
agrupadasquenosuperanlos500decuantatotal.

CIPSA
35

BASESDEDATOSRELACIONALESYLENGUAJESQL

3.2.7.ClusulaORDERBY<expresindeordenacin>ASC/DES

Laclusula permiteindicarunacolumnaoexpresinenfuncindecuyosvalores las


filassemuestranenundeterminadoorden.Puedeindicarsesielordenescrecienteo
decreciente aadiendo las clusulas ASC y DESC. Pueden indicarse varias columnas y
expresiones,encuyocaso,lasfilasconvalorcoincidenteparalaprimeraexpresinse
ordenanenfuncindelasegunda.

LasiguienteconsultamuestraelDNI,nombreyapellidosdetodoslosconductoresde
unabasededatosordenadosalfabticamentepornombreyapellidos:

SELECT CONDUCTOR.DNI, CONDUCTOR.NOMBRE, CONDUCTOR.APELLIDOS


FROM CONDUCTOR
ORDER BY CONDUCTOR.NOMBRE, CONDUCTOR.APELLIDOS
DNI
--------65123111L
23670002V
45123456C
51101001R
54234000W
45345220B
90111234K
34890234S
56900001M
34567123P
34567543N

NOMBRE
---------ANA
ANA
DAVID
JAIME
JESS
JESS
M CARMEN
M CARMEN
SCAR
SCAR
VANESSA

APELLIDOS
-------------------CRUZ RIAO
GRCIA MURCIA
ESTVEZ MOLINA
GARCA DE LA CRUZ
GMEZ BAENA
GONZLEZ VZQUEZ
BENITO REODRIGUEZ
LPEZ HERRERA
ALCNTARA BAENA
GRCIA LPEZ
GONZLEZ PRIETO

(11 filas afectadas)

CIPSA
36

BASESDEDATOSRELACIONALESYLENGUAJESQL

3.3.Altas(INSERT)
Lassentenciasdealtapermiteninsertarnuevasfilasenunatablamedianteelusodel
comandoINSERT.
Al insertar una nueva fila en una tabla pueden indicarse valores para todas las
columnasdelatablayenelmismoordenenqueestndeclaradaslascolumnas.

INSERT INTO <tabla>


VALUES ( <valor1>, <valor2>, <valor3>... )

SealatablaAGENTES:
CODIGO
-----0001
0002
0003
0004
0006

NOMBRE
-----------------------------Manolo Escobar
Fernando Garca Gmez
Jos Antonio Lpez Garca
Jos Hernandez Lpez
Roger Petroviano

TELEFONO
----------665897423
928394384
684235698
613256987
695049392

(5 filas afectadas)

La siguiente sentencia inserta la informacin de un nuevo agente cdigo 0006, de


nombreRogerPetrovcontelfono55506940.
INSERT INTO AGENTE
VALUES
('0006'
,'ROGER PETROV'
,55506940)

Tambinesposibleindicarvaloresparaalgunascolumnasdelafilaenvezdetodas.En
talcasodebenindicarselosidentificadoresdelascolumnasalasquevandirigidoslos
valoreentrelasclusulasINTOyVALUES:
INSERT INTO <indicador_tabla>
( <columna1>, <columna2>, <columna3>.. )
VALUES (
<valor_columna1>,
<valor_columna2>,
<valor_columna3>... )

CIPSA
37

BASESDEDATOSRELACIONALESYLENGUAJESQL

La siguiente sentencia crea la fila para el agente Roger indicando los nombres de las
columnasalasqueserefierecadavalorindicado.
INSERT INTO AGENTE
(CODIGO,NOMBRE,TELEFONO)
VALUES
('0006','ROGER PETROV',55506940)

Los valores indicados para cada columna deben ser del tipo de la columna. Tambin
puedenindicarsevaloresnulosindicandoNULLcomovalor.Aquellasparalosquenose
indica ningn valor adoptan el valor NULL o el valor predeterminado definido en la
columna.
Losvaloresdeunanuevafiladebencumplirconlasrestriccionesexistentesenlatabla:
NopuedeomitirseelvalorparaunacolumnaquenoadmitavaloresNULLosea
claveprimaria.
No puede indicarse un valor repetido a una columna con clave primaria
(PRIMARYKEY).
Nopuedeasignarseunvalorparaunacolumnaclaveexterna(FOREIGNKEY)no
presenteenlacolumnaclaveprimariareferenciada.
Nopuedenasignarsevaloresacolumnasdetipoautonumrico,puestoquees
elsistemaelquelesasignaautomticamentevalor.
3.4.Bajas(DELETE)
La sentencia de baja permite eliminar aquellas filas de una tabla que cumplan una
determinada condicin mediante el uso del comando DELETE. Su sintaxis es la
siguiente:

DELETE FROM <tabla>


WHERE <condicin>

La clusula WHERE permite indicar una condicin para indicar las filas que desean
eliminarse.Encasodeomitirseseeliminantodaslasfilasdelatablasinrestriccin.
LasiguientesentenciaeliminadelatabladeconductoresaquellafilacuyoDNIcoincide
conelvalor23670002V:
DELETE CONDUCTOR WHERE DNI = '23670002V'

Debe tenerse en cuenta que la eliminacin de las filas no siempre es posible. Esto
sucedecuandounafilaestasociadaafilasenotrastablas.Enestecaso;nosepermite
laeliminacindeunafila,siexistenfilasenotrastablascuyaclaveexternacoincidecon
elvalordelaclaveprimariadelafilaaeliminar.

CIPSA
38

BASESDEDATOSRELACIONALESYLENGUAJESQL

3.5.Actualizacin(UPDATE)
La sentencia UPDATE permite la modificacin de uno o varios valores en las filas de
unatabla.Lasintaxisdelasentenciaeslasiguiente:
UPDATE <identificador_tabla>
SET <id_columna1> = <valor>, <id_columna2> = <valor>,...
WHERE <condicin>

La actualizacin puede afectar a una o varias filas de una tabla en funcin de la


condicinindicadaenlaclusulaWHERE.Siseomiteestaclusula,laactualizacinse
efectuaentodaslasfilasdelatabla.
LaclusulaSETindicaunalistaconlascolumnasylosvaloresaasignarencadafilade
lasfilasseleccionadas.
La siguiente sentenciamodifica elvalor del campo NOMBRE por el valor indicada en
aquellafilacuyoDNIsea23670002V
UPDATE CONDUCTOR
SET NOMBRE = 'Iris'
WHERE DNI = '23670002V'

Lasiguientesancinincrementalacuotadeseguroen100atodoslosconductores
cuyaedadseainferioralos25aos.
UPDATE CONDUCTOR
SET CUOTA = CUOTA + 100
WHERE EDAD < 20

En cualquier operacin de actualizacin, los nuevos valores deben cumplir siempre


ciertascondicionesparasercorrectos.
No se puede modificar el valor de un campo asignndole un valor de tipo
distinto al de la columna. Si una columna contiene edades no se le puede
asignarunnombrecomovalor.
No puede asignarse un valor nulo ( NULL ) a una columna que no admite
valoresnulos.
No se puede modificar el valor de un campo clave primaria por otro valor ya
existenteenotrafila.
No se puede modificarel valor de un campo clave primaria si existenfilas en
otrastablasasociadasmediantesuclaveexternal.

FIN

CIPSA
39

Potrebbero piacerti anche