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

T02 Consultes

Ús de més d'una taula

Per a la resolució de la majoria de requeriments és necessari treballar amb informació que s’obté de relacionar unes quantes taules. La forma d’especificar quines taules consultarem és construir una llista de noms de taules en la cláusula from.Si seleccionem la BD Ejemplo, podem preguntar per el
Nombre de los profesores y la descripción de las asignaturas que imparten

On està la informació sol·licitada?

Consultant l’esquema de la base de dades Exemple:


nombre (del professor) es troba en la taula PROFESORES 
descripción (de la assignatura) en ASIGNATURAS.
Si no lo pensamos mucho podríamos ejecutar la siguiente orden confiando en el todopoderoso SGBD:

select nombre, descripcion 
from asignaturas, profesores

nombredescripcion
EVA GOMEZDISEÑO Y GESTION DE BASES DE DATOS
MANUEL PALOMAR DISEÑO Y GESTION DE BASES DE DATOS
RAFAEL ROMERODISEÑO Y GESTION DE BASES DE DATOS
EVA GOMEZFUNDAMENTOS DE LAS BASES DE DATOS 
MANUEL PALOMAR FUNDAMENTOS DE LAS BASES DE DATOS 
RAFAEL ROMEROFUNDAMENTOS DE LAS BASES DE DATOS 
EVA GOMEZFUNDAMENTOS DE LA PROGRAMACION
MANUEL PALOMAR FUNDAMENTOS DE LA PROGRAMACION
RAFAEL ROMEROFUNDAMENTOS DE LA PROGRAMACION
EVA GOMEZHISTORIA DE LA INFORMATICA
MANUEL PALOMAR HISTORIA DE LA INFORMATICA
RAFAEL ROMEROHISTORIA DE LA INFORMATICA
EVA GOMEZPROGRAMACION CONCURRENTE
MANUEL PALOMAR PROGRAMACION CONCURRENTE
RAFAEL ROMEROPROGRAMACION CONCURRENTE



Òbviament, el resultat anterior no es correspon amb la informació sol·licitada, hem fet un producte cartesià entre dos conjunts, la combinació de tots els noms de professor amb totes les descripcions d’assignatura.
En aquest cas, la relació entre profesores i asignaturas es troba en imparte que té 2 claus forànees, una està associada a la clau primària de profesor i l’altra a la clau primària de asignaturas. Pensem en imparte com un "pont" que ens permet enllaçar la informació de la primera taula amb la segona: de profesores passem a imparte mitjançant el dni, i de imparte asignaturas mitjançant el codi de l’assignatura PROFESORES  dni=dni  IMPARTE  asignatura=codigo  ASIGNATURAS


Necessitem, per tant, incloure la taula imparte en el fromi especificar en el where les condicions per a concatenar les tuplas desitjades.

 

Nombre de los profesores y descripción de las asignaturas que imparten
(el que devem mostar): select nombre, descripcion 
(on està la informació necessària ): from asignaturas, profesores, imparte 
(igualant claus forànees i claus primàries): where imparte.dni = profesores.dni and asignatura = codigo

nombredescripcion
EVA GOMEZDISEÑO Y GESTION DE BASES DE DATOS
EVA GOMEZFUNDAMENTOS DE LAS BASES DE DATOS 
RAFAEL ROMERO PROGRAMACION CONCURRENTE



Per a entendre millor com s’obtenen els resultats d’una consulta podem pensar que l’orde d’execució és

from asignaturas, profesores, imparte (producte cartesiano)
where profesores.dni = imparte.dni and asignatura = codigo (selecció)
select nombre, descripcion (projecció)
1. 
select * from asignaturas, profesores, imparte

