Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - KaRaLLo

#1
Bueno, ahí va otro boletín esta vez sobre manipulación de datos, es probable que encontréis errores pero ya digo que no está corregido :D Learn !!

Buenas referencias en..
 http://www.java2s.com/Code/SQL/CatalogSQL.htm

1.- Un almacén de distribución de artículos desea mantener información sobre las ventas hechas por las tiendas que compran al almacén. Dispone de las siguientes tablas para mantener esta información:

ARTICULOS: almacena cada uno de los artículos que el almacén puede abastecer a las tiendas. Cada artículo viene determinado por las columnas: ARTICULO (PK entero corto), COD_FABRICANTE (PK FK entero corto), PESO (entero corto) y CATEGORIA (ENUM). La categoría puede ser 'PRIMERA', 'SEGUNDA' o 'TERCERA'.

Código (sql) [Seleccionar]

CREATE TABLE `ARTICULOS` (
`ARTICULO` TINYINT(2) NOT NULL,
`COD_FAB` TINYINT(2) NOT NULL,
`PESO` TINYINT(2) NULL DEFAULT NULL,
`CATEGORIA` ENUM('PRIMERA','SEGUNDA','TERCERA') NULL DEFAULT NULL,
PRIMARY KEY (`ARTICULO`, `COD_FAB`),
INDEX `FK_ARTICULOS_FABRICANTE` (`COD_FAB`),
CONSTRAINT `FK_ARTICULOS_FABRICANTE` FOREIGN KEY (`COD_FAB`) REFERENCES `FABRICANTE` (`COD_FAB`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;


FABRICANTES: contiene los países de origen de los fabricantes de artículos. Cada COD_FABRICANTE (PK entero corto) tiene su MARCA (UNICO de 20 caracteres) y su NOMBRE_PAIS (UNICO de 20 caracteres).

Código (sql) [Seleccionar]

CREATE TABLE `FABRICANTE` (
`COD_FAB` TINYINT(2) NOT NULL,
`MARCA` VARCHAR(20) NULL DEFAULT NULL,
`NOMBRE_PAIS` VARCHAR(20) NULL DEFAULT NULL,
PRIMARY KEY (`COD_FAB`),
UNIQUE INDEX `MARCA` (`MARCA`),
UNIQUE INDEX `NOMBRE_PAIS` (`NOMBRE_PAIS`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;



TIENDAS: almacena los datos de las tiendas que venden artículos. Cada tienda se identifica por su NIF (PK entero largo) y almacena además su PROVINCIA (20 caracteres).


Código (sql) [Seleccionar]

CREATE TABLE `TIENDAS` (
`NIF` VARCHAR(10) NOT NULL,
`PROVINCIA` VARCHAR(20) NULL DEFAULT NULL,
PRIMARY KEY (`NIF`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;


PEDIDOS: son los pedidos que realizan las tiendas al almacén. Cada pedido almacenará: NIF (PK FK entero largo), ARTICULO (PK FK entero corto), COD_FABRICANTE (PK FK entero corto), PESO (entero corto), CATEGORIA (ENUM 'PRIMERA','SEGUNDA','TERCERA') y FECHA_PEDIDO (TIMESTAMP con valor por defecto FECHA ACTUAL). Cada fila de la tabla representa un pedido.


Código (sql) [Seleccionar]

CREATE TABLE `PEDIDOS` (
`NIF` VARCHAR(10) NOT NULL,
`ARTICULO` TINYINT(2) NOT NULL,
`COD_FAB` TYNYINT(2) NOT NULL,
`PESO` SMALLINT(10) NULL DEFAULT NULL,
`CATEGORIA` ENUM('PRIMERA','SEGUNDA','TERCERA') NULL DEFAULT NULL,
`FECHA_PEDIDO` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`NIF`, `ARTICULO`, `COD_FAB`),
INDEX `FK_PEDIDOS_ARTICULOS` (`ARTICULO`),
INDEX `FK_PEDIDOS_FABRICANTE` (`COD_FAB`),
CONSTRAINT `FK_PEDIDOS_ARTICULOS` FOREIGN KEY (`ARTICULO`) REFERENCES `ARTICULOS` (`ARTICULO`),
CONSTRAINT `FK_PEDIDOS_FABRICANTE` FOREIGN KEY (`COD_FAB`) REFERENCES `FABRICANTE` (`COD_FAB`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;



2.- Crea una tabla VENTAS, a partir de PEDIDOS, que almacena las ventas de artículos que hace cada una de las tiendas. Cada venta se identifica por: NIF (PK FK entero largo), ARTICULO (PK FK entero corto), COD_FABRICANTE (PK FK entero corto), PESO (entero corto), CATEGORIA (ENUM 'PRIMERA','SEGUNDA','TERCERA') y FECHA_PEDIDO (TIMESTAMP con valor por defecto FECHA ACTUAL). Cada fila de la tabla representa una venta.

Código (sql) [Seleccionar]

CREATE TABLE VENTAS (SELECT * FROM PEDIDOS);



*************************************

3.- Modifica las tablas PEDIDOS y VENTAS para que incluyan un campo donde almacenar UNIDADES_PEDIDAS (entero corto) y UNIDADES_VENDIDAS (entero corto) respectivamente.


Código (sql) [Seleccionar]

ALTER TABLE VENTAS ADD COLUMN UNIDADES_VENDIDAS TINYINT(10) NOT NULL AFTER FECHA_PEDIDO;
ALTER TABLE PEDIDOS ADD COLUMN UNIDADES_PEDIDAS TINYINT(10) NOT NULL AFTER FECHA_PEDIDO;


4.- Introduce en las tablas los siguientes datos:

Código (sql) [Seleccionar]

INSERT INTO `ARTICULOS` (`ARTICULO`, `COD_FAB`, `PESO`, `CATEGORIA`) VALUES
(1, 1, 20, 'PRIMERA'),
(2, 1, 45, 'TERCERA'),
(3, 1, 10, 'TERCERA'),
(4, 1, 15, 'PRIMERA'),
(5, 2, 100, 'SEGUNDA'),
(6, 2, 15, 'PRIMERA'),
(7, 2, 30, 'PRIMERA'),
(8, 2, 80, 'TERCERA'),
(9, 3, 25, 'TERCERA'),
(10, 3, 25, 'PRIMERA'),
(11, 3, 70, 'SEGUNDA'),
(12, 3, 90, 'SEGUNDA');

INSERT INTO `FABRICANTE` (`COD_FAB`, `MARCA`, `NOMBRE_PAIS`) VALUES
(1, 'FELVI', 'ITALIA'),
(2, 'CANTIER', 'FRANCIA'),
(3, 'PEDROSA', 'ESPAÑA');

INSERT INTO `PEDIDOS` (`NIF`, `ARTICULO`, `COD_FAB`, `PESO`, `CATEGORIA`, `FECHA_PEDIDO`, `UNIDADES_PEDIDAS`) VALUES
('2222-A', 12, 3, 90, 'SEGUNDA', '0000-00-00 00:00:00', 20),
('4545-C', 1, 1, 20, 'PRIMERA', '2009-03-11 00:00:00', 10),
('5555-B', 1, 1, 20, 'PRIMERA', '2009-03-09 00:00:00', 40),
('5555-B', 2, 1, 45, 'TERCERA', '2009-03-11 00:00:00', 20),
('7788-D', 3, 1, 10, 'TERCERA', '2010-03-12 00:00:00', 40);

INSERT INTO `TIENDAS` (`NIF`, `PROVINCIA`) VALUES
('1111-A', 'SEVILLA'),
('2222-A', 'TOLEDO'),
('4545-C', 'MADRID'),
('5555-B', 'PONTEVEDRA'),
('7788-D', 'TOLEDO'),
('9911-H', 'TOLEDO');


INSERT INTO `VENTAS` (`NIF`, `ARTICULO`, `COD_FAB`, `PESO`, `CATEGORIA`, `FECHA_PEDIDO`, `UNIDADES_VENDIDAS`) VALUES
('2222-A', 12, 3, 90, 'SEGUNDA', '2012-03-16 00:00:00', 10),
('4545-C', 1, 1, 20, 'PRIMERA', '2009-11-04 00:00:00', 5),
('5555-B', 1, 1, 20, 'PRIMERA', '2009-12-03 00:00:00', 20),
('5555-B', 2, 1, 45, 'TERCERA', '2009-03-13 00:00:00', 20),
('7788-D', 3, 1, 10, 'TERCERA', '2011-03-11 00:00:00', 30);





5.- Realiza las siguientes operaciones:

a) Da de alta un nuevo artículo de 'PRIMERA' categoría para los fabricantes de 'FRANCIA' y abastece con 5 unidades de ese artículo a todas las tiendas y en la fecha de hoy.

Código (sql) [Seleccionar]

#primero doy de alta un articulo nuevo
INSERT INTO ARTICULOS
SELECT (13,
(SELECT A.COD_FAB FROM ARTICULOS A, FABRICANTE F WHERE F.NOMBRE_PAIS LIKE'FRANCIA' AND A.COD_FAB=F.COD_FAB LIMIT 1),
NULL,'PRIMERA';

INSERT INTO PEDIDOS
SELECT TIENDAS.NIF, 13, FABRICANTES.COD_FAB, 40, 'PRIMERA', NOW(), 5 FROM TIENDAS, FABRICANTES
WHERE FABRICANTES.NOMBRE_PAIS='FRANCIA';
[/code=sql]

[size=10pt][i][b]b) Inserta un pedido de 20 unidades en la tienda '1111-A' con el artículo que mayor número de ventas haya realizado.[/b][/i][/size]

[code=sql]
INSERT INTO PEDIDOS (`NIF`,`ARTICULO`,`COD_FAB`,`UNIDADES_PEDIDAS`)
VALUES
('1111-A',
(SELECT ARTICULO FROM VENTAS WHERE UNIDADES_VENDIDAS = (SELECT MAX(UNIDADES_VENDIDAS) FROM VENTAS)),
(SELECT COD_FAB FROM ARTICULOS WHERE ARTICULO = (SELECT ARTICULO FROM VENTAS WHERE UNIDADES_VENDIDAS = (SELECT MAX(UNIDADES_VENDIDAS) FROM VENTAS))),
20)


Código (sql) [Seleccionar]

#A
INSERT INTO PEDIDOS (`NIF`,`ARTICULO`,`COD_FAB`,`UNIDADES_PEDIDAS`)
VALUES
('1111-A',
ARTICULO,
COD_FAB,
CATEGORIA,
NOW(),
20
FROM VENTAS GROUP BY ARTICULO ORDER BY SUM(UNIDADES_VENDIDAS) DESC LIMIT 1;)



c) Da de alta una tienda en la provincia de 'MADRID' y abastécela con 20 unidades de cada uno de los artículos existentes.


INSERT INTO TIENDAS
VALUES ('1111-E','MADRID');

INSERT INTO PEDIDOS
SELECT '1111-E',ARTICULO,COD_FAB,PESO,CATEGORIA,NOW(),20
FROM ARTICULOS;


d) Da de alta dos tiendas en la provincia de 'SEVILLA' y abastécelas con 30 unidades de artículos de la marca de fabricante 'CANTIER'.

Código (sql) [Seleccionar]

INSERT INTO TIENDAS
VALUES
('2222-F','SEVILLA'),
('3333-G','SEVILLA');

INSERT INTO PEDIDOS
SELECT '2222-F',ARTICULOS.ARTICULO,ARTICULOS.COD_FAB,ARTICULOS.PESO,ARTICULOS.CATEGORIA,SYSDATE(),30
FROM ARTICULOS,FABRICANTES
WHERE (FABRICANTES.MARCA='CANTIER')
AND (FABRICANTES.COD_FAB=ARTICULOS.COD_FAB);

INSERT INTO PEDIDOS
SELECT '3333-G', ARTICULOS.ARTICULO, ARTICULOS.COD_FAB,ARTICULOS.PESO,ARTICULOS.CATEGORIA,SYSDATE(),30
FROM ARTICULOS,FABRICANTES WHERE
(FABRICANTES.MARCA='CANTIER')
AND
(FABRICANTES.COD_FAB = ARTICULOS.COD_FAB);


e) Realiza una venta para todas las tiendas de 'TOLEDO' de 10 unidades en los artículos de 'PRIMERA' categoría.

Código (sql) [Seleccionar]

INSERT INTO VENTAS
SELECT TIENDAS.NIF, ARTICULOS.ARTICULO,ARTICULOS.COD_FAB,ARTICULOS.PESO,ARTICULOS.CATEGORIA,SYSDATE(), 10
FROM (ARTICULOS.CATEGORIA='PRIMERA');


f) Para aquellos artículos de los que se hayan vendido más de 30 unidades, realiza un pedido de 10 unidades para la tienda con NIF '5555-B' con la fecha actual.


Código (sql) [Seleccionar]

ALTER TABLE  PEDIDOS DROP PRIMARY KEY,ADD PRIMARY KEY(NIF,ARTICULO,COD_FAB,FECHA_PEDIDO);

INSERT INTO PEDIDOS
SELECT DISTINCT '5555-B',
ARTICULOS.ARTICULO,ARTICULOS.COD_FAB,ARTICULOS.PESO,ARTICULOS.CATEGORIA,SYSDATE(),10
FROM ARTICULOS,VENTAS,
(SELECT SUM(VENTAS.UNIDADES_VENDIDAS) AS A,
VENTAS.ARTICULO AS B FROM VENTAS GROUP BY VENTAS.ARTICULO) AS C,
WHERE ARTICULO.ARTICULO=VENTAS.ARTICULO
AND A>30
AND C.B = ARTICULOS.ARTICULO;


g) Cambia los datos de la tienda con NIF '1111-A' igualándolos a los de la tienda con NIF '2222-A'.

Código (sql) [Seleccionar]

UPDATE TIENDAS AS A, (SELECT PROVINCIA FROM TIENDAS WHERE NIF='2222-a') AS B
SET A.PROVINCIA = B.PROVINCIA
WHERE NIF = 1111


h) Cambia todos los artículos de 'PRIMERA' categoría a 'SEGUNDA' categoría del país 'ITALIA'.

