Sei sulla pagina 1di 108

1 - Introduccin.

SQL, Structure Query Language (Lenguaje de Consulta Estructurado) es un lenguaje de programacion para
trabajar con base de datos relacionales como MySQL, Oracle, etc.
MySQL es un interpretador de SQL, es un servidor de base de datos.
MySQL permite crear base de datos y tablas, insertar datos, modificarlos, eliminarlos, ordenarlos, hacer
consultas y realizar muchas operaciones, etc., resumiendo: administrar bases de datos.
Ingresando instrucciones en la linea de comandos o embebidas en un lenguaje como PHP nos
comunicamos con el servidor. Cada sentencia debe acabar con punto y coma (;).
La sensibilidad a maysculas y minsculas, es decir, si hace diferencia entre ellas, depende del sistema
operativo, Windows no es sensible, pero Linux si. Por ejemplo Windows interpreta igualmente las
siguientes sentencias:
create database administracion;
Create DataBase administracion;
Pero Linux interpretar como un error la segunda, por eso en este sistema operativo se recomienda usar
siempre minsculas.

2 - show databases
Una base de datos es un conjunto de tablas.
Una base de datos tiene un nombre con el cual accederemos a ella.
Vamos a trabajar en una base dedatos llamada "administracion".
Para que el servidor nos muestre las bases de datos existentes, se lo solicitamos enviando la instruccin:
show databases;
Nos mostrar los nombres de las bases de datos, debe aparecer en este sitio "administracion".

3 - Creacin de una tabla y mostrar sus campos (create table - show


tables - describe - drop table)
Una base de datos almacena sus datos en tablas.
Una tabla es una estructura de datos que organiza los datos en columnas y filas; cada columna es un
campo (o atributo) y cada fila, un registro. La interseccin de una columna con una fila, contiene un
dato especfico, un solo valor.
Cada registro contiene un dato por cada columna de la tabla.
Cada campo (columna) debe tener un nombre. El nombre del campo hace referencia a la informacin
que almacenar.
Cada campo (columna) tambin debe definir el tipo de dato que almacenar.

nombre

clav
e

MarioPerez

Marit
o

MariaGarcia Mary
Grficamente ac tenemos la tabla usuarios, que contiene dos campos llamados:
nombre y clave.
Luego tenemos tres registros almacenados en esta tabla, el primero almacena en el
campo nombre el valor "MarioPerez" y en el campo clave "Marito", y as sucesivamente con los otros dos
registros.
Las tablas forman parte de una base de datos.
Nosotros trabajaremos con la base de datos llamada "administracion", que ya hemos creado, para ver las
tablas existentes en una base de datos tipeamos:
show tables;
Deben aparecer todas las tablas que han creado.
Al crear una tabla debemos resolver qu campos (columnas) tendr y que tipo de datos almacenarn cada
uno de ellos, es decir, su estructura.
La tabla debe ser definida con un nombre que la identifique y con el cual accederemos a ella.
Creamos una tabla llamada "usuarios", tipeamos:
create table usuarios (
nombre varchar(30),
clave varchar(10)
);
Si intentamos crear una tabla con un nombre ya existente (existe otra tabla con ese nombre), mostrar un
mensaje de error indicando que la accin no se realiz porque ya existe una tabla con el mismo nombre.
Para ver las tablas existentes en una base de datos tipeamos nuevamente:

DiegoRodrig z808
uez
0

show tables;
Ahora aparece "usuarios" entre otras que ya pueden estar creadas.
Cuando se crea una tabla debemos indicar su nombre y definir sus campos con su tipo de dato. En esta
tabla "usuarios" definimos 2 campos:
- nombre: que contendr una cadena de hasta 30 caracteres de longitud, que almacenar el nombre de
usuario y
- clave: otra cadena de caracteres de 10 de longitud, que guardar la clave de cada usuario.
Cada usuario ocupar un registro de esta tabla, con su respectivo nombre y clave.
Para ver la estructura de una tabla usamos el comando "describe" junto al nombre de la tabla:
describe usuarios;
Aparece lo siguiente:
Field
Type
Null
_________________________________
nombre
varchar(30)
clave
varchar(10) YES

YES

Esta es la estructura de la tabla "usuarios"; nos muestra cada campo, su tipo, lo que ocupa en bytes y
otros datos como la aceptacin de valores nulos etc, que veremos ms adelante en detalle.
Para eliminar una tabla usamos "drop table". Tipeamos:
drop table usuarios;
Si tipeamos nuevamente:
drop table usuarios;
Aparece un mensaje de error, indicando que no existe, ya que intentamos borrar una tabla inexistente.
Para evitar este mensaje podemos tipear:
drop table if exists usuarios;
En la sentencia precedente especificamos que elimine la tabla "usuarios" si existe.
Problema: Crear la tabla usuarios con los campos nombre y clave. Previamente borrar la tabla usuarios si
ya existe en el servidor. Finalmente mostrar la estructura de la tabla usuarios que acabamos de crear.
Importante: Tengamos en cuenta que intentamos borrar la tabla como primer paso. Pruebe luego de borrar
el comando drop y vea que ocurre si trata de crear una tabla ya existente en nuestra base de datos.
drop table if exists usuarios;
create table usuarios (
nombre varchar(30),
clave varchar(10)
);
describe usuarios;
drop table if exists usuarios;
create table usuarios (
nombre varchar(30),
clave varchar(10)
);
describe usuarios;
Field

Type

Nu Ke Defau Extr
ll y lt
a

nomb varchar( YE
re
30)
S
clave

varchar( YE
10)
S

Secuencia de comandos SQL ejecutados correctamente.


Problema:
A) Queremos almacenar los datos de nuestros amigos.
1- Elimine la tabla "agenda" si existe:
drop table if exists agenda;
2- Cree una tabla llamada "agenda", debe tener los siguientes campos:
nombre
domicilio
y telefono
3- Intente crearla nuevamente. Aparece mensaje de error.
4- Visualice las tablas existentes
5- Visualice la estructura de la tabla "agenda" (describe agenda).
6- Elimine la tabla, si existe
7- Intente eliminar la tabla sin la clusula if
Debe aparecer un mensaje de error cuando no existe la tabla.

4 - Carga de registros a una tabla y su recuperacin (insert into - select)


Un registro es una fila de la tabla que contiene los datos propiamente dichos. Cada registro tiene un dato
por cada columna.
Recordemos como crear la tabla "usuarios":
create table usuarios (
nombre varchar(30),
clave varchar(10)
);
Al ingresar los datos de cada registro debe tenerse en cuenta la cantidad y el orden de los campos.
Ahora vamos a agregar un registro a la tabla:
insert into usuarios (nombre, clave) values ('MarioPerez','Marito');
Usamos "insert into". Especificamos los nombres de los campos entre parntesis y separados por comas y
luego los valores para cada campo, tambin entre parntesis y separados por comas.
La tabla usuarios ahora la podemos graficar de la siguiente forma:

nombre

clav
e

MarioPer Marit
ez
o

Es importante ingresar los valores en el mismo orden en que se nombran los campos, si ingresamos los
datos en otro orden, no aparece un mensaje de error y los datos se guardan de modo incorrecto.
Note que los datos ingresados, como corresponden a campos de cadenas de caracteres se colocan entre
comillas simples. Las comillas simples son OBLIGATORIAS.
Para ver los registros de una tabla usamos "select":
select nombre,clave from usuarios;
Aparece un registro.
El comando "select" recupera los registros de una tabla. Luego del comando select indicamos los nombres
de los campos a rescatar.
Problema: Insertar tres registros en la tabla usuarios y luego mostrar todos los registros de la tabla.
Primeramente eliminamos la tabla, si existe:
drop table if exists usuarios;
Creamos la tabla:
create table usuarios (
nombre varchar(30),
clave varchar(10)
);
Insertamos 3 registros:
insert into usuarios(nombre,clave) values ('MarioPerez','Marito');
insert into usuarios(nombre,clave) values ('MariaGarcia','Mary');
insert into usuarios(nombre,clave) values ('DiegoRodriguez','z8080');
Para ver los registros ejecutamos el comando select:
select nombre,clave from usuarios;
(Aclaracin: Generalmente borraremos la tabla y luego la crearemos para comprobar que no es necesario
siempre hacer drop y create puede borrar esas dos instrucciones y luego ejecutar sucesivamente varios
insert y ver como se van agregando los registros a la tabla. Tener en cuenta que cuando hacemos drop se
borra la tabla por completo, su estructura y los registros cargados hasta el momento)
drop table if exists usuarios;
create table usuarios (
nombre varchar(30),

clave varchar(10)
);
insert into usuarios(nombre,clave) values ('MarioPerez','Marito');
insert into usuarios(nombre,clave) values ('MariaGarcia','Mary');
insert into usuarios(nombre,clave) values ('DiegoRodriguez','z8080');
select nombre,clave from usuarios;
drop table if exists usuarios;
create table usuarios (
nombre varchar(30),
clave varchar(10)
);
insert into usuarios(nombre,clave) values ('MarioPerez','Marito');
insert into usuarios(nombre,clave) values ('MariaGarcia','Mary');
insert into usuarios(nombre,clave) values ('DiegoRodriguez','z8080');
select nombre,clave from usuarios;
nombre

clave

MarioPerez

Marit
o

MariaGarcia Mary
DiegoRodrig z808
uez
0
Problema:
Trabaje con la tabla "agenda".
1- Elimine la tabla "agenda", si existe:
2- Cree una tabla llamada "agenda". Debe tener los siguientes campos:
nombre ,domicilio y telfono
3- Visualice las tablas existentes para verificar la creacin de "agenda".
4- Visualice la estructura de la tabla "agenda"
5- Ingrese los siguientes registros:
nombre
domicilio
Alberto Mores
Colon 123
Juan Torres
Avellaneda 135

4458787

telefono
4234567

6- Seleccione y mustre todos los registros de la tabla:


7- Elimine la tabla "agenda", si existe:
8- Intente eliminar la tabla nuevamente, sin especificar "si existe":

5 - Tpos de datos bsicos de un campo de una tabla.


Ya explicamos que al crear una tabla debemos resolver qu campos (columnas) tendr y que tipo de datos
almacenar cada uno de ellos, es decir, su estructura. Estos son algunos tipos de datos bsicos:
- varchar: se usa para almacenar cadenas de caracteres. Una cadena es una secuencia de caracteres. Se
coloca entre comillas (simples): 'Hola'. El tipo "varchar" define una cadena de longitud variable en la cual
determinamos el mximo de caracteres. Puede guardar hasta 255 caracteres. Para almacenar cadenas de
hasta 30 caracteres, definimos un campo de tipo varchar(30). Si asignamos una cadena de caracteres de
mayor longitud que la definida, la cadena se corta. Por ejemplo, si definimos un campo de tipo varchar(10)
y le asignamos la cadena 'Buenas tardes', se almacenar 'Buenas tar' ajustndose a la longitud de 10
caracteres.
- integer: se usa para guardar valores numricos enteros, de -2000000000 a 2000000000 aprox. Definimos
campos de este tipo cuando queremos representar, por ejemplo, cantidades.
- float: se usa para almacenar valores numricos decimales. Se utiliza como separador el punto (.).
Definimos campos de este tipo para precios, por ejemplo.

Antes de crear una tabla debemos pensar en sus campos y optar por el tipo de dato adecuado para cada
uno de ellos. Por ejemplo, si en un campo almacenaremos nmeros enteros, el tipo "float" sera una mala
eleccin; si vamos a guardar precios, el tipo "float" es correcto, no as "integer" que no tiene decimales.
Problema:
Para almacenar informacin de los libros de una librera necesitamos los siguientes campos:
-titulo, cadena de caracteres de 40 de longitud,
-autor, cadena de caracteres de 30 de longitud,
-editorial, caracteres de 15 de longitud,
-precio, valor numrico con decimales y
-cantidad, valor numrico entero.
Al crear la tabla, entonces, elegimos el tipo de dato ms adecuado para cada campo:
create table libros(
titulo varchar(40),
autor varchar(20),
editorial varchar(15),
precio float,
cantidad integer
);
Vemos la estructura de la tabla:
describe libros;
Ingresamos algunos registros:
insert into libros (titulo,autor,editorial,precio,cantidad)
values ('El aleph','Borges','Emece',45.50,100);
insert into libros (titulo,autor,editorial,precio,cantidad)
values ('Alicia en el pais de las maravillas','Lewis Carroll',
'Planeta',25,200);
insert into libros (titulo,autor,editorial,precio,cantidad)
values ('Matematica estas ahi','Paenza','Planeta',15.8,200);
Veamos los registros cargados:

select * from libros;


Tengamos en cuenta que es lo mismo escribir:
select * from libros;
que
select codigo,titulo,autor,precio from libros;
Es una forma resumida de indicar que seleccione todos los campos de la tabla.
drop table if exists libros;
create table libros (
codigo integer,
titulo varchar (20),
autor varchar (30),
precio float
);
insert into libros(codigo,titulo,autor,precio) values (1,'MySQL a fondo','Rodriguez Pablo',70.52);
insert into libros(codigo,titulo,autor,precio) values (2,'PHP 5','Rios Juan',20);
insert into libros(codigo,titulo,autor,precio) values (3,'JSP 1.1','Rosales Ana',27.75);
select * from libros;
drop table if exists libros;
create table libros (
codigo integer,
titulo varchar (20),
autor varchar (30),
precio float
);
insert into libros(codigo,titulo,autor,precio) values (1,'MySQL a fondo','Rodriguez Pablo',70.52);
insert into libros(codigo,titulo,autor,precio) values (2,'PHP 5','Rios Juan',20);
insert into libros(codigo,titulo,autor,precio) values (3,'JSP 1.1','Rosales Ana',27.75);
select * from libros;
codi
titulo
go

autor

preci
o

MySQL a
fondo

Rodriguez
Pablo

70.5
2

PHP 5

Rios Juan

20

JSP 1.1

Rosales Ana

27.7
5

Problema:

Un videoclub que alquila pelculas en video almacena la informacin


de sus pelculas en una tabla
llamada "peliculas"; para cada pelcula necesita los siguientes datos:
-nombre, cadena de caracteres de 20 de longitud,
-actor, cadena de caracteres de 20 de longitud,
-duracin, valor numrico entero.
-cantidad de copias: valor entero.
1- Elimine la tabla, si existe:
2- Cree la tabla eligiendo el tipo de dato adecuado para cada campo:
3- Vea la estructura de la tabla:
4- Ingrese los siguientes registros:
Nombre
actor
Mision imposible Tom Cruise
Mision imposible 2
Tom Cruise
Mujer bonita
Julia R
90
Elsa y Fred
China Zorrilla

duracin
120
90

180
3

5- Muestre todos los registros:


Secuencia de comandos SQL ejecutados correctamente.

cantidad
3
2

6 - Recuperacin de algunos campos (select)


Hemos aprendido cmo ver todos los registros de una tabla:
select * from libros;
El comando "select" recupera los registros de una tabla. Con el asterisco (*) indicamos que seleccione
todos los campos de la tabla que nombramos.
Podemos especificar el nombre de los campos que queremos ver separndolos por comas:
select titulo,autor,editorial from libros;
En la sentencia anterior la consulta mostrar slo los campos "titulo", "autor" y "editorial". En la siguiente
sentencia, veremos los campos correspondientes al ttulo y precio de todos los libros:
select titulo,precio from libros;
Para ver solamente la editorial y la cantidad de libros tipeamos:
select editorial,cantidad from libros;
Problema:
Trabajamos con la tabla "libros" que almacena los datos de los libros de una librera.
Eliminamos la tabla, si existe:
drop table if exists libros;
Creamos la tabla "libros":
create table libros(
titulo varchar(20),
autor varchar(30),
editorial varchar(15),
precio float,
cantidad integer
);
Veamos la estructura de la tabla:
describe libros;
Ingresamos algunos registros:
insert into libros (titulo,autor,editorial,precio,cantidad)
values ('El aleph','Borges','Emece',45.50,100);
insert into libros (titulo,autor,editorial,precio,cantidad)
values ('Alicia en el pais de las maravillas','Lewis Carroll','Planeta',25,200);
insert into libros (titulo,autor,editorial,precio,cantidad)
values ('Matematica estas ahi','Paenza','Planeta',15.8,200);
Para ver todos los campos de una tabla tipeamos:
select * from libros;
Con el asterisco (*) indicamos que seleccione todos los campos de la tabla.
Para ver solamente el ttulo, autor y editorial de todos los libros especificamos los nombres de los campos
separados por comas:
select titulo,autor,editorial from libros;
La siguiente sentencia nos mostrar los ttulos y precios de todos los libros:
select titulo,precio from libros;
Para ver solamente la editorial y la cantidad de libros tipeamos:
select editorial,cantidad from libros;
drop table if exists libros;
create table libros(
titulo varchar(20),
autor varchar(30),
editorial varchar(15),
precio float,
cantidad integer
);
insert into libros (titulo,autor,editorial,precio,cantidad)
values ('El aleph','Borges','Emece',45.50,100);
insert into libros (titulo,autor,editorial,precio,cantidad)
values ('Alicia en el pais de las maravillas','Lewis Carroll','Planeta',25,200);
insert into libros (titulo,autor,editorial,precio,cantidad)
values ('Matematica estas ahi','Paenza','Planeta',15.8,200);

select
select
select
select

* from libros;
titulo,autor,editorial from libros;
titulo,precio from libros;
editorial,cantidad from libros;

drop table if exists libros;


create table libros(
titulo varchar(20),
autor varchar(30),
editorial varchar(15),
precio float,
cantidad integer
);
insert into libros (titulo,autor,editorial,precio,cantidad)
values ('El aleph','Borges','Emece',45.50,100);
insert into libros (titulo,autor,editorial,precio,cantidad)
values ('Alicia en el pais de las maravillas','Lewis Carroll','Planeta',25,200);
insert into libros (titulo,autor,editorial,precio,cantidad)
values ('Matematica estas ahi','Paenza','Planeta',15.8,200);
select * from libros;
titulo

autor

editori preci cantid


al
o
ad

El aleph

Borges

Emece 45.5 100

Alicia en el pais
de

Lewis
Carroll

Planet
25
a

Matematica
estas ahi

Paenza

Planet
15.8 200
a

200

select titulo,autor,editorial from libros;

titulo

autor

editori
al

El aleph

Borges

Emece

Alicia en el pais
de

Lewis
Carroll

Planet
a

Matematica
estas ahi

Paenza

Planet
a

titulo

preci
o

El aleph

45.5

Alicia en el pais
de

25

Matematica
estas ahi
editori cantid
al
ad

select titulo,precio from libros;

select editorial,cantidad from libros;


15.8

Emece 100
Planet
200
a
Planet
200
a

Secuencia de comandos SQL ejecutados correctamente.

Problema:
Un videoclub que alquila pelculas en video almacena la informacin de sus pelculas en alquiler en una
tabla llamada "peliculas".
1- Elimine la tabla, si existe:
2- Cree la tabla: peliculas
Titulo, actor, duracin, cantidad
3- Vea la estructura de la tabla:
4- Ingrese los siguientes registros:
Titulo
actor
duracin
cantidad
Mision imposible Tom Cruise
120
3
Mision imposible 2
Tom Cruise
180
2
Mujer bonita
Julia R
90
3
Elsa y Fred
China Zorrilla
90
2
5- Realice una seleccion mostrando solamente el ttulo y actor de todas las pelculas:
6- Muestre el ttulo y duracin de todas las peliculas.
7- Muestre el ttulo y la cantidad de copias.

7 - Recuperacin de registros especficos (select - where)


Hemos aprendido cmo ver todos los registros de una tabla:
select nombre, clave from usuarios;
El comando "select" recupera los registros de una tabla. Detallando los nombres de los campos separados
por comas, indicamos que seleccione todos los campos de la tabla que nombramos.
Existe una clusula, "where" que es opcional, con ella podemos especificar condiciones para la consulta
"select". Es decir, podemos recuperar algunos registros, slo los que cumplan con ciertas condiciones
indicadas con la clusula "where". Por ejemplo, queremos ver el usuario cuyo nombre es "MarioPerez",
para ello utilizamos "where" y luego de ella, la condicin:
select nombre, clave from usuarios where nombre='MarioPerez';
Para las condiciones se utilizan operadores relacionales (tema que trataremos ms adelante en detalle). El
signo igual(=) es un operador relacional. Para la siguiente seleccin de registros especificamos una
condicin que solicita los usuarios cuya clave es igual a 'bocajunior':
select nombre, clave from usuarios where clave='bocajunior';
Si ningn registro cumple la condicin establecida con el "where", no aparecer ningn registro.
Problema:
Borramos la tabla si existe
drop table if exists usuarios;
Creamos la tabla:
create table usuarios (
nombre varchar(30),
clave varchar(10)
);
Vemos la estructura de la tabla:
describe usuarios;
Ingresamos algunos registros:
insert into usuarios (nombre, clave) values ('Leonardo','payaso');
insert into usuarios (nombre, clave) values ('MarioPerez','Marito');
insert into usuarios (nombre, clave) values ('Marcelo','bocajunior');
insert into usuarios (nombre, clave) values ('Gustavo','bocajunior');
Vemos todos los registros:
select nombre, clave from usuarios;
Realizamos una consulta especificando una condicin, queremos ver el usuario cuyo nombre es
"Leonardo":
select nombre, clave from usuarios where nombre='Leonardo';
Realizamos un "select" de los usuarios cuya clave es 'bocajunior':
select nombre, clave from usuarios where clave='bocajunior';
Realizamos un "select" de los usuarios cuya clave es 'river':
select nombre, clave from usuarios where clave='river';
No aparece ninguno pues ningn registro cumple la condicin.
drop table if exists usuarios;
create table usuarios (
nombre varchar(30),
clave varchar(10)
);
describe usuarios;
insert into usuarios (nombre, clave) values ('Leonardo','payaso');
insert into usuarios (nombre, clave) values ('MarioPerez','Marito');
insert into usuarios (nombre, clave) values ('Marcelo','bocajunior');
insert into usuarios (nombre, clave) values ('Gustavo','bocajunior');
select nombre, clave from usuarios;
select nombre, clave from usuarios where nombre='Leonardo';
select nombre, clave from usuarios where clave='bocajunior';
select nombre, clave from usuarios where clave='river';
drop table if exists usuarios;
create table usuarios (
nombre varchar(30),

clave varchar(10)
Nu Ke Defau Extr
);
ll y lt
a
describe usuarios;
nomb varchar( YE
re
30)
S
Field

Type

clave

varchar( YE
10)
S

insert into usuarios (nombre, clave) values


insert into usuarios (nombre, clave) values
insert into usuarios (nombre, clave) values
insert into usuarios (nombre, clave) values
select nombre, clave from usuarios;
nombre

('Leonardo','payaso');
('MarioPerez','Marito');
('Marcelo','bocajunior');
('Gustavo','bocajunior');

clave

Leonardo payaso
MarioPer
Marito
ez
Marcelo

bocajuni
or

bocajuni select nombre, clave from usuarios where nombre='Leonardo';


or
nombr clave
e
Gustavo

Leonar paya
do
so

select nombre, clave from usuarios where clave='bocajunior';

nombr
clave
e
Marcel bocajuni
o
or

Gusta bocajuni select nombre, clave from usuarios where clave='river';


vo
or
Secuencia de comandos SQL ejecutados correctamente.
Problema:
Trabajamos con nuestra tabla "agenda".
1- Eliminamos "agenda", si existe:
2- Creamos la tabla, con los siguientes campos:
nombre (cadena de 20), domicilio (cadena de 30) y telefono (cadena de 11).
3- Visualice la estructura de la tabla "agenda"
4- Ingrese los siguientes registros:
Alberto Mores,Colon 123, 4234567,
Juan Torres, Avellaneda 135, 4458787,
Mariana Lopez, Urquiza 333, 4545454,
Fernando Lopez, Urquiza 333, 4545454.
5- Seleccione todos los registros de la tabla.
6- Seleccione el registro cuyo nombre sea 'Juan Torres'.
7- Seleccione el registro cuyo domicilio sea 'Colon 123'.
8- Muestre los datos de quienes tengan el telfono '4545454'.
9- Elimine la tabla "agenda".

8 - Operadores Relacionales = <> < <= > >=


Hemos aprendido a especificar condiciones de igualdad para seleccionar registros de una tabla; por
ejemplo:
select titulo,autor,editorial from libros where autor='Borges';
Utilizamos el operador relacional de igualdad.
Los operadores relacionales vinculan un campo con un valor para que MySQL compare cada registro (el
campo especificado) con el valor dado.
Los operadores relacionales son los siguientes:
=
igual
<>
distinto
>
mayor
<
menor
>=
mayor o igual
<=
menor o igual
Podemos seleccionar los registros cuyo autor sea diferente de 'Borges', para ello usamos la condicin:
select titulo,autor,editorial from libros where autor<>'Borges';
Podemos comparar valores numricos. Por ejemplo, queremos mostrar los libros cuyos precios sean
mayores a 20 pesos:
select titulo,autor,editorial,precio from libros where precio>20;
Tambin, los libros cuyo precio sea menor o igual a 30:
select titulo,autor,editorial,precio from libros where precio<=30;
Problema:
Borramos la tabla libros si existe
drop table if exists libros;
La creamos con la siguiente estructura:
create table libros(
titulo varchar(20),
autor varchar(30),
editorial varchar(15),
precio float
);
Por primera vez definimos un campo de tipo float.
Agregamos registros a la tabla:
insert into libros (titulo,autor,editorial,precio) values
('El aleph','Borges','Planeta',12.50);
insert into libros (titulo,autor,editorial,precio) values
('Martin Fierro','Jose Hernandez','Emece',16.00);
insert into libros (titulo,autor,editorial,precio) values
('Aprenda PHP','Mario Molina','Emece',35.40);
insert into libros (titulo,autor,editorial,precio) values
('Cervantes','Borges','Paidos',50.90);
Note que al ingresar valores numricos (en este caso float) no se utilizan comillas y para el separador de
decimales se usa el punto(.).
Seleccionamos todos los registros:
select titulo, autor,editorial,precio from libros;
Seleccionamos los registros cuyo autor sea diferente de 'Borges':
select titulo,autor,editorial,precio from libros where autor<>'Borges';
Seleccionamos los registros cuyo precio supere los 20 pesos:
select titulo,autor,editorial,precio from libros where precio>20;
Seleccionamos los libros cuyo precio es menor o igual a 30:
select titulo,autor,editorial,precio from libros where precio<=30;
Note que al comparar valores numricos (en este caso de tipo float) no se utilizan comillas.
drop table if exists libros;
create table libros(
titulo varchar(20),
autor varchar(30),
editorial varchar(15),
precio float
);

insert into libros (titulo,autor,editorial,precio) values ('El aleph','Borges','Planeta',12.50);


insert into libros (titulo,autor,editorial,precio) values ('Martin Fierro','Jose Hernandez','Emece',16.00);
insert into libros (titulo,autor,editorial,precio) values ('Aprenda PHP','Mario Molina','Emece',35.40);
insert into libros (titulo,autor,editorial,precio) values ('Cervantes','Borges','Paidos',50.90);
select titulo, autor,editorial,precio from libros;
select titulo, autor,editorial,precio from libros where autor<>'Borges';
select titulo, autor,editorial,precio from libros where precio>20;
select titulo,autor,editorial,precio from libros where precio<=30;
drop table if exists libros;
create table libros(
titulo varchar(20),
autor varchar(30),
editorial varchar(15),
precio float
);
insert into libros (titulo,autor,editorial,precio) values
insert into libros (titulo,autor,editorial,precio) values
insert into libros (titulo,autor,editorial,precio) values
insert into libros (titulo,autor,editorial,precio) values
select titulo, autor,editorial,precio from libros;
titulo

autor

editori preci
al
o

El aleph

Borges

Planet
12.5
a

Martin
Fierro

Jose
Hernandez

Emece 16

Aprenda
PHP

Mario Molina Emece 35.4

Cervantes Borges
titulo
autor
Martin
Fierro

Jose
Hernandez

('El aleph','Borges','Planeta',12.50);
('Martin Fierro','Jose Hernandez','Emece',16.00);
('Aprenda PHP','Mario Molina','Emece',35.40);
('Cervantes','Borges','Paidos',50.90);

select titulo, autor,editorial,precio from libros where


autor<>'Borges';

Paidos 50.9
editori preci
al
o
Emece 16
select titulo, autor,editorial,precio from libros where precio>20;

Aprenda
PHP
titulo

autor

Aprenda
PHP

Mario
Molina

Emece 35.4

Cervantes Borges

Paidos 50.9

Mario Molina Emece 35.4


editori preci
al
o

titulo

autor

editori preci
al
o

El aleph

Borges

Planet
12.5
a

Martin
Fierro

Jose
Hernandez

Emece 16

select titulo,autor,editorial,precio from libros where precio<=30;

Secuencia de comandos SQL ejecutados correctamente.


Problema:

Un comercio que vende artculos de computacin registra los datos de sus artculos
en una tabla con ese nombre.
1- Elimine "articulos", si existe:
2- Cree la tabla, con la siguiente estructura:
tabla articulos
cdigo, nombre, descripcion, precio, cantidad
3- Vea la estructura de la tabla.
4- Ingrese algunos registros:
Cdigo nombre
descripcin
precio
cantidad
1
Impresora
Epson Stylus C45 400.80 20

2
3
4
5
56789-

impresora
monitor
teclado
teclado

Epson Stylus C85


Samsung 14
800
ingles Biswal
100
espaol Biswal
90

500
10
50
50

30

Seleccione todos los registros de la tabla.


Muestre los datos de las impresoras.
Seleccione los artculos cuyo precio sea mayor o igual a 500:
Seleccione los artculos cuya cantidad sea menor a 30:
Selecciones el nombre y descripcin de los artculos que no cuesten $100:

9 - Borrado de registros de una tabla (delete)


