Anda di halaman 1dari 34

TRANSACT SQL

T-SQL

TRANSACT-SQL

SQL (Structured Query Language) es un


lenguaje estructurado de interrogacin y
administracin de BD.

Cmo funciona SQL?


Peticin
SQL

Datos

Sistema
Gestor de
BD

Base de
Datos

TRANSACT-SQL
TRANSACT-SQL (T-SQL) es el lenguaje
de BD que usa MS SQL Server 2008
T-SQL incluye las siguientes categoras:
DQL (Data Query Language) Utilizadas para
obtener datos de BD. Ejemplo: SELECT
DDL (Data Definition Language) Utilizadas para
crear, alterar o borrar objetos de BD. Ejemplo:
CREATE, ALTER y DROP
DML (Data Modification Language) Utilizadas en
la interrogacin y manipulacin de datos en
esquemas ya existentes. Ejemplo: INSERT,
UPDATE Y DELETE

TRANSACT-SQL
T-SQL incluye las siguientes categoras:
TCL (Transaction Control Language) Utilizadas
para confirmar o restaurar transacciones de
BD. Ejemplo: COMMIT, ROLLBACK
DCL (Data Control Language): Utilizadas en el
control de acceso a datos en la BD. Ejemplo:
GRANT y REVOKE
CCL (Cursor Control Language): Utilizadas
para operar sobre filas individuales de una
tabla resultado que consta de varios registros.
Ejemplo: DECLARE CURSOR, FETCH INTO y
UPDATE WHERE CURRENT

DQL (Data Query Language)


Sentencia SELECT no puede escribirse sin la
clusula FROM. La sentencia SELECT recupera
filas de una o ms tablas y su sintaxis ms
simple es:
SELECT seleccionar los campos que deseamos
recuperar de la base de datos, separados por comas.
Si se especifica el smbolo *, se obtendrn todos los
campos de la tabla.
INTO crea una nueva tabla en el grupo de archivos
predeterminado e inserta las filas resultantes de la
consulta en ella
FROM tabla origen
WHERE condicin de origen
GROUP BY expresin de agrupamiento
HAVING condicin de bsqueda
ORDER BY ordenado por [ ASC ascendente| DESC
descendente] ]


SELECT
ALL
DISTINCT

FROM

WHERE

GROUP BY

Significado
Palabra clave que indica que la sentenciade
SQL que queremos ejecutar es de seleccin.
Indicaque queremos seleccionar todos los
valores.Esel valor por defecto y no suele
especificarse casi nunca.
Indicaque queremos seleccionarslo los
valores distintos.
Indica la tabla (o tablas) desde la que
queremos recuperar los datos. En el caso de
que exista ms de una tabla se denomina a la
consulta "consulta combinada" o "join". En las
consultas combinadas es necesario aplicar una
condicin de combinacin a travs de una
clusulaWHERE.
Especifica una condicin que debe cumplirse
para que los datos sean devueltos por la
consulta. Admite los operadores
lgicosANDyOR.
Especifica la agrupacin que se daa losdatos.
Se usa siempre en combinacin con funciones
agregadas.
Especifica una condicin que debe cumplirse
para los datosEspecifica una condicin que
debe cumplirse para que los datos sean
devueltos por la consulta. Su funcionamiento

He aqu algunos ejemplos de mandatos SQL en la estructura SELECT...FROM...:


Selecciona los campos 'nombre' y 'apellidos' de la tabla 'clientes'.
SELECT nombre,apellidos FROM clientes;
SELECT clientes.nombre, producto FROM clientes, productos;
Selecciona el campo 'nombre' de la tabla 'clientes', y el campo 'producto' de la tabla
productos.
Hay que tener en cuenta que si dos tablas poseen el mismo nombre de campo (un 'nombre'
de cliente y un 'nombre' de productos, hay que especificar tambin la tabla a la cual
pertenece dicho campo, ya, que de lo contrario, seleccionara ambos nombres).
SELECT pedidos.* FROM pedidos; o SELECT * FROM pedidos;
Selecciona todos los campos de la tabla 'pedidos'.
Select 'Nombre : ' + space(2), nombre FROM clientes
El resultado es Nombre: Perez