Código (sql) [Seleccionar]

UPDATE ARTICULOS A
SET A.CATEGORIA = 'SEGUNDA'
WHERE A.CATEGORIA = 'PRIMERA'
AND A.COD_FAB = (SELECT COD_FAB FROM FABRICANTE WHERE NOMBRE_PAIS LIKE 'ITALIA')


i) Modifica aquellos pedidos en los que la cantidad pedida sea superior a las existencias del artículo, asignando el 20 por 100 de las existencias a la cantidad que se ha pedido.

Código (sql) [Seleccionar]

ALTER TABLE ARTICULOS ADD COLUMN EXISTENCIAS INT(10) NULL DEFAULT 10000 AFTER CATEGORIA;

UPDATE PEDIDOS AS P, ARTICULOS AS AR,
(SELECT P.UNIDADES_PEDIDAS FROM PEDIDOS GROUP BY P.ARTICULO),
(SELECT AR.ARTICULO AS A FROM ARTICULOS, PEDIDOS,
(SELECT SUM(P.UNIDADES_PEDIDAS) AS B, P.ARTICULO AS C FROM PEDIDOS GROUP BY P.ARTICULO) AS D WHERE AR.EXISTENCIAS<B
AND
AR.ARTICULO=P.ARTICULO AND D.C=AR.ARTICULO GROUP BY P.ARTICULO) AS E
SET P.UNIDADES_PEDIDAS=(P.UNIDADES_PEDIDAS*(20/100)) WHERE P.ARTICULO=E.A;