Para eliminar los registros de una tabla usamos el comando "delete":
delete from usuarios;
La ejecucin del comando indicado en la lnea anterior borra TODOS los registros de la tabla.
Si queremos eliminar uno o varios registros debemos indicar cul o cules, para ello utilizamos el comando
"delete" junto con la clausula "where" con la cual establecemos la condicin que deben cumplir los
registros a borrar. Por ejemplo, queremos eliminar aquel registro cuyo nombre de usuario es 'Leonardo':
delete from usuarios where nombre='Leonardo';
Si solicitamos el borrado de un registro que no existe, es decir, ningn registro cumple con la condicin
especificada, no se borrarn registros, pues no encontr registros con ese dato.
Problema:
Trabajamos con la tabla "usuarios".
Eliminamos la tabla, si existe:
drop table if exists usuarios;
Creamos la tabla:
create table usuarios (
nombre varchar(30),
clave varchar(10)
);
Ingresamos algunos registros:
insert into usuarios (nombre, clave) values ('Leonardo','payaso');
insert into usuarios (nombre, clave) values ('MarioPerez','Marito');
insert into usuarios (nombre, clave) values ('Marcelo','River');
insert into usuarios (nombre, clave) values ('Gustavo','River');
Queremos eliminar el registro cuyo nombre de usuario es 'Leonardo':
delete from usuarios where nombre='Leonardo';
Veamos el contenido de la tabla:
select nombre,clave from usuarios;
Queremos eliminar los registros cuya clave es 'River':
delete from usuarios where clave='River';
Veamos el contenido de la tabla:
select nombre,clave from usuarios;
Eliminemos todos los registros:
delete from usuarios;
Veamos el contenido de la tabla:
select nombre,clave from usuarios;
drop table if exists usuarios;
create table usuarios (
nombre varchar(30),
clave varchar(10)
);
insert into usuarios (nombre, clave) values ('Leonardo','payaso');
insert into usuarios (nombre, clave) values ('MarioPerez','Marito');
insert into usuarios (nombre, clave) values ('Marcelo','River');
insert into usuarios (nombre, clave) values ('Gustavo','River');
delete from usuarios where nombre='Leonardo';
select nombre,clave from usuarios;
delete from usuarios where clave='River';
select nombre,clave from usuarios;
delete from usuarios;
select nombre,clave from usuarios;
drop table if exists usuarios;
create table usuarios (
nombre varchar(30),
clave varchar(10)
);
insert into usuarios (nombre, clave) values ('Leonardo','payaso');
insert into usuarios (nombre, clave) values ('MarioPerez','Marito');
insert into usuarios (nombre, clave) values ('Marcelo','River');

insert into usuarios (nombre, clave) values ('Gustavo','River');


delete from usuarios where nombre='Leonardo';
select nombre,clave from usuarios;
nombre

clave

MarioPer Marit
ez
o
Marcelo River
Gustavo River

delete from usuarios where clave='River';


select nombre,clave from usuarios;

nombre

clave

MarioPer Marit
ez
o

delete from usuarios;


select nombre,clave from usuarios;
Secuencia de comandos SQL ejecutados correctamente.
Problema:
Trabaje con la tabla "agenda" que registra la informacin referente a sus amigos.
1- Elimine la tabla si existe
2- Cree la tabla con los siguientes campos: apellido (cadena de 30), nombre (cadena de 20),
domicilio (cadena de 30) y telefono (cadena de 11):
3- Visualice la estructura de la tabla "agenda"
4- Ingrese los siguientes registros
Mores,Alberto,Colon 123,4234567,
Torres,Juan,Avellaneda 135,4458787,
Lopez,Mariana,Urquiza 333,4545454,
Lopez,Jose,Urquiza 333,4545454,
Peralta,Susana,Gral. Paz 1234,4123456.
5- Elimine el registro cuyo nombre sea 'Juan'
6- Elimine los registros cuyo nmero telefnico sea igual a '4545454'.

10 - Modificacin de registros de una tabla (update)


Para modificar uno o varios datos de uno o varios registros utilizamos "update" (actualizar).
Por ejemplo, en nuestra tabla "usuarios", queremos cambiar los valores de todas las claves, por
"RealMadrid":
update usuarios set clave='RealMadrid';
Utilizamos "update" junto al nombre de la tabla y "set" junto con el campo a modificar y su nuevo valor.
El cambio afectar a todos los registros.
Podemos modificar algunos registros, para ello debemos establecer condiciones de seleccin con "where".
Por ejemplo, queremos cambiar el valor correspondiente a la clave de nuestro usuario llamado
'MarioPerez', queremos como nueva clave 'Boca', necesitamos una condicin "where" que afecte
solamente a este registro:
update usuarios set clave='Boca'
where nombre='MarioPerez';
Si no encuentra registros que cumplan con la condicin del "where", ningn registro es afectado.
Las condiciones no son obligatorias, pero si omitimos la clusula "where", la actualizacin afectar a todos
los registros.
Tambin se puede actualizar varios campos en una sola instruccin:
update usuarios set nombre='MarceloDuarte', clave='Marce'
where nombre='Marcelo';
Para ello colocamos "update", el nombre de la tabla, "set" junto al nombre del campo y el nuevo valor y
separado por coma, el otro nombre del campo con su nuevo valor.
Problema:
Trabajamos con la tabla "usuarios" que guarda el nombre de usuario y su clave.
Eliminamos la tabla, si existe:
drop table if exists usuarios;
Creamos la tabla:
create table usuarios (
nombre varchar(30),
clave varchar(10)
);
Ingresamos algunos registros:
insert into usuarios (nombre, clave) values ('Leonardo','payaso');
insert into usuarios (nombre, clave) values ('MarioPerez','Marito');
insert into usuarios (nombre, clave) values ('Marcelo','River');
insert into usuarios (nombre, clave) values ('Gustavo','River');
Visualizamos todos los registros:
select * from usuarios;
Para actualizar los valores de todas las claves, por 'RealMadrid' tipeamos:
update usuarios set clave='RealMadrid';
Visualizamos todos los registros para verificar la actualizacin:
select * from usuarios;
Cambiamos el valor correspondiente a la clave de nuestro usuario llamado 'MarioPerez', por 'Boca':
update usuarios set clave='Boca'
where nombre='MarioPerez';
Verificamos el cambio:
select nombre,clave from usuarios;
Cambiamos el valor correspondiente al nombre de usuario 'Gustavo' por 'GustavoGarcia':
update usuarios set nombre='GustavoGarcia'
where nombre='Gustavo';
Podemos actualizar varios campos en una sola instruccin:
update usuarios set nombre='MarceloDuarte', clave='Marce'
where nombre='Marcelo';
drop table if exists usuarios;
create table usuarios (
nombre varchar(30),
clave varchar(10)
);
insert into usuarios (nombre, clave) values ('Leonardo','payaso');
insert into usuarios (nombre, clave) values ('MarioPerez','Marito');
insert into usuarios (nombre, clave) values ('Marcelo','River');

insert into usuarios (nombre, clave) values ('Gustavo','River');


select * from usuarios;
update usuarios set clave='RealMadrid';
select nombre,clave from usuarios;
update usuarios set nombre='GustavoGarcia'
where nombre='Gustavo';
update usuarios set nombre='MarceloDuarte', clave='Marce'
where nombre='Marcelo';
select nombre,clave from usuarios;
drop table if exists usuarios;
create table usuarios (
nombre varchar(30),
clave varchar(10)
);
insert into usuarios (nombre,
insert into usuarios (nombre,
insert into usuarios (nombre,
insert into usuarios (nombre,
select * from usuarios;
nombre

clave

Leonardo

paya
so

clave)
clave)
clave)
clave)

values
values
values
values

('Leonardo','payaso');
('MarioPerez','Marito');
('Marcelo','River');
('Gustavo','River');

MarioPer Marit
ez
o
Marcelo River
Gustavo River

update usuarios set clave='RealMadrid';


select nombre,clave from usuarios;

nombre

clave

Leonardo

RealMadr
id

MarioPer RealMadr
ez
id
RealMadr
update usuarios set nombre='GustavoGarcia'
id
where nombre='Gustavo';
RealMadr
update usuarios set nombre='MarceloDuarte', clave='Marce'
Gustavo
id
where nombre='Marcelo';
select nombre,clave from usuarios;
Marcelo

nombre

clave

Leonardo

RealMadr
id

MarioPerez

RealMadr
id

MarceloDua
Marce
rte

Secuencia de comandos SQL ejecutados correctamente.

GustavoGar RealMadr
cia
id

Problema:
Trabaje con la tabla "agenda" que almacena los datos de sus amigos.

1- Elimine la tabla si existe.


2- Cree la tabla agenda
apellido (30),
nombre (20),
domicilio (30),
telefono (11)
3- Visualice la estructura de la tabla "agenda"
4- Ingrese los siguientes registros
Mores,Alberto,Colon 123,4234567,
Torres,Juan,Avellaneda 135,4458787,
Lopez,Mariana,Urquiza 333,4545454,
Lopez,Jose,Urquiza 333,4545454,
Peralta,Susana,Gral. Paz 1234,4123456.
5- Modifique el registro cuyo nombre sea "Juan" por "Juan Jose"
6- Actualice los registros cuyo nmero telefnico sea igual a '4545454' por '4445566':
7- Actualice los registros que tengan en el campo "nombre" el valor "Juan" por "Juan Jose"

11 - Clave primaria.
Una clave primaria es un campo (o varios) que identifica 1 solo registro (fila) en una tabla.
Para un valor del campo clave existe solamente 1 registro. Los valores no se repiten ni pueden ser nulos.
Veamos un ejemplo, si tenemos una tabla con datos de personas, el nmero de documento puede
establecerse como clave primaria, es un valor que no se repite; puede haber personas con igual apellido y
nombre, incluso el mismo domicilio (padre e hijo por ejemplo), pero su documento ser siempre distinto.
Si tenemos la tabla "usuarios", el nombre de cada usuario puede establecerse como clave primaria, es un
valor que no se repite; puede haber usuarios con igual clave, pero su nombre de usuario ser siempre
distinto.
Establecemos que un campo sea clave primaria al momento de creacin de la tabla:
create table usuarios (
nombre varchar(20),
clave varchar(10),
primary key(nombre)
);
Para definir un campo como clave primaria agregamos "primary key" luego de la definicin de todos los
campos y entre parntesis colocamos el nombre del campo que queremos como clave.
Si visualizamos la estructura de la tabla con "describe" vemos que el campo "nombre" es clave primaria y
no acepta valores nulos(ms adelante explicaremos esto detalladamente).
Ingresamos algunos registros:
insert into usuarios (nombre, clave)
values ('Leonardo','payaso');
insert into usuarios (nombre, clave)
values ('MarioPerez','Marito');
insert into usuarios (nombre, clave)
values ('Marcelo','River');
insert into usuarios (nombre, clave)
values ('Gustavo','River');
Si intentamos ingresar un valor para el campo clave que ya existe, aparece un mensaje de error indicando
que el registro no se carg pues el dato clave existe. Esto sucede porque los campos definidos como clave
primaria no pueden repetirse.
Ingresamos un registro con un nombre de usuario repetido, por ejemplo:
insert into usuarios (nombre, clave)
values ('Gustavo','Boca');
Una tabla slo puede tener una clave primaria. Cualquier campo (de cualquier tipo) puede ser clave
primaria, debe cumplir como requisito, que sus valores no se repitan.
Al establecer una clave primaria estamos indexando la tabla, es decir, creando un ndice para dicha tabla;
a este tema lo veremos ms adelante.
Problema:
Trabajamos con la tabla "usuarios" que contiene el nombre de usuario y su clave.
Eliminamos la tabla, si existe:
drop table if exists usuarios;
Creamos la tabla:
create table usuarios (
nombre varchar(20),
clave varchar(10),
primary key (nombre)
);
Vemos la estructura de la tabla:
describe usuarios;
Note que en la columna "KEY" del campo "nombre" aparece "PRI", esto significa que ese campo es clave
primaria.
Ingresamos algunos registros:
insert into usuarios (nombre, clave) values ('Leonardo','payaso');
insert into usuarios (nombre, clave) values ('MarioPerez','Marito');
insert into usuarios (nombre, clave) values ('Marcelo','River');
insert into usuarios (nombre, clave) values ('Gustavo','River');
Al intentar ingresar un valor repetido para el campo clave, aparece un mensaje de error indicando que el
registro no se carg pues el dato est duplicado; vemoslo en un ejemplo, ingresemos un registro con un
nombre de usuario repetido:
insert into usuarios (nombre, clave)
values ('Gustavo','Boca');

drop table if exists usuarios;


create table usuarios (
nombre varchar(20),
clave varchar(10),
primary key (nombre)
);
describe usuarios;
insert into usuarios (nombre,
insert into usuarios (nombre,
insert into usuarios (nombre,
insert into usuarios (nombre,
insert into usuarios (nombre,

clave)
clave)
clave)
clave)
clave)

values
values
values
values
values

('Leonardo','payaso');
('MarioPerez','Marito');
('Marcelo','River');
('Gustavo','River');
('Gustavo','Boca');

drop table if exists usuarios;


create table usuarios (
nombre varchar(20),
clave varchar(10),
primary key (nombre)
);
describe usuarios;
Field

Type

Nu Ke Defau Extr
ll y lt
a

nomb varchar(
PR
NO
re
20)
I
varchar( YE
10)
S

insert into usuarios (nombre, clave) values ('Leonardo','payaso');


insert into usuarios (nombre, clave) values ('MarioPerez','Marito');
insert into usuarios (nombre, clave) values ('Marcelo','River');
insert into usuarios (nombre, clave) values ('Gustavo','River');
insert into usuarios (nombre, clave) values ('Gustavo','Boca');

clave

Problema:
Trabaje con la tabla "libros" de una librera.
1- Elimine la tabla si existe.
2- Crela con los siguientes campos y clave: cdigo,
titulo (20), autor (30), editorial (15), codigo ser clave primaria:
3- Visualice la estructura de la tabla "libros", compruebe la clave primaria.
4- Ingrese los siguientes registros:
1,El aleph,Borges,Planeta;
2,Martin Fierro,Jose Hernandez,Emece;
3,Aprenda PHP,Mario Molina,Emece;
4,Cervantes y el quijote,Borges,Paidos;
5,Matematica estas ahi, Paenza, Paidos;
5- Seleccione todos los registros.
6- Ingrese un registro con cdigo no repetido y nombre de autor repetido.
7- Ingrese un registro con cdigo no repetido y ttulo y editorial repetidos.
8- Intente ingresar un registro que repita el campo clave (aparece mensaje de error
por clave repetida).

12 - Campo entero con autoincremento.


Un campo de tipo entero puede tener otro atributo extra 'auto_increment'. Los valores de un campo
'auto_increment', se inician en 1 y se incrementan en 1 automticamente.
Se utiliza generalmente en campos correspondientes a cdigos de identificacin para generar valores
nicos para cada nuevo registro que se inserta.
Slo puede haber un campo "auto_increment" y debe ser clave primaria (o estar indexado).
Para establecer que un campo autoincremente sus valores automticamente, ste debe ser entero
(integer) y debe ser clave primaria:
create table libros(
codigo int auto_increment,
titulo varchar(20),
autor varchar(30),
editorial varchar(15),
primary key (codigo)
);
Para definir un campo autoincrementable colocamos "auto_increment" luego de la definicin del campo al
crear la tabla.
Hasta ahora, al ingresar registros, colocamos el nombre de todos los campos antes de los valores; es
posible ingresar valores para algunos de los campos de la tabla, pero recuerde que al ingresar los valores
debemos tener en cuenta los campos que detallamos y el orden en que lo hacemos.
Cuando un campo tiene el atributo "auto_increment" no es necesario ingresar valor para l, porque se
inserta automticamente tomando el ltimo valor como referencia, o 1 si es el primero.
Para ingresar registros omitimos el campo definido como "auto_increment", por ejemplo:
insert into libros (titulo,autor,editorial)
values('El aleph','Borges','Planeta');
Este primer registro ingresado guardar el valor 1 en el campo correspondiente al cdigo.
Si continuamos ingresando registros, el cdigo (dato que no ingresamos) se cargar automticamente
siguiendo la secuencia de autoincremento.
Un campo "auto_increment" funciona correctamente slo cuando contiene nicamente valores positivos.
Ms adelante explicaremos cmo definir un campo con slo valores positivos.
Est permitido ingresar el valor correspondiente al campo "auto_increment", por ejemplo:
insert into libros (codigo,titulo,autor,editorial)
values(6,'Martin Fierro','Jose Hernandez','Paidos');
Pero debemos tener cuidado con la insercin de un dato en campos "auto_increment". Debemos tener en
cuenta que:
- si el valor est repetido aparecer un mensaje de error y el registro no se
ingresar.
- si el valor dado saltea la secuencia, lo toma igualmente y en las siguientes
inserciones, continuar la secuencia tomando el valor ms alto.
- si el valor ingresado es 0, no lo toma y guarda el registro continuando la
secuencia.
- si el valor ingresado es negativo (y el campo no est definido para aceptar slo
valores positivos), lo ingresa.
Para que este atributo funcione correctamente, el campo debe contener solamente valores positivos; ms
adelante trataremos este tema.
Problema:
Trabajamos con la tabla "libros" de una librera.
Eliminamos la tabla, si existe:
drop table if exists libros;
Creamos la tabla estableciendo como clave primaria y "auto_increment" el campo "codigo":
create table libros(
codigo integer auto_increment,
titulo varchar(20),
autor varchar(30),
editorial varchar(15),
primary key (codigo)
);
Al visualizar la estructura de la tabla:
describe libros;

vemos que en la columna "EXTRA" del campo "codigo" aparece "auto_increment", esto significa que el
campo es autoincrementable, en la columna "KEY" aparece "PRI", es clave primaria.
Ingresamos algunos registros:
insert into libros (titulo,autor,editorial)
values('El aleph','Borges','Planeta');
Note que al detallar los campos para los cuales ingresaremos valores hemos omitido "codigo"; cuando un
campo es "auto_increment" no es necesario ingresar valor para l, porque se genera automticamente.
Recuerde que si es obligatorio ingresar los datos de todos los campos que se detallan y en el mismo
orden.
Si mostramos los registros:
select * from libros;
vemos que este primer registro ingresado guard el valor 1 en el campo correspondiente al cdigo,
comenz la secuencia en 1.
Ingresamos ms registros:
insert into libros (titulo,autor,editorial)
values('Martin Fierro','Jose Hernandez','Emece');
insert into libros (titulo,autor,editorial)
values('Aprenda PHP','Mario Molina','Emece');
insert into libros (titulo,autor,editorial)
values('Cervantes y el quijote','Borges','Paidos');
insert into libros (titulo,autor,editorial)
values('Matematica estas ahi', 'Paenza', 'Paidos');
Seleccionamos todos los registros:
select codigo,titulo,autor,editorial from libros;
Vemos que el cdigo, dato que no ingresamos, se carg automticamente siguiendo la secuencia de
autoincremento.
Est permitido ingresar el valor correspondiente al campo "auto_increment", por ejemplo:
insert into libros (codigo,titulo,autor,editorial)
values(6,'Martin Fierro','Jose Hernandez','Paidos');
Pero debemos tener cuidado con la insercin de un dato en campos "auto_increment".
Veamos los distintos casos.
Si ingresamos un valor repetido, aparecer un mensaje de error y el registro no se ingresar:
insert into libros (codigo,titulo,autor,editorial)
values(2,'Martin Fierro','Jose Hernandez','Planeta');
Si ingresamos un valor que no sigue la secuencia, el dato es vlido, lo toma, por ejemplo:
insert into libros (codigo,titulo,autor,editorial)
values(15,'Harry Potter y la piedra filosofal','J.K. Rowling','Emece');
El siguiente registro insertado tomar el valor ms alto para seguir la secuencia (en este caso 16):
insert into libros (titulo,autor,editorial)
values('Harry Potter y la camara secreta','J.K. Rowling','Emece');
Si ingresamos 0, no lo toma y guarda el registro continuando la secuencia (17 en este caso):
insert into libros (codigo,titulo,autor,editorial)
values(0,'Alicia en el pais de las maravillas','Lewis Carroll','Planeta');
Si ingresamos un valor negativo (y el campo no est definido para aceptar slo valores positivos), lo
ingresa:
insert into libros (codigo,titulo,autor,editorial)
values(-5,'Alicia a traves del espejo','Lewis Carroll','Planeta');
drop table if exists libros;
create table libros(
codigo integer auto_increment,
titulo varchar(20),
autor varchar(30),
editorial varchar(15),
primary key (codigo)
);
describe libros;
insert into libros (titulo,autor,editorial)
values('El aleph','Borges','Planeta');
select * from libros libros;
insert into libros (titulo,autor,editorial)
values('Martin Fierro','Jose Hernandez','Emece');
insert into libros (titulo,autor,editorial)
values('Aprenda PHP','Mario Molina','Emece');
insert into libros (titulo,autor,editorial)

values('Cervantes y el quijote','Borges','Paidos');
insert into libros (titulo,autor,editorial)
values('Matematica estas ahi', 'Paenza', 'Paidos');
select codigo,titulo,autor,editorial from libros;
insert into libros (codigo,titulo,autor,editorial)
values(6,'Martin Fierro','Jose Hernandez','Paidos');
insert into libros (codigo,titulo,autor,editorial)
values(2,'Martin Fierro','Jose Hernandez','Planeta');
insert into libros (codigo,titulo,autor,editorial)
values(15,'Harry Potter y la piedra filosofal','J.K. Rowling','Emece');
insert into libros (titulo,autor,editorial)
values('Harry Potter y la camara secreta','J.K. Rowling','Emece');
insert into libros (codigo,titulo,autor,editorial)
values(0,'Alicia en el pais de las maravillas','Lewis Carroll','Planeta');
insert into libros (codigo,titulo,autor,editorial)
values(-5,'Alicia a traves del espejo','Lewis Carroll','Planeta');
select * from libros;
Problema:
Una farmacia guarda informacin referente a sus medicamentos en una tabla
llamada "medicamentos".
1- Elimine la tabla,si existe:
2- Cree la tabla con la siguiente estructura:
medicamentos
cdigo, nombre (20),
laboratorio (20),
precio,
cantidad,
Clave prmaria codigo
3- Visualice la estructura de la tabla "medicamentos"
4- Ingrese los siguientes registros
Nombre, laboratorio, precio, cantidad
'Sertal','Roche',5.2,100
'Buscapina','Roche',4.10,200
'Amoxidal 500','Bayer',15.60,100
5- Verifique que el campo "cdigo" gener los valores de modo automtico:
6- Intente ingresar un registro con un valor de clave primario repetido.
7- Ingrese un registro con un valor de clave primario no repetido salteando la secuencia:
12,'Paracetamol 500','Bago',1.90,200
8- Ingrese el siguiente registro:
'Bayaspirina','Bayer',2.10,150
Note que sigue la secuencia.

13 - Comando truncate table.


Aprendimos que para borrar todos los registro de una tabla se usa "delete" sin condicin "where".
Tambin podemos eliminar todos los registros de una tabla con "truncate table". Por ejemplo, queremos
vaciar la tabla "libros", usamos:
truncate table libros;
La sentencia "truncate table" vaca la tabla (elimina todos los registros) y vuelve a crear la tabla con la
misma estructura.
La diferencia con "drop table" es que esta sentencia borra la tabla, "truncate table" la vaca.
La diferencia con "delete" es la velocidad, es ms rpido "truncate table" que "delete" (se nota cuando la
cantidad de registros es muy grande) ya que ste borra los registros uno a uno.
Otra diferencia es la siguiente: cuando la tabla tiene un campo "auto_increment", si borramos todos los
registros con "delete" y luego ingresamos un registro, al cargarse el valor en el campo autoincrementable,
contina con la secuencia teniendo en cuenta el valor mayor que se haba guardado; si usamos "truncate
table" para borrar todos los registros, al ingresar otra vez un registro, la secuencia del campo
autoincrementable vuelve a iniciarse en 1.
Por ejemplo, tenemos la tabla "libros" con el campo "codigo" definido "auto_increment", y el valor ms alto
de ese campo es "5", si borramos todos los registros con "delete" y luego ingresamos un registro sin valor
de cdigo, se guardar el valor "6"; si en cambio, vaciamos la tabla con "truncate table", al ingresar un
nuevo registro sin valor para el cdigo, iniciar la secuencia en 1 nuevamente.
Problema:
Trabajamos con la tabla "libros" de una librera.
Eliminamos la tabla, si existe:
drop table if exists libros;
Creamos la tabla:
create table libros(
codigo integer auto_increment,
titulo varchar(20),
autor varchar(30),
editorial varchar(15),
primary key (codigo)
);
Ingresamos algunos registros:
insert into libros (titulo,autor,editorial)
values('Martin Fierro','Jose Hernandez','Planeta');
insert into libros (titulo,autor,editorial)
values('Aprenda PHP','Mario Molina','Emece');
insert into libros (titulo,autor,editorial)
values('Cervantes y el quijote','Borges','Paidos');
insert into libros (titulo,autor,editorial)
values('Matematica estas ahi', 'Paenza', 'Paidos');
insert into libros (titulo,autor,editorial)
values('El aleph', 'Borges', 'Emece');
Eliminemos todos los registros con "delete":
delete from libros;
Veamos el resultado:
select * from libros;
La tabla ya no contiene registros.
Ingresamos un nuevo registro:
insert into libros (titulo,autor,editorial)
values('Antologa poetica', 'Borges', 'Emece');
Veamos el resultado:
select * from libros;
Para el campo "codigo" se guard el valor 6 porque el valor ms alto de ese campo, antes de eliminar
todos los registros era "5".
Ahora vaciemos la tabla:
truncate table libros;
Veamos qu sucede si ingresamos otro registro sin valor para el cdigo:
insert into libros (titulo,autor,editorial)
values('Antologa poetica', 'Borges', 'Emece');
Vemos que la secuencia de "codigo" empez en 1 nuevamente.
Ejecutamos entonces:
select * from libros;
drop table if exists libros;
create table libros(

codigo integer auto_increment,


titulo varchar(20),
autor varchar(30),
editorial varchar(15),
primary key (codigo)
);
insert into libros (titulo,autor,editorial)
values('Martin Fierro','Jose Hernandez','Planeta');
insert into libros (titulo,autor,editorial)
values('Aprenda PHP','Mario Molina','Emece');
insert into libros (titulo,autor,editorial)
values('Cervantes y el quijote','Borges','Paidos');
insert into libros (titulo,autor,editorial)
values('Matematica estas ahi', 'Paenza', 'Paidos');
insert into libros (titulo,autor,editorial)
values('El aleph', 'Borges', 'Emece');
delete from libros;
select * from libros;
insert into libros (titulo,autor,editorial)
values('Antologa poetica', 'Borges', 'Emece');
select * from libros;
truncate table libros;
insert into libros (titulo,autor,editorial)
values('Antologa poetica', 'Borges', 'Emece');
select * from libros;
drop table if exists libros;
create table libros(
codigo integer auto_increment,
titulo varchar(20),
autor varchar(30),
editorial varchar(15),
primary key (codigo)
);
insert into libros (titulo,autor,editorial)
values('Martin Fierro','Jose Hernandez','Planeta');
insert into libros (titulo,autor,editorial)
values('Aprenda PHP','Mario Molina','Emece');
insert into libros (titulo,autor,editorial)
values('Cervantes y el quijote','Borges','Paidos');
insert into libros (titulo,autor,editorial)
values('Matematica estas ahi', 'Paenza', 'Paidos');
insert into libros (titulo,autor,editorial)
values('El aleph', 'Borges', 'Emece');
delete from libros;
select * from libros;
insert into libros (titulo,autor,editorial)
values('Antologa poetica', 'Borges', 'Emece');
select * from libros;
codi
titulo
go

autor

editori
al

Borg
Emece truncate table libros;
es
insert into libros (titulo,autor,editorial)
values('Antologa poetica', 'Borges', 'Emece');
select * from libros;

Antologa
poetica

codi
titulo
go
1

Antologa
poetica

autor

editori
al

Borg
Secuencia de comandos SQL ejecutados correctamente.
Emece
es
Problema:

Una farmacia guarda informacin referente a sus medicamentos en una tabla llamada "medicamentos".
1- Elimine la tabla, si existe:
2- Cree la tabla con la siguiente estructura:
tabla medicamentos
codigo,
nombre (20),
laboratorio (20),
precio,
cantidad,
Clave Principal Codigo
3- Ingrese los siguientes registros:
'Sertal','Roche',5.2,100;
'Buscapina','Roche',4.10,200
'Amoxidal 500','Bayer',15.60,100
4- Elimine todos los registros
5- Ingrese 2 registros:
'Sertal','Roche',5.2,100
'Amoxidal 500','Bayer',15.60,100
6- Vea los registros para verificar que continu la secuencia al generar el valor para "codigo":
7- Vace la tabla:
8- Ingrese el siguiente registro:
'Buscapina','Roche',4.10,200
9- Vea los registros para verificar que al cargar el cdigo reinici la secuencia en 1.