Clasula Where
La clasula WHERE es opcional, y permite seleccionar qu registros aparecern en la
consulta (si no se especifica aparecern todos los registros). Para indicar este conjunto
de registros se hace uso de criterios o condiciones, que no es ms que una comparacin
del contenido de un campo con un determinado valor (este valor puede ser constante
(valor predeterminado), el contenido de un campo, una variable, un control, etc.).
He aqu algunos ejemplos que ilustran el uso de esta clusula:
SELECT * FROM clientes WHERE nombre='ALFREDO';
Selecciona todos los campos de la tabla 'clientes', pero los registros de todos aquellos
clientes que se llamen 'ALFREDO'.
SELECT * FROM abonados WHERE provincia=Arica' OR provincia=Antofagasta_
OR provincia=Serena';
Selecciona todos los campos de la tabla 'abonados', pero los registros de todos los
abonados de las provincias de Arica', Antofagasta' o Serena'.
SELECT * FROM abonados WHERE edad>=18 AND edad<=45;
Selecciona todos los abonados con edades comprendidas entre los 18 y los 45 aos.
SELECT * FROM abonados WHERE edad BETWEEN 18 AND 45;
Selecciona todos los abonados con edades comprendidas entre los 18 y los 45 aos.
SELECT * FROM diario WHERE fecha=#7/1/97#;
Selecciona los apuntes de 'diario' realizados el 1 de Julio de 1.997 (la fecha ha de indicarse
en ingls (mes/da/ao)).

SELECT * FROM diario WHERE fecha<=#12/31/96#;


