table - Base de Datos I

Anuncio
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
Descargar