You are on page 1of 32

Disea y Administra Bases de Datos

Avanzadas.

II. El ESTNDAR T-SQL

Contenido.
El estndar T-SQL.
Comandos de T-SQL.
Comandos DDL (Lenguaje de definicin
de datos).
Comandos DML (Lenguaje de
manipulacin de datos).

Existen herramientas para crear toda clase de objetos, los


datos no son la excepcin

COMANDOS DDL (DATA DEFINITION


LANGUAGE)

Comandos del Lenguaje de Definicin


de Datos.
Las sentencias DDL se utilizan para crear y modificar
la estructura de las tablas as como otros objetos de
la base de datos.
CREATE - para crear objetos en la base de datos.
ALTER - modifica la estructura de la base de datos.
DROP - borra objetos de la base de datos.
TRUNCATE - elimina todos los registros de la tabla,
incluyendo todos los espacios asignados a los
registros.

Create Table
Las tablas son la estructura bsica donde se almacena la
informacin en la base de datos.
Dado que en la mayora de los casos, no hay forma de que el
proveedor de base de datos sepa con antelacin cuales son
sus necesidades de almacenamiento de datos, es probable
que necesite crear tablas en la base de datos usted mismo.
La sintaxis del presente comando se describe a continuacin:
CREATE TABLE "nombre_tabla"
("columna 1" "tipo_de_datos_para_columna_1",
"columna 2" "tipo_de_datos_para_columna_2",
... );

Create Table
A partir del ejemplo de comando previamente
visto, plantearemos el siguiente ejemplo
demostrativo de como crear una tabla para
almacenar datos de clientes.
CREATE TABLE Customer
(First_Name char(50),
Last_Name char(50),
Address char(50),
City char(50),
Country char(25),
Birth_Date datetime);

Create Table
En ocasiones ser necesario otorgar un valor por default a
ciertos campos en la tabla a fin de simplificar los procesos de
captura para los usuarios. En el siguiente ejemplo podemos
ver una demostracin:
CREATE TABLE Customer
(First_Name char(50),
Last_Name char(50),
Address char(50) default No Conocido',
City char(50) default Tampico',
Country char(25),
Birth_Date datetime);
Para criterios mas especificos de control sobre los campos de
una tabla, podemos usar un commando denominado
CONSTRAINT.

Create Table - CONSTRAINT


Puede colocar restricciones para limitar el tipo de dato que puede
ingresarse en una tabla.
Dichas restricciones pueden especificarse cuando la tabla se crea
por primera vez a travs de la instruccin CREATE TABLE, o
luego de crear la tabla a travs de la instruccin ALTER TABLE.
Los tipos comunes de restricciones incluyen las siguientes:
-

NOT NULL
UNIQUE
CHECK
Clave primaria
Clave externa

Cada uno se describe en detalle a continuacin.

Create Table - CONSTRAINT


NOT NULL
En forma predeterminada, una columna puede ser NULL. Si no
desea permitir un valor NULL en una columna, querr colocar una
restriccin en esta columna especificando que NULL no es ahora
un valor permitido.
Por ejemplo, en la siguiente instruccin:
CREATE TABLE Customer
(SID integer NOT NULL,
Last_Name varchar (30) NOT NULL,
First_Name varchar(30));
Las columnas SID y Last_Name no incluyen NULL, mientras
que First_Name puede incluir NULL.

Create Table - CONSTRAINT


UNIQUE
La restriccin UNIQUE asegura que todos los valores en una columna sean
distintos.
Por ejemplo, en la siguiente instruccin:
CREATE TABLE Customer
(SID integer Unique,
Last_Name varchar (30),
First_Name varchar(30));
La columna SID no puede incluir valores duplicados, mientras dicha
restriccin no se aplica para columnas Last_Name y First_Name.
Por favor note que una columna que se especifica como clave primaria
tambin puede ser nica. Al mismo tiempo, una columna que es nica
puede o no ser clave primaria.

Create Table - CONSTRAINT