Selecciona los apuntes de 'diario' realizados antes del 1 de Enero de 1.997.
SELECT * FROM diario WHERE fecha BETWEEN #7/1/97# AND #7/31/97#;
Selecciona los apuntes de 'diario' realizados en Julio de 1.997.
SELECT * FROM clientes WHERE nombre LIKE AL%';
Selecciona los clientes cuyo nombre comience con los caracteres 'AL'.
SELECT * FROM clientes WHERE apellidos LIKE '%EZ';
Selecciona los clientes cuyos apellidos terminen con los caracteres 'EZ'.
SELECT * FROM clientes WHERE apellidos LIKE '%ZAMO%'
Selecciona los clientes cuyos apellidos contengan, en cualquier posicin, los caracteres
'ZAMO'.
SELECT * FROM clientes WHERE ciudad (Santiago', Rancagua',
Chuqicamata',El salvador', La Serena');
Selecciona todos los clientes de las cidades de Sanatiago,Rancagua, Chuquicamata,El
Salvador, La Serena.

Clusula Order By
La clusula ORDER BY suele escribirse al final de un mandato en
SQL. Dicha clusula establece un criterio de ordenacin de los datos
de la consulta, por los campos que se especifican en dicha clusula.
La potencia de ordenacin de dicha clusula radica en la
especificacin de los campos por los que se ordena, ya que el
programador puede indicar cul ser el primer criterio de ordenacin,
el segundo, etc., as como el tipo de ordenacin por ese criterio:
ascendiente o descendiente.
(...) ORDER BY campo1 [ASC/DESC][,campo2 [ASC/DESC]...]
La palabra reservada ASC es opcional e indica que el orden del
campo ser de tipo ascendiente (0-9 /A-Z), mientras que, si se
especifica la palabra reservada DESC, se indica que el orden del
campo es descendiente (9-0 Z-A). Si no se especifica ninguna de
estas palabras reservadas, la clusula ORDER BY toma, por defecto,
el tipo ascendiente [ASC].

He aqu algunos ejemplos:


SELECT nombre, apellidos, telfono FROM clientes ORDER BY apellidos, nombre ;
Crea una agenda telefnica de 'clientes' ordenada por 'apellidos' y 'nombre'.
SELECT * FROM pedidos ORDER BY fecha DESC;
Relacin de 'pedidos' ordenados desde el ms antiguo hasta el ms moderno.
SELECT * FROM abonados ORDER BY apellidos, nombre, fecha_nacimiento
DESC;

Relacin de 'abonados' por 'apellidos' y 'nombre' ascendiente, y por


'fecha_nacimiento' en orden descendiente (del ms viejo al ms joven).

Eliminacin Dinmica De Registros


Quin no ha sentido la necesidad de eliminar de un golpe un grupo
de registros en comn , en lugar de hacerlo uno por uno?. Esta
operacin puede ser mucho ms habitual de lo que parece en un
principio y, por ello, el lenguaje SQL nos permitir eliminar registros
Que cumplan las condiciones o criterios que nosotros le indiquemos
a travs de la sentencia DELETE, cuya sintaxis es la siguiente:
DELETE
FROM
tablas
WHERE
criterios
Donde el parmetro 'tablas' indica el nombre de las tablas de las
cuales se desea eliminar los registros, y, el parmetro 'criterios',
representa las comparaciones o criterios que deben cumplir los
registros a eliminar, respetando a aquellos registros que no los
cumplan. Si por ejemplo - quisiramos eliminar todos los pedidos
realizados por el cliente cuyo cdigo sea 4 en el da de hoy,
utilizaramos la siguiente sentencia:
DELETE FROM pedidos WHERE [codigo cliente]=4 AND fecha=Now();

Aritmtica Con Sql


Quin no ha echado en falta el saber el total de ingresos o de
gastos de
esta
fecha
a
esta
otra?.
Quin no ha deseado saber la media de ventas de los comerciales
en este mes?. Tranquilos!: el lenguaje SQL nos permitir resolver
estas y otras cuestiones de forma muy sencilla, ya que posee una
serie de funciones de carcter aritmtico:
Sumas O Totales
Para sumar las cantidades numticas contenidas en un determinado
campo, hemos de utilizar la funcin SUM, cuya sintaxis es la
siguiente: SUM(expresin)
Donde 'expresin' puede representar un campo o una operacin con
algn campo.
La funcin SUM retorna el resultado de la suma de la expresin
indicada en todos los registros que son afectados por la consulta.
Veamos algunos ejemplos:

SELECT SUM(unidades) FROM pedidos;


Retorna el total de unidades pedidas (la suma de todos los valores almacenados en el campo
'unidades' de la tabla 'pedidos').
SELECT SUM(ingresos-gastos) AS saldo FROM diario;
Retorna el saldo final de una tabla llamada 'diario'.
SELECT SUM(unidades) AS total FROM pedidos WHERE fecha=Now();
Retorna el total de unidades pedidas hoy
Promedios O Medias Aritmticas
Para averiguar el promedio de unas cantidades utilizaremos la funcin AVG, cuya sintaxis es
la siguiente: AVG(expresin)
La funcin AVG retorna el promedio o media aritmtica de la expresin especificada, en
todos los registros afectados por la consulta. Esto es lo mismo que realizar una suma (SUM)
y, despus, dividir el resultado entre el nmero de registros implicados.

He aqu algunos ejemplos:


SELECT AVG(unidades) FROM PEDIDOS;
Retorna el promedio de unidades pedidas (la media de todos los valores almacenados en el
campo 'unidades' de la tabla 'pedidos').
SELECT AVG(unidades) AS media FROM pedidos WHERE fecha=Now();
Retorna el promedio de unidades pedidas hoy

Valores Mnimos Y Mximos


Tambin es posible conocer el valor mnimo o mximo de un campo, mediante las funciones
MIN y MAX, cuyas sintaxis son las siguientes:
MIN(expresin)
MAX(expresin)
He aqu algunos ejemplos:
SELECT MIN(unidades) AS minimo FROM pedidos;
Retorna el pedido ms pequeo y lo refleja en el campo 'minimo'.
SELECT MAX(unidades) AS maximo FROM pedidos WHERE fecha=Now();
Retorna el pedido ms grande de hoy y lo refleja en el campo 'maximo'.
SELECT MAX(gastos) AS maximo FROM diario;
Retorna el gasto ms costoso reflejado en el diario contable, y lo representa en el campo
'maximo'.

Contar Registros
Otra operacin muy comn es realizar un recuento de registros. Aunque a primera vista
pueda parecer poco prctico, la realidad es bien distinta. Q quin no le gustara conocer
cuntos pedidos se han realizado hoy?. O comprobar cuntos pagos se han realizado por
una determinada cantidad?. O saber cuntos clientes cumplen hoy aos, se jubilan, son
menores o mayores de edad, tienen alguna deuda, viven en esta ciudad o en tal otra, tienen
telfono mvil, estn casados o solteros, etc.?. Para conocer cuntos registros hay
utilizaremos la funcin COUNT, cuya sintaxis es la siguiente:
COUNT(expresin)
La funcin COUNT retorna el nmero de registros indicados en la expresin.
He aqu algunos ejemplos:
SELECT COUNT(*) AS num_pedidos FROM pedidos WHERE fecha=Now();
Retorna el nmero de pedidos realizados hoy
SELECT COUNT(*) AS casados FROM clientes WHERE casado=True;
Retorna el nmero de clientes casados.
SELECT COUNT(*) AS num_pagos FROM diario WHERE gastos=25594;
Retorna el nmero de pagos por un importe equivalente a 25594.
SELECT SUM(unidades) AS total, AVG(unidades) AS media, COUNT(*) AS registros,
MAX(unidades) AS maximo, MIN(unidades) AS minimo FROM pedidos WHERE fecha
BETWEEN #1/1/97# AND #6/30/97#;
Retorna el total, la media, el mximo y el mnimo de unidades pedidas, y el nmero de
pedidos realizados, durante el primer semestre de 1.997.

Omisin De Registros Duplicados


En una consulta podra ser til omitir registros que estn duplicados. Por ejemplo,
en nuestros pedidos hay duplicacin, puesto que un cliente realiza varios pedidos
en el mismo da. Quiz necesitemos una historia para conocer los das y los
clientes que realizaron algn pedido, pero no necesitaremos toda la lista, si no que
nos diga, nicamente, mediante una lnea, qu cliente realiz algn pedido y en
qu da. Para ello, utilizaremos el predicado DISTINCT, cuya sintaxis es la
siguiente:
SELECT DISTINCT lista_campos ...
El predicado DISTINCT omite aquellos registros duplicados en los campos
especificados. En el problema expuesto, utilizaremos la siguiente sentencia:
SELECT DISTINCT [codigo cliente],fecha FROM pedidos;
Si deseamos que la consulta sea ms completa y nos visualice tambin el nombre
y los apellidos correspondientes del cliente en cuestin (estos datos estn en la
tabla 'clientes' y no en 'pedidos'), escribiramos este mandato:
SELECT DISTINCT pedidos.fecha, pedidos.[codigo cliente], clientes.nombre,
clientes.apellidos FROM pedidos, clientes
WHERE clientes.[codigo cliente] = pedidos.[codigo cliente];

Grupo De Registros
A veces, puede ser necesario mostrar un resumen de los datos que
tenemos, especificando el total - por ejemplo -, de los ingresos y de
los gastos de cada da, en lugar de visualizar todos los ingresos y
gastos realizados al detalle. Para llevar a cabo esta tarea hemos de
tener en cuenta, en primer lugar, bajo qu campo se van a agrupar
los datos (en lo expuesto, sera el campo fecha), y, a continuacin,
realizar la consulta mediante la clusula GROUP BY, cuya sintaxis es
la siguiente:
SELECT ... FROM ... [WHERE ...] GROUP BY lista_campos
Bsicamente, la clusula GROUP BY agrupa o combina registros con
idntico valor en los campos especificados, en un nico registro. Esto
significa que en un slo registro se mostrar la informacin comn a
muchos registros, como si dijsemos, al terminar las cuentas: "hoy se
ha ingresado tanto y se ha gastado tanto, con lo que hay un beneficio
de tanto", sin necesidad de especificar cada movimiento (cada
ingreso, cada cobro, cada pago, cada factura, cada transferencia
bancaria, etc.).