14 - Valores null.
Analizaremos la estructura de una tabla que vemos al utilizar el comando "describe". Tomamos como
ejemplo la tabla "libros":
Field
Type
Null
Key
Default Extra
______________________________________________________________________
codigo
int(11)
7 b..
NO
PRI
auto_increment
titulo
varchar(20)
11 b..
YES
(NULL)
autor
varchar(30)
11 b..
YES
(NULL)
editorial
varchar(15)
11 b..
YES
(NULL)
precio
float
5 b..
YES
(NULL)
La primera columna indica el tipo de dato de cada campo.
La segunda columna "Null" especifica si el campo permite valores nulos; vemos que en el campo "codigo",
aparece "NO" y en las dems "YES", esto significa que el primer campo no acepta valores nulos (porque es
clave primaria) y los otros si los permiten.
La tercera columna "Key", muestra los campos que son clave primaria; en el campo "codigo" aparece "PRI"
(es clave primaria) y los otros estn vacos, porque no son clave primaria.
La cuarta columna "Default", muestra los valores por defecto, esto es, los valores que MySQL ingresa
cuando omitimos un dato o colocamos un valor invlido; para todos los campos, excepto para el que es
clave primaria, el valor por defecto es "null".
La quinta columna "Extra", muestra algunos atributos extra de los campos; el campo "codigo" es
"auto_increment".
Vamos a explicar los valores nulos.
"null' significa "dato desconocido" o "valor inexistente". No es lo mismo que un valor 0, una cadena vaca
o una cadena literal "null".
A veces, puede desconocerse o no existir el dato correspondiente a algn campo de un registro. En estos
casos decimos que el campo puede contener valores nulos. Por ejemplo, en nuestra tabla de libros,
podemos tener valores nulos en el campo "precio" porque es posible que para algunos libros no le
hayamos establecido el precio para la venta.
En contraposicin, tenemos campos que no pueden estar vacos jams, por ejemplo, los campos que
identifican cada registro, como los cdigos de identificacin, que son clave primaria.
Por defecto, es decir, si no lo aclaramos en la creacin de la tabla, los campos permiten valores nulos.
Imaginemos que ingresamos los datos de un libro, para el cual an no hemos definido el precio:
insert into libros (titulo,autor,editorial,precio)
values ('El aleph','Borges','Planeta',null);
Note que el valor "null" no es una cadena de caracteres, no se coloca entre comillas.
Si un campo acepta valores nulos, podemos ingresar "null" cuando no conocemos el valor.
Los campos establecidos como clave primaria no aceptan valores nulos. Nuestro campo clave primaria,
est definido "auto_increment"; si intentamos ingresar el valor "null" para este campo, no lo tomar y
seguir la secuencia de incremento.
El campo "titulo", no debera aceptar valores nulos, para establecer este atributo debemos crear la tabla
con la siguiente sentencia:
create table libros(
codigo int auto_increment,
titulo varchar(20) not null
autor varchar(30),
editorial varchar(15),
precio float,
primary key (codigo)
);
Entonces, para que un campo no permita valores nulos debemos especificarlo luego de definir el campo,
agregando "not null". Por defecto, los campos permiten valores nulos, pero podemos especificarlo
igualmente agregando "null".
Explicamos que "null" no es lo mismo que una cadena vaca o un valor 0 (cero).
Para recuperar los registros que contengan el valor "null" en el campo "precio" no podemos utilizar los
operadores relacionales vistos anteriormente: = (igual) y <> (distinto); debemos utilizar los operadores "is
null" (es igual a null) y "is not null" (no es null):
select * from libros
where precio is null;
La sentencia anterior tendr una salida diferente a la siguiente:
select * from libros

where precio=0;
Con la primera sentencia veremos los libros cuyo precio es igual a "null" (desconocido); con la segunda,
los libros cuyo precio es 0.
Igualmente para campos de tipo cadena, las siguientes sentencias "select" no retornan los mismos
registros:
select * from libros where editorial is null;
select * from libros where editorial='';
Con la primera sentencia veremos los libros cuya editorial es igual a "null", con la segunda, los libros cuya
editorial guarda una cadena vaca.
Problema:
Trabajamos con la tabla "libros" de una librera.
Eliminamos la tabla, si existe:
drop table if exists libros;
Creamos la tabla estableciendo con la siguiente estructura:
create table libros(
codigo integer auto_increment,
titulo varchar(20) not null,
autor varchar(30),
editorial varchar(15),
precio float,
primary key(codigo)
);
Al visualizar la estructura de la tabla con "describe", vemos lo siguiente:
Field
Type
Null
Key
Default Extra
______________________________________________________________________
codigo
int(11)
7 b..
NO
PRI
(NULL) auto_increment
titulo
varchar(20)
11 b..
NO
autor
varchar(30)
11 b..
YES
(NULL)
editorial
varchar(15)
11 b..
YES
(NULL)
precio
float
5 b..
YES
(NULL)
Vemos que el campo "codigo" y el campo "titulo" no permiten valores nulos. Y que el campo "codigo" es
clave primaria y "auto_increment". Los dems campos permiten valores nulos.
Ingresamos algunos registros:
insert into libros (titulo,autor,editorial,precio)
values('El aleph','Borges','Planeta',null);
ingresamos "null" para el precio, campo que permite valores nulos. Note que el valor "null" no se coloca
entre comillas porque no es una cadena de caracteres.
Si intentamos ingresar el valor "null" en un campo que no lo permite (titulo), aparece un mensaje de error
indicando tal situacin:
insert into libros (titulo,autor,editorial,precio)
values (null,'Paenza','Paidos',10.30);
Si intentamos ingresar el valor "null" para el campo "codigo", que es clave primaria y "auto_increment", no
lo tomar y seguir la secuencia de incremento:
insert into libros (codigo,titulo,autor,editorial,precio)
values (null,'El quijote de la mancha', 'Cervantes Saavedra', 'Emece',25.50);
Podemos ingresar valores nulos en los campos que lo permiten, por ejemplo, en "editorial":
insert into libros (titulo,autor,editorial,precio)
values ('Harry Potter y la piedra filosofal', 'J.K. Rowling',null,30.00);
Ingresemos otros valores que nos servirn luego para verificar que los valores "null" son diferentes de 0 y
de cadenas vacas.
insert into libros (titulo,autor,editorial,precio)
values ('Matematica estas ahi','Paenza','Paidos',0);
insert into libros (titulo,autor,editorial,precio)
values ('Martin Fierro','Jose Hernandez','',22.50);
Explicamos que "null" no es lo mismo que una cadena vaca o un valor 0.
Para recuperar los registros que contengan el valor "null" en el campo "precio" tipeamos:
select * from libros
where precio is null;
La salida ser diferente a:
select * from libros
where precio=0;
Verifiquemos que las siguientes sentencias no retornan el mismo resultado:
select * from libros
where editorial is null;

select *from libros


where editorial='';
Con la primera sentencia recuperamos los libros cuya editorial es "null"; con la segunda, los libros cuya
editorial guarda una cadena vaca.

drop table if exists libros;


create table libros(
codigo integer auto_increment,
titulo varchar(20) not null,
autor varchar(30),
editorial varchar(15),
precio float,
primary key(codigo)
);
insert into libros (titulo,autor,editorial,precio)
values('El aleph','Borges','Planeta',null);
insert into libros (titulo,autor,editorial,precio)
values ('Matematica estas ahi','Paenza','Paidos',0);
insert into libros (titulo,autor,editorial,precio)
values ('Martin Fierro','Jose Hernandez','',22.50);
insert into libros (titulo,autor,editorial,precio)
values ('Harry Potter y la piedra filosofal', 'J.K. Rowling',null,30.00);
select * from libros
where precio is null;
select * from libros
where precio=0;
select * from libros
where editorial is null;
select *from libros
where editorial='';
drop table if exists libros;
create table libros(
codigo integer auto_increment,
titulo varchar(20) not null,
autor varchar(30),
editorial varchar(15),
precio float,
primary key(codigo)
);
insert into libros (titulo,autor,editorial,precio)
values('El aleph','Borges','Planeta',null);
insert into libros (titulo,autor,editorial,precio)
values ('Matematica estas ahi','Paenza','Paidos',0);
insert into libros (titulo,autor,editorial,precio)
values ('Martin Fierro','Jose Hernandez','',22.50);
insert into libros (titulo,autor,editorial,precio)
values ('Harry Potter y la piedra filosofal', 'J.K. Rowling',null,30.00);
select * from libros
where precio is null;
codi
editori preci
titulo autor
go
al
o
1

El
Borg Planet
aleph es
a

codi
titulo
go
2

Matematica
estas ahi

autor

select * from libros


where precio=0;
editori preci
al
o

Paen
Paidos 0
za

select * from libros


where editorial is null;

codi
titulo
go
4

Harry Potter y J.K.


la pi
Rowling

codi
titulo
go
3

autor

Martin
Fierro

autor
Jose
Hernandez

editori preci
al
o
30

select *from libros


where editorial='';

editori preci
al
o
22.5

Secuencia de comandos SQL ejecutados correctamente.

Problema:
Retome la tabla llamada "medicamentos" que almacena la informacin de los productos
que se venden en una farmacia.
1- Elimine la tabla, si existe.
2- Cree la tabla con la siguiente estructura:
tabla medicamentos
cdigo, nombre (20), laboratorio (20),precio, cantidad, clave principal codigo
3- Visualice la estructura de la tabla "medicamentos".
4- Ingrese los siguientes registros:
'Sertal gotas','Roche',5.2,100
'Sertal compuesto','Roche',7.1,150
'Buscapina','Roche',null,200
'Amoxidal 500','Bayer',15.60,0
'Amoxidal jarabe','Bayer',25,120
'Amoxinil',null,25,120
'Bayaspirina','',0,150
5- Verifique que el campo "codigo" gener los valores de modo automtico
6- Recupere los registros que contengan valor "null" en el campo "laboratorio",
luego los que tengan una cadena vaca en el mismo campo. Note que el resultado
es diferente:
7- Recupere los registros que contengan valor "null" en el campo "precio",
luego los que tengan el valor 0 en el mismo campo. Note que el resultado es diferente:
8- Intente ingresar el siguiente registro con valor "null" para el campo "nombre":
null,'Bayer',10.20,100
8- Intente ingresar el siguiente registro con valor "null" para el campo "cantidad":
'Benadryl comprimidos','Bayer',10.20,null
9- Ingrese el siguiente registro con valor "null" para el campo correspondiente al cdigo:
null,'Benadryl comprimidos','Bayer',10.20,null
10- Recupere los registros cuyo precio sea distinto de 0, luego los que sean distintos de "null":
Note que la salida de la primera sentencia no muestra los registros con valor 0 y tampoco los que tienen
valor nulo; el resultado de la segunda sentencia muestra los registros con valor para el campo precio
(incluso el valor 0). Esto es porque los valores "null" no pueden compararse con operadores relacionales.
11- Recupere los registros en los cuales el laboratorio no contenga una cadena vaca, luego los que sean
distintos de "null":

Note que la primera sentencia solicita los registros que no tengan cadena vaca, es decir, los que guardan
una cadena, como "null" no es una cadena, no retorna los registros con valor nulo.
El resultado de la segunda sentencia solicita que no muestre los valores nulos, es decir, que muestre
cualquier cadena, incluso vaca.

15 - Valores numricos sin signo (unsigned)


Hemos visto algunos atributos extra para los campos.
Los campos de tipo entero pueden tener el atributo "auto_increment", que incrementa automticamente el
valor del campo en 1.
Los campos de cualquier tipo aceptan el atributo "null" y "not null" con lo cual permiten o no valores nulos.
Otro atributo que permiten los campos de tipo numrico es "unsigned".
El atributo "unsigned" (sin signo) permite slo valores positivos.
Si necesitamos almacenar edades, por ejemplo, nunca guardaremos valores negativos, entonces sera
adecuado definir un campo "edad" de tipo entero sin signo:
edad integer unsigned;
Si necesitamos almacenar el precio de los libros, definimos un campo de tipo "float unsigned" porque
jams guardaremos un valor negativo.
Hemos aprendido que al crear una tabla, es importante elegir el tipo de dato adecuado, el ms preciso,
segn el caso. Si un campo almacenar slo valores positivos, es til definir dicho campo con este
atributo.
En los tipos enteros, "unsigned" duplica el rango, es decir, el tipo "integer" permite valores de
-2000000000 a 2000000000 aprox., si se define "integer unsigned" el rango va de 0 a 4000000000 aprox.
Los tipos de coma flotante (float por ejemplo) tambin aceptan el atributo "unsigned", pero el valor del
lmite superior del rango se mantiene.
Problema:
Trabaje con la tabla "libros" de una librera.
Elimine la tabla, si existe:
drop table if exists libros;
Cree la tabla con la siguiente estructura:
create table libros(
codigo integer unsigned auto_increment,
titulo varchar(20) not null,
autor varchar(30),
editorial varchar(15),
precio float unsigned,
cantidad integer unsigned,
primary key (codigo)
);
Al definir los campos especificamos si un campo numrico es "unsigned".
El atributo "unsigned" (sin signo) slo puede agregarse a un campo de tipo numrico (enteros o comas
flotantes) permitiendo para dicho campo slo valores positivos.
Si visualizamos la estructura de la tabla con "describe", vemos que en el tipo de dato aparece este
atributo:
Field
Type
_________________________________
codigo
int(10) unsigned
titulo
varchar(20)
autor
varchar(30)
editorial
varchar(15)
precio
float unsigned
cantidad
int(10) unsigned
Para almacenar el cdigo de los libros, definimos un campo de tipo "integer unsigned" porque
guardaremos valores a partir de 1 en adelante (no valores negativos).
Para almacenar el precio de los libros, definimos un campo de tipo "float unsigned" porque jams
guardaremos un valor negativo.
Para almacenar la cantidad de libros disponibles, definimos un campo de tipo "integer unsigned" porque el
menor valor posible ser 0, nunca negativos.
drop table if exists libros;
create table libros(
codigo integer unsigned auto_increment,
titulo varchar(20) not null,

autor varchar(30),
editorial varchar(15),
precio float unsigned,
cantidad integer unsigned,
primary key (codigo)
);
describe libros;
drop table if exists libros;
create table libros(
codigo integer unsigned auto_increment,
titulo varchar(20) not null,
autor varchar(30),
editorial varchar(15),
precio float unsigned,
cantidad integer unsigned,
primary key (codigo)
);
describe libros;

Field

Type

Nu Ke Defau
Extra
ll y lt

codigo

int(10)
unsigned

NO

titulo

varchar(20) NO

autor

varchar(30)

PR
I

auto_increm
ent

YE
S

editori
YE
varchar(15)
al
S
float
unsigned

YE
S

cantid int(10)
ad
unsigned

YE
S

precio

Secuencia de comandos SQL ejecutados


correctamente.
Problema:
Trabaje con la tabla que almacena los datos sobre

pelculas.
1- Elimine la tabla "peliculas", si existe.
2- Tenga en cuenta el rango de valores que almacenar cada campo:
-codigo
-titulo: 40, no nulo,
-actor: 20,
-duracion:,
-clave primaria: codigo.
3- Cree la tabla y defina cada campo segn el rango de valores que almacenar:
4- Visualice la estructura de la tabla.

16 - Tipos de datos
Ya explicamos que al crear una tabla debemos elegir la estructura adecuada, esto es, definir los campos y
sus tipos ms precisos, segn el caso. Por ejemplo, si un campo numrico almacenar solamente valores
enteros positivos el tipo "integer" con el atributo "unsigned" es ms adecuado que, por ejemplo un "float".
Hasta ahora hemos visto 3 tipos de datos: varchar, integer (con y sin signo) y float (con y sin signo). Hay
ms tipos, incluso, subtipos.
Los valores que podemos guardar son:
A) TEXTO: Para almacenar texto usamos cadenas de caracteres. Las cadenas se colocan entre comillas
simples. Podemos almacenar dgitos con los que no se realizan operaciones matemticas, por ejemplo,
cdigos de identificacin, nmeros de documentos, nmeros telefnicos. Tenemos los siguientes tipos:
varchar, char y text.
B) NUMEROS: Existe variedad de tipos numricos para representar enteros, negativos, decimales. Para
almacenar valores enteros, por ejemplo, en campos que hacen referencia a cantidades, precios, etc.,
usamos el tipo integer. Para almacenar valores con decimales utilizamos: float o decimal.
C) FECHAS Y HORAS: para guardar fechas y horas dispone de varios tipos: date (fecha), datetime (fecha y
hora), time (hora), year (ao) y timestamp.
D) OTROS TIPOS: enum y set representan una enumeracin y un conjunto respectivamente. Lo veremos
ms adelante.
E) Otro valor que podemos almacenar es el valor "null". El valor 'null' significa valor desconocido o "dato
inexistente", ya lo estudiamos. No es lo mismo que 0 o una cadena vaca.

17 - Tipos de datos (texto)


Ya explicamos que al crear una tabla debemos elegir la estructura adecuada, esto es, definir los campos y
sus tipos ms precisos, segn el caso.
Hasta ahora hemos visto 3 tipos de datos: varchar, integer (con y sin signo) y float (con y sin signo). Hay
ms tipos, incluso, subtipos.
Para almacenar TEXTO usamos cadenas de caracteres. Las cadenas se colocan entre comillas simples.
Podemos almacenar dgitos con los que no se realizan operaciones matemticas, por ejemplo, cdigos de
identificacin, nmeros de documentos, nmeros telefnicos. Tenemos los siguientes tipos:
1) varchar(x): define una cadena de caracteres de longitud variable en la cual determinamos el mximo de
caracteres con el argumento "x" que va entre parntesis. Su rango va de 1 a 255 caracteres. Un
varchar(10) ocupa 11 bytes, pues en uno de ellos almacena la longitud de la cadena. Ocupa un byte ms
que la cantidad definida.
2) char(x): define una cadena de longitud fija, su rango es de 1 a 255 caracteres. Si la cadena ingresada es
menor a la longitud definida (por ejemplo cargamos 'Juan' en un char(10)), almacena espacios en blanco a
la derecha, tales espacios se eliminan al recuperarse el dato. Un char(10) ocupa 10 bytes, pues al ser fija
su longitud, no necesita ese byte adicional donde guardar la longitud. Por ello, si la longitud es invariable,
es conveniente utilizar el tipo char; caso contrario, el tipo varchar.
Ocupa tantos bytes como se definen con el argumento "x". Si ingresa un argumento mayor al permitido
(255) aparece un mensaje indicando que no se permite y sugiriendo que use "blob" o "text". Si omite el
argumento, coloca 1 por defecto.
3) blob o text: bloques de datos de 60000 caracteres de longitud aprox. No lo veremos por ahora.
Para los tipos que almacenan cadenas, si asignamos una cadena de caracteres de mayor longitud que la
permitida o definida, la cadena se corta. Por ejemplo, si definimos un campo de tipo varchar(10) y le
asignamos la cadena 'Buenas tardes', se almacenar 'Buenas tar' ajustndose a la longitud de 10.
Es importante elegir el tipo de dato adecuado segn el caso, el ms preciso. Por ejemplo, si vamos a
almacenar un caracter, conviene usar char(1), que ocupa 1 byte y no varchar(1), que ocupa 2 bytes.
Tipo
Bytes de almacenamiento
_______________________________________
char(x)
x
varchar(x)
x+1
Problema:
Un comercio que tiene un stand en una feria registra en una tabla llamada "visitantes" algunos datos de
las personas que visitan o compran en su stand para luego enviarle publicidad de sus productos.
Eliminamos la tabla "visitantes", si existe.
Creamos con la siguiente estructura:
create table visitantes(
nombre varchar(30),
edad integer unsigned,
sexo char(1),
domicilio varchar(30),
ciudad varchar(20),
telefono varchar(11),
montocompra float unsigned
);
Note que definimos el campo "sexo" de tipo "char", porque necesitamos solamente 1 caracter "f" o "m",
que siempre ser fijo, con esta definicin ocupamos un byte.
drop table if exists visitantes;
create table visitantes(
nombre varchar(30),
edad integer unsigned,
sexo char(1),
domicilio varchar(30),
ciudad varchar(20),
telefono varchar(11),
montocompra float unsigned
);
describe visitantes;

drop table if exists visitantes;


create table visitantes(
nombre varchar(30),
edad integer unsigned,
sexo char(1),
domicilio varchar(30),
ciudad varchar(20),
telefono varchar(11),
montocompra float unsigned
);
describe visitantes;

Field

Type

Nu Ke Defau Extr
ll y lt
a

nombre

varchar(30)

YE
S

edad

int(10)
unsigned

YE
S

sexo

char(1)

YE
S

domicilio

varchar(30)

YE
S

ciudad

varchar(20)

YE
S

telefono

varchar(11)

YE
S

montocom float
pra
unsigned

YE
S

patente,marca,modelo,precio
'ACD123','Fiat 128','1970',15000
'ACG234','Renault 11','1990',40000
'BCD333','Peugeot 505','1990',80000
'GCD123','Renault Clio','1990',70000
'BCC333','Renault Megane','1998',95000
'BVF543','Fiat 128','1975',20000

Secuencia de comandos SQL ejecutados correctamente.


Problema:
Una concesionaria de autos vende autos usados y almacena
los datos de los autos en
una tabla llamada "autos".
1- Elimine la tabla "autos" si existe.
2- Cree la tabla con la siguiente estructura:
tabla autos, patente (6), marca (20), modelo (4), precio, Clave
principal patente
3- Ingrese los siguientes registros:

4- Seleccione todos los autos del ao 1990:


5- Seleccione todos los autos con precio superior a 50000:

18 - Tipos de datos (numricos)


Hasta ahora hemos visto 2 tipos de datos para almacenar valores numricos: integer (con y sin signo) y
float (con y sin signo). Existe variedad de tipos numricos para representar enteros, negativos, decimales.
Para almacenar valores enteros, por ejemplo, en campos que hacen referencia a cantidades, precios, etc.,
usamos: 1) integer(x) o int(x): su rango es de -2000000000 a 2000000000 aprox. El tipo "int unsigned" va
de 0 a 4000000000. El tipo "integer" tiene subtipos:
- mediumint(x): va de 8000000 a 8000000 aprox. Sin signo va de 0 a 16000000 aprox.
- smallint(x): va de 30000 a 30000 aprox., sin signo, de 0 a 60000 aprox.
- tinyint(x): define un valor entero pequeo, cuyo rango es de -128 a 127. El tipo sin signo va de 0 a 255.
- bool o boolean: sinnimos de tinyint(1). Un valor cero se considera falso, los valores distintos de cero,
verdadero.
- bigint(x): es un entero largo. Va de 9000000000000000000 a 9000000000000000000 aprox. Sin signo
es de 0 a 10000000000000000000.
Para almacenar valores con decimales utilizamos:
2) float (t,d): nmero de coma flotante. Su rango es de -3.4e+38 a 1.1e-38 (9 cifras).
3) decimal o numeric (t,d): el primer argumento indica el total de dgitos y el segundo, la cantidad de
decimales. El rango depende de los argumentos, tambin los bytes que ocupa. Si queremos almacenar
valores entre 0.00 y 99.99 debemos definir el campo como tipo "decimal (4,2)". Si no se indica el valor del
segundo argumento, por defecto es 0. Para los tipos "float" y "decimal" se utiliza el punto como separador
de decimales.
Todos los tipos enteros pueden tener el atributo "unsigned", esto permite slo valores positivos y duplica
el rango. Los tipos de coma flotante tambin aceptan el atributo "unsigned", pero el valor del lmite
superior del rango no se modifica.
Es importante elegir el tipo de dato adecuado segn el caso, el ms preciso. Por ejemplo, si un campo
numrico almacenar valores positivos menores a 10000, el tipo "int" no es el ms adecuado, porque su
rango va de -2000000000 a 2000000000 aprox., conviene el tipo "smallint unsigned", cuyo rango va de 0
a 60000 aprox. De esta manera usamos el menor espacio de almacenamiento posible.
Tipo
Bytes de almacenamiento
_______________________________________
tinyint
1
smallint
2
mediumint
3
int
4
bigint
8
float
4
decimal(t,d)
t+2 si d>0, t+1 si d=0 y d+2 si t<d

Problema:
Trabajamos con la tabla "libros" de una librera.
Eliminamos la tabla, si existe:
drop table if exists libros;
Creamos la tabla con la siguiente estructura:
create table libros(
codigo int unsigned auto_increment,
titulo varchar(20) not null,
autor varchar(30),
editorial varchar(15),
precio decimal(5,2) unsigned,
cantidad smallint unsigned,
primary key (codigo)
);
Note que definimos el campo "cantidad" de tipo "smallint unsigned", esto es porque los valores para este
campo sern siempre positivos (mayores o iguales a 0), adems la cantidad disponible no superar los
60000 aprox., as que no es adecuado usar int (cuyo rango llega hasta 4000 millones aprox.), as
ocupamos menos espacio (3 bytes para mediumint contra 4 bytes para int). Es importante elegir el tipo de
dato ms preciso.
Como en el campo "precio" almacenaremos valores entre 0.00 y 999.99 definimos el campo como tipo
"decimal (5,2)", as evitamos tantos decimales innecesarios que tenamos antes con el tipo "float".

drop table if exists libros;


create table libros(
codigo int unsigned auto_increment,
titulo varchar(20) not null,
autor varchar(30),
editorial varchar(15),
precio decimal(5,2) unsigned,
cantidad smallint unsigned,
primary key (codigo)
);
describe libros;
drop table if exists libros;
create table libros(
codigo int unsigned auto_increment,
titulo varchar(20) not null,
autor varchar(30),
editorial varchar(15),
precio decimal(5,2) unsigned,
cantidad smallint unsigned,
primary key (codigo)
);
describe libros;

Field

Type

Nu Ke Defau
Extra
ll y lt

codigo int(10) unsigned NO


titulo

varchar(20)

NO

autor

varchar(30)

YE
S

editori
varchar(15)
al

YE
S

precio

decimal(5,2)
unsigned

cantid smallint(5)
ad
unsigned

PR
I

auto_increm
ent

YE
S

Secuencia de comandos SQL ejecutados


correctamente.

YE
S

Problema:

Un comercio que enva pizzas y empanadas a domicilio registra los pedidos diariamente en una tabla
llamada "pedidos" con los siguientes datos:
- numero de pedido, autoincrementable, entero positivo comienza en 1 y menor a 200 aprox.
- nombre: piza o empanada,
- tipo: por ejemplo, si es pizza: especial, muzarela, etc., si son empanadas: salteas, picantes,
arabes, etc.
- precio: precio por unidad, valor con decimales que no supera los $99.99 y ser siempre mayor a 0,
- cantidad: cantidad de articulos, entero positivo desde 1 e inferior a 200 aprox.
- domicilio del cliente.
1- Elimine la tabla "pedidos" si existe.
2- Cree la tabla eligiendo el tipo de dato adecuado para cada campo.

19 - Tipos de datos (fechas y horas)


Para guardar fechas y horas dispone de varios tipos:
1) date: representa una fecha con formato "YYYY-MM-DD". El rango va de "1000-01-01" a "9999-12-31".
2) datetime: almacena fecha y hora, su formato es "YYYY-MM-DD HH:MM:SS". El rango es de "1000-01-01
00:00:00" a "9999-12-31 23:59:59".
3) time: una hora. Su formato es "HH:MM:SS". El rango va de "-838:59:59" a "838:59:59".
4) year(2) y year(4): un ao. Su formato es "YYYY" o "YY". Permite valores desde 1901 a 2155 (en formato
de 4 dgitos) y desde 1970 a 2069 (en formato de 2 dgitos).
Si ingresamos los valores como cadenas, un valor entre "00" y "69" es convertido a valores "year" en el
rango de 2000 a 2069; si el valor est entre "70" y "99", se convierten a valores "year" en el rango 1970 a
1999.
Si ingresamos un valor numrico 0, se convierte en "0000"; entre 1 y 69, se convierte a valores "year"
entre 2001 a 2069; entre 70 y 99, es convertido a valores "year" de 1970 a 1999.
Para almacenar valores de tipo fecha se permiten como separadores "/", "-" y ".".
Si ingresamos '06-12-31' (ao de 2 dgitos), lo toma como '2006-12-31'.
Si ingresamos '2006-2-1' (mes y da de 1 dgito), lo toma como '2006-02-01'.
Si ingresamos '20061231' (cadena sin separador), lo toma como '2006-12-31'.
Si ingresamos 20061231 (numrico), lo toma como '2006-12-31'.
Si ingresamos '20061231153021' (cadena sin separadores), lo toma como '2006-12-31 15:30:21'.
Si ingresamos '200612311530' (cadena sin separadores con un dato faltante) no lo reconoce como
fechahora y almacena ceros.
Si ingresamos '2006123' (cadena sin separadores con un dato faltante) no lo reconoce como fecha y
almacena ceros.
Si ingresamos '2006-12-31 11:30:21' (valor date time) en un campo 'date', toma slo la parte de la fecha,
la hora se corta, se guarda '2006-12-31'.
Es importante elegir el tipo de dato adecuado segn el caso, el ms preciso. Por ejemplo, si slo
necesitamos registrar un ao (sin da ni mes), el tipo adecuado es "year" y no "date".
Tipo
Bytes de almacenamiento
_______________________________________
date
3
datetime
8
time
3
year
1
Problema:
Trabajamos con la tabla "libros" de una librera.
Eliminamos la tabla, si existe:
drop table if exists libros;
Creamos la tabla con la siguiente estructura:
create table libros(
codigo int unsigned auto_increment,
titulo varchar(20) not null,
autor varchar(30),
editorial varchar(15),
precio decimal(5,2) unsigned,
cantidad mediumint unsigned not null,
primary key(codigo)
);
Veamos en algunos ejemplos qu sucede cuando al ingresar un registro no colocamos valores para
algunos campos:
insert into libros (titulo,autor,precio)
values('El aleph','Borges',23.6);
En el campo "codigo" ingresar el siguiente valor de la secuencia porque es "auto_increment"; en el
campo "editorial" almacenar "null", porque el campo acepta valores nulos y en el campo "cantidad"
ingresar 0 porque es el valor por defecto de los campos numricos que no admiten valores nulos.
Ingresamos otro registro con algunos valores explcitos:
insert into libros (autor,editorial,cantidad)
values('Borges','Planeta',100);
En el campo "codigo" ingresar el siguiente valor de la secuencia porque es "auto_increment"; en el
campo "titulo", ingresar una cadena vaca porque es "varchar not null" y en el campo "precio" guardar
"null" porque es el valor por defecto de los campos no definidos como "not null.

drop table if exists libros;


create table libros(
codigo int unsigned auto_increment,
titulo varchar(20) not null,
autor varchar(30),
editorial varchar(15),
precio decimal(5,2) unsigned,
cantidad mediumint unsigned not null,
primary key(codigo)
);
insert into libros (titulo,autor,precio)
values('El aleph','Borges',23.6);
select * from libros;
insert into libros (autor,editorial,cantidad)
values('Borges','Planeta',100);
select * from libros;
drop table if exists libros;
create table libros(
codigo int unsigned auto_increment,
titulo varchar(20) not null,
autor varchar(30),
editorial varchar(15),
precio decimal(5,2) unsigned,
cantidad mediumint unsigned not null,
primary key(codigo)
);
insert into libros (titulo,autor,precio)
values('El aleph','Borges',23.6);
select * from libros;
codi
editori preci cantid
titulo autor
go
al
o
ad
1

El
Borg
aleph es

23.6
0
0

insert into libros (autor,editorial,cantidad)


values('Borges','Planeta',100);

select * from libros;


codi
editori preci cantid
titulo autor
go
al
o
ad
1
2

El
Borg
aleph es
Borg Planet
es
a

23.6
0
0
100

Secuencia de comandos SQL ejecutados correctamente.

20 - Valores por defecto.


