Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Laboratorio 12
1. Crear las tablas propuestas en el ejercicio
Creamos la base de datos y utilizamos use para trabajar con ella:
mysql> create database laboratorioSQL;
Query OK, 1 row affected (0.03 sec)
mysql> use laboratorioSQL;
Database changed
Creamos las tablas:
mysql> create table Profesor(doc_prof varchar(11) primary key not null, nom_prof varchar(30) not
null, ape_profesor varchar(30) not null, cate_prof int, sal_prof int);
Con describe podemos ver cmo qued la tabla que hicimos:
mysql> describe profesor;
+----------------+---------------+---------+-----+---------+--------+
| Field
| Type
| Null | Key | Default | Extra |
+-----------------+--------------+---------+-----+---------+--------+
| doc_profesor | varchar(11) | NO
| PRI | NULL |
|
| nom_profesor | varchar(30) | NO |
| NULL |
|
| ape_profesor | varchar(30) | NO
|
| NULL |
|
| cate_prof
| int(11)
| YES |
| NULL |
|
| sal_prof
| int(11)
| YES |
| NULL |
|
+----------------+---------------+---------+------+----------+-----+
5 rows in set (0.16 sec)
mysql> create table curso(cod_curso int primary key auto_increment not null, nom_curs
varchar(100) not null,horas_cur int, valor_cur int);
mysql> create table Estudiante(doc_est varchar(11) primary key not null, nom_est varchar(30) not
null, ape_est varchar(30) not null, edad_est int);
La tabla Estudianxcurso la creamos pero no designamos las claves forneas:
mysql> create table Estudiantexcurso(cod_curso_estcur int not null, doc_est_estcur varchar(11) not
null, fec_ini_estcur date);
Designamos las fk individualmente:
mysql> alter table estudiantexcurso add constraint fkdoc_est foreign key(doc_est_estcur) references
estudiante(doc_est);
mysql> alter table estudiantexcurso add constraint fkcodcurs foreign key(cod_curso_estcur)
references curso(cod_curso);
mysql> create table Cliente(id_cli varchar(11) primary key not null, nom_cli varchar(30) not null,
ape_cli varchar(30) not null, dir_cli varchar(100), dep_cli varchar(20), mes_cum_cli varchar(10));
mysql> create table Articulo(id_art int primary key not null auto_increment, tit_art varchar(100),
aut_art varchar(100), edi_art varchar(300), prec_art int not null);
Creamos la tabla Pedido y luego referenciamos id_cli_ped como fornea:
mysql> create table Pedido(id_pedido int primary key not null auto_increment, id_cli_ped
varchar(11), fec_ped date not null, val_ped int not null);
mysql> alter table pedido add constraint fkid_cli foreign key(id_cli_ped) references Cliente(id_cli);
mysql> create table Articuloxpedido(id_ped_artped int not null, id_art_artped int, can_art_artped
int, val_ven_art_artped int);
mysql> alter table Articuloxpedido add constraint fk_id_ped foreign key(id_ped_artped) references
Pedido(id_pedido);
mysql> alter table Articuloxpedido add constraint fk_art_ped foreign key(id_art_artped) references
Articulo(id_art);
mysql> create table Compaia(comnit varchar(11) primary key not null, comnombre varchar(30)
not null, comaofun int, comreplegal varchar(100));
mysql> create table TiposAutomotores(autotipo int primary key not null);
mysql> create table Automotores(autoplaca varchar(6) primary key not null, automarca varchar(30)
not null, autotipo int, automodelo int, autonumpasajeros int, autocilindraje int, autonumchasis
varchar(20));
mysql> alter table Automotores add constraint fk_tipoauto foreign key(Autotipo) references
TiposAutomotores(autotipo);
Aqu me dio un error de sintaxis y no lograba encontrar el por qu:
mysql> create table aseguramientos(asecodigo int(6) primary key not null auto_increment,
asefechainicio datenot null, asefechainspiracion date not null, asevalorasegurado int not null,
aseestado varchar not null, asecosto int not null, aseplaca varchar(6));
ERROR 1064 (42000): 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 'date not null, asefechainspiracion date
not null, asevalorasegurado int not null,' at line 1
Como fall varias veces al intentar crear la tabla decid crearla slo con su tabla primaria
para ir aadiendo columnas hasta hallar el error:
mysql> create table aseguramientos(asecodigo int(6) primary key not null auto_increment);
mysql> alter table aseguramientos add asefechainicio date not null after asecodigo;
mysql> alter table aseguramientos add asefechaexpiracion date not null after asefechainicio;
mysql> alter table aseguramientos add asevalorasegurado int not null after asefechaexpiracion;
El problema era que aseestado no tena longitud en el ejercicio y hay varchar hay que
asignarle una:
mysql> alter table aseguramientos add aseestado varchar(11) after asevalorasegurado;
mysql> alter table aseguramientos add asecosto int not null after aseestado;
mysql> alter table aseguramientos add aseplaca varchar(6) after aseestado;
mysql> alter table aseguramientos add constraint fk_placas foreign key(aseplaca) references
automotores(autoplaca);
Y ahora s qued bien la tabla:
mysql> describe automotores;
+---------------------+--------------+------+---------+---------+-------+
| Field
| Type
| Null | Key | Default | Extra |
+---------------------+---------------+------+----- --+---------+-------+
| autoplaca
| varchar(6) | NO | PRI | NULL |
|
| automarca
| varchar(30) | NO |
| NULL |
|
| autotipo
| int(11)
| YES | MUL | NULL |
|
| automodelo
| int(11)
| YES |
| NULL |
|
| autonumpasajeros | int(11)
| YES |
| NULL |
|
| autocilindraje
| int(11)
| YES |
| NULL |
|
| autonumchasis
| varchar(20) | YES |
| NULL |
|
+---------------------+----------------+------+-------+---------+-------+
7 rows in set (0.00 sec)
mysql> create table incidentes(incicodigo int primary key not null auto_increment, incifecha date
not null, inciplaca varchar(6) not null, incilugar varchar(40) not null, incicantheridos int,
incicantfatalidades int, incicanautosinvolucrados int);
mysql> alter table incidentes add constraint fk_inciplacas foreign key(inciplaca) references
automotores(autoplaca);
2. Aadimos los registros
mysql> insert into profesor values('63.502.720', 'Martha', 'Rojas', 2, 690000);
mysql> insert into profesor values('91.216.904', 'Carlos', 'Prez', 3, 950000);
mysql> insert into profesor values('13.826.789', 'Maritza', 'Angarita', 1, 550000);
Con este obtuvimos error por la longitud:
mysql> insert into profesor values('1.098.765.789', 'Alejandra', 'Torres', 4, 1100000);
ERROR 1406 (22001): Data too long for column 'doc_profesor' at row 1
Se cambia la longitud de doc_profesor:
mysql> alter table profesor modify doc_profesor varchar(20);
mysql> insert into profesor values('1.098.765.789', 'Alejandra', 'Torres', 4, 1100000);
mysql> select * from profesor;
+---------------+-------------------+----------------+-----------+----------+
| doc_profesor | nom_profesor | ape_profesor | cate_prof | sal_prof |
+-----------------+-----------------+----------------+-----------+----------+
| 1.098.765.789 | Alejandra
| Torres
|
4 | 1100000 |
| 13.826.789
| Maritza
| Angarita
|
1 | 550000 |
| 63.502.720
| Martha
| Rojas
|
2 | 690000 |
| 91.216.904
| Carlos
| Prez
|
3 | 950000 |
+-----------------+-----------------+----------------+-----------+----------+
Mostrar todos los campos de la tabla curso en orden ascendente por valor:
mysql> select * from curso order by valor_cur asc;
+-----------+--------------------------------------+-----------+-------------+
| cod_curso | nom_curs
| horas_cur | valor_cur |
+-----------+--------------------------------------+-----------+--------------+
| 149842 | Fundamentos de bases de datos |
40 |
500000 |
| 289011 | Manejo de MySQL
|
45 |
550000 |
| 250067 | Fundamentos de SQL
|
20 |
700000 |
| 345671 | Fundamentos de Oracle
|
60 | 3000000 |
+-----------+--------------------------------------+-----------+--------------+
4 rows in set (0.00 sec)
Mostrar nombre del profesor con menos sueldo:
mysql> select nom_profesor from profesor order by sal_prof asc limit 1;
+-----------------+
| nom_profesor |
+-----------------+
| Maritza
|
+-----------------+
1 row in set (0.00 sec)
Mostrar estudiantes (cdigo y nombre) que iniciaron curso el 01-02-2011, del curso debe
mostrarse el nombre, las horas y el valor:
mysql> select doc_est, nom_est, fec_ini_estcur, nom_curs, horas_cur, valor_cur
-> from estudiante join estudiantexcurso join curso
-> on fec_ini_estcur = '2011-01-02'and doc_est = doc_est_estcur and cod_curso_estcur =
cod_curso;
+-----------------+-----------+-----------------+------------------------+-----------+-----------+
| doc_est
| nom_est | fec_ini_estcur | nom_curs
| horas_cur | valor_cur |
+-----------------+-----------+------------------+------------------------+--------- --+-----------+
| 1.098.765.678 | Carlos | 2011-01-02
| Manejo de MySQL |
45 | 550000 |
| 1.098.098.097 | Jonatan | 2011-01-02 | Manejo de MySQL |
45 | 550000 |
+-----------------+------------+-----------------+-------------------------+-----------+-----------+
2 rows in set (0.01 sec)
Visualizar profesores cuyo sueldo est entre $500000 y $700000:
mysql> select nom_profesor, ape_profesor, sal_prof
-> from profesor
-> where sal_prof >= 500000 and sal_prof <= 700000;
Mostrar nombre, apellido y direccin de los clientes que realizaron pedido el da 25/02/2012:
mysql> select nom_cli, ape_cli, fec_ped
-> from cliente join pedido
-> on id_cli_ped = id_cli and fec_ped = '2012-02-25';
+----------+---------+------------+
| nom_cli | ape_cli | fec_ped |
+----------+---------+------------+
| Maritza | Rojas | 2012-02-25 |
| Catalina | Zapata | 2012-02-25 |
+----------+---------+------------+
2 rows in set (0.00 sec)
Lista de todos los pedidos con el nombre del artculo:
mysql> select fec_ped, tit_art, nom_cli, can_art_artped
-> from articulo join articuloxpedido join pedido join cliente
-> on id_cli_ped = id_cli and id_ped_artped = id_pedido and id_art = id_art_artped;
+------------+--------------------------------------------------+-------------+----------------+
| fec_ped | tit_art
| nom_cli | can_art_artped |
+------------+--------------------------------------------------+-------------+----------------+
| 2012-02-25 | Creacin de un portal con php y mysql | Maritza |
5|
| 2012-02-25 | Administracin de sistemas operativos | Maritza |
12 |
| 2012-04-30 | Redes cisco
| Juan Carlos |
5|
| 2011-12-10 | Facebook y twitter para adultos
| Maritza |
10 |
| 2011-12-10 | Creacin de un portal con php y mysql | Maritza |
12 |
| 2012-02-25 | Redes cisco
| Catalina |
20 |
+------------+--------------------------------------------------+--------------+-----------------+
6 rows in set (0.00 sec)
Visualizar los clientes que cumplen aos en marzo:
mysql> select nom_cli, mes_cum_cli
-> from cliente
-> where mes_cum_cli = 'Marzo';
+-------------+----------------+
| nom_cli | mes_cum_cli |
+-------------+----------------+
| Catalina | Marzo
|
| Juan Carlos | Marzo
|
+--------------+---------------+
2 rows in set (0.00 sec)
Visualizar los datos del pedido 1 incluyendo el nombre del cliente, la direccin del mismo y el
valor de los artculos (Los valores en realidad son incorrectos pero as estaban en el ejercicio):
mysql> select id_ped_artped, nom_cli, dir_cli, tit_art, prec_art, can_art_artped, val_ped
-> from articuloxpedido join cliente join articulo join pedido
-> on id_cli = id_cli_ped and id_pedido = id_ped_artped and id_ped_artped = 1 and id_art=
id_art_artped;
Referencias
Los ejercicios fueron obtenidos de los objetos de aprendizaje Sena.
Para el desarrollo de la actividad se utiliz la aplicacin MySQL 5.7 command line client.
Se obtuvo datos adicionales sobre la sintaxis SQL en los siguientes sitios web:
www.mysqlconclase.net
www.genbetadev.com
www.forosdelweb.com