Imaginemos que queremos hacer un resumen de nuestros pedidos, y queremos saber cuntos
pedidos y unidades han realizado cada uno de nuestros clientes. Para ello, se escribira una sentencia
como sta:
SELECT codigo_cliente, count(codigo_cliente) AS num_pedidos, SUM(unidades) AS cantidad
FROM pedidos GROUP BY codigo_cliente;
Para saber cuntos pedidos se realizaron cada da, escribiramos esta lnea:

SELECT fecha, count(fecha) AS num_pedidos FROM pedidos GROUP BY fecha;


Para conocer cuntas unidades se pidieron cada da, tipearamos esta sentencia:
SELECT fecha, SUM(unidades) AS cantidad FROM pedidos GROUP BY fecha;
En la siguiente sentencia se muestra para cada cliente aquellos das en que se realiz un pedido,
resumindose el nmero de pedidos realizados as como el total de unidades pedidas:
SELECT fecha, codigo_cliente, COUNT(codigo_cliente) AS num_pedidos, SUM(unidades) AS
cantidad FROM pedidos GROUP BY fecha, codigo_cliente HAVING fecha<#1/6/97#;
Como se puede apreciar, se ha especificado una condicin a travs de la clusula HAVING, que indica
los criterios o condiciones a cumplir por los registros a visualizar en un agrupamiento. En esta ocasin
, la condicin era de aquellos pedidos realizados antes del seis de Enero de 1.997.
Para conocer una estadtica de pedidos diaria, utilizaremos la siguiente sentencia:
SELECT fecha, COUNT(fecha) AS pedidos, SUM(unidades) AS subtotal, MIN(unidades) AS minimo,
MAX(unidades) AS maximo, AVG(unidades) AS promedio FROM pedidos GROUP BY fecha;