j) Elimina aquellas tiendas que no hayan realizado ventas.

Código (sql) [Seleccionar]

DELETE FROM TIENDAS
WHERE NIF
NOT IN(SELECT DISTINCT NIF FROM VENTAS);


k) Elimina los artículos que no hayan tenido ni compras ni ventas.

Código (sql) [Seleccionar]

DELETE FROM ARTICULOS
WHERE ARTICULO NOT IN (SELECT DISTINCT ARTICULO FROM VENTAS)
AND
ARTICULO NOT IN (SELECT DISTINCT ARTICULO FROM PEDIDOS);
[/code=sql]

[size=10pt][i][b]l) Borra los pedidos de 'PRIMERA' categoría cuyo país de procedencia sea 'FRANCIA'.
[/b][/i][/size]
[code=sql]
DELETE FROM PEDIDOS
WHERE ARTICULO IN(SELECT ARTICULO FROM ARTICULOS WHERE CATEGORIA = 'PRIMERA')
AND
COD_FAB = ANY(SELECT COD_FAB FROM FABRICANTE WHERE NOMBRE_PAIS = 'FRANCIA')


m) Resta uno a las unidades de los últimos pedidos de la tienda con NIF '5555-B'.

Código (sql) [Seleccionar]

OPCION B
UPDATE PEDIDOS AS A,(SELECT NIF FROM PEDIDOS WHERE NIF =5555 ORDER BY FECHA_PEDIDO DESC LIMIT 1) AS B
SET UNIDADES_PEDIDAS = UNIDADES_PEDIDAS-1
WHERE
A.NIF = B.NIF