codigodescripcioncreditoscreditospdninombrecategoriaingresodniasignatura
DGBDDISEÑO Y GESTION DE BASES DE DATOS6.03.021111222EVA GOMEZTEU1993-10-01 21111222DGBD
DGBDDISEÑO Y GESTION DE BASES DE DATOS6.03.021222333MANUEL PALOMAR TEU1989-06-16 21111222DGBD
DGBDDISEÑO Y GESTION DE BASES DE DATOS6.03.021333444RAFAEL ROMEROASO61992-06-16 21111222DGBD
DGBDDISEÑO Y GESTION DE BASES DE DATOS6.03.021111222EVA GOMEZTEU1993-10-01 21111222FBD
DGBDDISEÑO Y GESTION DE BASES DE DATOS6.03.021222333MANUEL PALOMAR TEU1989-06-16 21111222FBD
DGBDDISEÑO Y GESTION DE BASES DE DATOS6.03.021333444RAFAEL ROMEROASO61992-06-16 21111222FBD
DGBDDISEÑO Y GESTION DE BASES DE DATOS6.03.021111222EVA GOMEZTEU1993-10-01 21333444PC
DGBDDISEÑO Y GESTION DE BASES DE DATOS6.03.021222333MANUEL PALOMAR TEU1989-06-16 21333444PC
DGBDDISEÑO Y GESTION DE BASES DE DATOS6.03.021333444RAFAEL ROMEROASO61992-06-16 21333444PC
FBDFUNDAMENTOS DE LAS BASES DE DATOS 6.01.521111222EVA GOMEZTEU1993-10-01 21111222DGBD
FBDFUNDAMENTOS DE LAS BASES DE DATOS 6.01.521222333MANUEL PALOMAR TEU1989-06-16 21111222DGBD
FBDFUNDAMENTOS DE LAS BASES DE DATOS 6.01.521333444RAFAEL ROMEROASO61992-06-16 21111222DGBD
FBDFUNDAMENTOS DE LAS BASES DE DATOS 6.01.521111222EVA GOMEZTEU1993-10-01 21111222FBD
FBDFUNDAMENTOS DE LAS BASES DE DATOS 6.01.521222333MANUEL PALOMAR TEU1989-06-16 21111222FBD
FBDFUNDAMENTOS DE LAS BASES DE DATOS 6.01.521333444RAFAEL ROMEROASO61992-06-16 21111222FBD
FBDFUNDAMENTOS DE LAS BASES DE DATOS 6.01.521111222EVA GOMEZTEU1993-10-01 21333444PC
FBDFUNDAMENTOS DE LAS BASES DE DATOS 6.01.521222333MANUEL PALOMAR TEU1989-06-16 21333444PC
FBDFUNDAMENTOS DE LAS BASES DE DATOS 6.01.521333444RAFAEL ROMEROASO61992-06-16 21333444PC
FPFUNDAMENTOS DE LA PROGRAMACION9.04.521111222EVA GOMEZTEU1993-10-01 21111222DGBD
FPFUNDAMENTOS DE LA PROGRAMACION9.04.521222333MANUEL PALOMAR TEU1989-06-16 21111222DGBD
FPFUNDAMENTOS DE LA PROGRAMACION9.04.521333444RAFAEL ROMEROASO61992-06-16 21111222DGBD
FPFUNDAMENTOS DE LA PROGRAMACION9.04.521111222EVA GOMEZTEU1993-10-01 21111222FBD
FPFUNDAMENTOS DE LA PROGRAMACION9.04.521222333MANUEL PALOMAR TEU1989-06-16 21111222FBD
FPFUNDAMENTOS DE LA PROGRAMACION9.04.521333444RAFAEL ROMEROASO61992-06-16 21111222FBD
FPFUNDAMENTOS DE LA PROGRAMACION9.04.521111222EVA GOMEZTEU1993-10-01 21333444PC
FPFUNDAMENTOS DE LA PROGRAMACION9.04.521222333MANUEL PALOMAR TEU1989-06-16 21333444PC
FPFUNDAMENTOS DE LA PROGRAMACION9.04.521333444RAFAEL ROMEROASO61992-06-16 21333444PC
HIHISTORIA DE LA INFORMATICA4.5
21111222EVA GOMEZTEU1993-10-01 21111222DGBD
HIHISTORIA DE LA INFORMATICA4.5
21222333MANUEL PALOMAR TEU1989-06-16 21111222DGBD
HIHISTORIA DE LA INFORMATICA4.5
21333444RAFAEL ROMEROASO61992-06-16 21111222DGBD
HIHISTORIA DE LA INFORMATICA4.5
21111222EVA GOMEZTEU1993-10-01 21111222FBD
HIHISTORIA DE LA INFORMATICA4.5
21222333MANUEL PALOMAR TEU1989-06-16 21111222FBD
HIHISTORIA DE LA INFORMATICA4.5
21333444RAFAEL ROMEROASO61992-06-16 21111222FBD
HIHISTORIA DE LA INFORMATICA4.5
21111222EVA GOMEZTEU1993-10-01 21333444PC
HIHISTORIA DE LA INFORMATICA4.5
21222333MANUEL PALOMAR TEU1989-06-16 21333444PC
HIHISTORIA DE LA INFORMATICA4.5
21333444RAFAEL ROMEROASO61992-06-16 21333444PC
PCPROGRAMACION CONCURRENTE6.01.521111222EVA GOMEZTEU1993-10-01 21111222DGBD
PCPROGRAMACION CONCURRENTE6.01.521222333MANUEL PALOMAR TEU1989-06-16 21111222DGBD
PCPROGRAMACION CONCURRENTE6.01.521333444RAFAEL ROMEROASO61992-06-16 21111222DGBD
PCPROGRAMACION CONCURRENTE6.01.521111222EVA GOMEZTEU1993-10-01 21111222FBD
PCPROGRAMACION CONCURRENTE6.01.521222333MANUEL PALOMAR TEU1989-06-16 21111222FBD
PCPROGRAMACION CONCURRENTE6.01.521333444RAFAEL ROMEROASO61992-06-16 21111222FBD
PCPROGRAMACION CONCURRENTE6.01.521111222EVA GOMEZTEU1993-10-01 21333444PC
PCPROGRAMACION CONCURRENTE6.01.521222333MANUEL PALOMAR TEU1989-06-16 21333444PC
PCPROGRAMACION CONCURRENTE6.01.521333444RAFAEL ROMEROASO61992-06-16 21333444PC