Combinacin De Datos

Las consultas realizadas hasta ahora requeran de una dosis de habilidad para
conseguir crear un conjunto de datos que tuviese informacin combinada de dos
tablas. Pero, podemos combinar datos de una manera mucho ms sencilla y eficaz:
mediante las operaciones JOIN, las cuales permiten combinar datos de dos tablas.
La operacin JOIN ms comn es INNER JOIN, cuya sintaxis es:
tabla1 INNER JOIN tabla2 ON
tabla1.campo_comn=tabla2.campo_comn
Donde tabla1 y tabla2 representan el nombre de las tablas a combinar. Ambas tablas
han de tener un campo comn o igual para poder realizar correctamente la
combinacin de los datos
Pero veamos un ejemplo para entenderlo mejor:
SELECT * FROM pedidos INNER JOIN clientes ON pedidos.codigo_cliente
=clientes.codigo_cliente;
El resultado ser un conjunto de registros con los datos de las dos tablas. Este
conjunto poseer el nombre de todos los campos de la tabla pedidos y de todos los
campos de la tabla clientes. En cada registro aparecern los datos relacionados, es
decir, que en un pedido aparecern los datos del mismo y los datos personales del
cliente que realiz el pedido.
La operacin INNER JOIN combina los datos de las dos tablas siempre que haya
valores coincidentes en los campos comunes o enlazados.

Existen tambin otras dos formas de combinar: LEFT JOIN y RIGHT JOIN. Ambas
tienen la misma sintaxis que INNER JOIN, pero estas operaciones incluyen todos los
registros de una tabla y aquellos registros de la otra en que los campos comunes sean
iguales. En la operacin LEFT JOIN, incluye todos los registros de la primera
tabla (parmetro tabla1) y aquellos registros de la segunda tabla (parmetro tabla2)
en que los campos comunes sean iguales. En la operacin RIGHT JOIN ocurre lo
contrario: incluye todos los registros de la segunda tabla y aquellos registros de la
primera tabla en que los campos comunes sean iguales.
Aunque la diferencia entre las tres operaciones parezca inexistente, en realidad s
existe. La operacin INNER JOIN realiza una combinacin con todos aquellos
registros de las dos tablas en que el campo comn de ambas tenga el mismo valor,
mientras que las operaciones LEFT JOIN y RIGHT JOIN realizan la combinacin
de todos los registros de la tabla que combinan (ya sea la primera para LEFT JOIN o
la segunda para RIGHT JOIN), aunque en la otra tabla, en el campo comn no haya
coincidencia. La prueba se ve rpidamente si se introduce un cdigo de cliente en el
campo campo_cliente de la tabla pedidos que no exista:
SELECT * FROM pedidos INNER JOIN clientes ON pedidos.codigo_cliente =
clientes.codigo_cliente;

El registro que contiene el pedido del cliente que no existe no aparece,