Hemos visto los valores por defecto de los distintos tipos de datos. Ahora que conocemos ms tipos de
datos, vamos a ampliar la informacin referente a ellos y a repasar los conocidos.
Para campos de cualquier tipo no declarados "not null" el valor por defecto es "null" (excepto para tipos
"timestamp" que no trataremos aqu).
Para campos declarados "not null", el valor por defecto depende del tipo de dato. Para cadenas de
caracteres el valor por defecto es una cadena vaca. Para valores numricos el valor por defecto es 0; en
caso de ser "auto_increment" es el valor mayor existente+1 comenzando en 1. Para campos de tipo fecha
y hora, el valor por defecto es 0 (por ejemplo, en un campo "date" es "0000-00-00").
Para todos los tipos, excepto "blob", "text" y "auto_increment" se pueden explicitar valores por defecto
con la clusula "default"; tema que veremos ms adelante.
Un valor por defecto se inserta cuando no est presente al ingresar un registro y en algunos casos en que
el dato ingresado es invlido.
Los campos para los cuales no se ingresaron valores tomarn los valores por defecto segn el tipo de dato
del campo, en el campo "codigo" ingresar el siguiente valor de la secuencia porque es "auto_increment";
en el campo "titulo", ingresar una cadena vaca porque es "varchar not null"; en el campo "editorial"
almacenar "null", porque no est definido "not null"; en el campo "precio" guardar "null" porque es el
valor por defecto de los campos no definidos como "not null" y en el campo "cantidad" ingresar 0 porque
es el valor por defecto de los campos numricos que no admiten valores nulos.
Tipo
Valor por defecto
Clusula "default"
_____________________________________________________________________________________
caracter not null
cadena vaca
permite
numerico not null
0
permite
fecha not null
0000-00-00
permite
hora not null
00:00:00
permite
auto_increment
siguiente de la sec., empieza en 1 no permite
carac.,numer.,fecha,hora null
null
permite
Problema:
Trabajamos con la tabla "libros" de una librera.
Eliminamos la tabla, si existe:
drop table if exists libros;
Creamos la tabla con la siguiente estructura:
create table libros(
codigo int unsigned auto_increment,
titulo varchar(20) not null,
autor varchar(30),
editorial varchar(15),
precio decimal(5,2) unsigned,
cantidad mediumint unsigned not null,
primary key(codigo)
);
Veamos en algunos ejemplos qu sucede cuando al ingresar un registro no colocamos valores para
algunos campos:
insert into libros (titulo,autor,precio)
values('El aleph','Borges',23.6);
En el campo "codigo" ingresar el siguiente valor de la secuencia porque es "auto_increment"; en el
campo "editorial" almacenar "null", porque el campo acepta valores nulos y en el campo "cantidad"
ingresar 0 porque es el valor por defecto de los campos numricos que no admiten valores nulos.
Ingresamos otro registro con algunos valores explcitos:
insert into libros (autor,editorial,cantidad)
values('Borges','Planeta',100);
En el campo "codigo" ingresar el siguiente valor de la secuencia porque es "auto_increment"; en el
campo "titulo", ingresar una cadena vaca porque es "varchar not null" y en el campo "precio" guardar
"null" porque es el valor por defecto de los campos no definidos como "not null.
editorial varchar(15),
precio decimal(5,2) unsigned,
cantidad mediumint unsigned not null,
primary key(codigo)
);
insert into libros (titulo,autor,precio)

values('El aleph','Borges',23.6);
select * from libros;
insert into libros (autor,editorial,cantidad)
values('Borges','Planeta',100);
select * from libros;
drop table if exists libros;
create table libros(
codigo int unsigned auto_increment,
titulo varchar(20) not null,
autor varchar(30),
editorial varchar(15),
precio decimal(5,2) unsigned,
cantidad mediumint unsigned not null,
primary key(codigo)
);
insert into libros (titulo,autor,precio)
values('El aleph','Borges',23.6);
select * from libros;
codi
editori preci cantid
titulo autor
go
al
o
ad
1

El
Borg
aleph es

23.6
0
0

insert into libros (autor,editorial,cantidad)


values('Borges','Planeta',100);

select * from libros;


codi
editori preci cantid
titulo autor
go
al
o
ad
1
2

El
Borg
aleph es

23.6
0
0

Borg Planet
es
a

100

Secuencia de comandos SQL ejecutados correctamente.


Problema:
Trabaje con la tabla que almacena los datos sobre pelculas,

llamada "peliculas".
1- Elimine la tabla si existe.
2- Crela con la siguiente estructura:
-codigo (entero sin signo, autoincrementable),
-titulo (cadena de 30, not nulo),
-actor (cadena de 20),
-duracion (entero positivo hasta 200 apox.),
-clave primaria (codigo).
3- Agregue los siguientes registros para ver cmo guarda MySQL los valores no ingresados:
insert into peliculas (titulo,actor,duracion)
values('Mision imposible','Tom Cruise',120);
insert into peliculas (codigo,duracion)
values(5,90);
insert into peliculas (titulo,actor)
('Harry Potter y la piedra filosofal','Daniel R.');
insert into peliculas (titulo,actor,duracion)
('Harry Potter y la piedra filosofal','Daniel R.',120);
4- Seleccione todos los datos de las pelculas para ver cmo guard MySQL los valores no
ingresados. En el primer registro ingresado, en el campo "codigo" ingresar "1", el primer valor
para campos "auto_increment". En el segundo registro ingresado se almacena una cadena vaca para
el ttulo y el valor "null" para el actor. En el tercer registro guarda "6" en "codigo", el
siguiente valor de la secuencia tomando el valor ms alto y en "duracion" almacena "0". En el
cuarto registro sigue la secuencia del cdigo.

21 - Valores invlidos.
Hemos visto los valores por defecto de los distintos tipos de datos.
Un valor por defecto se inserta cuando no est presente al ingresar un registro y en algunos casos en que
el dato ingresado es invlido.
Un valor es invlido por tener un tipo de dato incorrecto para el campo o por estar fuera de rango.
Veamos los distintos tipos de datos invlidos.
Para campos de tipo caracter:
-valor numrico: si en un campo definido de tipo caracter ingresamos un valor numrico, lo convierte
automticamente a cadena. Por ejemplo, si guardamos 234 en un varchar, almacena '234'.
-mayor longitud: si intentamos guardar una cadena de caracteres mayor a la longitud definida, la cadena
se corta guardando slo la cantidad de caracteres que quepa. Por ejemplo, si definimos un campo de tipo
varchar(10) y le asignamos la cadena 'Buenas tardes', se almacenar 'Buenas tar' ajustndose a la
longitud de 10.
Para campos numricos:
-cadenas: si en un campo numrico ingresamos una cadena, lo pasa por alto y coloca 0. Por ejemplo, si en
un campo de tipo "integer" guardamos 'abc', almacenar 0.
-valores fuera de rango: si en un campo numrico intentamos guardar un valor fuera de rango, se
almacena el valor lmite del rango ms cercano (menor o mayor). Por ejemplo, si definimos un campo
'tinyint' (cuyo rango va de -128 a 127) e intentamos guardar el valor 200, se almacenar 127, es decir el
mximo permitido del rango; si intentamos guardar -200, se guardar -128, el mnimo permitido por el
rango. Otro ejemplo, si intentamos guardar el valor 1000.00 en un campo definido como decimal(5,2)
guardar 999.99 que es el mayor del rango.
-valores incorrectos: si cargamos en un campo definido de tipo decimal un valor con ms decimales que
los permitidos en la definicin, el valor es redondeado al ms cercano. Por ejemplo, si cargamos en un
campo definido como decimal(4,2) el valor 22.229, se guardar 22.23, si cargamos 22.221 se guardar
22.22.
Para campos definidos auto_increment el tratamiento es el siguiente:
- Pasa por alto los valores fuera del rango, 0 en caso de no ser "unsigned" y todos los menores a 1 en caso
de ser "unsigned".
- Si ingresamos un valor fuera de rango contina la secuencia.
- Si ingresamos un valor existente, aparece un mensaje de error indicando que el valor ya existe.
Para campos de fecha y hora:
-valores incorrectos: si intentamos almacenar un valor que MySql no reconoce como fecha (sea fuera de
rango o un valor invlido), convierte el valor en ceros (segn el tipo y formato). Por ejemplo, si intentamos
guardar '20/07/2006' en un campo definido de tipo "date", se almacena '0000-00-00'. Si intentamos
guardar '20/07/2006 15:30' en un campo definido de tipo "datetime", se almacena '0000-00-00 00:00:00'.
Si intentamos almacenar un valor invlido en un campo de tipo "time", se guarda ceros. Para "time", si
intentamos cargar un valor fuera de rango, se guarda el menor o mayor valor permitido (segn sea uno u
otro el ms cercano).
Para campos de cualquier tipo:
-valor "null": si un campo est definido "not null" e intentamos ingresar "null", aparece un mensaje de
error y la sentencia no se ejecuta.
Los valores invlidos para otros tipos de campos lo trataremos ms adelante.
RESUMEN:
Tipo
Valor invlido
Resultado
__________________________________________________________________________________________
caracter null/ not null
123
'123'
caracter null/ not null
mayor longitud
se corta
caracter not null
null
error
numrico null/ not null
'123'
0
numrico null/ not null
fuera de rango
lmite ms cercano
numrico not null
null
error
numrico decimal null/ not null
ms decimales que los definidos
redondea al ms
cercano
num. auto_incr. c/signo null/not null 0
siguiente de la secuencia
num. auto_incr. s/signonull/not null todos los menores a 1
siguiente de la secuencia
num. auto_incr. c/s signo null
null
siguiente de la secuencia
num. auto_incr. c/s signo null/not null
valor existente
error
fecha
fuera de rango
0000-00-00
fecha
'20-07-2006' (otro orden) 0000-00-00
hora
fuera de rango
lmite ms cercano
fecha y hora not null
null
error

Problema:
Trabajamos con la tabla "libros" de una librera.
Eliminamos la tabla, si existe:
drop table if exists libros;
Creamos la tabla con la siguiente estructura:
create table libros(
codigo int unsigned auto_increment,
titulo varchar(20) not null,
autor varchar(30),
editorial varchar(15),
precio decimal(5,2) unsigned,
cantidad mediumint unsigned not null,
primary key(codigo)
);
Ingresemos algunos registros con valores invlidos y veamos qu sucede:
insert into libros (titulo,autor,editorial,precio)
values ('Alicia en el pais de las maravillas',555,'Planeta',23.45);
En el campo "titulo" ingresamos una cadena de ms de 20 caracteres (que es la longitud definida para el
campo), como resultado, corta la cadena ingresada. En el campo "autor" ingresamos un valor numrico, lo
convierte a cadena.
Ingresemos otro registro:
insert into libros (titulo,autor,editorial,precio,cantidad)
values ('Matematica estas ahi','Paenza','Planeta','abc',20000000);
En el campo "precio" ingresamos una cadena, la pasa por alto y coloca 0. En el campo "cantidad"
ingresamos un valor fuera de rango, entonces guarda el valor lmite ms cercano del rango (16777215).
Ingresemos otro registro:
insert into libros (titulo,editorial,precio)
values ('Alegoria','Planeta',3333.50);
Como cargamos en el campo "precio" (decimal 5,2) un fuera de rango, almacen el mximo valor
permitido por el rango (999.99).
Ingresemos otro registro:
insert into libros (titulo,editorial,precio)
values ('Alegoria','Planeta',33.567);
Como cargamos en el campo "precio" (decimal 5,2) un valor con ms decimales que los permitidos, el
valor es redondeado al ms cercano (33.57).
Ingresemos otro registro:
insert into libros (codigo,titulo)
values (2,'El gato con botas');
Aparece un mensaje de error indicando que la clave est duplicada.
Ingresemos otros registros:
insert into libros (codigo,titulo)
values (0,'El gato con botas');
insert into libros (codigo,titulo)
values (-5,'Robin Hood');
Intentamos ingresar el valor 0 para el cdigo, lo pasa por alto y sigue la secuencia. Lo mismo sucede si
ingresamos un valor negativo.
Veamos qu sucede con los valores "null":
insert into libros (codigo,titulo)
values (null,'Alicia a traves del espejo');
Si intentamos ingresar "null" para el cdigo, lo pasa por alto y sigue la secuencia.
Otro ejemplo:
insert into libros (titulo,autor)
values (null,'Borges');
Aparece un mensaje de error indicando que el campo "titulo" no acepta valores nulos.
Otro ejemplo:
insert into libros (titulo,autor,cantidad)
values ('Antologia poetica','Borges',null);
Muestra un mensaje de error indicando que el campo "cantidad" no acepta valores nulos.
drop table if exists libros;
create table libros(
codigo int unsigned auto_increment,
titulo varchar(20) not null,

autor varchar(30),
editorial varchar(15),
precio decimal(5,2) unsigned,
cantidad mediumint unsigned not null,
primary key(codigo)
);
insert into libros (titulo,autor,editorial,precio)
values ('Alicia en el pais de las maravillas',555,'Planeta',23.45);
select * from libros;
insert into libros (titulo,autor,editorial,precio,cantidad)
values ('Matematica estas ahi','Paenza','Planeta','abc',20000000);
select * from libros;
insert into libros (titulo,editorial,precio)
values ('Alegoria','Planeta',3333.50);
select * from libros;
insert into libros (titulo,editorial,precio)
values ('Alegoria','Planeta',33.567);
select * from libros;
insert into libros (codigo,titulo)
values (2,'El gato con botas');
select * from libros;
insert into libros (codigo,titulo)
values (0,'El gato con botas');
insert into libros (codigo,titulo)
values (-5,'Robin Hood');
select * from libros;
insert into libros (codigo,titulo)
values (null,'Alicia a traves del espejo');
select * from libros;
insert into libros (titulo,autor)
values (null,'Borges');
select * from libros;
insert into libros (titulo,autor,cantidad)
values ('Antologia poetica','Borges',null);
select * from libros;
drop table if exists libros;
create table libros(
codigo int unsigned auto_increment,
titulo varchar(20) not null,
autor varchar(30),
editorial varchar(15),
precio decimal(5,2) unsigned,
cantidad mediumint unsigned not null,
primary key(codigo)
);
insert into libros (titulo,autor,editorial,precio)
values ('Alicia en el pais de las maravillas',555,'Planeta',23.45);
select * from libros;
codi
titulo
go
1

Alicia en el
pais de

aut editori preci cantid


or al
o
ad
555

Planet 23.4
0
a
5

insert into libros (titulo,autor,editorial,precio,cantidad)


values ('Matematica estas

ahi','Paenza','Planeta','abc',20000000);
select * from libros;
codi
titulo
go

autor

editori preci cantida


al
o
d
Planet 23.4
0
a
5

Alicia en el pais
de

555

Matematica
estas ahi

Paen Planet
167772
0.00
za
a
15

insert into libros (titulo,editorial,precio)


values ('Alegoria','Planeta',3333.50);

select * from libros;


codi
titulo
go

autor

editori preci cantida


al
o
d
Planet 23.4
0
a
5

Alicia en el pais
de

555

Matematica
estas ahi

Paen Planet
167772
0.00
za
a
15

Planet 999.
0
a
99

Alegoria

codi
titulo
go

autor

editori preci cantida


al
o
d
Planet 23.4
0
a
5

Alicia en el pais
de

555

Matematica
estas ahi

Paen Planet
167772
0.00
za
a
15

Alegoria

Planet 999.
0
a
99

Alegoria

Planet 33.5
0
a
7

insert into libros (titulo,editorial,precio)


values ('Alegoria','Planeta',33.567);
select * from libros;

insert into libros (codigo,titulo)


values (2,'El gato con botas');

Problema:

Una empresa registra los datos de sus empleados en una tabla llamada "empleados".
1- Elimine la tabla "empleados" si existe.
2- Cree la tabla:
empleados
con los campos
documento , not null,
nombre, not null,
domicilio ,
fechaingreso ,not null,
fechanacimiento ,
llave primaria, documento
3- Intente ingresar la fecha "20-10-2005" para la fecha de ingreso:
documento,fechaiIngreso,fechanacimiento
los valores 22333444, 20-10-2005,null
muestre el resultado
4- Intente almacenar "null" en "fechaingreso":
documento,fechaingreso,fechanacimiento
Valores 22333444, null, 2005-10-10
Muestre el resultado
5- Intente almacenar valores nulos en los campos "documento" y " nombre".
Muestre el resultado
6- Almacene un valor numrico en un campo de tipo caracter.
Muestre el resultado
7- Almacene en "documento" el valor "22.345.678".
Muestre el resultado

22 - Atributo default en una columna de una tabla.


Si al insertar registros no se especifica un valor para un campo, se inserta su valor por defecto implcito
segn el tipo de dato del campo. Por ejemplo:
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Java en 10 minutos','Juan Pereyra','Paidos',25.7,100);
Como no ingresamos valor para el campo "codigo", MySQL insertar el valor por defecto, como "codigo" es
un campo "auto_increment", el valor por defecto es el siguiente de la secuencia.
Si omitimos el valor correspondiente al autor:
insert into libros (titulo,editorial,precio,cantidad)
values('Java en 10 minutos','Paidos',25.7,200);
MySQL insertar "null", porque el valor por defecto de un campo (de cualquier tipo) que acepta valores
nulos, es "null".
Lo mismo sucede si no ingresamos el valor del precio:
insert into libros (titulo,autor,editorial,cantidad)
values('Java en 10 minutos','Juan Pereyra',Paidos',150);
MySQL insertar el valor "null" porque el valor por defecto de un campo (de cualquier tipo) que acepta
valores nulos, es "null".
Si omitimos el valor correspondiente al ttulo:
insert into libros (autor,editorial,precio,cantidad)
values ('Borges','Paidos',25.7,200);
MySQL guardar una cadena vaca, ya que ste es el valor por defecto de un campo de tipo cadena
definido como "not null" (no acepta valores nulos).
Si omitimos el valor correspondiente a la cantidad:
insert into libros (titulo,autor,editorial,precio)
values('Alicia a traves del espejo','Lewis Carroll','Emece',34.5);
el valor que se almacenar ser 0, porque el campo "precio" es de tipo numrico "not null" y el valor por
defecto de los tipos numricos que no aceptan valores nulos es 0.
Podemos establecer valores por defecto para los campos cuando creamos la tabla. Para ello utilizamos
"default" al definir el campo. Por ejemplo, queremos que el valor por defecto del campo "precio" sea 1.11
y el valor por defecto del campo "autor" sea "Desconocido":
create table libros(
codigo int unsigned auto_increment,
titulo varchar(40) not null,
autor varchar(30) default 'Desconocido',
precio decimal(5,2) unsigned default 1.11,
cantidad int unsigned not null,
primary key (codigo)
);
Si al ingresar un nuevo registro omitimos los valores para el campo "autor" y "precio", MySQL insertar los
valores por defecto definidos con la palabra clave "default":
insert into libros (titulo,editorial,cantidad)
values('Java en 10 minutos','Paidos',200);
MySQL insertar el registro con el siguiente valor de la secuencia en "codigo", con el ttulo, editorial y
cantidad ingresados, en "autor" colocar "Desconocido" y en precio "1.11".
Entonces, si al definir el campo explicitamos un valor mediante la clusula "default", se ser el valor por
defecto; sino insertar el valor por defecto implcito segn el tipo de dato del campo.
Los campos definidos "auto_increment" no pueden explicitar un valor con "default", tampoco los de tipo
"blob" y "text".
Los valores por defecto implcitos son los siguientes:
-para campos de cualquier tipo que admiten valores nulos, el valor por defecto "null";
-para campos que no admiten valores nulos, es decir, definidos "not null", el valor por defecto depende del
tipo de dato:

-para campos numricos no declarados "auto_increment": 0;


-para campos numricos definidos "auto_increment": el valor siguiente de la secuencia, comenzando en 1;
-para los tipos cadena: cadena vaca.
Ahora al visualizar la estructura de la tabla con "describe" podemos entender un poco ms lo que informa
cada columna:
describe libros;
"Field" contiene el nombre del campo; "Type", el tipo de dato; "NULL" indica si el campo admite valores
nulos; "Key" indica si el campo est indexado (lo veremos ms adelante); "Default" muestra el valor por
defecto del campo y "Extra" muestra informacin adicional respecto al campo, por ejemplo, aqu indica
que "codigo" est definido "auto_increment".
Tambin se puede utilizar "default" para dar el valor por defecto a los campos en sentencias "insert", por
ejemplo:
insert into libros (titulo,autor,precio,cantidad)
values ('El gato con botas',default,default,100);
Problema:
Trabajamos con la tabla "libros" de una librera.
Eliminamos la tabla, si existe:
drop table if exists libros;
Creamos la tabla con la siguiente estructura:
create table libros(
codigo int unsigned auto_increment,
titulo varchar(40) not null,
editorial varchar(15),
autor varchar(30) default 'Desconocido',
precio decimal(5,2) unsigned default 1.11,
cantidad mediumint unsigned not null,
primary key (codigo)
);
Ingresamos algunos registros omitiendo algunos campos para ver cmo trabaja la clusula "default".
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Java en 10 minutos','Juan Pereyra','Paidos',25.7,100);
Como no ingresamos valor para el campo "codigo", se insertar el valor por defecto implcito, como
"codigo" es un campo "auto_increment", el valor por defecto es el siguiente de la secuencia.
Si omitimos el valor correspondiente al ttulo:
insert into libros (autor,editorial,precio,cantidad)
values('Juan Perez','Planeta',28.50,50);
MySQL insertar una cadena vaca, porque el valor por defecto de un campo de tipo caracter definido
como "not null" es ese y para el cdigo, seguir con la secuencia.
Lo mismo sucede si no ingresamos un valor para la editorial:
insert into libros (titulo,autor,precio,cantidad)
values('Aprenda PHP','Alberto Lopez',55.40,150);
Se almacenar una cadena vaca.
Si omitimos el valor correspondiente al autor:
insert into libros (titulo,editorial,precio,cantidad)
values ('El gato con botas','Emece',15.6,150);
Se guardar "Desconocido" ya que ste es el valor por defecto que explicitamos al definir el campo.
Si omitimos el valor correspondiente al precio:
insert into libros (titulo,autor,editorial,cantidad)
values ('El aleph','Borges','Emece',200);
Se guardar "1.11" ya que ste es el valor por defecto que explicitamos al definir el campo.
Si omitimos el valor correspondiente a la cantidad:
insert into libros (titulo,autor,editorial,precio)
values('Alicia a traves del espejo','Lewis Carroll', 'Emece',34.5);
el valor que se almacenar ser 0, porque con la cluslua "default" establecimos este valor por defecto
para este campo.
Tambin podemos usar "default" para dar el valor por defecto a los campos en sentencias "insert", por
ejemplo:
insert into libros (titulo,autor,editorial,precio,cantidad)
values ('El gato con botas',default,'Planeta',default,100);
drop table if exists libros;
create table libros(
codigo int unsigned auto_increment,

titulo varchar(40) not null,


editorial varchar(15),
autor varchar(30) default 'Desconocido',
precio decimal(5,2) unsigned default 1.11,
cantidad mediumint unsigned not null,
primary key (codigo)
);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Java en 10 minutos','Juan Pereyra','Paidos',25.7,100);
insert into libros (autor,editorial,precio,cantidad)
values('Juan Perez','Planeta',28.50,50);
insert into libros (titulo,autor,precio,cantidad)
values('Aprenda PHP','Alberto Lopez',55.40,150);
insert into libros (titulo,editorial,precio,cantidad)
values ('El gato con botas','Emece',15.6,150);
insert into libros (titulo,autor,editorial,cantidad)
values ('El aleph','Borges','Emece',200);
insert into libros (titulo,autor,editorial,precio)
values('Alicia a traves del espejo','Lewis Carroll', 'Emece',34.5);
insert into libros (titulo,autor,editorial,precio,cantidad)
values ('El gato con botas',default,'Planeta',default,100);
select * from libros;
drop table if exists libros;
create table libros(
codigo int unsigned auto_increment,
titulo varchar(40) not null,
editorial varchar(15),
autor varchar(30) default 'Desconocido',
precio decimal(5,2) unsigned default 1.11,
cantidad mediumint unsigned not null,
primary key (codigo)
);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Java en 10 minutos','Juan Pereyra','Paidos',25.7,100);
insert into libros (autor,editorial,precio,cantidad)
values('Juan Perez','Planeta',28.50,50);
insert into libros (titulo,autor,precio,cantidad)
values('Aprenda PHP','Alberto Lopez',55.40,150);
insert into libros (titulo,editorial,precio,cantidad)
values ('El gato con botas','Emece',15.6,150);
insert into libros (titulo,autor,editorial,cantidad)
values ('El aleph','Borges','Emece',200);
insert into libros (titulo,autor,editorial,precio)
values('Alicia a traves del espejo','Lewis Carroll', 'Emece',34.5);
insert into libros (titulo,autor,editorial,precio,cantidad)
values ('El gato con botas',default,'Planeta',default,100);
select * from libros;

codi
titulo
go

editorial autor

precio

cantidad

Paidos

Juan Pereyra

25.70

100

Planeta

Juan Perez

28.50

50

Alberto Lopez

55.40

150

Java en 10 minutos

2
3

Aprenda PHP

El gato con botas

Emece

Desconocido

15.60

150

El aleph

Emece

Borges

1.11

200

Alicia a traves del


espejo

Emece

Lewis Carroll

34.50

El gato con botas

Planeta

Desconocido

1.11

100

Secuencia de comandos SQL ejecutados correctamente.


Problema:
Un comercio que enva pizzas y empanadas a domicilio registra los pedidos diariamente en una tabla
llamada "pedidos" con los siguientes datos:
- numero de pedido, autoincrementable, entero positivo comienza en 1 y menor a 200 aprox.
- nombre: pizza o empanada, por defecto "empanada",
- tipo: por ejemplo, si es pizza: especial, muzarela, etc., si son empanadas: arabes, pollo, jamn
y queso, criollas, etc.
- precio: precio por unidad, valor con decimales que no supera los $99.99 y ser siempre mayor a
0, por defecto "1",
- cantidad: cantidad de articulos, entero positivo desde 1 e inferior a 200 aprox., por
defecto "12"
- domicilio del cliente.
1- Elimine la tabla "pedidos" si existe.
2- Cree la tabla eligiendo el tipo de dato adecuado para cada campo.
3- Ingrese los siguientes registros:
nombre tipo
precio
cantidad domicilio
piza
muzarela
4.00
3
Sarmiento 235
tipo
rabe

precio
1.00

nombre
empanada
tipo
rabe

cantidad domicilio
24
Urquiza 296
tipo

domicilio
saltea Colon 309

domicilio
San Martin 444

nombre tipo
precio
piza
especial 4.00

domicilio
Avellaneda 395

4- Muestre todos los campos de todos los pedidos para ver cmo se guardaron los datos no ingresados y
comente el resultado

23 - Atributo zerofill en una columna de una tabla.


Cualquier campo numrico puede tener otro atributo extra "zerofill".
"zerofill" rellena con ceros los espacios disponibles a la izquierda.
Por ejemplo, creamos la tabla "libros", definiendo los campos "codigo" y "cantidad" con el atributo
"zerofill":
create table libros(
codigo int(6) zerofill auto_increment,
titulo varchar(40) not null,
autor varchar(30),
editorial varchar(15),
precio decimal(5,2) unsigned,
cantidad smallint zerofill,
primary key (codigo)
);
Note que especificamos el tamao del tipo "int" entre parntesis para que muestre por la izquierda ceros,
cuando los valores son inferiores al indicado; dicho parmetro no restringe el rango de valores que se
pueden almacenar ni el nmero de digitos.
Al ingresar un valor de cdigo con menos cifras que las especificadas (6), aparecern ceros a la izquierda
rellenando los espacios; por ejemplo, si ingresamos "33", aparecer "000033". Al ingresar un valor para el
campo "cantidad", suceder lo mismo.
Si especificamos "zerofill" a un campo numrico, se coloca automticamente el atributo "unsigned".
Cualquier valor negativo ingresado en un campo definido "zerofill" es un valor invlido.
Problema:
Trabajamos con la tabla "libros" de una librera.
Eliminamos la tabla, si existe:
drop table if exists libros;
Creamos la tabla:
create table libros(
codigo int(6) zerofill auto_increment,
titulo varchar(40) not null,
autor varchar(30),
editorial varchar(15),
precio decimal(5,2) unsigned,
cantidad smallint zerofill,
primary key (codigo)
);
Visualizamos la estructura de la tabla:
describe libros;
Vemos que en la columna "Type" se muestra el atributo "zerofill" en los campos en los cuales lo
especificamos.
Ingresemos algunos registros:
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Martin Fierro','Jose Hernandez','Planeta',34.5,200);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Aprenda PHP','Mario Molina','Emece',45.7,50);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Cervantes y el quijote','Borges','Paidos',23,40);
Veamos cmo se guardaron los datos:
select * from libros;
Los valores de cdigo estn rellenados a la izquierda con ceros; tambin los del campo "cantidad".
Probemos ingresar un valor para cdigo saltando la secuencia:
insert into libros (codigo,titulo,autor,editorial,precio,cantidad)
values('545','El aleph', 'Borges', 'Emece',33,20);
Veamos cmo lo guard:
select * from libros;
Ingresemos un valor negativo para los campos definidos "zerofill":
insert into libros (codigo,titulo,autor,editorial,precio,cantidad)
values(-400,'Matematica estas ahi', 'Paenza', 'Paidos',15.2,-100);
Veamos lo que sucedi:
select * from libros;
Como los valores son invlidos, almacena los valores por defecto segn el tipo; para el campo
"auto_increment" sigue la secuencia y para el campo "cantidad" guarda "00000".

drop table if exists libros;


create table libros(
codigo int(6) zerofill auto_increment,
titulo varchar(40) not null,
autor varchar(30),
editorial varchar(15),
precio decimal(5,2) unsigned,
cantidad smallint zerofill,
primary key (codigo)
);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Martin Fierro','Jose Hernandez','Planeta',34.5,200);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Aprenda PHP','Mario Molina','Emece',45.7,50);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Cervantes y el quijote','Borges','Paidos',23,40);
select * from libros;
insert into libros (codigo,titulo,autor,editorial,precio,cantidad)
values('545','El aleph', 'Borges', 'Emece',33,20);
select * from libros;
insert into libros (codigo,titulo,autor,editorial,precio,cantidad)
values(-400,'Matematica estas ahi', 'Paenza', 'Paidos',15.2,-100);
select * from libros;
drop table if exists libros;
create table libros(
codigo int(6) zerofill auto_increment,
titulo varchar(40) not null,
autor varchar(30),
editorial varchar(15),
precio decimal(5,2) unsigned,
cantidad smallint zerofill,
primary key (codigo)
);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Martin Fierro','Jose Hernandez','Planeta',34.5,200);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Aprenda PHP','Mario Molina','Emece',45.7,50);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Cervantes y el quijote','Borges','Paidos',23,40);
select * from libros;
codigo