2. 
select * from asignaturas, profesores, imparte 
where profesores.dni = imparte.dni and asignatura = codigo

codigodescripcioncreditoscreditospdninombrecategoriaingresodniasignatura
DGBDDISEÑO Y GESTION DE BASES DE DATOS6.03.021111222EVA GOMEZTEU1993-10-01 21111222DGBD
FBDFUNDAMENTOS DE LAS BASES DE DATOS 6.01.521111222EVA GOMEZTEU1993-10-01 21111222FBD
PCPROGRAMACION CONCURRENTE6.01.521333444RAFAEL ROMERO ASO61992-06-16 21333444PC


3. 
select nombre, descripcion 
from asignaturas, profesores, imparte where profesores.dni=imparte.dni 
and asignatura=codigo

nombredescripcion
EVA GOMEZDISEÑO Y GESTION DE BASES DE DATOS
EVA GOMEZFUNDAMENTOS DE LAS BASES DE DATOS 
RAFAEL ROMERO PROGRAMACION CONCURRENTE

Resumint, podem dir que

  1. from establece la fuente de datos,
  2. where la información objetivo en bruto, y
  3. select la extracción de la información deseada. 

IMPORTANT: Açò no es necessariament realuns dels avantatges d’utilitzar un SGBD és que les consultes es processen de manera eficient i de forma totalment transparent per a l’usuari. És només una forma de comprendre les accions bàsiques que representa cada paràmetre de l’orde select.



Noms qualificats d'atribut

Un nom qualificat d’atribut és el que especifica el nom de la taula a què pertany la columna:

profesores.dni
asignaturas.descripción

És obligatori utilitzar noms qualificats d'atribut si hi ha ambigüitat, si unes quantes taules de la select tenen columnes que s'anomenen igual:

profesores.dni
imparte.dni

En qualsevol altre cas no és necessari.

DNI y nombre de los profesores que imparten alguna asignatura

select profesores.dni, nombre 
from profesores, imparte 
where profesores.dni = imparte.dni

dninombre
21111222EVA GOMEZ
21111222EVA GOMEZ
21333444RAFAEL ROMERO 

Igual que l’anterior però no qualificant el dni de la projecció

select dni, nombre
from profesores, imparte 
where profesores.dni = imparte.dni

Error at Command Line:3 Column:0
Error report:
SQL Error: Column 'dni' in field list is ambiguous

També és útil quan, a partir de diverses taules, es volen totes les columnes d’una i només alguna de les altres

select profesores.*, descripcion
from profesores, asignaturas, imparte
where profesores.dni = imparte.dni
and codigo = asignatura 