puesto que no hay coincidencia. Si escribimos:
SELECT * FROM pedidos LEFT JOIN clientes ON
pedidos.codigo_cliente =clientes.codigo_cliente;
Observaremos que aparecen todos los registros de la tabla pedidos,
incluido aquel donde indicamos que el pedido fue solicitado por el
cliente inexistente, pero en los campos relacionados (campos de la
tabla clientes) no habr ningn dato relacionado o combinado. Si
ahora escribimos lo siguiente:
SELECT * FROM pedidos LEFT JOIN clientes ON
pedidos.codigo_cliente =clientes.codigo_cliente;
obtendremos el mismo resultado que con la operacin INNER JOIN,
puesto que se visualizan todos aquellos registros que existen en
clientes y aquellos que coincidan con el campo clave en la tabla
pedidos. Como el cdigo inexistente no existe en la tabla clientes, este
registro no aparece. Para comprobar el efecto an mejor, modificar el
cdigo inexistente en el registro de la tabla pedidos por uno que s
exista. Tras ello, volver a introducir las sentencias SQL para
comprobar la diferencia.

Lo ms normal es utilizar la operacin INNER JOIN para omitir aquellos registros


no coincidentes, aunque las operaciones LEFT JOIN y RIGHT JOIN nos pueden
servir para descubrir entradas errneas en cdigos.
Veamos algunos ejemplos ms:

SELECT fecha, codigo_producto, unidades, apellidos, nombre FROM


pedidos INNER JOIN clientes ON pedidos.codigo_cliente =
clientes.codigo_cliente WHERE fecha<#1/6/97#;
Combina pedidos y clientes, visualizando aquellos pedidos realizados antes del 6 de
Enero de 1997 por los campos fecha, codigo_producto, unidades, apellidos y
nombre.
SELECT fecha, unidades, productos.* FROM pedidos INNER JOIN
productos ON pedidos.codigo_producto = productos.codigo_producto;
Combina pedidos y productos, visualizando los pedidos por los campos fecha y
unidades, y por todos los campos de la tabla productos.
SELECT fecha, unidades, productos.* FROM pedidos INNER JOIN
productos ON pedidos.codigo_producto = productos.codigo_producto
ORDER BY fecha, producto;
El resultado ser el mismo que con el anterior ejemplo, salvo que la presentacin de
los registros se realizar ordenada por la fecha y el nombre del producto.

DML (Data Modification Language)