n) Crea una tabla INFORME, que contenga en tres columnas las marcas, artículo y la suma total de unidades vendidas de cada artículo.

Código (sql) [Seleccionar]

CREATE TABLE INFORME
SELECT FABRICANTES.MARCA,ARTICULOS.ARTICULO,NULL,(S,0)
FROM FABRICANTES, ARTICULOS
LEFT OUTER JOIN
(SELECT VENTAS.ARTICULO AS B,
SUM(VENTAS.UNIDADES_VENDIDAS) AS S FROM VENTAS
GROUP BY VENTAS.ARTICULO) AS A
ON ARTICULOS.ARTICULO = A.B
WHERE ARTICULOS.COD_FAB=FABRICANTES.COD_FAB


o) Borra el contenido de la tabla anterior.
[
Código (sql) [Seleccionar]

TRUNCATE TABLE INFORME
code]


[size=10pt][i][b]p) Elimina la tabla anterior.[/b][/i][/size]  

[code=sql]
DROP TABLE INFORME
[/code][/code][/code]
#2
Estoy buscando un cliente potente para linux, alguna recomendación ? gracias ^^
#3
WarZone / Re: Hack Google, Help?
9 Abril 2012, 03:59 AM
Dios estoy muriendo con vuestros juanitos... , no me costo nada llegar al panel pero me estoy despellejando con la maldita pass....

neo
morpheo
pax