autor

editorial precio

cantidad

000001 Martin Fierro

Jose Hernandez

Planeta

34.50

00200

000002 Aprenda PHP

Mario Molina

Emece

45.70

00050

Borges

Paidos

23.00

00040

000003

titulo

Cervantes y el
quijote

insert into libros

(codigo,titulo,autor,editorial,precio,cantidad)
values('545','El aleph', 'Borges', 'Emece',33,20);
codigo

autor

editorial precio

cantidad

000001 Martin Fierro

Jose
Hernandez

Planeta

34.50

00200

000002 Aprenda PHP

Mario Molina

Emece

45.70

00050

Borges

Paidos

23.00

00040

Borges

Emece

33.00

00020

000003

titulo

Cervantes y el
quijote

000545 El aleph

select * from libros;

insert into libros (codigo,titulo,autor,editorial,precio,cantidad)


values(-400,'Matematica estas ahi', 'Paenza', 'Paidos',15.2,-100);
select * from libros;

codigo

autor

editorial precio

cantidad

000001 Martin Fierro

Jose
Hernandez

Planeta

34.50

00200

000002 Aprenda PHP

Mario Molina

Emece

45.70

00050

Borges

Paidos

23.00

00040

Borges

Emece

33.00

00020

Paenza

Paidos

15.20

00000

000003

titulo

Cervantes y el
quijote

000545 El aleph
000546

Matematica estas
ahi

Secuencia de comandos SQL


ejecutados correctamente.
Problema:

Un banco tiene registrados las cuentas corrientes de sus clientes en una tabla llamada "cuentas".
1- Elimine la tabla, si existe.
2- Cree la tabla:
Cuentas
numero con 8 ceros,
documento no nulo,
nombre de 30,
saldo de 9 con 2 deximales,
llave primaria numero
3- Visualice la estructura de la tabla:
muestra como aparece el campo "numero".
4- Ingrese los siguientes registros:
Numero
documento
nombre
saldo
1234
22333444
Juan Perez
2566
23333444
Maria Pereyra
5050
5987
24333444
Marcos Torres
200
14434
25333444
Ana Juarez
8000.60
5- Vea cmo se guardaron los nmeros de cuenta:
6- Ingrese un valor negativo para el nmero de cuenta:
-1234 27333444
Luis Duarte
2800;
Muestre el resultado y comentelo

2000.60

24 - Columnas calculadas.
Es posible obtener salidas en las cuales una columna sea el resultado de un clculo y no un campo de una
tabla.
Si queremos ver los ttulos, precio y cantidad de cada libro escribimos la siguiente sentencia:
select titulo,precio,cantidad
from libros;
Si queremos saber el monto total en dinero de un ttulo podemos multiplicar el precio por la cantidad por
cada ttulo, pero tambin podemos hacer que MySQL realice el clculo y lo incluya en una columna extra
en la salida:
select titulo, precio,cantidad,precio*cantidad
from libros;
Si queremos saber el precio de cada libro con un 10% de descuento podemos incluir en la sentencia los
siguientes clculos:
select titulo, precio,precio*0.1,precio-(precio*0.1)
from libros;
Problema:
Trabajamos con la tabla "libros" de una librera.
Eliminamos la tabla, si existe:
drop table if exists libros;
Creamos la tabla:
create table libros(
codigo int unsigned auto_increment,
titulo varchar(40) not null,
autor varchar(30),
editorial varchar(15),
precio decimal(5,2) unsigned,
cantidad smallint unsigned,
primary key (codigo)
);
Ingresamos algunos registros:
insert into libros (titulo,autor,editorial,precio,cantidad)
values('El aleph','Borges','Planeta',15,100);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Martin Fierro','Jose Hernandez','Emece',22.20,200);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Antologia poetica','Borges','Planeta',40,150);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Aprenda PHP','Mario Molina','Emece',18.20,200);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Cervantes y el quijote','Borges','Paidos',36.40,100);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Manual de PHP', 'J.C. Paez', 'Paidos',30.80,100);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Harry Potter y la piedra filosofal','J.K. Rowling','Paidos',45.00,500);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Harry Potter y la camara secreta','J.K. Rowling','Paidos',46.00,300);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Alicia en el pais de las maravillas','Lewis Carroll','Paidos',null,50);
Para obtener el monto total en dinero de un ttulo podemos multiplicar el precio por la cantidad, por cada
ttulo, MySQL realiza el clculo y lo incluye en una columna extra en la salida:
select titulo, precio,cantidad,precio*cantidad
from libros;
Para saber el precio de cada libro con un 10% de descuento podemos incluir en la sentencia los siguientes
clculos:
select titulo, precio,precio*0.1,precio-(precio*0.1)
from libros;

drop table if exists libros;


create table libros(
codigo int unsigned auto_increment,
titulo varchar(40) not null,
autor varchar(30),
editorial varchar(15),
precio decimal(5,2) unsigned,
cantidad smallint unsigned,
primary key (codigo)
);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('El aleph','Borges','Planeta',15,100);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Martin Fierro','Jose Hernandez','Emece',22.20,200);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Antologia poetica','Borges','Planeta',40,150);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Aprenda PHP','Mario Molina','Emece',18.20,200);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Cervantes y el quijote','Borges','Paidos',36.40,100);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Manual de PHP', 'J.C. Paez', 'Paidos',30.80,100);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Harry Potter y la piedra filosofal','J.K. Rowling','Paidos',45.00,500);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Harry Potter y la camara secreta','J.K. Rowling','Paidos',46.00,300);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Alicia en el pais de las maravillas','Lewis Carroll','Paidos',null,50);
select titulo, precio,cantidad,precio*cantidad
from libros;
select titulo, precio,precio*0.1,precio-(precio*0.1)
from libros;
drop table if exists libros;
create table libros(
codigo int unsigned auto_increment,
titulo varchar(40) not null,
autor varchar(30),
editorial varchar(15),
precio decimal(5,2) unsigned,
cantidad smallint unsigned,
primary key (codigo)
);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('El aleph','Borges','Planeta',15,100);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Martin Fierro','Jose Hernandez','Emece',22.20,200);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Antologia poetica','Borges','Planeta',40,150);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Aprenda PHP','Mario Molina','Emece',18.20,200);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Cervantes y el quijote','Borges','Paidos',36.40,100);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Manual de PHP', 'J.C. Paez', 'Paidos',30.80,100);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Harry Potter y la piedra filosofal','J.K. Rowling','Paidos',45.00,500);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Harry Potter y la camara secreta','J.K. Rowling','Paidos',46.00,300);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Alicia en el pais de las maravillas','Lewis Carroll','Paidos',null,50);
select titulo, precio,cantidad,precio*cantidad
from libros;

titulo

precio

cantidad precio*cantidad

El aleph

15.00

100

1500.00

Martin Fierro

22.20

200

4440.00

Antologia poetica

40.00

150

6000.00

Aprenda PHP

18.20

200

3640.00

Cervantes y el quijote

36.40

100

3640.00

Manual de PHP

30.80

100

3080.00

Harry Potter y la piedra filosofal

45.00

500

22500.00

Harry Potter y la camara secreta

46.00

300

13800.00

Alicia en el pais de las maravillas

50

select titulo,

precio,precio*0.1,precio-(precio*0.1)
from libros;

titulo

precio

precio*0.1

precio(precio*0.1)

El aleph

15.00

1.500

13.500

Martin Fierro

22.20

2.220

19.980

Antologia poetica

40.00

4.000

36.000

Aprenda PHP

18.20

1.820

16.380

Cervantes y el quijote

36.40

3.640

32.760

Manual de PHP

30.80

3.080

27.720

Harry Potter y la piedra


filosofal

45.00

4.500

40.500

Harry Potter y la camara


secreta

46.00

4.600

41.400

Secuencia de comandos SQL


ejecutados correctamente.
Problema:
Una empresa almacena los datos
de sus empleados en una tabla
"empleados".

Alicia en el pais de las


maravillas
1- Elimine la tabla "empleados" si existe.

2- Cree una tabla llamada "empleados" con la estructura necesaria para almacenar la siguiente
informacin:
- nombre del empleado,
- documento,
- sexo,
- domicilio,
- sueldo bsico (hasta 9999.99),
- hijos a cargo,
- clave primaria: documento.
3- Ingrese algunos registros:
Juan Perez
22333444
Ana Acosta
21333444
Alberto Lopez
24333444
m
Carlos Sanchez
30333444
m
Mariana Torres
23444555
f
Marcos Garcia
23664555
m

m
f
600
550
600
1500

300
400
0
3
1
2

1
2

4- La empresa est pensando en aumentar un 10% el sueldo a los empleados, y quiere saber a cunto
subira cada sueldo bsico, para ello incluimos una columna que har el clculo de cada sueldo ms el
10%:
muestre el resultado

5- La empresa paga un salario familiar por hijos a cargo, $200 por cada hijo. Necesitamos el nombre del
empleado, el sueldo bsico, la cantidad de hijos a cargo, el total del salario familiar y el suedo final
(incluyendo el salario familiar):
Muestre el resultado

25 - Funciones para el manejo de cadenas.


RECUERDE que NO debe haber espacios entre un nombre de funcin y los parntesis porque MySQL puede
confundir una llamada a una funcin con una referencia a una tabla o campo que tenga el mismo nombre
de una funcin.
MySQL tiene algunas funciones para trabajar con cadenas de caracteres. Estas son algunas:
-ord(caracter): Retorna el cdigo ASCII para el caracter enviado como argumento. Ejemplo:
select ord('A');
retorna 65.
-char(x,..): retorna una cadena con los caracteres en cdigo ASCII de los enteros enviados como
argumentos. Ejemplo:
select char(65,66,67);
retorna "ABC".
-concat(cadena1,cadena2,...): devuelve la cadena resultado de concatenar los argumentos. Ejemplo:
select concat('Hola,',' ','como esta?');
retorna "Hola, como esta?".
-concat_ws(separador,cadena1,cadena2,...): "ws" son las iniciales de "with separator". El primer
argumento especifica el separador que utiliza para los dems argumentos; el separador se agrega entre
las cadenas a concatenar. Ejemplo:
select concat_ws('-','Juan','Pedro','Luis');
retorna "Juan-Pedro-Luis".
-find_in_set(cadena,lista de cadenas): devuelve un valor entre de 0 a n (correspondiente a la posicin), si
la cadena envidada como primer argumento est presente en la lista de cadenas enviadas como segundo
argumento. La lista de cadenas enviada como segundo argumento es una cadena formada por
subcadenas separadas por comas. Devuelve 0 si no encuentra "cadena" en la "lista de cadenas". Ejemplo:
select find_in_set('hola','como esta,hola,buen dia');
retorna 2, porque la cadena "hola" se encuentra en la lista de cadenas, en la posicin 2.
-length(cadena): retorna la longitud de la cadena enviada como argumento. Ejemplo:
select length('Hola');
devuelve 4.
- locate(subcadena,cadena): retorna la posicin de la primera ocurrencia de la subcadena en la cadena
enviadas como argumentos. Devuelve "0" si la subcadena no se encuentra en la cadena. Ejemplo:
select locale('o','como le va');
retorna 2.
- position(subcadena in cadena): funciona como "locate()". Devuelve "0" si la subcadena no se encuentra
en la cadena. Ejemplo:
select position('o' in 'como le va');
retorna 2.
- locate(subcadena,cadena,posicioninicial): retorna la posicin de la primera ocurrencia de la subcadena
enviada como primer argumentos en la cadena enviada como segundo argumento, empezando en la
posicin enviada como tercer argumento. Devuelve "0" si la subcadena no se encuentra en la cadena.
Ejemplos:
select locate('ar','Margarita',1);
retorna 1.
select locate('ar','Margarita',3);
retorna 5.
- instr(cadena,subcadena): retorna la posicin de la primera ocurrencia de la subcadena enviada como
segundo argumento en la cadena enviada como primer argumento. Ejemplo:
select instr('como le va','om');
devuelve 2.
- lpad(cadena,longitud,cadenarelleno): retorna la cadena enviada como primer argumento, rellenada por
la izquierda con la cadena enviada como tercer argumento hasta que la cadena retornada tenga la
longitud especificada como segundo argumento. Si la cadena es ms larga, la corta. Ejemplo:
select lpad('hola',10,'0');
retorna "000000hola".
- rpad(cadena,longitud,cadenarelleno): igual que "lpad" excepto que rellena por la derecha.
- left(cadena,longitud): retorna la cantidad (longitud) de caracteres de la cadena comenzando desde la
inquierda, primer caracter. Ejemplo:
select left('buenos dias',8);
retorna "buenos d".
- right(cadena,longitud): retorna la cantidad (longitud) de caracteres de la cadena comenzando desde la
derecha, ltimo caracter. Ejemplo:
select right('buenos dias',8);
retorna "nos dias".

- substring(cadena,posicion,longitud): retorna una subcadena de tantos caracteres de longitud como


especifica en tercer argumento, de la cadena enviada como primer argumento, empezando desde la
posicin especificada en el segundo argumento. Ejemplo:
select substring('Buenas tardes',3,5);
retorna "enas".
- substring(cadena from posicion for longitud): variante de "substring(cadena,posicion,longitud)". Ejemplo:
select substring('Buenas tardes' from 3 for 5);
- mid(cadena,posicion,longitud): igual que "substring(cadena,posicion,longitud)". Ejemplo:
select mid('Buenas tardes' from 3 for 5);
retorna "enas".
- substring(cadena,posicion): retorna la subcadena de la cadena enviada como argumento, empezando
desde la posicin indicada por el segundo argumento. Ejemplo:
select substring('Margarita',4);
retorna "garita".
-substring(cadena from posicion): variante de "substring(cadena,posicion)". Ejemplo:
select substring('Margarita' from 4);
retorna "garita".
-substring_index(cadena,delimitador,ocurrencia): retorna la subcadena de la cadena enviada como
argumento antes o despus de la "ocurrencia" de la cadena enviada como delimitador. Si "ocurrencia" es
positiva, retorna la subcadena anterior al delimitador (comienza desde la izquierda); si "ocurrencia" es
negativa, retorna la subcadena posterior al delimitador (comienza desde la derecha). Ejemplo:
select substring_index( 'margarita','ar',2);
retorna "marg", todo lo anterior a la segunda ocurrencia de "ar".
select substring_index( 'margarita','ar',-2);
retorna "garita", todo lo posterior a la segunda ocurrencia de "ar".
-ltrim(cadena): retorna la cadena con los espacios de la izquierda eliminados. Ejemplo:
select ltrim('
Hola
');
retorna
"Hola
"
.
- rtrim(cadena): retorna la cadena con los espacios de la derecha eliminados. Ejemplo:
select rtrim(' Hola ');
retorna
" Hola"
.
-trim([[both|leading|trailing] [subcadena] from] cadena): retorna una cadena igual a la enviada pero
eliminando la subcadena prefijo y/o sufijo. Si no se indica ningn especificador (both, leading o trailing) se
asume "both" (ambos). Si no se especifica prefijos o sufijos elimina los espacios. Ejemplos:
select trim(' Hola ');
retorna 'Hola'.
select trim (leading '0' from '00hola00');
retorna "hola00".
select trim (trailing '0' from '00hola00');
retorna "00hola".
select trim (both '0' from '00hola00');
retorna "hola".
select trim ('0' from '00hola00');
retorna "hola".
select trim (' hola ');
retorna "hola".
-replace(cadena,cadenareemplazo,cadenareemplazar): retorna la cadena con todas las ocurrencias de la
subcadena reemplazo por la subcadena a reemplazar. Ejemplo:
select replace('xxx.mysql.com','x','w');
retorna "www.mysql.com'.
-repeat(cadena,cantidad): devuelve una cadena consistente en la cadena repetida la cantidad de veces
especificada. Si "cantidad" es menor o igual a cero, retorna una cadena vaca. Ejemplo:
select repeat('hola',3);
retorna "holaholahola".
-reverse(cadena): devuelve la cadena invirtiendo el order de los caracteres. Ejemplo:
select reverse('Hola');
retorna "aloH".
-insert(cadena,posicion,longitud,nuevacadena): retorna la cadena con la nueva cadena colocndola en la
posicin indicada por "posicion" y elimina la cantidad de caracteres indicados por "longitud". Ejemplo:
select insert('buenas tardes',2,6,'xx');
retorna ""bxxtardes".
-lcase(cadena) y lower(cadena): retornan la cadena con todos los caracteres en minsculas. Ejemplo:

select lower('HOLA ESTUDIAnte');


retorna "hola estudiante".
select lcase('HOLA ESTUDIAnte');
retorna "hola estudiante".
-ucase(cadena) y upper(cadena): retornan la cadena con todos los caracteres en maysculas. Ejemplo:
select upper('HOLA ESTUDIAnte');
retorna "HOLA ESTUDIANTE".
select ucase('HOLA ESTUDIAnte');
retorna "HOLA ESTUDIANTE".
-strcmp(cadena1,cadena2): retorna 0 si las cadenas son iguales, -1 si la primera es menor que la segunda
y 1 si la primera es mayor que la segunda. Ejemplo:
select strcmp('Hola','Chau');
retorna 1.

Problema:
Trabajamos con la tabla "libros" de una librera.
Eliminamos la tabla si existe.
Creamos la tabla "libros" con la siguiente estructura:
create table libros(
codigo int unsigned auto_increment,
titulo varchar(40) not null,
autor varchar(30),
editorial varchar (20),
precio decimal(5,2) unsigned,
primary key(codigo)
);
Ingresamos algunos registros:
insert into libros (titulo,autor,editorial,precio)
values('El alehp','Borges','Paidos',33.4);
insert into libros (titulo,autor,editorial,precio)
values('Alicia en el pais de las maravillas','L. Carroll','Planeta',16);
Usamos la funcin "concat_ws()":
select concat_ws('-',titulo,autor)
from libros;
la salida muestra una sola columna en la cual se concatenan, con el separador "-", los distintos campos
especificados.
Usamos la funcin "left()":
select left(titulo,15)
from libros;
la salida muestra los ttulos con los primeros 15 caracteres.
Empleamos la funcin "insert()":
select titulo,insert(editorial,1,0,'edit. ')
from libros;
retorna el nombre de las editoriales agregando al inicio la cadena "Edit. ".
Usamos las funciones "lower()" y "upper()":
select lower(titulo), upper(editorial)
from libros;
drop table if exists libros;
create table libros(
codigo int unsigned auto_increment,
titulo varchar(40) not null,
autor varchar(30),
editorial varchar (20),
precio decimal(5,2) unsigned,
primary key(codigo)
);
insert into libros (titulo,autor,editorial,precio)
values('El alehp','Borges','Paidos',33.4);
insert into libros (titulo,autor,editorial,precio)
values('Alicia en el pais de las maravillas','L. Carroll','Planeta',16);
select concat_ws('-',titulo,autor)
from libros;

select left(titulo,15)
from libros;
select titulo,insert(editorial,1,0,'edit. ')
from libros;
select lower(titulo), upper(editorial)
from libros;
drop table if exists libros;
create table libros(
codigo int unsigned auto_increment,
titulo varchar(40) not null,
autor varchar(30),
editorial varchar (20),
precio decimal(5,2) unsigned,
primary key(codigo)
);
insert into libros (titulo,autor,editorial,precio)
values('El alehp','Borges','Paidos',33.4);
insert into libros (titulo,autor,editorial,precio)
values('Alicia en el pais de las maravillas','L. Carroll','Planeta',16);
select concat_ws('-',titulo,autor)
from libros;
concat_ws('-',titulo,autor)
El alehp-Borges
Alicia en el pais de las maravillasL. Carroll

select left(titulo,15)

from libros;
left(titulo,1
5)
El alehp
Alicia en el
pa

select titulo,insert(editorial,1,0,'edit. ')


from libros;

titulo

insert(editorial,1,0,'e
dit. ')

El alehp

edit. Paidos

Alicia en el pais de las


maravillas

edit. Planeta

lower(titulo)

upper(editor
ial)

el alehp

PAIDOS

alicia en el pais de las


maravillas

PLANETA

select lower(titulo), upper(editorial)


from libros;

Secuencia de comandos SQL ejecutados correctamente.

26 - Funciones matemticas.
Los operadores aritmticos son "+","-","*" y "/". Todas las operaciones matemticas retornan "null" en caso
de error. Ejemplo:
select 5/0;
MySQL tiene algunas funciones para trabajar con nmeros. Aqu presentamos algunas.

RECUERDE que NO debe haber espacios entre un nombre de funcin y los parntesis porque MySQL puede
confundir una llamada a una funcin con una referencia a una tabla o campo que tenga el mismo nombre
de una funcin.
-abs(x): retorna el valor absoluto del argumento "x". Ejemplo:
select abs(-20);
retorna 20.
-ceiling(x): redondea hacia arriba el argumento "x". Ejemplo:
select ceiling(12.34),
retorna 13.
-floor(x): redondea hacia abajo el argumento "x". Ejemplo:
select floor(12.34);
retorna 12.
-greatest(x,y,..): retorna el argumento de mximo valor.
-least(x,y,...): con dos o ms argumentos, retorna el argumento ms pequeo.
-mod(n,m): significa "mdulo aritmtico"; retorna el resto de "n" dividido en "m". Ejemplos:
select mod(10,3);
retorna 1.
select mod(10,2);
retorna 0.
- %: %: devuelve el resto de una divisin. Ejemplos:
select 10%3;
retorna 1.
select 10%2;
retorna 0.
-power(x,y): retorna el valor de "x" elevado a la "y" potencia. Ejemplo:
select power(2,3);
retorna 8.
-rand(): retorna un valor de coma flotante aleatorio dentro del rango 0 a 1.0.
-round(x): retorna el argumento "x" redondeado al entero ms cercano. Ejemplos:
select round(12.34);
retorna 12.
select round(12.64);
retorna 13.
-srqt(): devuelve la raiz cuadrada del valor enviado como argumento.
-truncate(x,d): retorna el nmero "x", truncado a "d" decimales. Si "d" es 0, el resultado no tendr parte
fraccionaria. Ejemplos:
select truncate(123.4567,2);
retorna 123.45;
select truncate (123.4567,0);
retorna 123.
Todas retornan null en caso de error.
Problema:
Trabajamos con la tabla "libros" de una librera.
Eliminamos la tabla si existe.
Creamos la tabla "libros" con la siguiente estructura:
create table libros(
codigo int unsigned auto_increment,
titulo varchar(40) not null,
autor varchar(30),
editorial varchar (20),
precio decimal(5,2) unsigned,
primary key(codigo)
);
Ingresamos algunos registros:
insert into libros (titulo,autor,editorial,precio)
values('El alehp','Borges','Paidos',33.4);
insert into libros (titulo,autor,editorial,precio)
values('Alicia en el pais de las maravillas','L. Carroll','Planeta',16.3);
insert into libros (titulo,autor,editorial,precio)
values('Alicia a traves del espejo','L. Carroll','Planeta',18.8);
Usamos la funcin "ceiling(x)":
select titulo, ceiling(precio),floor(precio)
from libros;
Usamos la funcin "round(x)":
select titulo, round(precio)

from libros;
Empleamos la funcin "truncate(x,d)":
select titulo,truncate(precio,1)
from libros;

drop table if exists libros;


create table libros(
codigo int unsigned auto_increment,
titulo varchar(40) not null,
autor varchar(30),
editorial varchar (20),
precio decimal(5,2) unsigned,
primary key(codigo)
);
insert into libros (titulo,autor,editorial,precio)
values('El alehp','Borges','Paidos',33.4);
insert into libros (titulo,autor,editorial,precio)
values('Alicia en el pais de las maravillas','L. Carroll','Planeta',16.3);
insert into libros (titulo,autor,editorial,precio)
values('Alicia a traves del espejo','L. Carroll','Planeta',18.8);
select titulo, ceiling(precio),floor(precio)
from libros;
select titulo, round(precio)
from libros;
select titulo,truncate(precio,1)
from libros;
drop table if exists libros;
create table libros(
codigo int unsigned auto_increment,
titulo varchar(40) not null,
autor varchar(30),
editorial varchar (20),
precio decimal(5,2) unsigned,
primary key(codigo)
);
insert into libros (titulo,autor,editorial,precio)
values('El alehp','Borges','Paidos',33.4);
insert into libros (titulo,autor,editorial,precio)
values('Alicia en el pais de las maravillas','L. Carroll','Planeta',16.3);
insert into libros (titulo,autor,editorial,precio)
values('Alicia a traves del espejo','L. Carroll','Planeta',18.8);
select titulo, ceiling(precio),floor(precio)
from libros;

titulo

ceiling(pre floor(preci
cio)
o)

El alehp

34

33

Alicia en el pais de las


maravillas

17

16

Alicia a traves del espejo 19

18

select titulo, round(precio)


from libros;

titulo

round(prec
io)

El alehp

33

Alicia en el pais de las


maravillas

16

Alicia a traves del espejo 19

select titulo,truncate(precio,1)
from libros;

titulo

truncate(preci
o,1)

El alehp

33.4

Alicia en el pais de las


maravillas

16.3

Alicia a traves del espejo 18.8

Secuencia de comandos SQL ejecutados correctamente.

27 - Funciones para el uso de fecha y hora.


MySQL tiene algunas funciones para trabajar con fechas y horas. Estas son algunas:
-adddate(fecha, interval expresion): retorna la fecha agregndole el intervalo especificado. Ejemplos:
adddate('2006-10-10',interval 25 day) retorna "2006-11-04". adddate('2006-10-10',interval 5 month)
retorna "2007-03-10".
-adddate(fecha, dias): retorna la fecha agregndole a fecha "dias". Ejemplo: adddate('2006-10-10',25),
retorna "2006-11-04".
-addtime(expresion1,expresion2): agrega expresion2 a expresion1 y retorna el resultado.
-current_date: retorna la fecha de hoy con formato "YYYY-MM-DD" o "YYYYMMDD".
-current_time: retorna la hora actual con formato "HH:MM:SS" o "HHMMSS".
-date_add(fecha,interval expresion tipo) y date_sub(fecha,interval expresion tipo): el argumento "fecha" es
un valor "date" o "datetime", "expresion" especifica el valor de intervalo a ser aadido o substrado de la
fecha indicada (puede empezar con "-", para intervalos negativos), "tipo" indica la medida de adicin o
substraccin. Ejemplo: date_add('2006-08-10', interval 1 month) retorna "2006-09-10"; date_add('200608-10', interval -1 day) retorna "2006-09-09"; date_sub('2006-08-10 18:55:44', interval 2 minute) retorna
"2006-08-10 18:53:44"; date_sub('2006-08-10 18:55:44', interval '2:3' minute_second) retorna "2006-0810 18:52:41". Los valores para "tipo" pueden ser: second, minute, hour, day, month, year, minute_second
(minutos y segundos), hour_minute (horas y minutos), day_hour (das y horas), year_month (ao y mes),
hour_second (hora, minuto y segundo), day_minute (dias, horas y minutos), day_second(dias a segundos).
-datediff(fecha1,fecha2): retorna la cantidad de das entre fecha1 y fecha2.
-dayname(fecha): retorna el nombre del da de la semana de la fecha. Ejemplo: dayname('2006-08-10')
retorna "thursday".
-dayofmonth(fecha): retorna el da del mes para la fecha dada, dentro del rango 1 a 31. Ejemplo:
dayofmonth('2006-08-10') retorna 10.
-dayofweek(fecha): retorna el ndice del da de semana para la fecha pasada como argumento. Los valores
de los ndices son: 1=domingo, 2=lunes,... 7=sbado). Ejemplo: dayofweek('2006-08-10') retorna 5, o sea
jueves.
-dayofyear(fecha): retorna el da del ao para la fecha dada, dentro del rango 1 a 366. Ejemplo:
dayofmonth('2006-08-10') retorna 222.
-extract(tipo from fecha): extrae partes de una fecha.
Ejemplos:
extract(year from '2006-10-10'), retorna "2006".
extract(year_month from '2006-10-10 10:15:25') retorna "200610".
extract(day_minute from '2006-10-10 10:15:25') retorna "101015";
Los valores para tipo pueden ser: second, minute, hour, day, month, year, minute_second, hour_minute,
day_hour, year_month, hour_second (horas, minutos y segundos), day_minute (das, horas y minutos),
day_second (das a segundos).
-hour(hora): retorna la hora para el dato dado, en el rango de 0 a 23.
Ejemplo: hour('18:25:09') retorna "18";
-minute(hora): retorna los minutos de la hora dada, en el rango de 0 a 59.
-monthname(fecha): retorna el nombre del mes de la fecha dada.
Ejemplo: monthname('2006-08-10') retorna "August".
-month(fecha): retorna el mes de la fecha dada, en el rango de 1 a 12.
-now() y sysdate(): retornan la fecha y hora actuales.
-period_add(p,n): agrega "n" meses al periodo "p", en el formato "YYMM" o "YYYYMM"; retorna un valor en
el formato "YYYYMM". El argumento "p" no es una fecha, sino un ao y un mes. Ejemplo:
period_add('200608',2) retorna "200610".
-period_diff(p1,p2): retorna el nmero de meses entre los perodos "p1" y "p2", en el formato "YYMM" o
"YYYYMM". Los argumentos de perodo no son fechas sino un ao y un mes. Ejemplo:
period_diff('200608','200602') retorna 6.
-second(hora): retorna los segundos para la hora dada, en el rango de 0 a 59.
-sec_to_time(segundos): retorna el argumento "segundos" convertido a horas, minutos y segundos.
Ejemplo: sec_to_time(90) retorna "1:30".
-timediff(hora1,hora2): retorna la cantidad de horas, minutos y segundos entre hora1 y hora2.
-time_to_sec(hora): retorna el argumento "hora" convertido en segundos.
-to_days(fecha): retorna el nmero de da (el nmero de da desde el ao 0).
-weekday(fecha): retorna el ndice del da de la semana para la fecha pasada como argumento. Los ndices
son: 0=lunes, 1=martes,... 6=domingo). Ejemplo: weekday('2006-08-10') retorna 3, o sea jueves.
-year(fecha): retorna el ao de la fecha dada, en el rango de 1000 a 9999. Ejemplo: year('06-08-10')
retorna "2006".
Problema:
Una pequea biblioteca de barrio registra los prstamos de sus libros en una tabla llamada "prestamos".
En ella almacena la siguiente informacin:

