Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Practica 8 de BD

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 8

INSTITUTO TECNOLÓGICO UNIÓN PANAMERICANA

PRACTICA 8. BASE DE DATOS


SQL

COMO AGREGAR LLAVE FORÁNEA A LAS TABLAS


Para agregar las llaves foráneas se necesita escribir la siguiente sentencia

CONSTRAINT fk_Cliente FOREIGN KEY (Llave foránea) REFERENCES mombre_tabla (llave foránea),

Ejemplo para crear la tabla FACTURA con su llave secundaria

create table factura


(
Cod_facturas char(7) not null,
Cod_clientes char(7) not null,
fecha date,
Articulo varchar (50) not null,
cantidad int,
precio float,
total float,
CONSTRAINT fk_Cliente FOREIGN KEY (Cod_Cliente) REFERENCES CLIENTES (Cod_Cliente)
)

Por lo tanto se tienen que indicar que campo será la llave foránea y a qué tabla se referencia mencionando
también el campo, que en la tabla referenciada es llave primaria.

AGREGAR UNA LLAVE SECUNDARIA EN LAS TABLAS CREADAS


Hasta ahí todo muy bien ¿verdad? Pero ahora, tal vez, te estarás preguntando ¿cómo agrego una llave foránea a
una tabla que ya he creado? Simplemente tendrías que ejecutar lo siguiente, utilizando de ejemplo la tabla
Ventas:

1 ALTER TABLE VENTAS


2 ADD FOREIGN KEY (id_Cliente) REFERENCES CLIENTES(id_Cliente);
CREAREMOS LAS TABLAS CLIENTES, PRODUCTOS, FECHAS Y VENTAS. EJEMPLO BASE

Creando la tabla Clientes:

CREATE TABLE CLIENTES


( id_Cliente char(8) primary key,
NombreCliente varchar(max)
);

En la columna NombreCliente tiene como varchar max. que tendrá un limite de caracteres segun indica SQL de
2GB.

Creando la tabla Productos:

CREATE TABLE PRODUCTOS


( id_Producto char(8) primary key,
Rubro varchar(20),
Tipo varchar(20),
NombreProducto varchar(max)
);

Creando la tabla Fechas:

CREATE TABLE FECHAS


( id_Fecha char(8) primary key,
Anio varchar(5),
Trimestre nvarchar(20),
Mes int,
Dia int
);

Creando la tabla Ventas:

CREATE TABLE VENTAS


( id_Cliente char(8) not null,
id_Producto char(8) not null,
id_Fecha char(8) not null,
importeTotal float,
Utilidad float,
CONSTRAINT fk_Cliente FOREIGN KEY (id_Cliente) REFERENCES CLIENTES (id_Cliente),
CONSTRAINT fk_Producto FOREIGN KEY (id_Producto) REFERENCES PRODUCTOS (id_Producto),
CONSTRAINT fk_Cliente FOREIGN KEY (id_Fecha) REFERENCES FECHAS (id_Fecha)
);
INSERT | INSERTAR
Una sentencia INSERT de SQL agrega uno o más registros a una (y sólo una) tabla en una base de datos
relacional.

Forma básica
INSERT INTO 'tablatura' ('columnaA',['columnaB,... '])
VALUES ('valor1', ['valor2,...'])

O también se puede utilizar como:


INSERT INTO tablatura VALUES ('valor1','valor2')

Las cantidades de columnas y valores deben ser iguales. Si una columna no se especifica, le será asignado el
valor por omisión. Los valores especificados (o implícitos) por la sentencia INSERT deberán satisfacer todas las
restricciones aplicables. Si ocurre un error de sintaxis o si alguna de las restricciones es violada, no se agrega la
fila y se devuelve un error.

Ejemplo BASE
INSERT INTO agenda_telefonica (nombre, numero)
VALUES ('Roberto Jeldrez', 4886850);

Cuando se especifican todos los valores de una tabla, se puede utilizar la sentencia acortada:

INSERT INTO nombreTabla VALUES ('valor1', ['valor2,...'])

Ejemplo (asumiendo que 'nombre' y 'número' son las únicas columnas de la tabla 'agenda_telefonica'):

INSERT INTO agenda_telefonica


VALUES ('Jhonny Aguilar', 080473968);

Formas avanzadas
Una característica de SQL (desde SQL-92) es el uso de constructores de filas para insertar múltiples filas a la
vez, con una sola sentencia SQL:

INSERT INTO ''tabla'' (''columna1'', [''columna2,... ''])


VALUES (''valor1a'', [''valor1b,...'']),
(''value2a'', [''value2b,...'']),...;

Esta característica es soportada por DB2, PostgreSQL (desde la versión 8.2), MySQL, y H2.

Ejemplo (asumiendo que 'nombre' y 'número' son las únicas columnas en la tabla 'agenda_telefonica'):

INSERT INTO agenda_telefonica VALUES ('Roberto Fernández', '4886850'), ('Alejandro Sosa', '4556550');

Que podía haber sido realizado por las sentencias

INSERT INTO agenda_telefonica VALUES ('Roberto Fernández', '4886850');


INSERT INTO agenda_telefonica VALUES ('Alejandro Sosa', '4556550');

Notar que las sentencias separadas pueden tener semántica diferente (especialmente con respecto a los triggers),
y puede tener diferente rendimiento que la sentencia de inserción múltiple.
Para insertar varias filas en MS SQL puede utilizar esa construcción:

INSERT INTO phone_book


SELECT 'John Doe', '555-1212'
UNION ALL
SELECT 'Peter Doe', '555-2323';

Tenga en cuenta que no se trata de una sentencia SQL válida de acuerdo con el estándar SQL (SQL: 2003),
debido a la cláusula subselect incompleta.

Para hacer lo mismo en Oracle se usa la Tabla DUAL, siempre que se trate de solo una simple fila:

INSERT INTO phone_book


SELECT 'John Doe', '555-1212' FROM DUAL
UNION ALL
SELECT 'Peter Doe','555-2323' FROM DUAL

Una implementación conforme al estándar de esta lógica se muestra el siguiente ejemplo, o como se muestra
arriba (no aplica en Oracle):

INSERT INTO phone_book


SELECT 'John Doe', '555-1212' FROM LATERAL ( VALUES (1) ) AS t(c)
UNION ALL
SELECT 'Peter Doe','555-2323' FROM LATERAL ( VALUES (1) ) AS t(c)

Copia de filas de otras tablas


Un INSERT también puede utilizarse para recuperar datos de otros, modificarla si es necesario e insertarla
directamente en la tabla. Todo esto se hace en una sola sentencia SQL que no implica ningún procesamiento
intermedio en la aplicación cliente. Un SUBSELECT se utiliza en lugar de la cláusula VALUES. El
SUBSELECT puede contener JOIN, llamadas a funciones, y puede incluso consultar en la misma TABLA los
datos que se inserta. Lógicamente, el SELECT se evalúa antes que la operación INSERT esté iniciada. Un
ejemplo se da a continuación.

INSERT INTO phone_book2

SELECT *
FROM phone_book
WHERE name IN ('John Doe', 'Peter Doe')

Una variación es necesaria cuando algunos de los datos de la tabla fuente se está insertando en la nueva tabla,
pero no todo el registro. (O cuando los esquemas de las tablas no son iguales.)

INSERT INTO phone_book2 ( [name], [phoneNumber] )

SELECT [name], [phoneNumber]


FROM phone_book
WHERE name IN ('John Doe', 'Peter Doe')

El SELECT produce una tabla (temporal), y el esquema de la tabla temporal debe coincidir con el esquema de la
tabla donde los datos son insertados.
EJEMPLO COMPLETO, utilizando el ejemplo completo de la practica 21, tablas dbo.Personas. Con los
siguientes campos. (P_id, Nombre, Apellido, Direccion, Ciudad)

INSERT INTO dbo.Personas


VALUES ('1', 'Marco Antonio','Trejo Lemus','Calle E 822','Tampico')

INSERT INTO dbo.Personas


VALUES ('2', 'Martha Beatriz','Trejo Lemus','Calle E 822','Tampico')

INSERT INTO dbo.Personas


VALUES ('3', 'Juana Elvira','Trejo Lemus','Calle E 822','Tampico')

INSERT INTO dbo.Personas


VALUES ('4', 'Nora Zulma','Trejo Lemus','Calle E 822','Tampa')

INSERT INTO dbo.Personas


VALUES ('5', 'Laura Lucero','Sobrevilla Trejo','Calle E 822','Tampico')

INSERT INTO dbo.Personas


VALUES ('6', 'Maria de la luz','Trejo Campos','Calle E 822','Tampico')

INSERT INTO dbo.Personas


VALUES ('7', 'Trinidad','Trejo Bautista','Calle E 822','Tampico')

INSERT INTO dbo.Personas


VALUES ('8', 'Marcel Abisag','Sobrevilla Trejo','Calle E 822','Tampico')

INSERT INTO dbo.Personas


VALUES ('9', 'Jose Abraham','Sobrevilla Trejo','Calle E 822','Tampico')

INSERT INTO dbo.Personas


VALUES ('10', 'Samuel Salomon','Olmeda Trejo','Calle E 822','Tampico')
UPDATE
Una sentencia UPDATE de SQL es utilizada para modificar los valores de un conjunto de registros existentes en
una tabla.

Ejemplo
UPDATE Nombre_tabla SET Campo = 'valor a actualizar' WHERE campo = 'valor del registro de la tabla';

EJEMPLO COMPLETO

UPDATE dbo.Personas SET Nombre='Marcel Perez' WHERE Nombre='Marcel Abisag';