Segun Azielito estos deberían ser los usuarios ya que es como cifra unix las pass, no se si estaré cerca o por el ártico lo q se esq me vuelvo loco, he hecho una recopilación con las referencias a juan...., (no entiendo lo de juan)

PD: " Juan el Vecino Rulez "
Juanito esta sediento
juanito se las arregla solo
isto, ya la pase, reinstale juan, maquille el archivo y ya

Algo para tirar del hilo plzzz =??

Loaded 3 password hashes with 3 different salts (Traditional DES [64/64 BS])
guesses: 0  time: 0:00:00:00 100%  c/s: 1108K  trying: �tiles - �vulas
#4
WarZone / Re: Hack Web_Cross
8 Abril 2012, 23:35 PM
Yo después de documentarme bastante, conseguí pasarlo casi sin darme cuenta, seguro que es mucho mas simple de lo que pensais
#5
Bases de Datos / Re: Problema con outer join
29 Febrero 2012, 14:27 PM
Diosss llevo 2 semanas con esta consulta y nada de nada he probado con outers, con not in etcccc....

Esto es lo mas "limpio" que he sacado pero.... nada :

Código (sql) [Seleccionar]

SELECT ALUMNO.NOMBRE
FROM ALUMNO,ANTIGUO,NUEVO
WHERE ALUMNO.NOMBRE
AND ALUMNO.NOMBRE=NUEVO.NOMBRE
AND ALUMNO.NOMBRE=ANTIGUO.NOMBRE
NOT IN (ANTIGUO.NOMBRE,NUEVO.NOMBRE)
#6
Bases de Datos / Problema con outer join
26 Febrero 2012, 16:13 PM
Hola tengo una problemilla con esta consulta :

8.- Visualiza los nombres de los alumnos de la tabla ALUMNO que no estén en la tabla ANTIGUO ni en la tabla NUEVO.


ALUMNO;
+----------+------+------------+
| NOMBRE   | EDAD | LOCALIDAD  |
+----------+------+------------------+
| JUAN         |   20    | VIGO       |
| MANUEL     |   16    | PONTEAREAS |
| FERNANDO |   32 | TUI                   |
| PACA         |   25 | SALAMANCA     |
| PEPA         |   19 | LUGO               |
+----------+------+------------+


ANTIGUO;
+----------+------+-----------+
| NOMBRE   | EDAD | LOCALIDAD |
+----------+------+-----------+
| PEPA          |   19 | LUGO      |
| FERNANDO  |   32 | TUI       |
| JULIA         |   19 | CANARIAS  |
| CHONI       |   22 | MADRID    |
| PEPE         |   43 | BARCELONA |
+----------+------+-----------+


NUEVO;
+----------+------+------------+
| NOMBRE   | EDAD | LOCALIDAD  |
+----------+------+------------+
| MANUEL     |   16 | PONTEAREAS |
| RODRIGO  |   32 | CORU�A        |
| PILI          |   43 | POLLO            |
| FERNANDO |   32 | TUI               |
+----------+------+------------+

Sé que hay que utilizar outer join pero no soy capaz de escribir bien la sintaxis y llevo ya horas ralladísimo.

Si útilizo por ejemplo los left y right outers join y quitando los NULL me acaba devolviendo los que coinciden y necesito justamente todos los que NO se repitan



Gracias :)
#7
bueno como lo prometido es deuda, cuelgo el resultado entero del boletin, desde el principio al final :


BOLETÍN 6

CONSULTAS BÁSICAS


1.- Diseña la base de datos para una librería que desea mantener la información de cada tema (cadena de caracteres de longitud fija 15 única y no nula), el estante en que se ubica (1 carácter) y el número de ejemplares de que dispone (valor numérico longitud 2).

Introduce datos de forma aleatoria, teniendo en cuenta que los temas encajan dentro de la siguiente lista: HISTORIA, FICCIÓN, MEDICINA, INFORMATICA, ARTE, RELIGION. Y que el estante es una letra del abecedario.


SENTENCIAS DE CREACIÓN E INTRODUCCIÓN DE DATOS (LIBRERIA):

Código (sql) [Seleccionar]

# Dumping database structure for LIBRERIA
DROP DATABASE IF EXISTS `LIBRERIA`;
CREATE DATABASE IF NOT EXISTS `LIBRERIA` /*!40100 DEFAULT CHARACTER SET utf8 */;
USE `LIBRERIA`;