-ttulo del libro,


-documento de identidad del socio a quien se le presta el libro,
-fecha de prstamo,
-fecha de devolucin del libro,
-devuelto: si el libro ha sido o no devuelto.
Eliminamos la tabla "prestamos" si existe:
drop table if exists prestamos;
Creamos la tabla:
create table prestamos(
titulo varchar(40) not null,
documento char(8) not null,
fechaprestamo date not null,
fechadevolucion date,
devuelto char(1) default 'n'
);
Los libros se prestan por 5 das.
Ingresamos un registro con los 3 primeros datos y calculamos con una funcin la fecha de devolucin:
insert into prestamos (titulo,documento,fechaPrestamo,fechaDevolucion) values
('Manual de 1 grado','23456789','2006-08-10',date_add('2006-08-10', interval 5 day));
Con un "select" vemos cmo qued almacenado el registro ingresado anteriormente:
select * from prestamos;
Ingresemos otros registros de la misma manera:
insert into prestamos (titulo,documento,fechaPrestamo,fechaDevolucion)
values ('Alicia en el pais de las maravillas','23456789',
'2006-08-12',date_add('2006-08-12', interval 5 day));
insert into prestamos (titulo,documento,fechaPrestamo,fechaDevolucion) values
('El aleph','22543987','2006-08-15',date_add('2006-08-15', interval 5 day));
insert into prestamos (titulo,documento,fechaPrestamo,fechaDevolucion)
values ('Manual de geografia 5 grado','25555666','2006-08-30',
date_add('2006-08-30', interval 5 day));
Ahora utilizaremos la funcin "current_date" para la fecha de prstamo:
insert into prestamos (titulo,documento,fechaPrestamo,fechaDevolucion) values
('Atlas universal','24000111',current_date,date_add(current_date, interval 5 day));

drop table if exists prestamos;


create table prestamos(
titulo varchar(40) not null,
documento char(8) not null,
fechaprestamo date not null,
fechadevolucion date,
devuelto char(1) default 'n'
);
insert into prestamos (titulo,documento,fechaPrestamo,fechaDevolucion)
values ('Manual de 1 grado','23456789','2006-08-10',date_add('2006-08-10', interval 5 day));
select * from prestamos;
insert into prestamos (titulo,documento,fechaPrestamo,fechaDevolucion)
values ('Alicia en el pais de las maravillas','23456789',
'2006-08-12',date_add('2006-08-12', interval 5 day));
insert into prestamos (titulo,documento,fechaPrestamo,fechaDevolucion)
values ('El aleph','22543987','2006-08-15',date_add('2006-08-15', interval 5 day));
insert into prestamos (titulo,documento,fechaPrestamo,fechaDevolucion)
values ('Manual de geografia 5 grado','25555666','2006-08-30',
date_add('2006-08-30', interval 5 day));
select * from prestamos;
insert into prestamos (titulo,documento,fechaPrestamo,fechaDevolucion)
values ('Atlas universal','24000111',current_date,date_add(current_date, interval 5 day));
select * from prestamos;

drop table if exists prestamos;


create table prestamos(
titulo varchar(40) not null,
documento char(8) not null,
fechaprestamo date not null,
fechadevolucion date,
devuelto char(1) default 'n'
);
insert into prestamos (titulo,documento,fechaPrestamo,fechaDevolucion)
values ('Manual de 1 grado','23456789','2006-08-10',date_add('2006-08-10', interval 5 day));
select * from prestamos;

titulo

documen fechapresta fechadevoluc devuel


to
mo
ion
to

Manual de 1
grado

2345678
2006-08-10 2006-08-15
9

insert into prestamos

(titulo,documento,fechaPrestamo,fechaDevolucion)
values ('Alicia en el pais de las maravillas','23456789',
'2006-08-12',date_add('2006-08-12', interval 5 day));
insert into prestamos (titulo,documento,fechaPrestamo,fechaDevolucion)
values ('El aleph','22543987','2006-08-15',date_add('2006-08-15', interval 5 day));
insert into prestamos (titulo,documento,fechaPrestamo,fechaDevolucion)
values ('Manual de geografia 5 grado','25555666','2006-08-30',
date_add('2006-08-30', interval 5 day));
select * from prestamos;

titulo

documen fechapresta fechadevoluc devuel


to
mo
ion
to

Manual de 1 grado

2345678
2006-08-10 2006-08-15
9

Alicia en el pais de las


maravillas

2345678
2006-08-12 2006-08-17
9

El aleph

2254398
2006-08-15 2006-08-20
7

Manual de geografia 5
grado

2555566 2006-08-30 2006-09-04


6

insert into prestamos

(titulo,documento,fechaPrestamo,fechaDevolucion)
values ('Atlas universal','24000111',current_date,date_add(current_date, interval 5 day));
select * from prestamos;

titulo

documen fechapresta fechadevoluc devuel


to
mo
ion
to

Manual de 1 grado

2345678
2006-08-10 2006-08-15
9

Alicia en el pais de las


maravillas

2345678
2006-08-12 2006-08-17
9

El aleph

2254398
2006-08-15 2006-08-20
7

Secuencia de comandos SQL


ejecutados correctamente.

Manual de geografia 5
grado

2555566
2006-08-30 2006-09-04
6

Atlas universal

2400011
2013-09-10 2013-09-15
1

Problema:
Una empresa registra los datos de
sus empleados en una tabla
llamada "empleados".

1- Elimine la tabla "empleados" si existe.

2- Cree una tabla llamada "empleados" con la estructura necesaria para almacenar la siguiente
informacin:
- documento,
- nombre del empleado,
- sexo,
- domicilio
- fecha de Ingreso
- fecha de Nacimiento
- sueldo bsico (hasta 9999.99),
- hijos a cargo,
- clave primaria: documento.
3- Ingrese algunos registros:
22333111
Juan Perez
05-10
550
25444444
Susana Morales f
20111222
Hector Pereyra
m
30000222
Luis Luque
700
20555444
Maria Laura Torres
700
30000234
Alberto Soto
m
20125478
Ana Gomez
f
24154269
Ofelia Garcia
f
306154269
Federico Gonzalezm

Colon 123

1990-02-01

1970-

Avellaneda 345 1995-04-01


1975-11-06
650
Caseros 987
1995-04-01
1965-03-25
510
m
Urquiza 456
1980-09-01
1980-03-29
f

San Martin 1122 2000-05-15

Peru 232
Sarmiento 975
Triunvirato 628
Peru 390

2003-08-15
2004-06-14
2004-09-23
1996-08-15

1965-12-22

1989-10-10
1976-09-21
1974-05-12
1985-05-01

420
350
390
580

4- Es poltica de la empresa festejar cada fin de mes, los cumpleaos de todos los empleados que
cumplen ese mes. Necesitamos los nombres y fecha de nacimiento de los empleados que cumplen aos
en
el mes de mayo:
5- Tambin es poltica de la empresa, aumentar el 1% del sueldo bsico a los empleados, cada vez que
cumplen un ao ms de servicio. Necesitamos los nombres, fecha de ingreso a la empresa y sueldo bsico
de todos los empleados que cumplen un ao ms de servicio en el mes de agosto, y una columna
calculando el incremento del sueldo:
6- Actualizamos el sueldo aumentando el 1% a los empleados que cumplen un ao de servicio en el mes
de agosto:
7- Verifique si la actualizacin se realiz:
8- Si el empleado cumple 10,20,30,40... aos de servicio, se le regala una placa recordatoria. La
secretaria de Gerencia necesita saber la cantidad de aos de servicio que cumplen los empleados que
ingresaron en el mes de agosto para encargar dichas placas:
En la sentencia anterior, extraemos el ao de las fechas actual y de ingreso y las restamos, para calcular
los aos de servicio.

28 - Clusula order by del select.


Podemos ordenar el resultado de un "select" para que los registros se muestren ordenados por algn
campo, para ello usamos la clusula "order by".
Por ejemplo, recuperamos los registros de la tabla "libros" ordenados por el ttulo:
select codigo,titulo,autor,editorial,precio from libros order by titulo;
Aparecen los registros ordenados alfabticamente por el campo especificado.
Tambin podemos colocar el nmero de orden del campo por el que queremos que se ordene en lugar de
su nombre. Por ejemplo, queremos el resultado del "select" ordenado por "precio":
select codigo,titulo,autor,editorial,precio from libros order by 5;
Por defecto, si no aclaramos en la sentencia, los ordena de manera ascendente (de menor a mayor).
Podemos ordenarlos de mayor a menor, para ello agregamos la palabra clave "desc":
select codigo,titulo,autor,editorial,precio from libros order by editorial desc;
Tambin podemos ordenar por varios campos, por ejemplo, por "titulo" y "editorial":
select codigo,titulo,autor,editorial,precio from libros order by titulo, editorial;
Incluso, podemos ordenar en distintos sentidos, por ejemplo, por "titulo" en sentido ascendente y
"editorial" en sentido descendente:
select codigo,titulo,autor,editorial,precio
from libros order by titulo asc, editorial desc;
Debe aclararse al lado de cada campo, pues estas palabras claves afectan al campo inmediatamente
anterior.
Problema:
Trabajamos con la tabla "libros" de una librera.
Eliminamos la tabla, si existe:
drop table if exists libros;
Creamos la tabla estableciendo como clave primaria y "auto_increment" el campo "codigo":
create table libros(
codigo int unsigned auto_increment,
titulo varchar(40),
autor varchar(30),
editorial varchar(15),
precio decimal (5,2) unsigned,
primary key (codigo)
);
Visualizamos su estructura:
describe libros;
Ingresamos algunos registros:
insert into libros (titulo,autor,editorial,precio)
values('El aleph','Borges','Planeta',15.50);
insert into libros (titulo,autor,editorial,precio)
values('Martin Fierro','Jose Hernandez','Emece',22.90);
insert into libros (titulo,autor,editorial,precio)
values('Martin Fierro','Jose Hernandez','Planeta',39);
insert into libros (titulo,autor,editorial,precio)
values('Aprenda PHP','Mario Molina','Emece',19.50);
insert into libros (titulo,autor,editorial,precio)
values('Cervantes y el quijote','Borges','Paidos',35.40);
insert into libros (titulo,autor,editorial,precio)
values('Matematica estas ahi', 'Paenza', 'Paidos',19);
Recuperamos los registros de la tabla "libros" ordenados por el ttulo:
select codigo,titulo,autor,editorial,precio
from libros
order by titulo;
Aparecen los registros ordenados alfabticamente por el campo especificado.
Ordenamos por "precio", colocando el nmero de orden del campo (5):
select codigo,titulo,autor,editorial,precio
from libros
order by 5;
Ordenamos los libros por 2 campos, "titulo" y "editorial":
select codigo,titulo,autor,editorial,precio
from libros
order by titulo, editorial;
Ahora los ordenamos en distintos sentidos, por "titulo" en sentido ascendente y "editorial" en sentido
descendente:

select codigo,titulo,autor,editorial,precio
from libros
order by titulo asc, editorial desc;

drop table if exists libros;


create table libros(
codigo int unsigned auto_increment,
titulo varchar(40),
autor varchar(30),
editorial varchar(15),
precio decimal (5,2) unsigned,
primary key (codigo)
);
insert into libros (titulo,autor,editorial,precio)
values('El aleph','Borges','Planeta',15.50);
insert into libros (titulo,autor,editorial,precio)
values('Martin Fierro','Jose Hernandez','Emece',22.90);
insert into libros (titulo,autor,editorial,precio)
values('Martin Fierro','Jose Hernandez','Planeta',39);
insert into libros (titulo,autor,editorial,precio)
values('Aprenda PHP','Mario Molina','Emece',19.50);
insert into libros (titulo,autor,editorial,precio)
values('Cervantes y el quijote','Borges','Paidos',35.40);
insert into libros (titulo,autor,editorial,precio)
values('Matematica estas ahi', 'Paenza', 'Paidos',19);
select codigo,titulo,autor,editorial,precio
from libros
order by titulo;
select codigo,titulo,autor,editorial,precio
from libros
order by 5;
select codigo,titulo,autor,editorial,precio
from libros
order by titulo, editorial;
select codigo,titulo,autor,editorial,precio
from libros
order by titulo asc, editorial desc;
drop table if exists libros;
create table libros(
codigo int unsigned auto_increment,
titulo varchar(40),
autor varchar(30),
editorial varchar(15),
precio decimal (5,2) unsigned,
primary key (codigo)
);
insert into libros (titulo,autor,editorial,precio)
values('El aleph','Borges','Planeta',15.50);
insert into libros (titulo,autor,editorial,precio)
values('Martin Fierro','Jose Hernandez','Emece',22.90);
insert into libros (titulo,autor,editorial,precio)
values('Martin Fierro','Jose Hernandez','Planeta',39);
insert into libros (titulo,autor,editorial,precio)
values('Aprenda PHP','Mario Molina','Emece',19.50);
insert into libros (titulo,autor,editorial,precio)
values('Cervantes y el quijote','Borges','Paidos',35.40);

insert into libros (titulo,autor,editorial,precio)


values('Matematica estas ahi', 'Paenza', 'Paidos',19);
select codigo,titulo,autor,editorial,precio
from libros
order by titulo;
codi
titulo
go

autor

Aprenda PHP

Mario Molina Emece

19.5
0

Cervantes y el
quijote

Borges

Paidos

35.4
0

El aleph

Borges

Planet 15.5
a
0

Martin Fierro

Jose
Hernandez

Emece

22.9
0

Martin Fierro

Jose
Hernandez
autor
Paenza
Borges

Planet
a
editori
al
Paidos
Planet
a

39.0
0
preci
19.0
o
0
15.5
0

codi titulo
6
Matematica
go
estas ahi
1
El aleph

editori preci
al
o

Matematica
estas ahi

Paenza

Paidos

19.0
0

Aprenda PHP

Mario Molina Emece

19.5
0

Martin Fierro

Jose
Hernandez

22.9
0

Cervantes y el
quijote
codi titulo
3
Martin Fierro
go

Emece

35.4
Borges
Paidos
0
autor
editori preci
Jose
Planet
39.0
al
o
Hernandez a
0
Mario Molina Emece 19.5
0

Aprenda PHP

Cervantes y el
quijote

Borges

Paidos

El aleph

Borges

Planet 15.5
a
0

Martin Fierro

Jose
Hernandez

Emece

Martin Fierro

Jose
Hernandez

Planet 39.0
a
0

codi Matematica
titulo
6
estas ahi
go

autor
Paenza

editori 19.0
preci
Paidos
0
al
o

Aprenda PHP

Mario Molina Emece

19.5
0

Cervantes y el
quijote

Borges

Paidos

35.4
0

El aleph

Borges

Planet 15.5
a
0

Martin Fierro

Jose
Hernandez

Planet 39.0
a
0

Martin Fierro

Jose
Hernandez

Emece

22.9
0

Matematica
estas ahi

Paenza

Paidos

19.0
0

select codigo,titulo,autor,editorial,precio
from libros
order by 5;

select codigo,titulo,autor,editorial,precio
from libros
order by titulo, editorial;

35.4
0

22.9
0

select codigo,titulo,autor,editorial,precio
from libros
order by titulo asc, editorial desc;

Secuencia de comandos SQL ejecutados


correctamente.
Problema:
Trabaje con la tabla llamada "medicamentos" que
almacena la informacin de los productos que vende
una farmacia.
1- Elimine la tabla, si existe.

2- Cree una tabla llamada "medicamentos" con la estructura necesaria para almacenar la siguiente
informacin:
-nombre
- laboratorio
- precio
- cantidad
- clave primaria: cdigo.
3- Visualice la estructura de la tabla "medicamentos".
4- Ingrese los siguientes registros
Sertal
Roche
5.2
Buscapina
Roche
Amoxidal 500
Bayer
15.60
Paracetamol 500 Bago
1.90
Bayaspirina
Bayer
2.10
Amoxidal jarabe Bayer
5.10

100
4.10
100
200
150
250

200

5- Ordene los registros por precio, de mayor a menor.


6- Ordene los medicamentos por nmero del campo "cantidad".
7- Ordene los registros por "laboratorio" (descendente) y cantidad (ascendente).

Muestre los resultados de todos los ejercicios

29 - Operadores Lgicos (and - or - not)


Hasta el momento, hemos aprendido a establer una condicin con "where" utilizando operadores
relacionales. Podemos establecer ms de una condicin con la clusula "where", para ello aprenderemos
los operadores lgicos.
Son los siguientes:
- and, significa "y",
- or, significa "y/o",
- xor, significa "o",
- not, significa "no", invierte el resultado
- (), parntesis
Los operadores lgicos se usan para combinar condiciones.
Queremos recuperar todos los registros cuyo autor sea igual a "Borges" y cuyo precio no supere los 20
pesos, para ello necesitamos 2 condiciones:
select * from libros
where (autor='Borges') and
(precio<=20);
Los registros recuperados en una sentencia que une 2 condiciones con el operador "and", cumplen con las
2 condiciones.
Queremos ver los libros cuyo autor sea "Borges" y/o cuya editorial sea "Planeta":
select * from libros
where autor='Borges' or
editorial='Planeta';
En la sentencia anterior usamos el operador "or", indicamos que recupere los libros en los cuales el valor
del campo "autor" sea "Borges" y/o el valor del campo "editorial" sea "Planeta", es decir, seleccionar los
registros que cumplan con la primera condicin, con la segunda condicin o con ambas condiciones.
Los registros recuperados con una sentencia que une 2 condiciones con el operador "or", cumplen 1 de las
condiciones o ambas.
Queremos ver los libros cuyo autor sea "Borges" o cuya editorial sea "Planeta":
select * from libros
where (autor='Borges') xor
(editorial='Planeta');
En la sentencia anterior usamos el operador "xor", indicamos que recupere los libros en los cuales el valor
del campo "autor" sea "Borges" o el valor del campo "editorial" sea "Planeta", es decir, seleccionar los
registros que cumplan con la primera condicin o con la segunda condicin pero no los que cumplan con
ambas condiciones. Los registros recuperados con una sentencia que une 2 condiciones con el operador
"xor", cumplen 1 de las condiciones, no ambas.
Queremos recuperar los libros que no cumplan la condicin dada, por ejemplo, aquellos cuya editorial NO
sea "Planeta":
select * from libros
where not (editorial='Planeta');
El operador "not" invierte el resultado de la condicin a la cual antecede.
Los registros recuperados en una sentencia en la cual aparece el operador "not", no cumplen con la
condicin a la cual afecta el "NO".
Los parntesis se usan para encerrar condiciones, para que se evalen como una sola expresin.
Cuando explicitamos varias condiciones con diferentes operadores lgicos (combinamos "and", "or")
permite establecer el orden de prioridad de la evaluacin; adems permite diferenciar las expresiones ms
claramente.
Por ejemplo, las siguientes expresiones devuelven un resultado diferente:
select * from libros
where (autor='Borges') or
(editorial='Paidos' and precio<20);
select*from libros
where (autor='Borges' or editorial='Paidos') and
(precio<20);
Si bien los parntesis no son obligatorios en todos los casos, se recomienda utilizarlos para evitar
confusiones.
El orden de prioridad de los operadores lgicos es el siguiente: "not" se aplica antes que "and" y "and"
antes que "or", si no se especifica un orden de evaluacin mediante el uso de parntesis.
El orden en el que se evalan los operadores con igual nivel de precedencia es indefinido, por ello se
recomienda usar los parntesis.
Problema:
Trabajamos con la tabla "libros" de una librera.

Eliminamos la tabla, si existe.


Creamos la tabla con la siguiente estructura:
create table libros(
codigo int unsigned auto_increment,
titulo varchar(40),
autor varchar(30),
editorial varchar(15),
precio decimal(5,2),
primary key(codigo)
);
Ingresamos algunos registros:
insert into libros (titulo,autor,editorial,precio)
values('El aleph','Borges','Planeta',15.50);
insert into libros (titulo,autor,editorial,precio)
values('Martin Fierro','Jose Hernandez','Emece',22.90);
insert into libros (titulo,autor,editorial,precio)
values('Martin Fierro','Jose Hernandez','Planeta',39);
insert into libros (titulo,autor,editorial,precio)
values('Aprenda PHP','Mario Molina','Emece',19.50);
insert into libros (titulo,autor,editorial,precio)
values('Cervantes y el quijote','Borges','Paidos',35.40);
insert into libros (titulo,autor,editorial,precio)
values('Matematica estas ahi', 'Paenza', 'Paidos',19);
Vamos a recuperar registros estableciendo 2 condiciones, necesitamos los operadores lgicos.
Para recuperar todos los registros cuyo autor sea igual a "Borges" y cuyo precio no supere los 20 pesos,
tipeamos:
select * from libros
where autor='Borges' and
precio<=20;
Muestra un registro, porque slo uno cumple con ambas condiciones.
Seleccionamos los libros cuyo autor sea "Paenza" y/o cuya editorial sea "Planeta":
select * from libros
where autor='Paenza' or
editorial='Planeta';
Muestra 3 registros, 1 de ellos cumple con la primera condicin, 1 con la segunda y 1 con ambas.
Queremos ver los libros cuyo autor sea "Borges" o cuya editorial sea "Planeta":
select * from libros
where (autor='Borges') xor
(editorial='Planeta');
Muestra 2 registros, 1 cumple con la primera condicin y 1 con la segunda. Los registros que cumplen con
ambas condiciones no fueron seleccionados porque usamos el operador "xor".
Establecemos la condicin que la editorial sea igual a "Planeta", y recuperamos con un "select" los libros
que no cumplan la condicin:
select * from libros
where not (editorial='Planeta');
Muestra 4 registros que NO cumplen con la condicin.
Los parntesis sirven para establecer el orden de prioridad de evaluacin de las condiciones.
Analicemos los siguientes ejemplos, estas sentencias devuelven resultados distintos:
select * from libros
where (autor='Borges') or
(editorial='Paidos' and precio<20);
select * from libros
where (autor='Borges' or editorial='Paidos')
and (precio<20);
En el primer caso selecciona primero los libros de "Paidos" con precio<20 y tambin los de "Borges", sin
considerar el precio.
En el segundo caso selecciona los libros de "Borges" y/o "Paidos", si tienen precio<20.
El libro con cdigo 5, no aparece en la segunda consulta porque el precio no es <20; si en la primera
porque la condicin referida al precio afecta a los libros de "Paidos".

drop table if exists libros;


create table libros(
codigo int unsigned auto_increment,

titulo varchar(40),
autor varchar(30),
editorial varchar(15),
precio decimal(5,2),
primary key(codigo)
);
insert into libros (titulo,autor,editorial,precio)
values('El aleph','Borges','Planeta',15.50);
insert into libros (titulo,autor,editorial,precio)
values('Martin Fierro','Jose Hernandez','Emece',22.90);
insert into libros (titulo,autor,editorial,precio)
values('Martin Fierro','Jose Hernandez','Planeta',39);
insert into libros (titulo,autor,editorial,precio)
values('Aprenda PHP','Mario Molina','Emece',19.50);
insert into libros (titulo,autor,editorial,precio)
values('Cervantes y el quijote','Borges','Paidos',35.40);
insert into libros (titulo,autor,editorial,precio)
values('Matematica estas ahi', 'Paenza', 'Paidos',19);
select * from libros
where autor='Borges' and
precio<=20;
select * from libros
where autor='Paenza' or
editorial='Planeta';
select * from libros
where (autor='Borges') xor
(editorial='Planeta');
select * from libros
where not (editorial='Planeta');
select * from libros
where (autor='Borges') or
(editorial='Paidos' and precio<20);
select * from libros
where (autor='Borges' or editorial='Paidos')
and (precio<20);
drop table if exists libros;
create table libros(
codigo int unsigned auto_increment,
titulo varchar(40),
autor varchar(30),
editorial varchar(15),
precio decimal(5,2),
primary key(codigo)
);
insert into libros (titulo,autor,editorial,precio)
values('El aleph','Borges','Planeta',15.50);
insert into libros (titulo,autor,editorial,precio)
values('Martin Fierro','Jose Hernandez','Emece',22.90);
insert into libros (titulo,autor,editorial,precio)
values('Martin Fierro','Jose Hernandez','Planeta',39);
insert into libros (titulo,autor,editorial,precio)
values('Aprenda PHP','Mario Molina','Emece',19.50);
insert into libros (titulo,autor,editorial,precio)
values('Cervantes y el quijote','Borges','Paidos',35.40);
insert into libros (titulo,autor,editorial,precio)

values('Matematica estas ahi', 'Paenza', 'Paidos',19);


select * from libros
where autor='Borges' and
precio<=20;
codi
editori preci
titulo autor
go
al
o
1

El
Borg Planet 15.5
aleph es
a
0
editorial='Planeta';

select * from libros


where autor='Paenza' or

codi
titulo
go

autor

editori preci
al
o

El aleph

Borges

Planet 15.5
a
0

Martin Fierro

Jose
Hernandez

Planet 39.0
a
0

Matematica
estas ahi

Paenza

19.0
Paidos
0

codi
titulo
go

autor

editori preci
al
o

Martin Fierro

Jose
Hernandez

Planet 39.0
a
0

Cervantes y el
quijote

Borges

Paidos

codi
titulo
go

autor

editori preci
al
o

Martin Fierro

Jose
Hernandez

Emece

22.9
0

Aprenda PHP

Mario Molina Emece

19.5
0

Cervantes y el
quijote

Borges

Paidos

35.4
0

Matematica
estas ahi

Paenza

Paidos

19.0
0

codi
titulo
go

autor

El aleph

Borg Planet 15.5


es
a
0

Cervantes y el
quijote

Borg
35.4
Paidos
es
0

Matematica
estas ahi

Paen
19.0
Paidos
za
0

select * from libros


where not (editorial='Planeta');

select * from libros


where (autor='Borges') or
(editorial='Paidos' and precio<20);

editori preci
al
o

codi
titulo
go

autor

El aleph

Borg Planet 15.5


es
a
0

Matematica
estas ahi

Paen
19.0
Paidos
za
0

Problema:

35.4
0

select * from libros


where (autor='Borges') xor
(editorial='Planeta');

select * from libros


where (autor='Borges' or editorial='Paidos')
and (precio<20);

editori preci
al
o

Secuencia de comandos SQL ejecutados correctamente.

Trabaje con la tabla llamada "medicamentos" de una farmacia.


1- Elimine la tabla, si existe.
2- Cree una tabla llamada "medicamentos" con la estructura necesaria para almacenar la siguiente
informacin:
-cdigo
-nombre
-laboratorio
-precio
-cantidad
-clave primaria: documento.
3- Visualice la estructura de la tabla "medicamentos".
4- Ingrese los siguientes registros (insert into):
Sertal
Roche
5.2
100
Buscapina
Roche
4.10
200
Amoxidal 500
Bayer
15.60
100
Paracetamol 500 Bago
1.90
200
Bayaspirina
Bayer
2.10
150
Amoxidal jarabe Bayer
5.10
250
5- Recupere los cdigos y nombres de los medicamentos cuyo laboratorio sea 'Roche' y cuyo precio sea
menor a 5:
6- Recupere los medicamentos cuyo laboratorio sea 'Roche' o cuyo precio sea menor a 5:
7- Muestre todos los registros que NO sean de "Bayer"
8- Muestre todos los medicamentos cuyo laboratorio NO sea "Bayer" y cuya cantidad sea=100:
9- Muestre todos los medicamentos cuyo laboratorio sea "Bayer" y cuya cantidad NO sea=100:
10- Elimine todos los registros cuyo laboratorio sea igual a "Bayer" y su precio sea mayor a 10:
11- Cambie la cantidad por 200, a todos los medicamentos de "Roche" cuyo precio sea mayor a 5:
12- Borre los medicamentos cuyo laboratorio sea "Bayer" o cuyo precio sea menor a 3. Po Antes veamos
cules cumplen con la condicin.
Muestre los resultados para todos lso puntos del ejercicio

30 - Otros operadores relacionales (between - in)


Hemos visto los operadores relacionales:
= (igual), <> (distinto), > (mayor), < (menor), >= (mayor o igual), <= (menor o igual), is null/is not null
(si un valor es NULL o no).
Existen otros que simplifican algunas consultas:
Para recuperar de nuestra tabla "libros" los registros que tienen precio mayor o igual a 20 y menor o igual
a 40, usamos 2 condiciones unidas por el operador lgico "and":
select * from libros
where precio>=20 and precio<=40;
Podemos usar "between":
select * from libros
where precio between 20 and 40;
"between" significa "entre". Averiguamos si el valor de un campo dado (precio) est entre los valores
mnimo y mximo especificados (20 y 40 respectivamente).
Si agregamos el operador "not" antes de "between" el resultado se invierte.
Para recuperar los libros cuyo autor sea 'Paenza' o 'Borges' usamos 2 condiciones:
select * from libros
where autor='Borges' or autor='Paenza';
Podemos usar "in":
select * from libros
where autor in('Borges','Paenza');
Con "in" averiguamos si el valor de un campo dado (autor) est incluido en la lista de valores especificada
(en este caso, 2 cadenas).
Para recuperar los libros cuyo autor no sea 'Paenza' ni 'Borges' usamos:
select * from libros where autor<>'Borges' and autor<>'Paenza';
Tambin podemos usar "in" :
select * from libros
where autor not in ('Borges','Paenza');
Con "in" averiguamos si el valor del campo est incluido en la lista, con "not" antecediendo la condicin,
invertimos el resultado.
Problema:
Trabajamos con la tabla "libros" de una librera.
Eliminamos la tabla, si existe.
Creamos la tabla con la siguiente estructura:
create table libros(
codigo int unsigned auto_increment,
titulo varchar(40),
autor varchar(30),
editorial varchar(15),
precio decimal(5,2) unsigned,
primary key(codigo)
);
Ingresamos algunos registros:
insert into libros (titulo,autor,editorial,precio)
values('El aleph','Borges','Planeta',15.50);
insert into libros (titulo,autor,editorial,precio)
values('Martin Fierro','Jose Hernandez','Emece',22.90);
insert into libros (titulo,autor,editorial,precio)
values('Martin Fierro','Jose Hernandez','Planeta',39);
insert into libros (titulo,autor,editorial,precio)
values('Aprenda PHP','Mario Molina','Emece',19.50);
insert into libros (titulo,autor,editorial,precio)
values('Cervantes y el quijote','Borges','Paidos',35.40);
insert into libros (titulo,autor,editorial,precio)
values('Matematica estas ahi', 'Paenza', 'Paidos',19);
Recuperamos los registros que tienen precio mayor o igual a 20 y menor o igual a 40, usando 2
condiciones:
select * from libros
where precio>=20 and
precio<=40;
Ahora usamos "between" y confirmamos que la salida es la misma:
select * from libros
where precio between 20 and 40;