INSERT
Una sentencia INSERT de SQL agrega uno o ms registros a una (y slo una) tabla en una
base de datos relacional.
Forma bsica
INSERT INTO ''tabla'' (''columna1'', [''columna2,... '']) VALUES (''valor1'', [''valor2,...''])
Las cantidades de columnas y valores deben ser iguales. Si una columna no se especifica, le
ser asignado el valor por omisin. Los valores especificados (o implcitos) por la
sentencia INSERT debern 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
INSERT INTO agenda_telefonica (nombre, numero) VALUES ('Roberto Jeldrez',
4886850);
Inserciones en mltiples filas
Una caracterstica de SQL (desde SQL-92) es el uso de constructores de filas para insertar
mltiples filas a la vez, con una sola sentencia SQL:
INSERT INTO ''tabla'' (''columna1'', [''columna2,... ''])
VALUES (''valor1a'', [''valor1b,...'']), (''value2a'', [''value2b,...'']),...
Esta caracterstica es soportada por DB2, PostgreSQL (desde la versin 8.2), MySQL, y H2.
Ejemplo (asumiendo que 'nombre' y 'nmero' son las nicas columnas en la tabla
'agenda_telefonica'):
INSERT INTO agenda_telefonica VALUES ('Roberto Fernndez', '4886850'), ('Alejandro
Sosa', '4556550');

INSERT INTO VENDEDOR (CODVEN,


NOMVEN)
VALUES (4, 'PABLO MARMOL');
INSERT INTO BEBIDAS (CODBEB, NOMBEB,
PREBEB, CODENV, CANBEB, STOCK,
CODTBE)
VALUES (5, 'BILZ Y PAP', 1200, 1, 2, 500,1);

UPDATE
Una sentencia UPDATE de SQL es utilizada para modificar los valores de un conjunto de
registros existentes en una tabla
El lenguaje SQL nos permite solucionar este problema en cuestin de pocos segundos, ya
que posee una sentencia llamada Update, que se ocupa de los clculos y reemplazos. Su
sintaxis es la siguiente:
UPDATE lista_tablas SET campo=nuevo_valor [,campo=nuevo_valor] [WHERE...]
UPDATE BEBIDAS
SET PREBEB = 1500
WHERE CODBEB = 1
UPDATE BEBIDAS
SET PREBEB = 900
WHERE NOMBEB = 'FANTA
Imaginemos por un momento que el precio de los productos ha subido un 10%, y que
tenemos que actualizar nuestra tabla de productos con el nuevo importe.
UPDATE productos SET pvc=pvc*1.1
La sentencia UPDATE es muy verstil y potente, por lo que podemos realizar reemplazos
condicionantes, ya que permite la clusula WHERE. De ello se deduce que - por ejemplo -, si
se desea bajar un 10% el importe del seguro a aquellos asegurados que cumplan ms de
dos aos de carnet de conducir, y que tengan ms de 22 aos de edad, tendramos que
escribir la siguiente sentencia:
UPDATE asegurados SET importe=importe/1.1 WHERE edad>22 AND YEAR(Now)YEAR(expedicion)>2;

DELETE
Quin no ha sentido la necesidad de eliminar de un golpe un grupo de registros en comn,
en lugar de hacerlo uno por uno?. Esta operacin puede ser mucho ms habitual de lo que
parece en un principio y, por ello, el lenguaje SQL nos permitir eliminar registros que
cumplan las condiciones o criterios que nosotros le indiquemos a travs de la sentencia
DELETE, cuya sintaxis es la siguiente:
DELETE FROM tablas WHERE criterios
Una sentencia DELETE de SQL borra uno o ms registros existentes en una tabla.
DELETE
FROM VENDEDOR
WHERE CODVEN = 4

DDL (Data Definition Language)


Create Table: Crea una tabla
CREATE TABLE nombre Tabla
(nombre_campo1 Tipo_de_variable [(tamao)] [Null/Not Null] [Primay Key] [Check (condicin)],
nombre_campo2 Tipo_de_variable [(tamao)] [Null/Not Null] [Primay Key],
[FOREIGN KEY(Clave
Secundaria) REFERENCES Tabla_Primaria(Clave_Primaria_Tabla_Primaria1,
[Clave_Primaria_Tabla_Primaria2)]
[CONSTRAINT pk_NombreRestriccion PRIMARY KEY (clave1, clave2)]
[CONSTRAINT fk_NombreRestriccion FOREIGN KEY (clave
secundaria) REFERENCES TablaPrimaria(ClavePrimaria)]
etc... );
Se puede aadir, como parmetro adicional a las Claves ajenas (Foreign key), la opcin ON DELETE
CASCADE para que elimine en cascada los registros si se elimina la clave primaria de la que depende.

Ejemplo
CREATE TABLE Clientes
(
Cli_Cod Integer Not Null Primary Key,
Cli_Descripcion Varchar2(30) Not Null,
Cli_Direccion Varchar2(30) Not Null
);

Existe una variacin, que sera la de crear una tabla a partir de una SELECT
CREATE TABLE nombre Tabla
AS
SELECT (Sentencia SQL);
Ejemplo
CREATE TABLE Copia_Clientes
AS
SELECT * FROM Clientes WHERE Modif = 1;
Esto, lo que realiza, es una Select y el resultado de la misma se inserta como una
tabla nueva.

Alter Table: Esta instruccin DDL se suele utilizar para cambiar caractersticas de
las tablas, como pueden ser insertar campos, modificar campos, aadir
restricciones (CHECK, Claves, etc.). Al ser una funcin tan diversas, vamos a
intentar analizarlas todas:
ADD: Se emplea para aadir un nuevo archivo de control a la base de datos
DROP: Permite borrar un archivo de control
RENAME: Permite renombrar un archivo de control

Aadir Restriccin de Clave Primaria: Si no se aade la clave


primaria a la hora de crear la tabla, se puede anexar despus.
ALTER TABLE Nombre Tabla
ADD CONSTRAINT Nombre_Restriccin
PRIMARY KEY (Nombre de Campo1, Nombre de Campo2, ... etc);
Ejemplo
ALTER TABLE Cliente
ADD CONSTRAINT pk_Codigo_Cliente
PRIMARY KEY (Cl_Cliente);

Aadir Restriccin de Clave Secundaria: Se utiliza para definir la relacin entre dos tablas. Es
necesario que en la tabla referenciada est definida la Primary Key, porque la relacin se crea entre la
Primary Key de la tabla referenciada y las columnas que indicamos en la clusula Foreign Key.
ALTER TABLE Nombre Tabla
ADD CONSTRAINT Nombre_Restriccin
FOREIGN KEY (Nombre de Campo1, Nombre de Campo 2, .. etc..)
REFERENCES Tabla Referenciada;
Ejemplo
ALTER TABLE Cliente
ADD CONSTRAINT fk_Codigo_Cliente
FOREIGN KEY (Cl_Cliente)
REFERENCES Nominas;
Aadir Campo Nuevo a Tabla: Sirve para aadir un nuevo campo (una nueva columna) a una tabla
ya creada. Debe de tenerse en cuenta que slo se puede aadir una columna por sentencia.
ALTER TABLE Nombre Tabla
ADD (Nombre_Campo Tipo_de_Variable [(tamao)] [Null/Not Null])
La restriccin NOT NULL slo puede aplicarse si la tabla est vaca, es decir, an no tiene ninguna fila.
Para crear una nueva columna con la restriccin NOT NULL. Si la tabla ya tiene filas (datos), primero
deber aadirse la columna sin la restriccin, rellenar la columna, y modificarla despus para que tenga
la restriccin NOT NULL.
Ejemplo
ALTER TABLE Clientes
ADD (Cl_Poblacion Varchar2 (30) );

Modificar Campo de una Tabla: Podemos cambiar alguna de las caractersticas de un campo,
tambin con este comando
ALTER TABLE Nombre Tabla
MODIFY Nombre_Campo Nuevas_Condiciones
No se pueden borrar ni modificar nombres de columnas ya existentes. Slo se pueden modificar las
variables de tipo carcter a otras variables de tipo carcter si toda la columna est compuesta de NULL,
pero s est permitido aumentar el tamao de las variables carcter. Si puede cambiarse el tamao de
las variables numricas. Las modificaciones mediante DEFAULT de una columan afectarn slo a los
datos que se introduzcan despus de la modificacin, no a laos anteriores.
Ejemplo
ALTER TABLE Clientes
MODIFY Nombre Varchar(30) not null;
En este caso, lo que hemos hecho es cambiar de un tamao 10 que haba en el momento de crear el
campo a uno de tamao 30, aadiendole tambin que no se admiten campos nulos en dicho campo.
Otro caso sera poner un campo por defecto, en este cao, quremos que el nmero de vacantes por
defecto para cualquier curso sea de 20
ALTER TABLE Curso
MODIFY (Vacantes default 20);

Reglas de Validacin (Restriccin Check): Las reglas de validacin son muy importantes porque
permiten establecer una condicin a los valores que debe aceptar una columna.
ALTER TABLE Nombre Tabla
ADD CONSTRAINT CK_NombreTabla_NombreCampo
CHECK (Condicin);
Ejemplo:
ALTER TABLE Curso
ADD CONSTRAINT CK_Curso_PreCurso
CHECK ( Precurso > 0 );
Alter Constraint : En muchos casos debemos garantizar que los valores de una columna o conjunto
de columnas de una tabla acepten slo valores nicos
ALTER CONSTRAINT Nombre Tabla
ADD CONSTRAINT Nombre Restriccin
UNIQUE (Nombre Campo 1, Nombre Campo 2, ... etc.);
Ejemplo
ALTER TABLE Alumno
ADD CONSTRAINT U_Alumno_NomAlumno
UNIQUE (NomAlumno);

Drop: Este comando se utiliza para eliminar objetos de nuestra base de datos. Se suele
utilizar la palabra Drop, a continuacin el nombre del objeto que se desea eliminar (por
ejemplo, Table) y por ltimo, el nombre de dicho objeto (Clientes). Veamos algunos ejemplos:
DROP Nombre_Objeto Nombre_Elemento [CASCADE CONSTRAINTS];
Si se borra una tabla, se borran, a su vez, los ndices a ella asociados, vistas, vistas creadas
a partir de dichas vistas, etc.
Si se borra una tabla a la que otras hacen referencia en claves externas habr que incluir la
clusula CASCADE CONSTRAINT
Ejemplos:
DROP TABLE Clientes
DROP VIEW Informe_Clientes_vw
DROP INDEX pk_Codigo_Cliente

Anda mungkin juga menyukai