# Dumping structure for table LIBRERIA.LIBROS
DROP TABLE IF EXISTS `LIBROS`;
CREATE TABLE IF NOT EXISTS `LIBROS` (
 `TEMA` varchar(15) NOT NULL,
 `ESTANTE` char(1) DEFAULT NULL,
 `EJEMPLARES` smallint(2) DEFAULT NULL,
 PRIMARY KEY (`TEMA`),
 UNIQUE KEY `TEMA` (`TEMA`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

# Dumping data for table LIBRERIA.LIBROS: 6 rows
DELETE FROM `LIBROS`;
/*!40000 ALTER TABLE `LIBROS` DISABLE KEYS */;
INSERT INTO `LIBROS` (`TEMA`, `ESTANTE`, `EJEMPLARES`) VALUES
('HISTORIA', 'B', 8),
('FICCION', 'A', 20),
('MEDICINA', 'F', 12),
('INFORMATICA', 'E', 56),
('ARTE', 'D', 80),
('RELIGION', 'C', 15);
/*!40000 ALTER TABLE `LIBROS` ENABLE KEYS */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;


Realiza las siguientes consultas:

a) Obtener todos los datos cuyo tema sea "FICCION" usando "=" y posteriormente "LIKE". ¿Es el resultado el mismo? ¿Y si modificaras la tabla asignando longitud variable al campo tema?


Código (sql) [Seleccionar]
SELECT * FROM LIBROS WHERE TEMA LIKE 'FICCION'
SELECT * FROM LIBROS WHERE TEMA='FICCION'


- El resultado es el mismo


b) Obtener el tema, estante y ejemplares de las filas con ejemplares comprendidos entre 8 y 15.
Código (sql) [Seleccionar]

SELECT TEMA,ESTANTE,EJEMPLARES FROM LIBROS WHERE EJEMPLARES BETWEEN  8 AND 15


c) Obtener las columnas tema, estante y ejemplares de las filas cuyo estante no esté comprendido entre 'B' y 'D'.

Código (sql) [Seleccionar]
SELECT TEMA,ESTANTE,EJEMPLARES FROM LIBROS WHERE ESTANTE NOT BETWEEN  'B' and 'D'


d) Obtener con una única sentencia SELECT todos los temas de la librería cuyo número de ejemplares sea inferior a los que hay en 'MEDICINA'.

Código (sql) [Seleccionar]
SELECT TEMA FROM LIBROS WHERE EJEMPLARES<(SELECT EJEMPLARES FROM LIBROS WHERE TEMA='MEDICINA')


e) Obtener los temas de la librería cuyo número de ejemplares no esté entre 15 y 20, ambos incluid

Código (sql) [Seleccionar]
SELECT TEMA FROM LIBROS WHERE EJEMPLARES NOT BETWEEN 15 and 20





2.- En un colegio se desea almacenar la información de los alumnos (DNI [10] no nulo y único, Apellidos_Nombre [30], Dirección [30], Población [15] y Teléfono [10], todos cadenas de caracteres de longitud variable), las asignaturas que cursan (Código como valor numérico de 2 cifras no nulo y único; y Nombre, cadena de caracteres de longitud variable 20) y las notas que obtienen dichos alumnos en las diferentes asignaturas que cursen (el valor de la nota será un número de 2 cifras).

SENTENCIAS DE CREACIÓN E INTRODUCCIÓN DE DATOS (COLEGIO):
Código (sql) [Seleccionar]

DROP DATABASE IF EXISTS `COLEGIO`;
CREATE DATABASE IF NOT EXISTS `COLEGIO` /*!40100 DEFAULT CHARACTER SET utf8 */;
USE `COLEGIO`;