Recuperamos los libros cuyo autor es 'Paenza' o 'Borges' usando 2 condiciones:


select * from libros
where autor='Borges' or
autor='Paenza';
Usamos "in" y obtenemos el mismo resultado:
select * from libros
where autor in('Borges','Paenza');
Seleccionamos los libros cuyo autor no es 'Paenza' ni 'Borges' usamos:
select * from libros
where autor<>'Borges' and
autor<>'Paenza';
Realizamos la misma consulta, pero esta vez con "in" :
select * from libros
where autor not in ('Borges','Paenza');
drop table if exists libros;
create table libros(
codigo int unsigned auto_increment,
titulo varchar(40),
autor varchar(30),
editorial varchar(15),
precio decimal(5,2) unsigned,
primary key(codigo)
);
insert into libros (titulo,autor,editorial,precio)
values('El aleph','Borges','Planeta',15.50);
insert into libros (titulo,autor,editorial,precio)
values('Martin Fierro','Jose Hernandez','Emece',22.90);
insert into libros (titulo,autor,editorial,precio)
values('Martin Fierro','Jose Hernandez','Planeta',39);
insert into libros (titulo,autor,editorial,precio)
values('Aprenda PHP','Mario Molina','Emece',19.50);
insert into libros (titulo,autor,editorial,precio)
values('Cervantes y el quijote','Borges','Paidos',35.40);
insert into libros (titulo,autor,editorial,precio)
values('Matematica estas ahi', 'Paenza', 'Paidos',19);
select * from libros
where precio>=20 and
precio<=40;
select * from libros
where precio between 20 and 40;
select * from libros
where autor='Borges' or
autor='Paenza';
select * from libros
where autor in('Borges','Paenza');
select * from libros
where autor<>'Borges' and
autor<>'Paenza';
select * from libros
where autor not in ('Borges','Paenza');

drop table if exists libros;

create table libros(


codigo int unsigned auto_increment,
titulo varchar(40),
autor varchar(30),
editorial varchar(15),
precio decimal(5,2) unsigned,
primary key(codigo)
);
insert into libros (titulo,autor,editorial,precio)
values('El aleph','Borges','Planeta',15.50);
insert into libros (titulo,autor,editorial,precio)
values('Martin Fierro','Jose Hernandez','Emece',22.90);
insert into libros (titulo,autor,editorial,precio)
values('Martin Fierro','Jose Hernandez','Planeta',39);
insert into libros (titulo,autor,editorial,precio)
values('Aprenda PHP','Mario Molina','Emece',19.50);
insert into libros (titulo,autor,editorial,precio)
values('Cervantes y el quijote','Borges','Paidos',35.40);
insert into libros (titulo,autor,editorial,precio)
values('Matematica estas ahi', 'Paenza', 'Paidos',19);
select * from libros
where precio>=20 and
precio<=40;
codi
titulo
go

autor

editori preci
al
o

Martin Fierro

Jose
Hernandez

Emece

Martin Fierro

Jose
Hernandez

Planet 39.0
a
0

Cervantes y el
quijote

Borges

35.4
Paidos
0

codi
titulo
go

autor

editori preci
al
o

Martin Fierro

Jose
Hernandez

Emece

Martin Fierro

Jose
Hernandez

Planet 39.0
a
0

Borges

Paidos

Cervantes y el
quijote
codi titulo
go
5

select * from libros


where precio between 20 and 40;

22.9
0

35.4
0

select * from libros


where autor='Borges' or
autor='Paenza';

autor editori preci


al
o

El aleph

Borg Planet 15.5


es
a
0

Cervantes y el
quijote

Borg
35.4
Paidos
es
0

Matematica
estas ahi

Paen
19.0
Paidos
za
0

codi
titulo
go

autor

Borg Planet 15.5


es
a
0

El aleph

22.9
0

select * from libros


where autor in('Borges','Paenza');

editori preci
al
o

Cervantes y el
Borg
35.4
Paidos
quijote
es
0
codi titulo
autor
editori
preci select * from libros
Matematica
Paen
19.0
6
Paidos
go
al
o
where autor<>'Borges' and
estas ahi
za
0
2
Martin
Jose
Emece 22.9 autor<>'Paenza';
Fierro
Hernandez
0
5

Martin
Fierro

Jose
Hernandez

Planet 39.0
a
0

Aprenda
PHP

Mario Molina Emece

19.5
0

select * from libros


where autor not in ('Borges','Paenza');
codi
titulo
go

autor

editori preci
al
o

Martin
Fierro

Jose
Hernandez

Emece

22.9
0

Martin
Fierro

Jose
Hernandez

Planet 39.0
a
0

Aprenda
PHP

Mario Molina Emece

19.5
0

Secuencia de comandos SQL ejecutados correctamente.


Problema:
Trabaje con la tabla llamada "medicamentos" de una farmacia.

1- Elimine la tabla, si existe.


2- Cree una tabla llamada "medicamentos" con la estructura necesaria para almacenar la siguiente
informacin:
-cdigo
-nombre
-laboratorio
-precio
-cantidad
-clave primaria: documento.
3- Visualice la estructura de la tabla "medicamentos".
4- Ingrese los siguientes registros:
Sertal
Buscapina
Amoxidal 500
Paracetamol 500
Bayaspirina
Amoxidal jarabe

Roche
Bayer
Bago
Bayer
Bayer

5.2
Roche
15.60
1.90
2.10
5.10

100
4.10
100
200
150
250

200

5- Recupere los nombres y precios de los medicamentos cuyo precio est entre 5 y 15:
6- Seleccione los registros cuyo laboratorio sea "Bayer" o "Bago":
7- Elimine los registros cuya cantidad est entre 100 y 200:
Muestre los resultados de todos los ejercicios

31 - Bsqueda de patrones (like y not like)


Hemos realizado consultas utilizando operadores relacionales para comparar cadenas. Por ejemplo,
sabemos recuperar los libros cuyo autor sea igual a la cadena "Borges":
select * from libros
where autor='Borges';
Los operadores relacionales nos permiten comparar valores numricos y cadenas de caracteres. Pero al
realizar la comparacin de cadenas, busca coincidencias de cadenas completas.
Imaginemos que tenemos registrados estos 2 libros:
El Aleph de Borges;
Antologia poetica de J.L. Borges;
Si queremos recuperar todos los libros cuyo autor sea "Borges", y especificamos la siguiente condicin:
select * from libros
where autor='Borges';
slo aparecer el primer registro, ya que la cadena "Borges" no es igual a la cadena "J.L. Borges".
Esto sucede porque el operador "=" (igual), tambin el operador "<>" (distinto) comparan cadenas de
caracteres completas. Para comparar porciones de cadenas utilizamos los operadores "like" y "not like".
Entonces, podemos comparar trozos de cadenas de caracteres para realizar consultas. Para recuperar
todos los registros cuyo autor contenga la cadena "Borges" debemos tipear:
select * from libros
where autor like "%Borges%";
El smbolo "%" (porcentaje) reemplaza cualquier cantidad de caracteres (incluyendo ningn caracter). Es
un caracter comodn. "like" y "not like" son operadores de comparacin que sealan igualdad o diferencia.
Para seleccionar todos los libros que comiencen con "A":
select * from libros
where titulo like 'A%';
Note que el smbolo "%" ya no est al comienzo, con esto indicamos que el ttulo debe tener como primera
letra la "A" y luego, cualquier cantidad de caracteres.
Para seleccionar todos los libros que no comiencen con "A":
select * from libros
where titulo not like 'A%';
As como "%" reemplaza cualquier cantidad de caracteres, el guin bajo "_" reemplaza un caracter, es el
otro caracter comodn. Por ejemplo, queremos ver los libros de "Lewis Carroll" pero no recordamos si se
escribe "Carroll" o "Carrolt", entonces tipeamos esta condicin:
select * from libros
where autor like "%Carrol_";
Si necesitamos buscar un patrn en el que aparezcan los caracteres comodines, por ejemplo, queremos
ver todos los registros que comiencen con un guin bajo, si utilizamos '_%', mostrar todos los registros
porque lo interpreta como "patrn que comienza con un caracter cualquiera y sigue con cualquier cantidad
de caracteres". Debemos utilizar "\_%", esto se interpreta como 'patrn que comienza con guin bajo y
contina con cualquier cantidad de caracteres". Es decir, si queremos incluir en una bsqueda de patrones
los caracteres comodines, debemos anteponer al caracter comodn, la barra invertida "\", as lo tomar
como caracter de bsqueda literal y no como comodn para la bsqueda. Para buscar el caracter literal
"%" se debe colocar "\%".
Problema:
Trabajamos con la tabla "libros" de una librera.
Eliminamos la tabla, si existe.
Creamos la tabla con la siguiente estructura:
create table libros(
codigo int unsigned auto_increment,
titulo varchar(40),
autor varchar(30),
editorial varchar(15),
precio decimal(5,2) unsigned,
primary key(codigo)
);
Ingresamos algunos registros:
insert into libros (titulo,autor,editorial,precio)
values('El aleph','Borges','Planeta',15.50);
insert into libros (titulo,autor,editorial,precio)
values('Martin Fierro','Jose Hernandez','Emece',22.90);
insert into libros (titulo,autor,editorial,precio)
values('Antologia poetica','J.L. Borges','Planeta',39);
insert into libros (titulo,autor,editorial,precio)

values('Aprenda PHP','Mario Molina','Emece',19.50);


insert into libros (titulo,autor,editorial,precio)
values('Cervantes y el quijote','Bioy Casare- J.L. Borges','Paidos',35.40);
insert into libros (titulo,autor,editorial,precio)
values('Manual de PHP', 'J.C. Paez', 'Paidos',19);
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',36.00);
Recuperamos los libros cuyo autor sea igual a la cadena "Borges":
select * from libros
where autor='Borges';
Nos devuelve 1 registro.
Recuperamos todos los registros cuyo autor contenga la cadena "Borges":
select * from libros
where autor like '%Borges%';
El resultado nos devuelve 3 registros.
Para seleccionar todos los libros que comiencen con "A":
select * from libros
where titulo like 'A%';
Para seleccionar todos los libros que no comiencen con "A":
select * from libros
where titulo not like 'A%';
Queremos los libros de "Lewis Carroll" y no recordamos si se escribe "Carroll" o "Carrolt", entonces
tipeamos:
select * from libros
where autor like '%Carrol_';
Buscamos todos los libros de "Harry Potter":
select * from libros
where titulo like '%Harry Potter%';
Todos los libros sobre "PHP":
select * from libros
where titulo like '%PHP%';
drop table if exists libros;
create table libros(
codigo int unsigned auto_increment,
titulo varchar(40),
autor varchar(30),
editorial varchar(15),
precio decimal(5,2) unsigned,
primary key(codigo)
);
insert into libros (titulo,autor,editorial,precio)
values('El aleph','Borges','Planeta',15.50);
insert into libros (titulo,autor,editorial,precio)
values('Martin Fierro','Jose Hernandez','Emece',22.90);
insert into libros (titulo,autor,editorial,precio)
values('Antologia poetica','J.L. Borges','Planeta',39);
insert into libros (titulo,autor,editorial,precio)
values('Aprenda PHP','Mario Molina','Emece',19.50);
insert into libros (titulo,autor,editorial,precio)
values('Cervantes y el quijote','Bioy Casare- J.L. Borges','Paidos',35.40);
insert into libros (titulo,autor,editorial,precio)
values('Manual de PHP', 'J.C. Paez', 'Paidos',19);
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',36.00);

select * from libros


where autor='Borges';
select * from libros
where autor like '%Borges%';
select * from libros
where titulo like 'A%';
select * from libros
where titulo not like 'A%';
select * from libros
where autor like '%Carrol_';
select * from libros
where titulo like '%Harry Potter%';
select * from libros
where titulo like '%PHP%';
drop table if exists libros;
create table libros(
codigo int unsigned auto_increment,
titulo varchar(40),
autor varchar(30),
editorial varchar(15),
precio decimal(5,2) unsigned,
primary key(codigo)
);
insert into libros (titulo,autor,editorial,precio)
values('El aleph','Borges','Planeta',15.50);
insert into libros (titulo,autor,editorial,precio)
values('Martin Fierro','Jose Hernandez','Emece',22.90);
insert into libros (titulo,autor,editorial,precio)
values('Antologia poetica','J.L. Borges','Planeta',39);
insert into libros (titulo,autor,editorial,precio)
values('Aprenda PHP','Mario Molina','Emece',19.50);
insert into libros (titulo,autor,editorial,precio)
values('Cervantes y el quijote','Bioy Casare- J.L. Borges','Paidos',35.40);
insert into libros (titulo,autor,editorial,precio)
values('Manual de PHP', 'J.C. Paez', 'Paidos',19);
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',36.00);
select * from libros
where autor='Borges';
codi
editori preci
titulo autor
go
al
o
1

El
Borg Planet 15.5
aleph es
a
0

select * from libros


where autor like '%Borges%';

codi
titulo
go

autor

editori preci
al
o

El aleph

Borges

Planet 15.5
a
0

Antologia poetica J.L. Borges

Planet 39.0
a
0

Cervantes y el
quijote

Paidos

Bioy Casare- J.L.


Borges

35.4
0

select * from libros


where titulo like 'A%';
codi
titulo
go

autor

editori preci
al
o

Antologia poetica

J.L. Borges

Planet 39.0
a
0

Aprenda PHP

Mario
Molina

Emece

Alicia en el pais de las


maravillas

Lewis
Carroll

36.0
Paidos
0

19.5
0

select * from libros


where titulo not like 'A%';

codi
titulo
go

autor

editori preci
al
o

El aleph

Borges

Planet 15.5
a
0

Martin Fierro

Jose Hernandez

Emece

22.9
0

Cervantes y el quijote

Bioy Casare- J.L.


Borges

Paidos

35.4
0

Manual de PHP

J.C. Paez

Paidos

19.0
0

7
codi
go
8
9

Harry Potter y la piedra


titulo
filosofal

select * from libros


where autor like '%Carrol_';

45.0
J.K.
Rowlingeditori preci
Paidos
autor
0
al
o
Harry Potter y la camara
46.0
J.K.
RowlingPaidos 36.0
Paidos
Alicia
en el pais de las
Lewis
secreta
0
select * from libros
maravillas
Carroll
0
where titulo like '%Harry Potter%';

codi
titulo
go

autor

editori preci
al
o

Harry Potter y la piedra


filosofal

J.K.
Rowling

Paidos

45.0
0

Harry Potter y la camara J.K.


secreta
Rowling

Paidos

46.0
0

codi
titulo
go

autor

editori preci
al
o

Aprenda
PHP

Mario
Molina

Emece

19.5
0

Manual de
PHP

J.C. Paez

Paidos

19.0
0

select * from libros


where titulo like '%PHP%';

Secuencia de comandos SQL ejecutados correctamente.


Problema:

Trabaje con la tabla llamada "medicamentos" de una farmacia.


1- Elimine la tabla, si existe:
2- Cree una tabla llamada "medicamentos" con la estructura necesaria para almacenar la siguiente
informacin:
-cdigo
-nombre
-laboratorio
-precio
-cantidad
-clave primaria: documento.
3- Visualice la estructura de la tabla "medicamentos".

4- Ingrese los siguientes registros:


Sertal gotas
Roche
5.2
Buscapina
Roche
Amoxidal 500
Bayer
15.60
Paracetamol 500 Bago
1.90
Bayaspirina
Bayer
2.10
Amoxidal jarabe Bayer
5.10
Sertal compuesto Bayer
5.10
Paracetamol 1000Bago
2.90
Amoxinil
Roche
17.80

4.10

5- Recupere los medicamentos cuyo nombre comiencen con "Amox":


6- Recupere los medicamentos "Paracetamol" cuyo precio sea menor a 2:
7- Busque todos los medicamentos cuyo precio tenga .10 centavos:
8- Muestre todos los medicamentos que no contengan la cadena "compuesto":
9- Elimine todos los registros cuyo laboratorio contenga la letra "y":
10- Cambie el precio por 5, al "Paracetamol" cuyo precio es mayor a 2:
Muestre el resultado de todos los ejercicios

32 - Bsqueda de patrones (regexp)


Los operadores "regexp" y "not regexp" busca patrones de modo similar a "like" y "not like".
Para buscar libros que contengan la cadena "Ma" usamos:
select titulo from libros
where titulo regexp 'Ma';
Para buscar los autores que tienen al menos una "h" o una "k" o una "w" tipeamos:
select autor from libros
where autor regexp '[hkw]';
Para buscar los autores que no tienen ni "h" o una "k" o una "w" tipeamos:
select autor from libros
where autor not regexp '[hkw]';
Para buscar los autores que tienen por lo menos una de las letras de la "a" hasta la "d", es decir, "a,b,c,d",
usamos:
select autor from libros
where autor regexp '[a-d]';
Para ver los ttulos que comienzan con "A" tipeamos:
select titulo from libros
where titulo regexp '^A';
Para ver los ttulos que terminan en "HP" usamos:
select titulo from libros
where titulo regexp 'HP$';
Para buscar ttulos que contengan una "a" luego un caracter cualquiera y luego una "e" utilizamos la
siguiente sentencia:
select titulo from libros
where titulo regexp 'a.e';
El punto (.) identifica cualquier caracter.
Podemos mostrar los ttulos que contienen una "a" seguida de 2 caracteres y luego una "e":
select titulo from libros
where titulo regexp 'a..e';
Para buscar autores que tengan 6 caracteres exactamente usamos:
select autor from libros
where autor regexp '^......$';
Para buscar autores que tengan al menos 6 caracteres usamos:
select autor from libros
where autor regexp '......';
Para buscar ttulos que contengan 2 letras "a" usamos:
select titulo from libros
where titulo regexp 'a.*a';
El asterisco indica que busque el caracter inmediatamente anterior, en este caso cualquiera porque hay
un punto.
Problema:
Trabajamos con la tabla "libros" de una librera.
Eliminamos la tabla, si existe.
Creamos la tabla:
create table libros(
codigo int unsigned auto_increment,
titulo varchar(40) not null,
autor varchar(30),
editorial varchar(15),
precio decimal(5,2) unsigned,
primary key(codigo)
);
Ingresamos algunos registros:
insert into libros (titulo,autor,editorial,precio)
values('El aleph','Borges','Planeta',15.50);
insert into libros (titulo,autor,editorial,precio)
values('Martin Fierro','Jose Hernandez','Emece',22.90);
insert into libros (titulo,autor,editorial,precio)
values('Antologia poetica','J.L. Borges','Planeta',39);
insert into libros (titulo,autor,editorial,precio)
values('Aprenda PHP','Mario Molina','Emece',19.50);
insert into libros (titulo,autor,editorial,precio)

values('Cervantes y el quijote','Bioy Casare- J.L. Borges','Paidos',35.40);


insert into libros (titulo,autor,editorial,precio)
values('Manual de PHP', 'J.C. Paez', 'Paidos',19);
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',36.00);
Para buscar libros cuyos ttulos contengan la cadena "Ma" usamos:
select titulo from libros
where titulo regexp 'Ma';
Retorna 4 registros.
Para buscar los registros cuyos autores tienen al menos una "h" o una "k" o una "w" tipeamos:
select titulo,autor from libros
where autor regexp '[hkw]';
4 registros devueltos.
Para buscar los libros cuyos autores no tienen ni "h" o una "k" o una "w" tipeamos:
select titulo,autor from libros
where autor not regexp '[hkw]';
Selecciona 5 registros.
Para buscar los autores que tienen por lo menos una de las letras de la "a" hasta la "d", es decir, "a,b,c,d",
usamos:
select autor from libros
where autor regexp '[a-d]';
Selecciona 7 registros.
Para ver los ttulos que comienzan con "A" tipeamos:
select titulo from libros
where titulo regexp '^A';
Devuelve 3 registros.
Para ver los ttulos que terminan en "HP" usamos:
select titulo from libros
where titulo regexp 'HP$';
Retorna 2 registros.
Para buscar ttulos que contengan una "a" luego un caracter cualquiera y luego una "e" utilizamos la
siguiente sentencia:
select titulo from libros
where titulo regexp 'a.e';
Retorna 2 registros.
Podemos mostrar los ttulos que contienen una "a" seguida de 2 caracteres y luego una "e":
select titulo from libros
where titulo regexp 'a..e';
Selecciona 3 registros.
Para buscar autores que tengan 6 caracteres exactamente usamos:
select autor from libros
where autor regexp '^......$';
Devuelve 1 registro.
Para buscar autores que tengan al menos 6 caracteres usamos:
select autor from libros
where autor regexp '......';
Selecciona 9 registros.
Para buscar ttulos que contengan 2 letras "a" usamos:
select titulo from libros
where titulo regexp 'a.*a';
Selecciona 6 registros.
drop table if exists libros;
create table libros(
codigo int unsigned auto_increment,
titulo varchar(40) not null,
autor varchar(30),
editorial varchar(15),
precio decimal(5,2) unsigned,
primary key(codigo)
);

insert into libros (titulo,autor,editorial,precio)


values('El aleph','Borges','Planeta',15.50);
insert into libros (titulo,autor,editorial,precio)
values('Martin Fierro','Jose Hernandez','Emece',22.90);
insert into libros (titulo,autor,editorial,precio)
values('Antologia poetica','J.L. Borges','Planeta',39);
insert into libros (titulo,autor,editorial,precio)
values('Aprenda PHP','Mario Molina','Emece',19.50);
insert into libros (titulo,autor,editorial,precio)
values('Cervantes y el quijote','Bioy Casare- J.L. Borges','Paidos',35.40);
insert into libros (titulo,autor,editorial,precio)
values('Manual de PHP', 'J.C. Paez', 'Paidos',19);
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',36.00);
select titulo from libros
where titulo regexp 'Ma';
select titulo,autor from libros
where autor regexp '[hkw]';
select titulo,autor from libros
where autor not regexp '[hkw]';
select autor from libros
where autor regexp '[a-d]';
select titulo from libros
where titulo regexp '^A';
select titulo from libros
where titulo regexp 'HP$';
select titulo from libros
where titulo regexp 'a.e';
select titulo from libros
where titulo regexp 'a..e';
select autor from libros
where autor regexp '^......$';
select autor from libros
where autor regexp '......';
select titulo from libros
where titulo regexp 'a.*a';
drop table if exists libros;
create table libros(
codigo int unsigned auto_increment,
titulo varchar(40) not null,
autor varchar(30),
editorial varchar(15),
precio decimal(5,2) unsigned,
primary key(codigo)
);
insert into libros (titulo,autor,editorial,precio)
values('El aleph','Borges','Planeta',15.50);
insert into libros (titulo,autor,editorial,precio)
values('Martin Fierro','Jose Hernandez','Emece',22.90);
insert into libros (titulo,autor,editorial,precio)
values('Antologia poetica','J.L. Borges','Planeta',39);
insert into libros (titulo,autor,editorial,precio)
values('Aprenda PHP','Mario Molina','Emece',19.50);
insert into libros (titulo,autor,editorial,precio)
values('Cervantes y el quijote','Bioy Casare- J.L. Borges','Paidos',35.40);
insert into libros (titulo,autor,editorial,precio)
values('Manual de PHP', 'J.C. Paez', 'Paidos',19);
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',36.00);
select titulo from libros
where titulo regexp 'Ma';
Titulo
Martin Fierro
Manual de PHP
Harry Potter y la camara
secreta
Alicia en el pais de las
maravillas

select titulo,autor from libros


where autor regexp '[hkw]';

Titulo

autor

Martin Fierro

Jose
Hernandez

Harry Potter y la piedra


filosofal

J.K. Rowling

Harry Potter y la camara


secreta

J.K. Rowling

Alicia en el pais de las


maravillas
titulo
autor
El aleph

Lewis Carroll

select titulo,autor from libros


where autor not regexp '[hkw]';

Borges

Antologia poetica J.L. Borges


Aprenda PHP

Mario Molina

Cervantes y el
quijote

Bioy Casare- J.L.


Borges

Manual de PHP

J.C. Paez

where autor regexp '[a-d]';

select autor from libros

autor
Borges
Jose Hernandez
J.L. Borges
Mario Molina
Bioy Casare- J.L.
Borges
J.C. Paez
Lewis Carroll

select titulo from libros


where titulo regexp '^A';

titulo
Antologia poetica
Aprenda PHP
Alicia en el pais de las
maravillas

titulo
Aprenda
PHP
Manual de
PHP

select titulo from libros


where titulo regexp 'HP$';

select titulo from libros


where titulo regexp 'a.e';
titulo
El aleph
Alicia en el pais de las
maravillas
where titulo regexp 'a..e';

select titulo from libros

titulo
Aprenda PHP
Cervantes y el quijote
Harry Potter y la camara
secreta
select autor from libros
where autor regexp '^......$';
autor
Borges
select autor from libros
where autor regexp '......';
autor
Borges
Jose Hernandez
J.L. Borges
Mario Molina
Bioy Casare- J.L.
Borges
J.C. Paez
J.K. Rowling
J.K. Rowling
Lewis Carroll

select titulo from libros


where titulo regexp 'a.*a';

titulo
Antologia poetica
Aprenda PHP
Manual de PHP
Harry Potter y la piedra
filosofal
Harry Potter y la camara
secreta

Secuencia de comandos SQL ejecutados correctamente.

Alicia en el pais de las


maravillas

Problema:

Trabaje con la tabla "agenda" que registra la informacin referente a sus amigos.
1- Elimine la tabla si existe.
2- Cree una tabla llamada "agenda" con la estructura necesaria para almacenar la siguiente informacin:
-apellido
-nombre

-domicilio
-telefono
-mail
3- Ingrese los siguientes registros:
Perez
Juan
Sarmiento 345
Garcia Ana
Urquiza 367
Lopez
Juan
Avellaneda 900
Juarez
Mariana Sucre 123
Molinari Lucia
Peru 1254
Ferreyra Patricia Colon 1534
Perez
Susana San Martin 333
Perez
Luis
Urquiza 444
Lopez
Maria
Salta 314

4334455
4226677
null

juancito@gmail.com
anamariagarcia@hotmail.com
juancitoLopez@gmail.com
0525657687
marianaJuarez2@gmail.com
4590987
molinarilucia@hotmail.com
4585858
null
null
null
0354545256
perezluisalberto@hotmail.com
null
lopezmariayo@gmail.com

4- Busque todos los mails que contengan la cadena "gmail":


5- Busque los nombres que no tienen "z" ni "g":
6- Busque los apellidos que tienen por lo menos una de las letras de la "v" hasta la "z" (v,w,x,y,z):
7- Seleccione los apellidos que terminen en "ez":
8- Seleccione los apellidos, nombres y domicilios de los amigos cuyos apellidos contengan 2 letras "i":
select apellido,nombre,domicilio from agenda
9- Seleccione los telfonos que tengan 7 caracteres exactamente:
10- Seleccione el nombre y mail de todos los amigos cuyos mails tengan al menos 20 caracteres:

33 - Contar registros (count)


Existen en MySQL funciones que nos permiten contar registros, calcular sumas, promedios, obtener
valores mximos y mnimos. Veamos algunas de ellas.
Imaginemos que nuestra tabla "libros" contiene muchos registros. Para averiguar la cantidad sin necesidad
de contarlos manualmente usamos la funcin "count()":
select count(*) from libros;
La funcin "count()" cuenta la cantidad de registros de una tabla, incluyendo los que tienen valor nulo.
Para saber la cantidad de libros de la editorial "Planeta" tipeamos:
select count(*) from libros
where editorial='Planeta';
Tambin podemos utilizar esta funcin junto con la clausula "where" para una consulta ms especfica. Por
ejemplo, solicitamos la cantidad de libros que contienen la cadena "Borges":
select count(*) from libros
where autor like '%Borges%';
Para contar los registros que tienen precio (sin tener en cuenta los que tienen valor nulo), usamos la
funcin "count()" y en los parntesis colocamos el nombre del campo que necesitamos contar:
select count(precio) from libros;
Note que "count(*)" retorna la cantidad de registros de una tabla (incluyendo los que tienen valor "null")
mientras que "count(precio)" retorna la cantidad de registros en los cuales el campo "precio" no es nulo.
No es lo mismo. "count(*)" cuenta registros, si en lugar de un asterisco colocamos como argumento el
nombre de un campo, se contabilizan los registros cuyo valor en ese campo no es nulo.
Tenga en cuenta que no debe haber espacio entre el nombre de la funcin y el parntesis, porque puede
confundirse con una referencia a una tabla o campo. Las siguientes sentencias son distintas:
select count(*) from libros;
select count (*) from libros;
La primera es correcta, la segunda incorrecta.
Problema:
Trabajamos con la tabla "libros" de una librera.
Eliminamos la tabla, si existe:
drop table if exists libros;
Creamos la tabla:
create table libros(
codigo int unsigned auto_increment,
titulo varchar(40) not null,
autor varchar(30),
editorial varchar(15),
precio decimal(5,2) unsigned,
cantidad mediumint unsigned,
primary key(codigo)
);
Ingresamos algunos registros:
insert into libros (titulo,autor,editorial,precio,cantidad)
values('El aleph','Borges','Planeta',15,100);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Martin Fierro','Jose Hernandez','Emece',22.20,200);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Antologia poetica','J.L. Borges','Planeta',40,150);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Aprenda PHP','Mario Molina','Emece',18.20,200);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Cervantes y el quijote','Bioy Casares- J.L. Borges','Paidos',36.40,100);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Manual de PHP', 'J.C. Paez', 'Paidos',30.80,120);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Harry Potter y la piedra filosofal','J.K. Rowling','Paidos',45.00,50);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Harry Potter y la camara secreta','J.K. Rowling','Paidos',46.00,100);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Alicia en el pais de las maravillas','Lewis Carroll','Paidos',null,200);
Para averiguar la cantidad de registros de la tabla "libros" usamos la funcin "count(*)":
select count(*) from libros;
Retorna 9.

