viernes, 23 de marzo de 2012

Segunda clase Instrucciones sql


--Crear tabla Libro (idLibro,idAutor,nombre) con PK
CREATE TABLE Autor(
idAutor INT NOT NULL AUTO_INCREMENTAL PRIMARY KEY,
nombre VARCHAR2(255)
);
--Crear tabla autor (idAutor,nombre)
CREATE TABLE Libro(
idLibro INT NOT NULL AUTO_INCREMENTAL PRIMARY KEY,
idAutor INT NOT NULL,
nombre VARCHAR2(255)
);

--Crear la llave foreana idAutor en Libro

ALTER TABLE Libro
add constraint FK_Libro_autor foreign key (idAutor) references Autor (idAutor);

--Insertar 2 autores
INSERT INTO Autor(idAutor,nombre) VALUES(1,'Luis Angel Meza Perez');
INSERT INTO Autor(idAutor,nombre) VALUES(1,'Luis Angel Meza Castillo');

--Insertar 5 libreos
INSERT INTO Libro(idLibro,idAutor,nombre) VALUES(1,1,'Jquery Ninja');
INSERT INTO Libro(idLibro,idAutor,nombre) VALUES(2,1,'Cualquier Cosa');
INSERT INTO Libro(idLibro,idAutor,nombre) VALUES(3,1,'Holi');
INSERT INTO Libro(idLibro,idAutor,nombre) VALUES(4,2,'Chao');
INSERT INTO Libro(idLibro,idAutor,nombre) VALUES(5,2,'Haaa');

-- completar la fecha de nacimiento de los autores

UPDATE Autor SET fecNac = '12-07-1904' WHERE nombre = 'Luis Angel Meza Perez';
UPDATE Autor SET fecNac = '08-02-1962' WHERE nombre = 'Luis Angel Meza Castillo';

--Calcular la edad de "Gariela Marquez"

SELECT nombre,(SYSDATE - fecNac)/365 FROM Autor WHERE nombre = 'Luis Angel Meza Perez';

--Cambiar el tamaño del atributo nombre en tabla libro a 50

ALTER TABLE Libro
MODIFY nombre VARCHAR2(50);

--Agregar el atributo fecha nacimiento

ALTER TABLE Autor
ADD fecNac DATE;

--seleccionar todos los libros 'Pablo Neruda'

SELECT * FROM Libro l INNER JOIN Autor a ON l.idAutor = a.idAutor
WHERE a.nombre = 'Jquery Ninja';

SELECT * FROM Libro l, Autor a
WHERE l.idAutor = a.idAutor
AND a.nombre = 'Jquery Ninja';

SELECT * FROM
FROM Libro
WHERE idAutor = (SELECT idAutor FROM Autor WHERE nombre = 'Jquery Ninja');

--Tabla duoal para hacer pruebas

-- de esta forma pasamos todo a MAYUSCULA FUNCTION UPPER();
SELECT UPPER('AbCdEf') FROM dual

-- multiplicacion con la tabla dual
SELECT 128*4 FROM dual

-- comando para ver las tablas de la base
SELECT * FROM tab

-- para ver la descripcion de la tabla
DESC Autor

-- funcion ROUND para redondear
SELECT nombre,ROUND((SYSDATE - fecNac)/365) FROM Autor WHERE nombre = 'Luis Angel Meza Perez';

-- consulta en la base de datos con inner join igualando PK y FK
SELECT * FROM Libro l INNER JOIN Autor a ON l.idAutor = a.idAutor
WHERE a.idAutor = '1';

-- para traer todas las columnas de todas las tablas de la base

SELECT * FROM col

-- para traer las columnas de una tabla especifica
SELECT * FROM col WHERE tname = UPPER('libro')

-- En la base de datos se guardan los datos en mayusculas ejemplo la tabla col

-- En los select tambien se puede usar las columnas de forma corta ejeplo: SELECT * A1,A2 FROM T1 WHERE A1='C'

-- Averiguar mejores practicas en pl/sql

-- Listar los nombres de los autores que han escrito algun libro relacionado con amor
SELECT a.nombre FROM Libro l INNER JOIN Autor a ON l.idAutor = a.idAutor WHERE UPPER(l.nombre) LIKE UPPER('%JQUERY%');
o
SELECT a.nombre FROM Libro l INNER JOIN Autor a ON l.idAutor = a.idAutor WHERE LOWER(l.nombre) LIKE LOWER('%JQUERY%');

--hecho por el profesor
SELECT nombre From Autor WHERE idAutor IN(SELECT idAutor FROM Libro WHERE LOWER(nombre) LIKE '%jquery%');

No hay comentarios:

Publicar un comentario