CHECK
La restriccin CHECK asegura que todos los valores en una
columna cumplan ciertas condiciones.
Por ejemplo, en la siguiente instruccin:
CREATE TABLE Customer
(SID integer CHECK (SID > 0),
Last_Name varchar (30),
First_Name varchar(30));
La columna SID slo debe incluir enteros mayores a 0.
Por favor note que la restriccin CHECK no sea ejecutada por
MySQL en este momento.

Create Table - Claves Primarias.


La clave primaria se utiliza para identificar en
forma nica cada lnea en la tabla. Puede ser
parte de un registro real, o puede ser un campo
artificial (uno que no tiene nada que ver con el
registro real). Una clave primaria puede consistir
en uno o ms campos en una tabla. Cuando se
utilizan mltiples campos como clave primaria, se
los denomina claves compuestas.
Las claves primarias pueden especificarse cuando
se crea la tabla (utilizando CREATE TABLE) o
cambiando la estructura existente de la tabla
(utilizando ALTER TABLE).

Create Table - Claves Primarias.


A continuacin se presenta un ejemplo de como se maneja el
comando antes mencionado:
CREATE TABLE Customer
(SID integer PRIMARY KEY,
Last_Name varchar(30),
First_Name varchar(30));
A continuacin se presentan ejemplos para la especificacin de una
clave primaria al modificar una tabla:
ALTER TABLE Customer ADD PRIMARY KEY (SID);
Nota: Antes de utilizar el comando ALTER TABLE para agregar una
clave primaria, necesitar asegurarse de que el campo est definido
como 'NOT NULL' -- en otras palabras, NULL no puede aceptarse
como valor para ese campo.

Create Table - Claves Externas.


Una clave externa es un campo (o campos) que seala la clave primaria de
otra tabla. El propsito de la clave externa es asegurar la integridad
referencial de los datos. En otras palabras, slo se permiten los valores que
se esperan que aparezcan en la base de datos.
Por ejemplo, digamos que tenemos dos tablas, una tabla CUSTOMER que
incluye todos los datos del CUSTOMER, y la tabla ORDERS que incluye los
pedidos del CUSTOMER.
La restriccin aqu es que todos los pedidos deben asociarse con un
CUSTOMER que ya se encuentra en la tabla CUSTOMER.
En este caso, colocaremos una clave externa en la tabla ORDERS y la
relacionaremos con la clave primaria de la tabla CUSTOMER. De esta
forma, nos aseguramos que todos los pedidos en la tabla ORDERS estn
relacionadas con un CUSTOMER en la tabla CUSTOMER.
En otras palabras, la tabla ORDERS no puede contener informacin de un
CUSTOMER que no se encuentre en la tabla CUSTOMER.

Create Table - Claves Externas.


La estructura de estas dos tablas ser la
siguiente:

Create Table - Claves Externas.


En el ejemplo anterior, la columna Customer_SID en la tabla ORDERS es
una clave externa sealando la columna SID en la tabla CUSTOMER.
A continuacin se muestran ejemplos de cmo especificar la clave
externa a la hora de crear la tabla ORDERS:
CREATE TABLE ORDERS
(Order_ID integer PRIMARY KEY,
Order_Date datetime,
Customer_SID integer REFERENCES CUSTOMER (SID),
Amount double);
A continuacin se presenta un ejemplo para la especificacin de una clave
externa al modificar una tabla: Esto asume que se ha creado la tabla
ORDERS, y que la clave externa todava no se ha ingresado:
ALTER TABLE ORDERS
ADD FOREIGN KEY (Customer_SID) REFERENCES CUSTOMER (SID);

Create Table - ndices.


Los ndices nos ayudan a obtener datos de las tablas en forma
ms rpida.
Utilicemos un ejemplo para ilustrar este punto: Digamos que
estamos interesados en leer en un libro de jardinera acerca de
cmo cultivar pimientos.
En vez de leer el libro desde el comienzo hasta que
encontremos una seccin sobre pimientos, es mucho ms
rpido para nosotros ir a la seccin ndice al final del libro,
ubicar qu pginas contienen la informacin sobre pimientos, y
luego dirigirnos a esas pginas directamente.
Al dirigirnos al ndice primero ahorramos tiempo y seguramente
es el mtodo ms eficiente para ubicar la informacin que
necesitamos.