dninombrecategoriaingresodescripcion
21111222EVA GOMEZTEU1993-10-01 DISEÑO Y GESTION DE BASES DE DATOS
21111222EVA GOMEZTEU1993-10-01 FUNDAMENTOS DE LAS BASES DE DATOS 
21333444RAFAEL ROMERO ASO61992-06-16 PROGRAMACION CONCURRENTE


Sinònims temporals de taula

select * from tabla alias

Una cadena de caràcters a continuació del nom de la taula en el from, és un àlies temporal, un nom substitutiu.
És recomanable per a simplificar l’escriptura de l’orde select o per a fer-la més llegible.
És obligatori per a un producte cartesià d’una taula per si mateixa: select p1.nombre, p2.nombre
from profesores p1, profesores p2
where p1.nombre <> p2.nombre

nombrenombre
MANUEL PALOMAR EVA GOMEZ
RAFAEL ROMEROEVA GOMEZ
EVA GOMEZMANUEL PALOMAR 
RAFAEL ROMEROMANUEL PALOMAR 
EVA GOMEZRAFAEL ROMERO
MANUEL PALOMAR RAFAEL ROMERO



Quan es defineix el sinònim en el from, substitueix totalment al nom de la taula (no es permet utilitzar els dos simultàniament en el select o el where)
D’altra banda, no cal definir sinònims per a totes les taules del from.

DNI i nom dels professors que imparteixen alguna assignatura (utilitzant sinònims temporals de taula)

select p.dni, nombre
from profesores p, imparte i
where p.dni = i.dni 

dninombre
21111222EVA GOMEZ
21111222EVA GOMEZ
21333444RAFAEL ROMERO 

Rangs

Expressions del tipus 10 <= x <= 100 es poden construir utilitzant l’operador de construcció de rangs BETWEEN. La sintaxi de tal subexpressió de la clàusula where és la següent: 

expressió [NOT] BETWEEN expressió AND expressió 

Créditos y descripción de las asignaturas cuyo número de créditos está entre 5 y 8. 

select creditos, descripcion 
from asignaturas 
where creditos between 5 and 8 

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


Llistes

Mitjançant l’operador IN es pot buscar un determinat valor en una llista construïda usant constants.