# Dumping structure for table COLEGIO.ALUMNOS
DROP TABLE IF EXISTS `ALUMNOS`;
CREATE TABLE IF NOT EXISTS `ALUMNOS` (
 `DNI` varchar(10) NOT NULL,
 `APELLIDOS_NOMBRE` varchar(30) DEFAULT NULL,
 `DIRECCION` varchar(30) DEFAULT NULL,
 `POBLACION` varchar(15) DEFAULT NULL,
 `TELEFONO` varchar(10) DEFAULT NULL,
 PRIMARY KEY (`DNI`),
 UNIQUE KEY `DNI` (`DNI`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

# Dumping data for table COLEGIO.ALUMNOS: ~7 rows (approximately)
DELETE FROM `ALUMNOS`;
/*!40000 ALTER TABLE `ALUMNOS` DISABLE KEYS */;
INSERT INTO `ALUMNOS` (`DNI`, `APELLIDOS_NOMBRE`, `DIRECCION`, `POBLACION`, `TELEFONO`) VALUES
('25889878C', 'Martienz_Pepe_Lolo', 'Calle_Juas', 'SEVILLA', '987755465'),
('45665448K', 'Rouco_Varela_Nolo', 'Calle_Lamer', 'CORUÑA', '686987785'),
('45665884R', 'Del_Pan_Pepe', 'Calle_Roja', 'VIGO', '623154687'),
('45687998X', 'Guitierrez_Gomez_Elias', 'Calle_Nova', 'SANTIAGO', '614658779'),
('53259877Q', 'Diaz_Fernandez_Maria', 'Calle_Azul', 'MADRID', '684455664'),
('67897546S', 'Rodriguez_Alonso_Juan', 'Calle_Verde', 'BARCELONA', '651154465'),
('68798545B ', 'Fernandez_Maria_Justo', 'Calle_Madrid', 'MADRID', '987756654');
/*!40000 ALTER TABLE `ALUMNOS` ENABLE KEYS */;


# Dumping structure for table COLEGIO.ASIGNATURAS
DROP TABLE IF EXISTS `ASIGNATURAS`;
CREATE TABLE IF NOT EXISTS `ASIGNATURAS` (
 `COD_AS` tinyint(2) NOT NULL,
 `NOMBRE` varchar(20) DEFAULT NULL,
 PRIMARY KEY (`COD_AS`),
 UNIQUE KEY `COD_AS` (`COD_AS`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

# Dumping data for table COLEGIO.ASIGNATURAS: ~5 rows (approximately)
DELETE FROM `ASIGNATURAS`;
/*!40000 ALTER TABLE `ASIGNATURAS` DISABLE KEYS */;
INSERT INTO `ASIGNATURAS` (`COD_AS`, `NOMBRE`) VALUES
(1, 'FOL'),
(2, 'ORTODONCISMO'),
(3, 'LM'),
(4, 'PRG'),
(5, 'ED');
/*!40000 ALTER TABLE `ASIGNATURAS` ENABLE KEYS */;


# Dumping structure for table COLEGIO.CURSAN
DROP TABLE IF EXISTS `CURSAN`;
CREATE TABLE IF NOT EXISTS `CURSAN` (
 `DNI` varchar(10) NOT NULL,
 `COD_AS` tinyint(2) NOT NULL DEFAULT '0',
 `NOTA` int(2) DEFAULT NULL,
 PRIMARY KEY (`DNI`,`COD_AS`),
 KEY `FK_CURSAN_ASIGNATURAS` (`COD_AS`),
 CONSTRAINT `FK_CURSAN_ALUMNOS` FOREIGN KEY (`DNI`) REFERENCES `ALUMNOS` (`DNI`),
 CONSTRAINT `FK_CURSAN_ASIGNATURAS` FOREIGN KEY (`COD_AS`) REFERENCES `ASIGNATURAS` (`COD_AS`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

# Dumping data for table COLEGIO.CURSAN: ~9 rows (approximately)
DELETE FROM `CURSAN`;
/*!40000 ALTER TABLE `CURSAN` DISABLE KEYS */;
INSERT INTO `CURSAN` (`DNI`, `COD_AS`, `NOTA`) VALUES
('25889878C', 5, 6),
('45665884R', 1, 8),
('45665884R', 2, 8),
('45687998X', 1, 7),
('53259877Q', 1, 6),
('53259877Q', 2, 6),
('67897546S', 3, 10),
('68798545B ', 2, 2),
('68798545B ', 5, 4);







Diseña el modelo E/R, a continuación transfórmalo a Grafo Relacional, para posteriormente implementar la base de datos y sus consecuentes tablas, campos y tipos de datos.









Introduce datos aleatorios para poder realizar las consultas detalladas más abajo.


Realiza a continuación las siguientes consultas:

a) Obtener el nombre y apellidos de cada alumno, asignatura que cursa y nota obtenida en dicha asignatura.

Código (sql) [Seleccionar]

SELECT APELLIDOS_NOMBRE,NOMBRE,NOTA FROM ALUMNOS,ASIGNATURAS,CURSAN WHERE ALUMNOS.DNI=CURSAN.DNI and  ASIGNATURAS.COD_AS=CURSAN.COD_AS



b) Obtener los nombres y apellidos de los alumnos que han cursado 'FOL'.
Código (sql) [Seleccionar]

SELECT APELLIDOS_NOMBRE FROM ALUMNOS,CURSAN,ASIGNATURAS WHERE ALUMNOS.DNI=CURSAN.DNI AND CURSAN.COD_AS=ASIGNATURAS.COD_AS AND ASIGNATURAS.NOMBRE = "FOL"




c) Obtener los nombres y apellidos de los alumnos que tengan una nota entre 7 y 8 en 'FOL'.
Código (sql) [Seleccionar]

SELECT APELLIDOS_NOMBRE FROM ALUMNOS,CURSAN,ASIGNATURAS WHERE ALUMNOS.DNI=CURSAN.DNI AND CURSAN.COD_AS=ASIGNATURAS.COD_AS AND ASIGNATURAS.NOMBRE = "FOL" AND CURSAN.NOTA BETWEEN 7 AND 8



d) Obtener los nombres y apellidos de los alumnos que no tengan nada suspenso.

Código (sql) [Seleccionar]

SELECT APELLIDOS_NOMBRE FROM CURSAN,ALUMNOS,ASIGNATURAS WHERE CURSAN.NOTA BETWEEN 5 AND 10 AND ASIGNATURAS.COD_AS=CURSAN.COD_AS AND ALUMNOS.DNI=CURSAN.DNI

e) Obtener todas las asignaturas que contengan 2 letras 'o' en su interior y tengan alumnos matriculados de 'Madrid'.
Código (sql) [Seleccionar]

SELECT NOMBRE FROM ASIGNATURAS,CURSAN,ALUMNOS WHERE NOMBRE LIKE '%o%o%' AND ALUMNOS.DNI=CURSAN.DNI AND CURSAN.COD_AS=ASIGNATURAS.COD_AS AND POBLACION='MADRID'




f) Obtener los nombres y apellidos de los alumnos de 'Madrid' que tengan alguna asignatura suspensa.

