Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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".
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
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
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:
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:
duracin
120
90
180
3
cantidad
3
2
select
select
select
select
* from libros;
titulo,autor,editorial from libros;
titulo,precio from libros;
editorial,cantidad from libros;
autor
El aleph
Borges
Alicia en el pais
de
Lewis
Carroll
Planet
25
a
Matematica
estas ahi
Paenza
Planet
15.8 200
a
200
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
Emece 100
Planet
200
a
Planet
200
a
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.
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
('Leonardo','payaso');
('MarioPerez','Marito');
('Marcelo','bocajunior');
('Gustavo','bocajunior');
clave
Leonardo payaso
MarioPer
Marito
ez
Marcelo
bocajuni
or
Leonar paya
do
so
nombr
clave
e
Marcel bocajuni
o
or
autor
editori preci
al
o
El aleph
Borges
Planet
12.5
a
Martin
Fierro
Jose
Hernandez
Emece 16
Aprenda
PHP
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);
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
titulo
autor
editori preci
al
o
El aleph
Borges
Planet
12.5
a
Martin
Fierro
Jose
Hernandez
Emece 16
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
500
10
50
50
30
clave
MarioPer Marit
ez
o
Marcelo River
Gustavo River
nombre
clave
MarioPer Marit
ez
o
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
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
GustavoGar RealMadr
cia
id
Problema:
Trabaje con la tabla "agenda" que almacena los datos de sus amigos.
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');
clave)
clave)
clave)
clave)
clave)
values
values
values
values
values
('Leonardo','payaso');
('MarioPerez','Marito');
('Marcelo','River');
('Gustavo','River');
('Gustavo','Boca');
Type
Nu Ke Defau Extr
ll y lt
a
nomb varchar(
PR
NO
re
20)
I
varchar( YE
10)
S
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).
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.
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;
El
Borg Planet
aleph es
a
codi
titulo
go
2
Matematica
estas ahi
autor
Paen
Paidos 0
za
codi
titulo
go
4
codi
titulo
go
3
autor
Martin
Fierro
autor
Jose
Hernandez
editori preci
al
o
30
editori preci
al
o
22.5
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.
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
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.
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
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".
Field
Type
Nu Ke Defau
Extra
ll y lt
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
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.
El
Borg
aleph es
23.6
0
0
El
Borg
aleph es
Borg Planet
es
a
23.6
0
0
100
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
El
Borg
aleph es
23.6
0
0
Borg Planet
es
a
100
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
Planet 23.4
0
a
5
ahi','Paenza','Planeta','abc',20000000);
select * from libros;
codi
titulo
go
autor
Alicia en el pais
de
555
Matematica
estas ahi
Paen Planet
167772
0.00
za
a
15
autor
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
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
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
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
Emece
Desconocido
15.60
150
El aleph
Emece
Borges
1.11
200
Emece
Lewis Carroll
34.50
Planeta
Desconocido
1.11
100
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
autor
editorial precio
cantidad
Jose Hernandez
Planeta
34.50
00200
Mario Molina
Emece
45.70
00050
Borges
Paidos
23.00
00040
000003
titulo
Cervantes y el
quijote
(codigo,titulo,autor,editorial,precio,cantidad)
values('545','El aleph', 'Borges', 'Emece',33,20);
codigo
autor
editorial precio
cantidad
Jose
Hernandez
Planeta
34.50
00200
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
codigo
autor
editorial precio
cantidad
Jose
Hernandez
Planeta
34.50
00200
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
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;
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
45.00
500
22500.00
46.00
300
13800.00
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
45.00
4.500
40.500
46.00
4.600
41.400
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
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
titulo
insert(editorial,1,0,'e
dit. ')
El alehp
edit. Paidos
edit. Planeta
lower(titulo)
upper(editor
ial)
el alehp
PAIDOS
PLANETA
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;
titulo
ceiling(pre floor(preci
cio)
o)
El alehp
34
33
17
16
18
titulo
round(prec
io)
El alehp
33
16
select titulo,truncate(precio,1)
from libros;
titulo
truncate(preci
o,1)
El alehp
33.4
16.3
titulo
Manual de 1
grado
2345678
2006-08-10 2006-08-15
9
(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
Manual de 1 grado
2345678
2006-08-10 2006-08-15
9
2345678
2006-08-12 2006-08-17
9
El aleph
2254398
2006-08-15 2006-08-20
7
Manual de geografia 5
grado
(titulo,documento,fechaPrestamo,fechaDevolucion)
values ('Atlas universal','24000111',current_date,date_add(current_date, interval 5 day));
select * from prestamos;
titulo
Manual de 1 grado
2345678
2006-08-10 2006-08-15
9
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
Atlas universal
2400011
2013-09-10 2013-09-15
1
Problema:
Una empresa registra los datos de
sus empleados en una tabla
llamada "empleados".
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-
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.
select codigo,titulo,autor,editorial,precio
from libros
order by titulo asc, editorial desc;
autor
Aprenda PHP
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
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
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;
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
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)
El
Borg Planet 15.5
aleph es
a
0
editorial='Planeta';
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
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
Cervantes y el
quijote
Borg
35.4
Paidos
es
0
Matematica
estas ahi
Paen
19.0
Paidos
za
0
editori preci
al
o
codi
titulo
go
autor
El aleph
Matematica
estas ahi
Paen
19.0
Paidos
za
0
Problema:
35.4
0
editori preci
al
o
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
22.9
0
35.4
0
El aleph
Cervantes y el
quijote
Borg
35.4
Paidos
es
0
Matematica
estas ahi
Paen
19.0
Paidos
za
0
codi
titulo
go
autor
El aleph
22.9
0
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
19.5
0
autor
editori preci
al
o
Martin
Fierro
Jose
Hernandez
Emece
22.9
0
Martin
Fierro
Jose
Hernandez
Planet 39.0
a
0
Aprenda
PHP
19.5
0
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
El
Borg Planet 15.5
aleph es
a
0
codi
titulo
go
autor
editori preci
al
o
El aleph
Borges
Planet 15.5
a
0
Planet 39.0
a
0
Cervantes y el
quijote
Paidos
35.4
0
autor
editori preci
al
o
Antologia poetica
J.L. Borges
Planet 39.0
a
0
Aprenda PHP
Mario
Molina
Emece
Lewis
Carroll
36.0
Paidos
0
19.5
0
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
Paidos
35.4
0
Manual de PHP
J.C. Paez
Paidos
19.0
0
7
codi
go
8
9
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
J.K.
Rowling
Paidos
45.0
0
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
4.10
Titulo
autor
Martin Fierro
Jose
Hernandez
J.K. Rowling
J.K. Rowling
Lewis Carroll
Borges
Mario Molina
Cervantes y el
quijote
Manual de PHP
J.C. Paez
autor
Borges
Jose Hernandez
J.L. Borges
Mario Molina
Bioy Casare- J.L.
Borges
J.C. Paez
Lewis Carroll
titulo
Antologia poetica
Aprenda PHP
Alicia en el pais de las
maravillas
titulo
Aprenda
PHP
Manual de
PHP
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
titulo
Antologia poetica
Aprenda PHP
Manual de PHP
Harry Potter y la piedra
filosofal
Harry Potter y la camara
secreta
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
count(
*)
2
count(
*)
3
count(prec
io)
8
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
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
null
48
15.30
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;
sum(cantid
ad)
1220
sum(cantid
ad)
250
autor
J.K. Rowling
Paidos
46.0
100
0
J.K. Rowling
Paidos
45.0
50
0
Antologia poetica
J.L. Borges
Planet 40.0
150
a
0
Cervantes y el quijote
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
codi
titulo
go
18.2
200
0
autor
J.K.
Rowling
Paidos
45.0
50
0
Paidos
46.0
100
0
200
avg(prec
io)
24.5000
00
codi
titulo
go
4
6
Aprenda
PHP
Manual de
PHP
count(
*)
9
autor
Mario
Molina
Emece
18.2
200
0
J.C. Paez
Paidos
30.8
120
0
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
45.50
25
0
25
53.50
0
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;
count(
*)
Alta
Gracia
Cordoba
Villa
Dolores
ciudad
count(telefo
no)
Alta
Gracia
Cordoba
Villa
Dolores
172.00
73.50
group by sexo;
sex max(montocom
o pra)
f
53.50
33.20
group by sexo;
sex min(montocom
o pra)
f
0.00
15.30
min(montocompra)
from visitantes
group by sexo;
53.50
0.00
m 33.20
15.30
ciudad
avg(montocom
pra)
Alta
Gracia
19.625000
Cordoba
28.400000
Villa
Dolores
25.000000
ciudad
sex count(
o *)
Alta
Gracia
Alta
Gracia
Cordoba
Cordoba
Villa
Dolores
group by ciudad;
ciudad
count(
*)
Alta
Gracia
Villa
Dolores
count(
*)
Villa
Dolores
Cordoba
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: