4ta. Parte Bases de Datos Relacionales Introducción al SQL. Año 2013 Objetivos de la Clase o Sentencias SQL Select, Create, Insert, update, delete, truncate, drop. o Modificar definiciones de tablas. o Valores nulos o Restricciones. Introducción al SQL. Año 2013 Sentencia Create CREATE TABLE table_name ( { < column_definition > | < table_constraint > } [ ,...n ] ) Donde: < column_definition > ::= { column_name data_type } [ { DEFAULT constant_expression | [ IDENTITY [ ( seed , increment ) ] }] [ ROWGUIDCOL ] ] [ < column_constraint > [ ...n ] ] …………………………. Ej: CREATE TABLE MyCustomers (CustID int IDENTITY (100,1) PRIMARY KEY, CompanyName nvarchar (50)) CREATE TABLE MyCustomers2 (CustID int CONSTRAINT pkCustId PRIMARY KEY) CREATE TABLE MyOrders (OrderID int, CustID int REFERENCES MyCustomers(CustID)) Introducción al SQL. Año 2013 Lenguaje SQL o CREATE CREATE TABLE [schema.]table (column datatype [DEFAULT CREATE CREATE TABLE TABLE departments departments (( department_id department_id int int NOT NOT NULL NULL ,department_name ,department_name VARCHAR(30) VARCHAR(30) NOT NOT NULL NULL ,manager_id int ,manager_id int )) Introducción al SQL. Año 2013 expr][, ...]); Sentencia Select into La instrucción SELECT INTO crea una nueva tabla y la llena con el conjunto de resultados de la instrucción SELECT. SELECT INTO se puede emplear para combinar datos de varias tabla s o vistas en una tabla. Ejemplo: SELECT c.FirstName, c.LastName, e.Title, a.AddressLine1, a.City, sp.Name AS [State/Province], a.PostalCode INTO EmployeeAddresses FROM Contact AS c JOIN Employee AS e ON e.ContactID = c.ContactID JOIN EmployeeAddress AS ea ON ea.EmployeeID = e.EmployeeID JOIN Address AS a on a.AddressID = ea.AddressID JOIN StateProvince as sp ON sp.StateProvinceID = a.StateProvinceID; Introducción al SQL. Año 2013 Lenguaje SQL o INSERT INSERT [ INTO ] objeto [ ( lista de columnas ) ] VALUES ( ( { DEFAULT | NULL | expresió expresión } [ ,...n ] ) [ ,...n ] ) INSERT INSERT INTO INTO departments departments(department_id, (department_id, department_name, department_name, manager_id) manager_id) VALUES VALUES (( 100 100 ,, 'Finance' 'Finance' ,, 108 108 )) Introducción al SQL. Año 2013 Lenguaje SQL o INSERT DESDE UN SELECT INSERT [ INTO ] objeto [ ( lista de columnas ) ] (SELECT [(lista columnas)] FROM Tabla INSERT INSERTINTO INTOFACTURA FACTURA(nromedidor (nromedidor,periodo,FecEmision,Importe) ,periodo,FecEmision,Importe) (select m.nromedidor, p.periodo, getdate(), (select m.nromedidor, p.periodo, getdate(), ((m.estact ((m.estact --m.estant) m.estant)**p.valormt) p.valormt) from MEDIDOR m from MEDIDOR m INNER INNERJOIN JOINSOCIO SOCIOssON ONs.nrosocio s.nrosocio==m.nrosocio m.nrosocio inner join categoria c on c.codcategoria inner join categoria c on c.codcategoria==s.codcategoria s.codcategoria cross join periodo p) cross join periodo p) Introducción al SQL. Año 2013 Lenguaje SQL o UPDATE UPDATE objeto SET nombre columna = { expresió expresión | DEFAULT | NULL } [ ,...n ] [ FROM{ <tabla > } [ ,...n ] ] <tabla> [ WHERE { <condici ón> ] <condició UPDATE UPDATE departments departments SET SET department_name department_name= = ‘Account' ‘Account' Where Where department_id department_id= = 100 100 Introducción al SQL. Año 2013 Sentencia Alter table Modifica una definición de tabla, agrega o quita columnas y restricciones. Ejemplos: Agrega nueva columna: ALTER TABLE doc_exa ADD column_b VARCHAR(20) NULL ; Quita una Columna: ALTER TABLE doc_exb DROP COLUMN column_b ; Cambia el tipo de datos: ALTER TABLE doc_exy ALTER COLUMN column_a DECIMAL (5, 2) ; Agrega una columna con una restricción: ALTER TABLE doc_exc ADD column_b VARCHAR(20) NULL CONSTRAINT exb_unique UNIQUE ; Agrega una restricción no comprobada: ALTER TABLE doc_exd WITH NOCHECK ADD CONSTRAINT exd_check CHECK (column_a > 1) Agrega una restricción default: ALTER TABLE doc_exz ADD CONSTRAINT col_b_def DEFAULT 50 FOR column_b ; Introducción al SQL. Año 2013 Sentencias Delete y truncate La instrucción DELETE quita una o varias filas de una tabla o vista. Ej: 1) DELETE [FROM] tablax WHERE col1 = 100 2) DELETE FROM SalesPersonQuotaHistory WHERE SalesPersonID IN (SELECT SalesPersonID FROM SalesPerson WHERE SalesYTD > 2500000.00 ) La instrucción TRUNCATE TABLE es un método rápido y no registrado para eliminar todas las filas de una tabla. TRUNCATE TABLE es funcionalmente e quivalente a la instrucción DELETE sin una cláusula WHERE. Sin embargo, TRUNCATE TABLE es m ás rápida y utiliza menos recursos de registro de sistema y de transa cciones. La instrucción DELETE quita una a una las filas y graba una entrada en el reg istro de transacciones por cada fila eliminada. Ej: TRUNCATE table Introducción al SQL. Año 2013 Sentencia Drop Table Elimina la definición de una tabla y todos los datos, índices, restricciones y especificaciones de permisos asociados. Realiza un borrado físico de la tabla. DROP TABLE < table_name > Ejemplo: DROP TABLE doc_exz Introducción al SQL. Año 2013 VALORES NULOS NULL = NULL ? Funcion ISNULL() Ej: Create table persona (id int, apellido varchar(20)) Insert into persona (id, apellido) Values (1,null) Create table historico_persona (id int, apellido varchar(20)) Insert into historico_persona (id, apellido) Values (2,null) select * from persona a inner join historico_persona h on a.apellido = h.apellido Introducción al SQL. Año 2013 ¿Qué Son las Restricciones? o Las restricciones fuerzan las reglas a nivel de tabla. o Las restricciones evitan la supresión de un registro si hay dependencias. o Son válidos los siguientes tipos de restricción: n NOT NULL n UNIQUE n PRIMARY KEY n FOREIGN KEY n CHECK n DEFAULT Introducción al SQL. Año 2013 Instrucciones sobre Restricciones o Asigne un nombre a una restricción o Cree una restricción: n Al mismo tiempo que se crea la tabla, o bien n Una vez creada la tabla. o Defina una restricción a nivel de columna o de tabla. o Visualice una restricción. Introducción al SQL. Año 2013 Definición de Restricciones o Nivel de restricción de columna column column [CONSTRAINT [CONSTRAINT constraint_name] constraint_name] constraint_type, constraint_type, o Nivel de restricción de tabla column,... column,... [CONSTRAINT [CONSTRAINT constraint_name] constraint_name] constraint_type constraint_type (column, (column, ...), ...), Introducción al SQL. Año 2013 La Restricción NOT NULL Asegura que no se permiten valores nulos para la columna: … Restricción NOT NULL (Ninguna fila puede contener un valor nulo para esta columna) Restricción NOT NULL Introducción al SQL. Año 2013 Ausencia de restricción NOT NULL (Cualquier fila puede contener un valor nulo para esta columna) La Restricción NOT NULL Se define a nivel de columna: CREATE TABLE employees( employee_id int, last_name VARCHAR(25) NOT NULL, salary decimal(8,2), commission_pct decimal(2,2), Order_date datetime NOT NULL ) Introducción al SQL. Año 2013 La Restricción UNIQUE Restricción UNIQUE EMPLOYEES … INSERT INTO Permitido No permitido: ya existe Introducción al SQL. Año 2013 La Restricción UNIQUE Definida a nivel de tabla o de columna: CREATE TABLE employees( employee_id INT, last_name VARCHAR(25) NOT NULL, email VARCHAR(25), salary DECIMAL(8,2), commission_pct DECIMAL(2,2), hire_date DATETIME NOT NULL, CONSTRAINT emp_email_uk UNIQUE(email)) Introducción al SQL. Año 2013 La Restricción PRIMARY KEY DEPARTMENTS PRIMARY KEY … No permitido (valor nulo) INSERT INTO No permitido (50 ya existe) Introducción al SQL. Año 2013 La Restricción PRIMARY KEY Definida a nivel de tabla o de columna: CREATE TABLE departments( department_id INT, department_name VARCHAR(30) NOT NULL, manager_id INT, location_id INT, CONSTRAINT dept_id_pk PRIMARY KEY(department_id)) Introducción al SQL. Año 2013 Definición de Restricciones: A nivel de columna y a nivel de tabla CREATE TABLE employees( employee_id int CONSTRAINT emp_emp_id_pk PRIMARY KEY, first_name VARCHAR(20), job_id VARCHAR(10) NOT NULL) CREATE TABLE employees( employee_id int, first_name VARCHAR(20), job_id VARCHAR(10) NOT NULL, CONSTRAINT emp_emp_id_pk PRIMARY KEY (EMPLOYEE_ID)) Introducción al SQL. Año 2013 La Restricción FOREIGN KEY DEPARTMENTS PRIMARY KEY EMPLOYEES FOREIGN KEY … INSERT INTO No permitido (9 no existe) Permitido Introducción al SQL. Año 2013 La Restricción FOREIGN KEY Definida a nivel de tabla o de columna: CREATE TABLE employees( employee_id int, last_name VARCHAR(25) NOT NULL, email VARCHAR(25), salary decimal(8,2), commission_pct decimal(2,2), hire_date DATETIME NOT NULL, department_id int, CONSTRAINT emp_dept_fk FOREIGN KEY (department_id) REFERENCES departments(department_id), CONSTRAINT emp_email_uk UNIQUE(email)); Introducción al SQL. Año 2013 Palabras Clave de la Restricción FOREIGN KEY • FOREIGN KEY: Define la columna de la tabla secundaria a nivel de restricción de tabla. • REFERENCES: Identifica la tabla y la columna en la tabla principal. Introducción al SQL. Año 2013 La Restricción CHECK Especifica los valores que acepta un campo, evitando que se ingr esen valores inapropiados CREATE TABLE employees( employee_id int, last_name VARCHAR(25) NOT NULL, email VARCHAR(25), salary decimal(8,2), commission_pct decimal(2,2), hire_date datetime NOT NULL, department_id int, CONSTRAINT Employee_chk_slary CHECK (Salary > 0 AND SALARY < 20000)); Introducción al SQL. Año 2013 La Restricción DEFAULT Especifica un valor por defecto para una columna CREATE TABLE employees( employee_id int, last_name VARCHAR(25) NOT NULL, email VARCHAR(25), salary decimal(8,2), commission_pct decimal(2,2), hire_date datetime NOT NULL default getdate(), department_id int); Introducción al SQL. Año 2013 Ejemplo: DEFAULT + CHECK Las restricciones pueden aplicarse en forma conjunta CREATE CREATE TABLE TABLEpersona persona (dni int, (dni int, Ayn varchar(50), Ayn varchar(50), sexo varchar(1) sexo varchar(1) not not null null default default 'M', 'M', CONSTRAINT CONSTRAINT persona_sexo persona_sexoCHECK CHECK (sexo (sexo in('M','F'))) in('M','F'))) Introducción al SQL. Año 2013 Adición de una Sintaxis de Restricción Utilice la sentencia ALTER TABLE para: o Agregar o borrar una restricción, sin modificar su estructura o Activar o desactivar restricciones o Agregar una restricción NOT NULL utilizando la cláusula ALTER COLUMN ALTER ALTER TABLE TABLE table table ADD ADD [CONSTRAINT [CONSTRAINT constraint] constraint] type type (column); (column); Introducción al SQL. Año 2013 Restricción Recursiva Agregue una restricción FOREIGN KEY a la tabla EMPLOYEES que indique que ya debe existir un director como empleado válido en la tabla EMPLOYEES. CREATE TABLE employees( employee_id int, manager_id int, first_name VARCHAR(20), job_id VARCHAR(10) NOT NULL, CONSTRAINT emp_emp_id_pk PRIMARY KEY (EMPLOYEE_ID)) ALTER TABLE employees ADD CONSTRAINT emp_manager_fk FOREIGN KEY(manager_id) REFERENCES employees(employee_id); Introducción al SQL. Año 2013 Eliminación de una Restricción o Elimine la restricción de director de la tabla EMPLOYEES. ALTER employees ALTER TABLE TABLE employees DROP DROP CONSTRAINT CONSTRAINT emp_manager_fk emp_manager_fk Tablas Tablas del del diccionario diccionario de de datos: datos: sys.objects sys.objects sys.key_constraints sys.key_constraints sys.foreign_keys sys.foreign_keys Introducción al SQL. Año 2013 Diccionario de Datos Tablas y Constraints: -- Tablas y Constraints SELECT * FROM sys.objects WHERE name LIKE ‘%emp%‘ -- Ver Constraints definidos SELECT * FROM sys.key_constraints WHERE name LIKE ‘emp%' Introducción al SQL. Año 2013 BIBLIOGRAFIA o Un Enfoque Practico del SQL. ISBN 9789871076611. Morteo Francisco A. y Bocalandro Nicolas L.E. Editorial COOPERATIVAS o ORACLE 11g. SQL, PL/SQL, SQL*PLUS. o Oracle SQL and PL/SQL Handbook. ISBN 9782746053601. Gabillaud Jerome. ISBN 9780201752946. John Adolph Palinski o SQL: Guia práctica para usuarios. ISBN 9788441519152. Charte Ojeda, Francisco. Editorial ANAYA o E. F. Codd, The Relational Model for Database Management Version 2 (Reading, Mass.: Addison -Wesley, 1990). o Varios Sitios WEB. Introducción al SQL. Año 2013 ESPACIO PARA PREGUNTAS Introducción al SQL. Año 2013