Create Table - ndices.


El mismo principio se aplica para la obtencin de datos
desde una tabla de base de datos.
Sin un ndice, el sistema de base de datos lee a travs
de toda la tabla (este proceso se denomina escaneo de
tabla) para localizar la informacin deseada.
Con el ndice correcto en su lugar, el sistema de base de
datos puede entonces primero dirigirse al ndice para
encontrar de dnde obtener los datos, y luego dirigirse a
dichas ubicaciones para obtener los datos necesarios.
Esto es mucho ms rpido.

Create Table - ndices.


Por lo tanto, generalmente se recomienda crear ndices en tablas. Un
ndice puede cubrir una o ms columnas.
La sintaxis general para la creacin de un ndice es:
CREATE INDEX "NOMBRE_NDICE" ON "NOMBRE_TABLA"
(NOMBRE_COLUMNA);
Digamos que tenemos la siguiente tabla:

Create Table - ndices.


Si deseamos crear un ndice tanto en Ciudad como en Pas, ingresaramos:
CREATE INDEX IDX_CUSTOMER_LAST_NAME
ON Customer (Last_Name);
Para crear un ndice que combine los campos ciudad y pas, ingresamos:
CREATE INDEX IDX_CUSTOMER_LOCATION
ON Customer (City, Country);
No hay una regla estricta respecto de cmo nombrar un ndice. El mtodo
generalmente aceptado es colocar un prefijo, tal como IDX_, antes del
nombre de un ndice para evitar la confusin con otros objetos de la base
de datos.
Tambin es una buena idea brindar informacin sobre qu tabla y
columna(s) se utilizar el ndice.

Alter Table.
Una vez que se crea la tabla en la base de datos, hay muchas ocasiones
donde uno puede desear cambiar la estructura de la tabla. Los casos
tpicos incluyen los siguientes:
-

Agregar una columna.


Eliminar una columna.
Cambiar el nombre de una columna.
Cambiar el tipo de datos para una columna.

Por favor note que lo anterior no es una lista exhaustiva. Hay otras
instancias donde ALTER TABLE se utiliza para cambiar la estructura de
la tabla, tales como cambiar la especificacin de la clave primaria o
agregar una restriccin nica para una columna.
La sintaxis SQL para ALTER TABLE es:
ALTER TABLE "nombre_tabla"
[Especificacin de modificacin];

Alter Table.
Depende del tipo de modificacin que deseamos realizar. Para los
usos mencionados anteriormente, las instrucciones [Especificacin
de modificacin] son:

Agregar una columna: ADD columna 1 tipos de datos para


columna 1

Eliminar una columna: DROP columna 1

Cambiar el nombre de una columna: CHANGE nombre


antiguo de la columna nuevo nombre de la columna tipos de
datos para la nueva columna".

Cambiar el tipo de datos para una columna: MODIFY


columna 1 nuevo tipo de datos

Alter Table.

Primero, deseamos agregar una columna denominada Gender a esta tabla. Para hacerlo, ingresamos:
ALTER TABLE Customer ADD Gender char(1);
Luego, deseamos renombrar Address" a Addr. Para hacerlo, ingresamos:
ALTER TABLE Customer CHANGE Address Addr char(50);
Luego, lo que queremos es cambiar el tipo de datos para Addr a 30 caracteres. Para hacerlo,
ingresamos:
ALTER TABLE Customer MODIFY Addr char(30);
Finalmente, deseamos eliminar la columna Gender. Para hacerlo, ingresamos,
ALTER TABLE Customer DROP Gender;

Alter Table.

Drop Table.
A veces podemos decidir que necesitamos eliminar una tabla en la
base de datos por alguna razn. De hecho, sera problemtico si no
podemos hacerlo ya que esto creara una pesadilla de
mantenimiento para DBA. Afortunadamente, SQL nos permite
hacerlo, ya que podemos utilizar el comando DROP TABLE. La
sintaxis para DROP TABLE es
DROP TABLE "nombre_tabla";
Entonces, si deseamos eliminar una tabla denominada cliente que
creamos en la seccin CREATE TABLE, simplemente ingresamos
DROP TABLE Customer;