En este ejemplo se cambiara el nombre de Marcel Abisag que se encuentra en la base de datos por el de Marcel
Perez.

Aquí también hay que ser cuidadoso de no olvidarse de usar Where, de lo contrario, modificaríamos todos
los registros de nuestra tabla.

Update producto Set precio=990, descuento=25

Esa sentencia modificaría el campo precio y el campo descuento en todos los productos de la tabla producto. Si
tenemos una tabla con miles de productos con esa sentencia se actualizarían todos, de modo que la totalidad de
los registros tendrían el mismo precio y el mismo descuento. Os aseguro que este problema de olvidarse el where
no es algo extraño que ocurra, incluso para programadores experimentados y puede acarrear problemas serios.

EJEMPLO COMPLETO

UPDATE dbo.Personas SET Direccion='Calle Montas No.45', Ciudad='Miami';

DELETE
Una sentencia DELETE de SQL borra uno o más registros existentes en una tabla.

Forma básica
DELETE FROM tabla WHERE columna1 = 'valor1';

Ejemplo
DELETE FROM Producto WHERE descuento =30;
PRACTICAS 8. PRIMERA PARTE

1. UTILIZAR SU PRÁCTICA 7, ARREGLAR SUS LLAVES SECUNDARIAS, Y ASIGNARLES


COMO LLAVES SECUNDARIAS. A CADA UNA DE LAS TABLAS QUE TENGAN CADA PUNTO.
2. INSERTAR 10 REGISTROS A CADA UNA DE LAS TABLAS EN SUS TABLAS.
3. LO QUE USAN MAQUINA, DEBERA DE INSERTAR LOS REGISTROS DE UNO EN UNO. Y
PUEDEN ENVARME TODOS LOS CODIGOS DE LOS REGISTROS EN UN ARCHIVO
WORD INDEPENDIENTE.

RECORDAR: INSERTAR LOS REGISTROS CON TABLAS SIN LLAVES SECUNDARIAS PRIMERO,
Y LUEGO INSERTAN LOS REGISTROS A LAS TABLAS CON LLAVES SECUNDARIAS.

CUANDO INSERTE REGISTROS EN TABLAS SIN LLAVES SECUNDARIAS, DEBEN UTILIZAR


COMILLA DOBLE.

CUANDO INSERTEN REGISTROS EN TABLAS CON LLAVES SECUNDARIAS, DEBEN UTILIZAR


COMILLAS SIMPLES.

OJO: LES RECOMIENDO, INSERTAR UN SOLO REGISTRO PRIMERO, Y VERIFICAR SUS LINEAS DE
COMANDO, SUS COMAS, COMILLAS, ETC. ES MEJOR CORREGIR UNA O DOS LINEAS DE
ERRORES QUE 40 O MAS LINEAS DE ERRORES.

DESPUÉS QUE LOGREN LA INSERCION DE UN SOLO REGISTRO, ENTONCES PUEDE COPIAR Y


PEGAR LA MISMA LÍNEA, CAMBIANDO LOS DATOS DE LOS REGISTROS.

PROHIBIDO DUPLICAR DATOS EN LLAVES PRIMARIAS, O TENDRAN MUCHOS DOLORES


DE CABEZAS.
PROHIBIDO ESCRIBIR LOS MISMOS NOMBRES Y/O APELLIDOS, DIRECCION, TELEFONO,
CORREO, DEBEN DE SER DIFERENTES, PARA QUE LAS RELACIONES SE LOGREN.

EN LAS LLAVES SECUNDARIAS SI PUEDEN REPETIR, PERO NO ME POGAN UN SOLO


CÓDIGO PARA TODOS, QUE SEAN VARIADOS PERO REPETIDOS.

SEGUNDA PARTE.

UTILIZAR SU PRÁCTICA 5, Y HACERLES LAS TABLAS, ASIGNAR LLAVES PRIMARIA Y


SECUNDARIAS, Y AGREGAR 5 REGISTROS, A CADA UNA DE LAS TABLAS.
INSTITUTO TECNOLÓGICO UNIÓN PANAMERICANA
RUBRICA DE LA PRACTICA 8 DE BASE DE DATOS.
NORMALIZACIÓN

CRITERIOS EXCELENTE MUY BUENO REGULAR


BUENO
Crea una base de datos SQL
Crea tablas con SQL con llave secundaria
Inserta la llave secundaria en una tabla
previamente hecha
Inserta registros en una tabla SQL
Inserta registros utilizando la clausula
WHERE
Modificar registros en una tabla SQL
Borra registros de una tabla SQL
Mantener el lugar limpio y ordenado.
Fotocopiar la práctica.
Pega la practica adecuadamente en el
cuaderno
Posee un cuaderno limpio, organizado y
presentable.
Usa el tiempo adecuadamente.
Entrega la práctica a tiempo
Asistencia en el laboratorio.
Excelente 25. Muy bueno 23. Bueno 21. Regular 19.

También podría gustarte