Inicio‎ > ‎SQL‎ > ‎Lliçons SQL‎ > ‎

T01 Concepte de Base de Dades i Relació

Una base de dades és un conjunt d’informació interrelacionada que representa un sistema d’informació particular, i està composta per relacions, o més comunament taules, que emmagatzemen les dades referents a un objecte o a una interrelació entre objectes.

Així, si volem mantenir mitjançant un gestor de bases de dades informació docent, el que farem (en aquest cas en particular) serà crear una base de dades que englobe tres taules: PROFESORES, ASIGNATURAS i IMPARTIR. Cada taula tindrà les seues columnes, que representen els corresponents atributs de l’entitat o claus forànees que permeten relacionar unes quantes taules entre si. La BD que gestione aquesta informació s’anomenarà Ejemplo, i les taules contingudes en ella es presenten en el següent quadro.


Base de Dades: Ejemplo



PROFESORES (
dni : varchar(10),
nombre : varchar(40),
categoria : char(4),
ingreso : date )

Clave primaria: dni

ASIGNATURAS (
codigo : char(5),
descripcion : varchar(35),
creditos : number(3,1),
creditosp : number(3,1) )

Clave primaria: codigo

IMPARTE (
dni : varchar(10),
asignatura :
char(5) )

Clave primaria: (dni, asignatura)
Clave ajena: dni → PROFESORES
Clave ajena: asignatura → ASIGNATURAS


Extensions d'Ejemplo:

PROFESORES
dni nombre categoria ingreso
21111222 EVA GOMEZ TEU 1993-10-01
21222333 MANUEL PALOMAR TEU 1989-06-16
21333444 RAFAEL ROMERO ASO6 1992-06-16

ASIGNATURAS
codigo descripcion creditos creditosp
DGBD DISEÑO Y GESTION DE BASES DE DATOS 6.0 3.0
FBD FUNDAMENTOS DE LAS BASES DE DATOS 6.0 1.5
FP FUNDAMENTOS DE LA PROGRAMACION 9.0 4.5
HI HISTORIA DE LA INFORMATICA 4.5  
PC PROGRAMACION CONCURRENTE 6.0 1.5

IMPARTE

dni asignatura
21111222 DGBD
21111222 FBD
21333444 PC


Elecció de la BD de treball

MySQL utilitza el concepte de base de dades com a contenidors independents de tal forma que per a accedir a una taula en particular es poden usar dues alternatives:

Acompanyar al nom de taula amb la base de dades a què pertany: select * from ejemplo.profesores
Seleccionar la base de dades: use ejemplo

L’opció 2 permet realitzar les consultes sense especificar la base de dades en què estan definides les taules.


Tipus de dades

En general, la utilització d’unes quantes taules necessita que elles es puguen relacionar per una columna comuna, en aquest cas dni de professor, per a la relació entre impartir i profesor, i codi d’assignatura, per a la relació entre asignaturas i impartir. Note’s, no obstant això, que en la taula impartir el codi d’assignatura s’anomena asignatura i en la taula asignaturas codigo. En realitat, tals atributs són “comuns” perquè el domini és el mateix per a ambdós i es poden comparar. Els dominis vénen definits pels tipus de dades que ofereix el SGBD.

Els tipus de dades que acompanyen en l’esquema de BD a cada columna en cada taula determinen els valors que poden prendre aquestes. Són de capital importància a l’hora de relacionar taules en una sentència select, ja que només podrem comparar columnes amb idèntic tipus de dades, o a l’hora de manipular dades, atés que, com veurem en pròximes sessions, cada tipus de dades presenta uns requisits específics per a la seua manipulació.

Alguns dels tipus de dades que ens podem trobar en MySQL són:

  • VARCHAR(x): cadena de caràcters de longitud variable amb un màxim de x (1<=x<=4000)
  • CHAR(x): cadena de caràcters de longitud fixa de n (1<=x<=2000)
  • INT,INTEGER: números enters
  • DECIMAL(p,s): números amb precisió p i escala s (1<=p<=38) (-84<=s<=127)
  • DATE: dades de tipus data, amb la forma yyyy-mm-dd (any, mes i dia). Els valors date han de manejar-se tancats entre cometes simples. 

Select-from

Per a realitzar consultes sobre una base de dades utilitzarem l’orde select de SQL. Amb la sintaxi que es mostra en el punt anterior serem capaços de formular qualsevol requeriment (consulta) sobre les taules que componen una determinada BD. En aquest moment veurem l’expressió mínima de l’orde, formada per dues clàusules, select i from, que obligatòriament haurem d’especificar en cada consulta que realitzem.

Recuperarem tota la informació que es troba en la taula profesores:

select * from profesores

dninombrecategoriaingreso
21111222EVA GOMEZTEU1993-10-01
21222333MANUEL PALOMARTEU1989-06-16
21333444RAFAEL ROMEROASO61992-06-16

En especificar en la llista de columnes un asterisc li indiquem al SGBD que desitgem la informació de totes les columnes definides per a la taula profesores.

select categoria from profesores

categoria
TEU
TEU
ASO6

Ara només hem obtingut la columna categoria rebutjant l’eixida de les altres columnes. Podem demanar, això sí, quantes columnes vullguem i estiguen definides en la taula.

 

