domingo, 13 de mayo de 2012

38 - Alias

Un "alias" se usa como nombre de un campo o de una expresión o para referenciar una tabla cuando se utilizan más de una tabla (tema que veremos más adelante).

Cuando usamos una función de agrupamiento, por ejemplo:


 select count(*)
  from libros
  where autor like '%Borges%';
 
la columna en la salida tiene como encabezado "count(*)", para que el resultado sea más claro podemos utilizar un alias:

 select count(*) as librosdeborges
  from libros
  where autor like '%Borges%';
 
La columna de la salida ahora tiene como encabezado el alias, lo que hace más comprensible el resultado.

Un alias puede tener hasta 255 caracteres, acepta todos los caracteres. La palabra clave "as" es opcional en algunos casos, pero es conveniente usarla. Si el alias consta de una sola cadena las comillas no son necesarias, pero si contiene más de una palabra, es necesario colocarla entre comillas.

Se pueden utilizar alias en las clásulas "group by", "order by", "having". Por ejemplo:

 select editorial as 'Nombre de editorial'
  from libros
  group by 'Nombre de editorial';
 select editorial, count(*) as cantidad
  from libros
  group by editorial
  order by cantidad;
 select editorial, count(*) as cantidad
  from libros
  group by editorial
  having cantidad>2;
 
No está permitido utilizar alias de campos en las cláusulas "where".

Los alias serán de suma importancia cuando rescate datos desde el lenguaje PHP.


Problema Resuelto: 

Trabajamos con la tabla "libros" de una librería.

Eliminamos la tabla, si existe:

 drop table if exists libros;
Creamos la tabla:

 create table libros(
  codigo int unsigned auto_increment,
  titulo varchar(20) not null,
  autor varchar(30),
  editorial varchar(15),
  precio decimal(5,2),
  primary key (codigo)
 );
 
Agregamos algunos registros:

 insert into libros (titulo,autor,editorial,precio)
  values('El aleph','Borges','Planeta',15);
 insert into libros (titulo,autor,editorial,precio)
  values('Martin Fierro','Jose Hernandez','Emece',22.20);
 insert into libros (titulo,autor,editorial,precio)
  values('Antologia poetica','Borges','Planeta',40);
 insert into libros (titulo,autor,editorial,precio)
  values('Aprenda PHP','Mario Molina','Emece',18.20);
 insert into libros (titulo,autor,editorial,precio)
  values('Cervantes y el quijote','Borges','Paidos',36.40);
 insert into libros (titulo,autor,editorial,precio)
  values('Manual de PHP', 'J.C. Paez', 'Paidos',30.80);
 insert into libros (titulo,autor,editorial,precio)
  values('Harry Potter y la piedra filosofal','J.K. Rowling','Paidos',45.00);
 insert into libros (titulo,autor,editorial,precio)
  values('Harry Potter y la camara secreta','J.K. Rowling','Paidos',46.00);
 insert into libros (titulo,autor,editorial,precio)
  values('Alicia en el pais de las maravillas','Lewis Carroll','Paidos',null);
 
Colocamos un alias "Libros de Borges" para la expresión "count(*)" para tener una salida más clara:

 select count(*) as 'Libros de Borges'
  from libros
  where autor like '%Borges%';
 
Colocamos el alias "Nombre de editorial" para el campo "editorial":

 select editorial as 'Nombre de editorial'
  from libros
  group by 'Nombre de editorial';
 
Colocamos un alias para la cantidad calculada con "count()" y la empleamos en la cláusula "order by":

 select editorial, count(*) as cantidad
  from libros
  group by editorial
  order by cantidad;
 
Colocamos un alias para el cálculo de la cantidad y lo utilizamos con "having":

 select editorial, count(*) as cantidad
  from libros
  group by editorial
  having cantidad>2;
 
 
Problema Propuesto:

 
Una empresa tiene registrados sus clientes en una tabla llamada "clientes".

1- Elimine la tabla "clientes", si existe.

2- Créela con la siguiente estructura:
 
 create table clientes (
  codigo int unsigned auto_increment,
  nombre varchar(30) not null,
  domicilio varchar(30),
  ciudad varchar(20),
  provincia varchar (20),
  telefono varchar(11),
  primary key(codigo)
 );

3- Ingrese algunos registros:
 
 insert into clientes (nombre,domicilio,ciudad,provincia,telefono)
  values ('Lopez Marcos', 'Colon 111', 'Córdoba','Cordoba','null');
 insert into clientes (nombre,domicilio,ciudad,provincia,telefono)
  values ('Perez Ana', 'San Martin 222', 'Cruz del Eje','Cordoba','4578585');
 insert into clientes (nombre,domicilio,ciudad,provincia,telefono)
  values ('Garcia Juan', 'Rivadavia 333', 'Villa Maria','Cordoba','4578445');
 insert into clientes (nombre,domicilio,ciudad,provincia,telefono)
  values ('Perez Luis', 'Sarmiento 444', 'Rosario','Santa Fe',null);
 insert into clientes (nombre,domicilio,ciudad,provincia,telefono) 
  values ('Pereyra Lucas', 'San Martin 555', 'Cruz del Eje','Cordoba','4253685');
 insert into clientes (nombre,domicilio,ciudad,provincia,telefono)
  values ('Gomez Ines', 'San Martin 666', 'Santa Fe','Santa Fe','0345252525');
 insert into clientes (nombre,domicilio,ciudad,provincia,telefono)
  values ('Torres Fabiola', 'Alem 777', 'Villa del Rosario','Cordoba','4554455');
 insert into clientes (nombre,domicilio,ciudad,provincia,telefono)
  values ('Lopez Carlos', 'Irigoyen 888', 'Cruz del Eje','Cordoba',null);
 insert into clientes (nombre,domicilio,ciudad,provincia,telefono)
  values ('Ramos Betina', 'San Martin 999', 'Cordoba','Cordoba','4223366');
 insert into clientes (nombre,domicilio,ciudad,provincia,telefono)
  values ('Lopez Lucas', 'San Martin 1010', 'Posadas','Misiones','0457858745');

4- Obtenga el total de los registros que no tienen valor nulo en los teléfonos 
y coloque un alias para dicha columna:
 
5- Muestre la cantidad de clientes que se apellidan "Perez" colocando un alias 
para dicha salida:
 
6- Obtenga la cantidad de ciudades DISTINTAS por provincia en las cuales hay 
clientes, coloque un alias:
 



  

4 comentarios:

  1. Muy buen blog. Muchas gracias por compartir tus conocimientos

    ResponderEliminar
  2. Gran material, tengo una duda. Si yo quisiera traer todas las columnas y cambiarle el nombre a una sola de ellas, como haria?.
    Ej: Select * FROM table_name

    ResponderEliminar
  3. Muchas gracias por explicar con tanta claridad el tema abordado y por exponer tan gáficamente con los ejenplos y ejercicios expuestos.

    ResponderEliminar