expressió [NOT] IN (llistaValors

Descripción de las asignaturas FBD y DGBD. 

select descripcion 
from asignaturas 
where codigo in ('FBD', 'DGBD')


descripcion
DISEÑO Y GESTION DE BASES DE DATOS
FUNDAMENTOS DE LAS BASES DE DATOS

Nombre de los profesores que no imparten HI, FBD o DGBD. 

select nombre 
from profesores p, imparte i 
where p.dni = i.dni 
and asignatura not in ('HI', 'FBD', 'DGBD')

nombre
RAFAEL ROMERO

Fixem-nos en que MANUEL PALOMAR, que no imparteix cap de les assignatures objecte de la busca, tampoc apareix en la taula resultat ja que el seu dni no apareix en la taula IMPARTE. 



Subcadenes de caràcters

Podem preguntar per subcadenes dins de columnes de tipus caràcter. Per a això utilitzarem els operadors LIKE (o MATCHES), que suporten la sintaxi següent: 

expressió [NOT] LIKE 'cadena

La cadena de caràcters cadena admet els comodins % (tant per cent) i _ (subratllat): 
  • % indica una cadena de caràcters de qualsevol longitud (Ali% = Alicante, Aligerar, Ali, ...)
  • _ un caràcter qualsevol (Ali_ = Alic, Alig, Ali, ...)

Profesores que atiendan al nombre de 'RAFA'. 

select * from profesores where nombre like 'RAFA%' 

dninombrecategoriaingreso
21333444RAFAEL ROMEROASO61992-06-16


Código de las asignaturas de 'Bases de Datos' 

select codigo from asignaturas where descripcion like '%BASES DE DATOS%' 

codigo
DGBD
FBD


Código de las asignaturas, siendo tal código de 2 caracteres 

select codigo from asignaturas where codigo like '__' 

codigo
FP
HI
PC


Descripción de las asignaturas cuya última palabra contiene 'INFORMATIC' y un caracter adicional. 

select descripcion from asignaturas where descripcion like '%INFORMATIC_'

descripcion
HISTORIA DE LA INFORMATICA



Consultes niades

A vegades, les condicions de filtrat de tuplas o de càlculs d’agregació són més complexes que la simple comparació amb una constant o un valor emmagatzemat en una taula. Aquesta dada intermèdia, no un resultat final, ha d’obtenir-se mitjançant una consulta auxiliar, una subconsulta.

En la condició de filtrat de l’orde select (en la clàusula where o en el having) també podem:

 
  • comparar una expressió amb el resultat d'una altra orde select
  • determinar si el valor d’una expressió està inclòs en els resultats d’una altra orde select
  • preguntar si una orde select ha obtingut alguna fila.


Descripción y créditos de las asignaturas con menos créditos.

select descripcion, creditos
from asignaturas
where creditos = ( select min(creditos) from asignaturas )

descripcioncreditos
HISTORIA DE LA INFORMATICA4.5


En primer lloc es calcula la select niada (entre parèntesi) i s’obté el valor mínim per a la columna creditos de la taula asignaturas. Amb aquest valor es compara tupla a tupla i s’obté l’assignatura (o assignatures) la quantitat de crèdits del qual és igual al mínim.

Llistes de valors

expr [NOT] IN (orde select) 

També podem consultar la pertinença d’un valor a la llista de valors tornada per la subconsulta.

Obtener todos los datos de los profesores que imparte alguna asignatura.

select * from profesores
where dni IN (select dni from imparte)

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

O d'una altra manera: "datos de los profesores cuyo dni aparece en la tabla imparte".

En aquest cas donaria el mateix processar l’orde

select p.* 
from profesores p, imparte i
where p.dni = i.dni 

NOTA: el resultat no és exactament el mateix perquè l’ús de IN aconsegueix el mateix resultat que si haguérem aplicat el modificador distinct. Mentres que IN va recorrent la taula profesores i preguntant per cada un si es troba en la taula impartir o no, la segona realitza el producte cartesià i descarta les files en què no coincideixen els valors de DNI. És a dir, la segona consulta mostra files duplicades (en aquest estat de base de dades) mentres que l’anterior no. El que volem dir, no obstant això, és que ambdós donen com resultat "professors que imparteixen quelcom". 

Es veurà més clara la utilitat d’aquest operador si preguntem just el contrari.

Obtener todos los datos de los profesores que no imparten asignaturas.

select * from profesores
where dni NOT IN (select dni from imparte)

dninombrecategoriaingreso
21222333MANUEL PALOMARTEU1989-06-16




Dates i temps

L’administració i maneig de valors temporals és la part dels motors de base de dades menys estandarditzada i amb més diferències entre l’un i l’altre. A banda, i junt amb la codificació de caràcters i les característiques regionals (per exemple, format de les dates) forma part d’un conjunt de paràmetres globals del sistema que l’administrador del mateix ha de comprendre i tenir present depenent del mitjà en què es vagen a veure els resultats d’una consulta. Si fóra a formar part d’un conjunt de pàgines web dinàmiques, no sols el servidor de base de dades ha d’estar correctament configurat sinó que ha de tenir en compte el servidor http, el del llenguatge hoste (php, per exemple) i inclús els clients (navegadors, ordinadors, etc.). És molt possible que la mateixa data, en SQL Developer, vista en la pestanya resultats o en la script output tinga format diferent (la primera està controlada pel programa client i la segona mostra les dades tal qual li’ls envia el servidor.

Posades així les coses, ací es va a tractar la superfície de tot el que es pot fer amb dates i temps i sempre des del punt de vista estrictament de la consulta SQL.

MySQL ofereix diversos tipus de dades relacionades amb el temps:

DATETIME     '0000-00-00 00:00:00'
DATE     '0000-00-00'
TIMESTAMP     00000000000000
TIME     '00:00:00'
YEAR     0000

El que es mostra en la llista anterior dóna una idea de quines dades maneja cada tipus. En realitat, l’anterior és la relació de "valors zero" que poden emmagatzemar i que tenen caràcter de valor per defecte o valor de prova. Deixant de costat el tipus TIMESTAMP que té unes propietats i aplicacions pròpies, tots els tipus estan relacionats i difereixen quant a les limitacions d’emmagatzemament i, més important, de conversió automàtica de tipus.

De cadenes de caràcters, números i dates i temps

Professors que han ingressat abans de 1990.

select * 
from profesores
where ingreso < '1990-01-01';

dninombrecategoriaingreso
21222333MANUEL PALOMARTEU1989-06-16

Note’s que s’està comparant un tipus date amb una cadena de caràcters. El que ocorre és que MySQL analitza la cadena i determina si té un format adequat per al tipus de dades i la processa si així és. De fet, encara que l’eixida genèrica d’una data sempre és aaaa-mm-dd, la cadena de caràcters que usem per a la comparació assumeix certa llibertat de format:

ingreso < '1990@01@01'
ingreso < '1990/01/01'
ingreso < '1990.01.01'
ingreso < '1990:01:01'

En tots els casos el resultat és idèntic a l’anterior. El que ja no funciona és  

select * 
from profesores
where ingreso < '01-01-1990'

0 rows selected

I, a més, no es genera cap missatge d’error, simplement, no mostra cap fila en el resultat. Tampoc es comporta com nosaltres esperaríem

select * 
from profesores
where ingreso < 1990-01-01;

0 rows selected

Però si de 

select *
from profesores
where ingreso < 19900101;

dninombrecategoriaingreso
21222333MANUEL PALOMARTEU1989-06-16

Un altre aspecte en què es dóna una certa llibertat en és la forma de l’any:

select * 
from profesores
where ingreso < '90-01-01';

dninombrecategoriaingreso
21222333MANUEL PALOMARTEU1989-06-16

Ara bé, cal tenir en compte que MySQL fa una interpretació d’aquesta part de la data de tal forma que anys en el rang 00-69 els converteix en 2000-2069, i els 70-99 en 1970-1999. Si manegem anys anteriors o posteriors hem d’usar els 4 caràcters. 

Funcions de data i hora

En el manual de referència de MySQL 5.0 pot consultar-se la funcionalitat completa relativa al maneig del temps. Ací només exposarem algunes:

now(), curdate(), curtime()
date_format(), str_to_date()
day(), dayofweek(), dayname(), month(), year(), hour(), minute(), second()

Ara

now()torna la data i hora del servidor en format datetime. curdate() y curtime() fan el mateix però amb la data i l’hora respectivament.

select now()curdate()curtime();
now()curdate()curtime()
2010-12-03 19:40:172010-12-0319:40:17

Format

Les funcions principals de format podem dir que són date_format() i str_to_date(). Una és la inversa de l’altra: dateformat() transforma la data a un format de text determinat i str_to_date() una cadena de caràcters en un format concret a data. Les dos treballen amb 2 paràmetres, una expressió i una cadena de format.

La cadena de format indica a la funció que aspecte té o volem que tinga (depèn de si és una o altra funció) la dada que li subministrem en el primer paràmetre:

Professors, amb la data d'ingrés en format "dd/mm/aaaa".

select dni, nombre, date_format(ingreso, '%d/%m/%Y') ingreso from profesores;

dninombreingreso
21111222EVA GOMEZ01/10/1993
21222333MANUEL PALOMAR16/06/1989
21333444RAFAEL ROMERO16/06/1992


Professors que han ingressat abans de 1/1/1990.

select * 
from profesores
where ingreso < str_to_date('1/1/90','%d/%m/%y');.

dninombrecategoriaingreso
21222333MANUEL PALOMARTEU1989-06-16


Així, la cadena de format per a la primera consulta representa "com volem l’eixida" i la de la segona "com està escrita la data que vull comparar". La totalitat dels codis possibles es pot consultar en la descripció de la funció date_format() en https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html.

Extracció

Les altres funcions a què prestarem atenció són les que extrauen part de l’expressió temporal.

select day(ingreso) día, month(ingreso) mes, year(ingreso) año 
from profesores
where nombre='EVA GOMEZ';

díamesaño
1101993


select dayname(ingreso) día, dayofweek(ingreso) ndía, monthname(ingreso) mes 
from profesores
where nombre='EVA GOMEZ';

dndm
Friday6October


select date_format(now(),'%Y%m%d -- %H:%i:%s') ahora;

ahora
20101203 -- 20:12:49