select nombre, categoria from profesores

nombrecategoria
EVA GOMEZTEU
MANUEL PALOMARTEU
RAFAEL ROMEROASO6

Una opció de què podem fer ús és l’eliminació de duplicats en l’eixida usant el modificador distinct.

select distinct categoria from profesores

categoria
TEU
ASO6



Where

Amb l’orde select-from obtenim la informació de les columnes requerides de tota la taula. Si únicament volem informació d’aquelles files que compleixen una determinada condició utilitzarem la clàusula where.

select nombre
from profesores 
where categoria = 'TEU'

nombre
EVA GOMEZ
MANUEL PALOMAR

En la construcció de tals condicions podem utilitzar les connectives lògiques ANDOR, i NOT, així com els parèntesis per a alterar l’avaluació d’esquerra a dreta. També, els operadors de comparació ><>=<=<>, !=Davant el dubte, cal consultar la taula de precedència d'operadors, que en el cas de MySQL es pot trobar aquí: no és el mateix "A and B or C" que "A and (B or C)".

 

select nombre 
from profesores 
where categoria = 'TEU' or categoria = 'ASO6'

nombre
EVA GOMEZ
MANUEL PALOMAR
RAFAEL ROMERO



Order by

Podem ordenar l’eixida produïda per la nostra orde select per valors ascendents o descendents d’una columna en particular.

select creditos, descripcion
from asignaturas
order by creditos

creditosdescripcion
4.5HISTORIA DE LA INFORMATICA
6.0DISEÑO Y GESTION DE BASES DE DATOS
6.0FUNDAMENTOS DE LAS BASES DE DATOS
6.0PROGRAMACION CONCURRENTE
9.0FUNDAMENTOS DE LA PROGRAMACION


El resultat anterior estava ordenat ascendentment. Es pot especificar DESC per a fer l’ordenació de forma descendent (igual que es pot fer ASC per a ascendent, encara que no cal, com ja s’ha vist)

select creditos, descripcion 
from asignaturas 
where creditos > 4.5 
order by creditos DESC 

creditosdescripcion
9.0FUNDAMENTOS DE LA PROGRAMACION
6.0DISEÑO Y GESTION DE BASES DE DATOS
6.0FUNDAMENTOS DE LAS BASES DE DATOS
6.0PROGRAMACION CONCURRENTE

Poden aplicar-se criteris més complexos d’ordenació. El següent és un exemple d’ordenació per dos atributs: a igualtat dels valors del primer atribut, l’orde el determinen els valors del segon. Note’s que és possible combinar en el criteri d’ordenació distints tipus de dades.

select creditos, descripcion 
from asignaturas 
order by creditos, descripcion

creditosdescripcion
4.5HISTORIA DE LA INFORMATICA
6.0DISEÑO Y GESTION DE BASES DE DATOS
6.0FUNDAMENTOS DE LAS BASES DE DATOS
6.0PROGRAMACION CONCURRENTE
9.0FUNDAMENTOS DE LA PROGRAMACION

Nuls (NULL)

Les BD relacionals treballen amb un valor especial, NULL, que significa "ignorància", es desconeix si té valor o no, i cas de tenir-lo, quin és.

Note’s que NULL no és "cadena buida" ni "blanc"; aquests són valors concret, pertanyents al tipus de dades cadena de caràcters.

Normalment, se simplifica el seu significat deixant-lo en "no té valor" encara que és discutible.

A la pregunta de "assignatures que no tenen crèdits pràctics" totes aquestes solucions donen resultats buits o erronis

select *
from asignaturas
where creditosp = ''

--comilla-simple + comilla-simple = cadena vacía

select *
from asignaturas
where creditosp = ' '

--comilla-simple + espacio + comilla-simple = espacio_en_blanco 

select *
from asignaturas
where creditosp = 0

select *
from asignaturas
where creditosp = NULL


El que estem buscant realment és

select *
from asignaturas
where creditosp is NULL

codigodescripcioncreditoscreditosp
HIHISTORIA DE LA INFORMATICA4.5 


Efectivament, hi ha una assignatura que no té crèdits pràctics. Açò es deu al fet que, en la càrrega de la BD, es va introduir el valor NULL en la columna creditosp de la fila de l’assignatura HI.

Note’s que ni tan sols és possible utilitzar la comparació habitual (signe "igual"), és obligat utilitzar l’operador IS NULL o IS NOT NULL.


Constants

Es poden explicitar constants en l’orde select de manera que el valor aparega en totes les files.

select 'La asignatura ', descripcion, ' tiene ', creditos, ' créditos' 
from asignaturas 
order by creditos

La asignaturadescripciontienecreditoscréditos
La asignaturaHISTORIA DE LA INFORMATICAtiene4.5créditos
La asignaturaDISEÑO Y GESTION DE BASES DE DATOStiene6.0créditos
La asignaturaFUNDAMENTOS DE LAS BASES DE DATOStiene6.0créditos
La asignaturaPROGRAMACION CONCURRENTEtiene6.0créditos
La asignaturaFUNDAMENTOS DE LA PROGRAMACIONtiene9.0créditos