Para saber la cantidad de libros de la editorial "Planeta" tipeamos:


select count(*) from libros
where editorial='Planeta';
Para averiguar la cantidad de libros que contienen la cadena "Borges" tipeamos:
select count(*) from libros where autor like '%Borges%';
Nos retorna 3.
Para obtener la cantidad de libros cuyo precio no tiene valor nulo usamos la funcin "count()" y dentro del
parntesis colocamos el nombre del campo correspondiente:
select count(precio) from libros;
Retorna 8, ya que uno de los libros tiene precio nulo y no se contabiliz.
drop table if exists libros;
create table libros(
codigo int unsigned auto_increment,
titulo varchar(40) not null,
autor varchar(30),
editorial varchar(15),
precio decimal(5,2) unsigned,
cantidad mediumint unsigned,
primary key(codigo)
);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('El aleph','Borges','Planeta',15,100);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Martin Fierro','Jose Hernandez','Emece',22.20,200);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Antologia poetica','J.L. Borges','Planeta',40,150);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Aprenda PHP','Mario Molina','Emece',18.20,200);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Cervantes y el quijote','Bioy Casares- J.L. Borges','Paidos',36.40,100);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Manual de PHP', 'J.C. Paez', 'Paidos',30.80,120);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Harry Potter y la piedra filosofal','J.K. Rowling','Paidos',45.00,50);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Harry Potter y la camara secreta','J.K. Rowling','Paidos',46.00,100);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Alicia en el pais de las maravillas','Lewis Carroll','Paidos',null,200);
select count(*) from libros;
select count(*) from libros
where editorial='Planeta';
select count(*) from libros where autor like '%Borges%';
select count(precio) from libros;

drop table if exists libros;


create table libros(
codigo int unsigned auto_increment,
titulo varchar(40) not null,
autor varchar(30),
editorial varchar(15),
precio decimal(5,2) unsigned,
cantidad mediumint unsigned,
primary key(codigo)
);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('El aleph','Borges','Planeta',15,100);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Martin Fierro','Jose Hernandez','Emece',22.20,200);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Antologia poetica','J.L. Borges','Planeta',40,150);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Aprenda PHP','Mario Molina','Emece',18.20,200);
insert into libros (titulo,autor,editorial,precio,cantidad)

values('Cervantes y el quijote','Bioy Casares- J.L. Borges','Paidos',36.40,100);


insert into libros (titulo,autor,editorial,precio,cantidad)
values('Manual de PHP', 'J.C. Paez', 'Paidos',30.80,120);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Harry Potter y la piedra filosofal','J.K. Rowling','Paidos',45.00,50);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Harry Potter y la camara secreta','J.K. Rowling','Paidos',46.00,100);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Alicia en el pais de las maravillas','Lewis Carroll','Paidos',null,200);
select count(*) from libros;
count(
*)
9

select count(*) from libros


where editorial='Planeta';

count(
*)
2

select count(*) from libros where autor like '%Borges%';

count(
*)
3

select count(precio) from libros;

count(prec
io)
8

Secuencia de comandos SQL ejecutados correctamente.

Problema:
Un comercio que tiene un stand en una feria registra en una tabla llamada "visitantes" algunos
datos de las personas que visitan o compran en su stand para luego enviarle publicidad de sus
productos.
1- Elimine la tabla "visitantes", si existe.
2- Cree una tabla llamada "visitantes" con la estructura necesaria para almacenar la siguiente
informacin:
-nombre
-edad
-sexo
-domicilio
-ciudad
-telefono
-monto de compra

3- Ingrese algunos registros:


Susana Molina
28
f
Marcela Mercado 36
f
Alberto Garcia
35
m
Teresa Garcia
33
f
Roberto Perez
45
m
Marina Torres
22
f
Julieta Gomez
24
f

Colon 123
Avellaneda 345
Gral. Paz 123
Gral. Paz 123
Urquiza 335
Colon 222
San Martin 333

Cordoba
null
Cordoba
4545454
0
Alta Gracia
03547123456
Alta Gracia
03547123456
Cordoba
4123456
33.20
Villa Dolores
03544112233
Alta Gracia
03547121212

45.50
25
0
25
53.50

Roxana Lopez
Liliana Garcia
Juan Torres

20
50
43

f
f
m

Triunvirato 345
Paso 999
Sarmiento 876

Alta Gracia
Cordoba
Cordoba

4588778
4988778

4- Solicite la cantidad de visitantes al stand


5- Solicite la cantidad de visitantes que tienen
6- Muestre la cantidad de visitantes de sexo masculino que acudieron al stand
7- Muestre la cantidad de mujeres mayores de 25 aos que acudieron al stand
8- Muestre la cantidad de visitantes que no son de "Cordoba"
9- Muestre la cantidad de visitantes que realizaron alguna compra
10- Muestre la cantidad de visitantes que no realizaron compras
Muestre los resultados de todos los ejercicios

null

48
15.30

34 - Funciones de agrupamiento (count - max - min - sum - avg)


Existen en MySQL funciones que nos permiten contar registros, calcular sumas, promedios, obtener
valores mximos y mnimos. Ya hemos aprendido "count()", veamos otras.
La funcin "sum()" retorna la suma de los valores que contiene el campo especificado. Por ejemplo,
queremos saber la cantidad de libros que tenemos disponibles para la venta:
select sum(cantidad) from libros;
Tambin podemos combinarla con "where". Por ejemplo, queremos saber cuntos libros tenemos de la
editorial "Planeta":
select sum(cantidad) from libros
where editorial ='Planeta';
Para averiguar el valor mximo o mnimo de un campo usamos las funciones "max()" y "min()"
respectivamente. Ejemplo, queremos saber cul es el mayor precio de todos los libros:
select max(precio) from libros;
Queremos saber cul es el valor mnimo de los libros de "Rowling":
select min(precio) from libros
where autor like '%Rowling%';
La funcin avg() retorna el valor promedio de los valores del campo especificado. Por ejemplo, queremos
saber el promedio del precio de los libros referentes a "PHP":
select avg(precio) from libros
where titulo like '%PHP%';
Estas funciones se denominan "funciones de agrupamiento" porque operan sobre conjuntos de registros,
no con datos individuales.
Tenga en cuenta que no debe haber espacio entre el nombre de la funcin y el parntesis, porque puede
confundirse con una referencia a una tabla o campo. Las siguientes sentencias son distintas:
select count(*) from libros;
select count (*) from libros;
La primera es correcta, la segunda incorrecta.
Problema:
Trabajamos con la tabla "libros" que registra la informacin de los libros que vende una librera.
Eliminamos la tabla, si existe:
drop table if exists libros;
Creamos la tabla:
create table libros(
codigo int unsigned auto_increment,
titulo varchar(40) not null,
autor varchar(30),
editorial varchar(15),
precio decimal(5,2) unsigned,
cantidad mediumint unsigned,
primary key(codigo)
);
Ingresamos algunos registros:
insert into libros (titulo,autor,editorial,precio,cantidad)
values('El aleph','Borges','Planeta',15,100);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Martin Fierro','Jose Hernandez','Emece',22.20,200);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Antologia poetica','J.L. Borges','Planeta',40,150);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Aprenda PHP','Mario Molina','Emece',18.20,200);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Cervantes y el quijote','Bioy Casares- J.L. Borges','Paidos',36.40,100);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Manual de PHP', 'J.C. Paez', 'Paidos',30.80,120);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Harry Potter y la piedra filosofal','J.K. Rowling','Paidos',45.00,50);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Harry Potter y la camara secreta','J.K. Rowling','Paidos',46.00,100);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Alicia en el pais de las maravillas','Lewis Carroll','Paidos',null,200);
Para conocer la suma de las cantidades de libros que tenemos disponibles tipeamos:
select sum(cantidad) from libros;

Retorna 1220; verifique la suma, sumando los valores de todos los registros del campo "cantidad".
Solicitamos la suma de las cantidades de los libros de la editorial "Planeta":
select sum(cantidad) from libros
where editorial ='Planeta';
Retorna 250; verifique el total sumando las cantidades de los libros cuya editorial sea "Planeta".
Si queremos saber cul es el mayor precio de los libros usamos:
select max(precio) from libros;
Devuelve 46.
Verifiquemos lo anterior realizando una consulta ordenada por precio de forma descendente:
select * from libros
order by precio desc;
Para obtener el valor mnimo de los libros de "Rowling" utilizamos la siguiente sentencia:
select min(precio) from libros
where autor like '%Rowling%';
Retorna 45.
Verifiquemos el resultado realizando una consulta "select" con la condicin anterior ordenada por precio:
select * from libros
where autor like '%Rowling%'
order by 5;
Solicitamos el promedio del precio de los libros que tratan sobre "PHP":
select avg(precio) from libros
where titulo like '%PHP%';
Retorna 24.50...
Verifiquemos el resultado seleccionado los libros de "PHP" y calculando el promedio manualmente:
select * from libros
where titulo like '%PHP%';
Recuerde que no debe haber espacio entre el nombre de la funcin y el parntesis. Pruebe las siguientes
sentencias:
select count(*) from libros;
select count (*) from libros;
La segunda no se ejecuta, aparece un mensaje de error.
drop table if exists libros;
create table libros(
codigo int unsigned auto_increment,
titulo varchar(40) not null,
autor varchar(30),
editorial varchar(15),
precio decimal(5,2) unsigned,
cantidad mediumint unsigned,
primary key(codigo)
);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('El aleph','Borges','Planeta',15,100);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Martin Fierro','Jose Hernandez','Emece',22.20,200);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Antologia poetica','J.L. Borges','Planeta',40,150);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Aprenda PHP','Mario Molina','Emece',18.20,200);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Cervantes y el quijote','Bioy Casares- J.L. Borges','Paidos',36.40,100);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Manual de PHP', 'J.C. Paez', 'Paidos',30.80,120);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Harry Potter y la piedra filosofal','J.K. Rowling','Paidos',45.00,50);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Harry Potter y la camara secreta','J.K. Rowling','Paidos',46.00,100);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Alicia en el pais de las maravillas','Lewis Carroll','Paidos',null,200);
select sum(cantidad) from libros;

select sum(cantidad) from libros


where editorial ='Planeta';
select max(precio) from libros;
select * from libros
order by precio desc;
select min(precio) from libros
where autor like '%Rowling%';
select * from libros
where autor like '%Rowling%'
order by 5;
select avg(precio) from libros
where titulo like '%PHP%';
select * from libros
where titulo like '%PHP%';
select count(*) from libros;
select count (*) from libros;
drop table if exists libros;
create table libros(
codigo int unsigned auto_increment,
titulo varchar(40) not null,
autor varchar(30),
editorial varchar(15),
precio decimal(5,2) unsigned,
cantidad mediumint unsigned,
primary key(codigo)
);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('El aleph','Borges','Planeta',15,100);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Martin Fierro','Jose Hernandez','Emece',22.20,200);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Antologia poetica','J.L. Borges','Planeta',40,150);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Aprenda PHP','Mario Molina','Emece',18.20,200);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Cervantes y el quijote','Bioy Casares- J.L. Borges','Paidos',36.40,100);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Manual de PHP', 'J.C. Paez', 'Paidos',30.80,120);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Harry Potter y la piedra filosofal','J.K. Rowling','Paidos',45.00,50);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Harry Potter y la camara secreta','J.K. Rowling','Paidos',46.00,100);
insert into libros (titulo,autor,editorial,precio,cantidad)
values('Alicia en el pais de las maravillas','Lewis Carroll','Paidos',null,200);
select sum(cantidad) from libros;

sum(cantid
ad)
1220

select sum(cantidad) from libros


where editorial ='Planeta';

sum(cantid
ad)
250

select max(precio) from libros;


max(prec
io)
46.00
select * from libros
order by precio desc;
codi
titulo
go

autor

editori preci cantid


al
o
ad

Harry Potter y la camara


secreta

J.K. Rowling

Paidos

46.0
100
0

Harry Potter y la piedra


filosofal

J.K. Rowling

Paidos

45.0
50
0

Antologia poetica

J.L. Borges

Planet 40.0
150
a
0

Cervantes y el quijote

Bioy Casares- J.L.


Borges

Paidos

36.4
100
0

Manual de PHP

J.C. Paez

Paidos

30.8
120
0

Jose Hernandez

22.2
Emece
200
0

min(preci
4
Aprenda PHP
o)

Mario Molina

Emece

45.00
1
El aleph

Borges

Planet 15.0
100
a
0

Lewis Carroll

Paidos

Martin Fierro

Alicia en el pais de las


maravillas

codi
titulo
go

18.2
200
0

autor

editori preci cantid


al
o
ad

Harry Potter y la piedra


filosofal

J.K.
Rowling

Paidos

45.0
50
0

Harry Potter y la camara J.K.


secreta
Rowling

Paidos

46.0
100
0

select min(precio) from libros


where autor like '%Rowling%';

200

select * from libros


where autor like '%Rowling%'
order by 5;

select avg(precio) from libros


where titulo like '%PHP%';

avg(prec
io)
24.5000
00

select * from libros


where titulo like '%PHP%';

codi
titulo
go
4
6

Aprenda
PHP

Manual de
PHP
count(
*)
9

autor

editori preci cantid


al
o
ad

Mario
Molina

Emece

18.2
200
0

J.C. Paez

Paidos

30.8
120
0

select count(*) from libros;

select count (*) from libros;

Problemas en el select:You have an error in your SQL syntax; check the manual that corresponds to your
MySQL server version for the right syntax to use near '*) from libros' at line 1

Problema:
Un comercio que tiene un stand en una feria registra en una tabla llamada "visitantes" algunos
datos de las personas que visitan o compran en su stand para luego enviarle publicidad de sus
productos.
1- Elimine la tabla "visitantes", si existe.
2-Cree una tabla llamada "visitantes" con la estructura necesaria para almacenar la siguiente informacin:
-nombre
-edad
-sexo
-domicilio
-ciudad
-telefono
-monto de compra
Note que no tiene clave primaria, no la necesita.
3- Ingrese algunos registros:
Susana Molina
28
f
Marcela Mercado 36
f
Alberto Garcia
35
m
Teresa Garcia
33
f
Roberto Perez
45
m
Marina Torres
22
f
Julieta Gomez
24
f
Roxana Lopez
20
f
Liliana Garcia
50
f
Juan Torres
43
m

Colon 123
Avellaneda 345
Gral. Paz 123
Gral. Paz 123
Urquiza 335
Colon 222
San Martin 333
Triunvirato 345
Paso 999
Sarmiento 876

Cordoba
null
Cordoba
4545454
0
Alta Gracia
03547123456
Alta Gracia
03547123456
Cordoba
4123456
33.20
Villa Dolores
03544112233
Alta Gracia
03547121212
Alta Gracia
null
Cordoba
4588778
48
Cordoba
4988778
15.30

4- Solicite la cantidad de visitantes al stand


5- Muestre la suma de la compra de todos los visitantes de "Alta Gracia"
6- Muestre el valor mximo de las compras efectuadas
7- Muestre la edad menor de los visitantes
8- Muestre el promedio de edades de los visitantes
9- Muestre el promedio del monto de compra

45.50
25
0
25
53.50
0

35 - Agrupar registros (group by)


Hemos aprendido que las funciones de agrupamiento permiten contar registros, calcular sumas y
promedios, obtener valores mximos y mnimos. Tambin dijimos que dichas funciones operan sobre
conjuntos de registros, no con datos individuales.
Generalmente esta funciones se combinan con la sentencia "group by", que agrupa registros para
consultas detalladas.
Queremos saber la cantidad de visitantes de cada ciudad, podemos tipear la siguiente sentencia:
select count(*) from visitantes
where ciudad='Cordoba';
y repetirla con cada valor de "ciudad":
select count(*) from visitantes
where ciudad='Alta Gracia';
select count(*) from visitantes
where ciudad='Villa Dolores';
...
Pero hay otra manera, utilizando la clusula "group by":
select ciudad, count(*)
from visitantes
group by ciudad;
Entonces, para saber la cantidad de visitantes que tenemos en cada ciudad utilizamos la funcin "count()",
agregamos "group by" y el campo por el que deseamos que se realice el agrupamiento, tambin
colocamos el nombre del campo a recuperar.
La instruccin anterior solicita que muestre el nombre de la ciudad y cuente la cantidad agrupando los
registros por el campo "ciudad". Como resultado aparecen los nombres de las ciudades y la cantidad de
registros para cada valor del campo.
Para obtener la cantidad visitantes con telfono no nulo, de cada ciudad utilizamos la funcin "count()"
envindole como argumento el campo "telefono", agregamos "group by" y el campo por el que deseamos
que se realice el agrupamiento (ciudad):
select ciudad, count(telefono)
from visitantes
group by ciudad;
Como resultado aparecen los nombres de las ciudades y la cantidad de registros de cada una, sin contar
los que tienen telfono nulo. Recuerde la diferencia de los valores que retorna la funcin "count()" cuando
enviamos como argumento un asterisco o el nombre de un campo: en el primer caso cuenta todos los
registros incluyendo los que tienen valor nulo, en el segundo, los registros en los cuales el campo
especificado es no nulo.
Para conocer el total de las compras agrupadas por sexo:
select sexo, sum(montocompra)
from visitantes
group by sexo;
Para saber el mximo y mnimo valor de compra agrupados por sexo:
select sexo, max(montocompra) from visitantes
group by sexo;
select sexo, min(montocompra) from visitantes
group by sexo;
Se pueden simplificar las 2 sentencias anteriores en una sola sentencia, ya que usan el mismo "group by":
select sexo, max(montocompra),
min(montocompra)
from visitantes
group by sexo;
Para calcular el promedio del valor de compra agrupados por ciudad:
select ciudad, avg(montocompra) from visitantes
group by ciudad;
Podemos agrupar por ms de un campo, por ejemplo, vamos a hacerlo por "ciudad" y "sexo":
select ciudad, sexo, count(*) from visitantes
group by ciudad,sexo;
Tambin es posible limitar la consulta con "where".
Vamos a contar y agrupar por ciudad sin tener en cuenta "Cordoba":
select ciudad, count(*) from visitantes
where ciudad<>'Cordoba'
group by ciudad;
Podemos usar las palabras claves "asc" y "desc" para una salida ordenada:
select ciudad, count(*) from visitantes
group by ciudad desc;

Problema:
Un comercio que tiene un stand en una feria registra en una tabla llamada "visitantes" algunos datos de
las personas que visitan o compran en su stand para luego enviarle publicidad de sus productos.
Eliminamos la tabla, si existe:
drop table if exists visitantes;
Creamos la tabla:
create table visitantes(
nombre varchar(30),
edad tinyint unsigned,
sexo char(1),
domicilio varchar(30),
ciudad varchar(20),
telefono varchar(11),
montocompra decimal (6,2) unsigned
);
Ingresamos algunos registros:
insert into visitantes (nombre,edad, sexo,domicilio,ciudad,telefono,montocompra)
values ('Susana Molina', 28,'f','Colon 123','Cordoba',null,45.50);
insert into visitantes (nombre,edad, sexo,domicilio,ciudad,telefono,montocompra)
values ('Marcela Mercado',36,'f','Avellaneda 345','Cordoba','4545454',0);
insert into visitantes (nombre,edad, sexo,domicilio,ciudad,telefono,montocompra)
values ('Alberto Garcia',35,'m','Gral. Paz 123','Alta Gracia','03547123456',25);
insert into visitantes (nombre,edad, sexo,domicilio,ciudad,telefono,montocompra)
values ('Teresa Garcia',33,'f','Gral. Paz 123','Alta Gracia','03547123456',0);
insert into visitantes (nombre,edad, sexo,domicilio,ciudad,telefono,montocompra)
values ('Roberto Perez',45,'m','Urquiza 335','Cordoba','4123456',33.20);
insert into visitantes (nombre,edad, sexo,domicilio,ciudad,telefono,montocompra)
values ('Marina Torres',22,'f','Colon 222','Villa Dolores','03544112233',25);
insert into visitantes (nombre,edad, sexo,domicilio,ciudad,telefono,montocompra)
values ('Julieta Gomez',24,'f','San Martin 333','Alta Gracia','03547121212',53.50);
insert into visitantes (nombre,edad, sexo,domicilio,ciudad,telefono,montocompra)
values ('Roxana Lopez',20,'f','Triunvirato 345','Alta Gracia',null,0);
insert into visitantes (nombre,edad, sexo,domicilio,ciudad,telefono,montocompra)
values ('Liliana Garcia',50,'f','Paso 999','Cordoba','4588778',48);
insert into visitantes (nombre,edad, sexo,domicilio,ciudad,telefono,montocompra)
values ('Juan Torres',43,'m','Sarmiento 876','Cordoba','4988778',15.30);
Para saber la cantidad de visitantes que tenemos de cada ciudad tipeamos:
select ciudad, count(*)
from visitantes
group by ciudad;
El resultado muestra los nombres de las distintas ciudades y la cantidad de registros de cada una.
Necesitamos conocer la cantidad visitantes con telfono no nulo, de cada ciudad:
select ciudad, count(telefono)
from visitantes
group by ciudad;
Queremos conocer el total de las compras agrupadas por sexo:
select sexo, sum(montocompra) from visitantes
group by sexo;
Para obtener el mximo y mnimo valor de compra agrupados por sexo:
select sexo, max(montocompra) from visitantes
group by sexo;
select sexo, min(montocompra) from visitantes
group by sexo;
Se pueden simplificar las 2 sentencias anteriores en una sola sentencia, ya que usan el mismo "group by":
select sexo, max(montocompra),
min(montocompra)
from visitantes
group by sexo;
Queremos saber el promedio del valor de compra agrupados por ciudad:
select ciudad, avg(montocompra) from visitantes
group by ciudad;

Contamos los registros y agrupamos por 2 campos, "ciudad" y "sexo":


select ciudad, sexo, count(*) from visitantes
group by ciudad,sexo;
Limitamos la consulta, no incluimos los visitantes de "Cordoba", contamos y agrupar por ciudad:
select ciudad, count(*) from visitantes
where ciudad<>'Cordoba'
group by ciudad;
Usando la palabra clave "desc" obtenemos la salida ordenada en forma descendente:
select ciudad, count(*) from visitantes
group by ciudad desc;
drop table if exists visitantes;
create table visitantes(
nombre varchar(30),
edad tinyint unsigned,
sexo char(1),
domicilio varchar(30),
ciudad varchar(20),
telefono varchar(11),
montocompra decimal (6,2) unsigned
);
insert into visitantes (nombre,edad, sexo,domicilio,ciudad,telefono,montocompra)
values ('Susana Molina', 28,'f','Colon 123','Cordoba',null,45.50);
insert into visitantes (nombre,edad, sexo,domicilio,ciudad,telefono,montocompra)
values ('Marcela Mercado',36,'f','Avellaneda 345','Cordoba','4545454',0);
insert into visitantes (nombre,edad, sexo,domicilio,ciudad,telefono,montocompra)
values ('Alberto Garcia',35,'m','Gral. Paz 123','Alta Gracia','03547123456',25);
insert into visitantes (nombre,edad, sexo,domicilio,ciudad,telefono,montocompra)
values ('Teresa Garcia',33,'f','Gral. Paz 123','Alta Gracia','03547123456',0);
insert into visitantes (nombre,edad, sexo,domicilio,ciudad,telefono,montocompra)
values ('Roberto Perez',45,'m','Urquiza 335','Cordoba','4123456',33.20);
insert into visitantes (nombre,edad, sexo,domicilio,ciudad,telefono,montocompra)
values ('Marina Torres',22,'f','Colon 222','Villa Dolores','03544112233',25);
insert into visitantes (nombre,edad, sexo,domicilio,ciudad,telefono,montocompra)
values ('Julieta Gomez',24,'f','San Martin 333','Alta Gracia','03547121212',53.50);
insert into visitantes (nombre,edad, sexo,domicilio,ciudad,telefono,montocompra)
values ('Roxana Lopez',20,'f','Triunvirato 345','Alta Gracia',null,0);
insert into visitantes (nombre,edad, sexo,domicilio,ciudad,telefono,montocompra)
values ('Liliana Garcia',50,'f','Paso 999','Cordoba','4588778',48);
insert into visitantes (nombre,edad, sexo,domicilio,ciudad,telefono,montocompra)
values ('Juan Torres',43,'m','Sarmiento 876','Cordoba','4988778',15.30);
select ciudad, count(*)
from visitantes
group by ciudad;
select ciudad, count(telefono)
from visitantes
group by ciudad;
select sexo, sum(montocompra) from visitantes
group by sexo;
select sexo, max(montocompra) from visitantes
group by sexo;
select sexo, min(montocompra) from visitantes
group by sexo;
select sexo, max(montocompra),
min(montocompra)
from visitantes
group by sexo;

select ciudad, avg(montocompra) from visitantes


group by ciudad;
select ciudad, sexo, count(*) from visitantes
group by ciudad,sexo;
select ciudad, count(*) from visitantes
where ciudad<>'Cordoba'
group by ciudad;
select ciudad, count(*) from visitantes
group by ciudad desc;

drop table if exists visitantes;


create table visitantes(
nombre varchar(30),
edad tinyint unsigned,
sexo char(1),
domicilio varchar(30),
ciudad varchar(20),
telefono varchar(11),
montocompra decimal (6,2) unsigned
);
insert into visitantes (nombre,edad, sexo,domicilio,ciudad,telefono,montocompra)
values ('Susana Molina', 28,'f','Colon 123','Cordoba',null,45.50);
insert into visitantes (nombre,edad, sexo,domicilio,ciudad,telefono,montocompra)
values ('Marcela Mercado',36,'f','Avellaneda 345','Cordoba','4545454',0);
insert into visitantes (nombre,edad, sexo,domicilio,ciudad,telefono,montocompra)
values ('Alberto Garcia',35,'m','Gral. Paz 123','Alta Gracia','03547123456',25);
insert into visitantes (nombre,edad, sexo,domicilio,ciudad,telefono,montocompra)
values ('Teresa Garcia',33,'f','Gral. Paz 123','Alta Gracia','03547123456',0);
insert into visitantes (nombre,edad, sexo,domicilio,ciudad,telefono,montocompra)
values ('Roberto Perez',45,'m','Urquiza 335','Cordoba','4123456',33.20);
insert into visitantes (nombre,edad, sexo,domicilio,ciudad,telefono,montocompra)
values ('Marina Torres',22,'f','Colon 222','Villa Dolores','03544112233',25);
insert into visitantes (nombre,edad, sexo,domicilio,ciudad,telefono,montocompra)
values ('Julieta Gomez',24,'f','San Martin 333','Alta Gracia','03547121212',53.50);
insert into visitantes (nombre,edad, sexo,domicilio,ciudad,telefono,montocompra)
values ('Roxana Lopez',20,'f','Triunvirato 345','Alta Gracia',null,0);
insert into visitantes (nombre,edad, sexo,domicilio,ciudad,telefono,montocompra)
values ('Liliana Garcia',50,'f','Paso 999','Cordoba','4588778',48);
insert into visitantes (nombre,edad, sexo,domicilio,ciudad,telefono,montocompra)
values ('Juan Torres',43,'m','Sarmiento 876','Cordoba','4988778',15.30);
select ciudad, count(*)
from visitantes
group by ciudad;
ciudad

count(
*)

Alta
Gracia

Cordoba

Villa
Dolores

ciudad

count(telefo
no)

Alta
Gracia

Cordoba

Villa
Dolores

select ciudad, count(telefono)


from visitantes
group by ciudad;

select sexo, sum(montocompra) from visitantes


group by sexo;
sex sum(montocom
o pra)
f

172.00

73.50

select sexo, max(montocompra) from visitantes

group by sexo;
sex max(montocom
o pra)
f

53.50

33.20

select sexo, min(montocompra) from visitantes

group by sexo;
sex min(montocom
o pra)
f

0.00

15.30

min(montocompra)
from visitantes
group by sexo;

select sexo, max(montocompra),

sex max(montocom min(montocom


o pra)
pra)
f

53.50

0.00

m 33.20
15.30
ciudad
avg(montocom
pra)
Alta
Gracia

19.625000

Cordoba

28.400000

Villa
Dolores

25.000000

select ciudad, avg(montocompra) from visitantes


group by ciudad;

select ciudad, sexo, count(*) from visitantes


group by ciudad,sexo;

ciudad

sex count(
o *)

Alta
Gracia

Alta
Gracia

Cordoba

Cordoba

Villa
Dolores

group by ciudad;
ciudad

count(
*)

Alta
Gracia

Villa
Dolores

select ciudad, count(*) from visitantes


where ciudad<>'Cordoba'

select ciudad, count(*) from visitantes


group by ciudad desc;
ciudad

count(
*)

Villa
Dolores

Cordoba

Secuencia de comandos SQL ejecutados correctamente.

Alta
Gracia

Problema:

Una empresa tiene registrados sus clientes en una tabla llamada "clientes".
1- Elimine la tabla "clientes", si existe.
2- Cree una tabla llamada "clientes" con la estructura necesaria para almacenar la siguiente informacin:
- codigo
- nombre
- domicilio
- ciudad
- provincia
- telfono
Llave principal codigo
3- Ingrese algunos registros:
Lopez Marcos
Colon 111
Crdoba
Cordoba null
Perez Ana
San Martin 222
Cruz del Eje
Cordoba 4578585
Garcia Juan
Rivadavia 333
Villa Maria
Cordoba 4578445
Perez Luis
Sarmiento 444
Rosario
Santa Fe null
Pereyra Lucas
San Martin 555
Cruz del Eje
Cordoba 4253685
Gomez Ines
San Martin 666
Santa Fe
Santa Fe 0345252525
Torres Fabiola
Alem 777
Villa del Rosario Cordoba 4554455
Lopez Carlos
Irigoyen 888
Cruz del Eje
Cordoba null
Ramos Betina
San Martin 999
Cordoba
Cordoba 4223366
Lopez Lucas
San Martin 1010 Posadas
Misiones 0457858745
4- Obtenga el total de los registros
5- Obtenga el total de los registros que no tienen valor nulo en los telfonos
6- Obtenga la cantidad de clientes agrupados por ciudad y provincia, ordenados por provincia:

Potrebbero piacerti anche