Código (sql) [Seleccionar]

SELECT APELLIDOS_NOMBRE FROM ALUMNOS,CURSAN,ASIGNATURAS WHERE POBLACION='MADRID' AND CURSAN.NOTA<5 AND ALUMNOS.DNI=CURSAN.DNI AND CURSAN.COD_AS=ASIGNATURAS.COD_AS


g) Obtener los nombres y apellidos de alumnos que tengan la misma nota que tiene 'Díaz Fernández, María' en 'FOL' en alguna asignatura.
Código (sql) [Seleccionar]

SELECT APELLIDOS_NOMBRE FROM ALUMNOS,CURSAN,ASIGNATURAS WHERE CURSAN.NOTA=(SELECT NOTA FROM ALUMNOS,ASIGNATURAS,CURSAN WHERE ALUMNOS.APELLIDOS_NOMBRE ='DIAZ_FERNANDEZ_MARIA' AND ASIGNATURAS.NOMBRE='FOL' AND CURSAN.DNI=ALUMNOS.DNI AND ASIGNATURAS.COD_AS=CURSAN.COD_AS)
AND CURSAN.DNI=ALUMNOS.DNI AND ASIGNATURAS.COD_AS=CURSAN.COD_AS


* En esta consulta devuelve a DIAZ_FERNANNDEZ_MARIA pero como la consulta no especifica si debe aparecer o no lo dejo así, de todas formas solo habría que añadir al final AND APELLIDOS_NOMBRE !='DIAZ_FERNANDEZ_MARIA'

h) Obtener los datos de las asignaturas que no tengan alumnos.

Código (sql) [Seleccionar]
SELECT CURSAN.COD_AS FROM CURSAN,ASIGNATURAS,ALUMNOS WHERE CURSAN.COD_AS=ASIGNATURAS.COD_AS AND ALUMNOS.DNI = CURSAN.DNI  AND NOT EXISTS (SELECT CURSAN.COD_AS FROM CURSAN,ASIGNATURAS WHERE CURSAN.COD_AS=ASIGNATURAS.COD_AS)

* Hice lo que pude




i) Obtener los nombres y apellidos de los alumnos que tengan nota en la asignatura con código 1.
Código (sql) [Seleccionar]

SELECT APELLIDOS_NOMBRE FROM ASIGNATURAS,ALUMNOS,CURSAN WHERE CURSAN.DNI=ALUMNOS.DNI AND CURSAN.COD_AS = ASIGNATURAS.COD_AS AND CURSAN.COD_AS=1


j) Obtener los nombres y apellidos de los alumnos que no tengan nota en la asignatura con código 3.

Código (sql) [Seleccionar]

SELECT APELLIDOS_NOMBRE FROM ASIGNATURAS,ALUMNOS,CURSAN WHERE CURSAN.DNI=ALUMNOS.DNI AND CURSAN.COD_AS = ASIGNATURAS.COD_AS AND CURSAN.COD_AS!=3
#8
Lo hice solo para probrar :) que el juego tenga algo de lógica ya es bastante xD !
#9
Bueno, es mi primera interfaz gráfica con eclipse en Java, hay que decir que :

- eventos,
- swing
y etc...

todavía no lo he dado en clase, lo máximo que hemos dado es arrays y todo lo que hacemos se hace por consola por Scanner (xD)

Se trata de un jueguillo que trata de que el usuario adivine los numeros de los textAreas de la derecha.

Un saludo !!!

https://rapidshare.com/files/1239131820/Juego_adivina.jar
#10
Java / Re: Ordenar array bidimensional
1 Febrero 2012, 18:52 PM
Muchisimas gracias bewa, pero me desanimo al ver esto xDD llevo 3 días rayandome la cabeza y nada