Despus de creada nuestra estructura de datos, sigue el


ingreso de informacin; para lo cual, tambin tenemos
herramientas.

COMANDOS DML (DATA MANIPULATION


LANGUAGE)

Insert.
En las secciones anteriores, hemos visto cmo obtener informacin de tablas.
Pero Cmo se ingresan estas filas de datos en estas tablas en primer lugar?
Esto es lo que se trata en esta seccin, que explica la instruccin INSERT, y en
la siguiente seccin, que explica la instruccin UPDATE.
En SQL, hay fundamental y bsicamente dos formas para INSRER datos en
una tabla: Una es insertar una fila por vez, y la otra es insertar filas mltiples
por vez.
La sintaxis para insertar datos en una tabla mediante una fila por vez es la
siguiente:
INSERT INTO "nombre_tabla" ("columna1", "columna2", ...)
VALUES ("valor1", "valor2", ...);
Ejemplo:
INSERT INTO Store_Information (Store_Name, Sales, Txn_Date)
VALUES ('Los Angeles', 900, '10-Jan-1999');

Insert.
El segundo tipo de INSERT INTO nos permite insertar filas mltiples
en una tabla. A diferencia del ejemplo anterior, donde insertamos
una nica fila al especificar sus valores para todas las columnas,
ahora utilizamos la instruccin SELECT para especificar los datos
que deseamos insertar en la tabla.
Si est pensando si esto significa que est utilizando informacin de
otra tabla, est en lo correcto. La sintaxis es la siguiente:
INSERT INTO "tabla1" ("columna1", "columna2", ...)
SELECT "columna3", "columna4", ...
FROM "tabla2";
Note que esta es la forma ms simple. La instruccin entera puede
contener fcilmente clusulas WHERE, GROUP BY, y HAVING, as
como tambin uniones y alias.

Insert.
Entonces
por
ejemplo,
si
deseamos
tener
una
tabla
Store_Information, que recolecte la informacin de ventas para el
ao 1998, y ya conoce en donde reside la fuente de datos en tabala
Sales_Information, ingresaremos:
INSERT INTO Store_Information (Store_Name, Sales,
Txn_Date)
SELECT Store_Name, Sales, Txn_Date
FROM Sales_Information
WHERE Year (Txn_Date) = 1998;
Aqu hemos utilizado la sintaxis de Servidor SQL para extraer la
informacin anual por medio de una fecha. Otras bases de datos
relacionales pueden tener sintaxis diferentes. Por ejemplo, en
Oracle, utilizar TO_CHAR (Txn_Date, 'yyyy') = 1998.

Update.
Una vez que hay datos en la tabla, podramos tener la necesidad de
modificar los mismos. Para hacerlo, utilizamos el comando UPDATE.
La sintaxis para esto es:
UPDATE "nombre_tabla"
SET "columna_1" = [nuevo valor]
WHERE "condicin";
Un ejemplo aplicado de esta instruccin es el siguiente:
UPDATE Store_Information
SET Sales = 500
WHERE Store_Name = 'Los Angeles'
AND Txn_Date = '08-Jan-1999';

Update.
Tambin es posible UPDATE mltiples columnas al mismo tiempo.
La sintaxis en este caso se vera como la siguiente:
UPDATE "nombre_tabla"
SET column 1 = [[valor1], column 2 = [valor2]
WHERE "condicin";
Nota: Se debe tener especial cuidado con el criterio utilizado para
la seleccin de los datos a ser modificados; procurando no manejar
condiciones que sean de un amplio espectro de inclusin.

Delete.
A veces podemos desear deshacernos de los registros de una tabla.
Para ello, utilizamos el comando DELETE FROM. La sintaxis para
esto es:
DELETE FROM "nombre_tabla"
WHERE "condicin";
Un ejemplo aplicado de esto seria el siguiente:
DELETE FROM Store_Information
WHERE Store_Name = 'Los Angeles';

You might also like