Integridad de Los Datos

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

Integridad de los datos

SQL Server 2008 R2



La exigencia de integridad de los datos garantiza la calidad de los datos de la base de datos. Por
ejemplo, si se especifica para un empleado el valor de identificador de 123, la base de datos no
debe permitir que ningn otro empleado tenga el mismo valor de identificador. Si tiene una
columna employee_rating para la que se prevean valores entre 1 y 5, la base de datos no debe
aceptar valores fuera de ese intervalo. Si en la tabla hay una columnadept_id en la que se
almacena el nmero de departamento del empleado, la base de datos slo debe permitir
valores que correspondan a los nmeros de departamento de la empresa.
Dos pasos importantes en el diseo de las tablas son la identificacin de valores vlidos para
una columna y la determinacin de cmo forzar la integridad de los datos en la columna. La
integridad de datos pertenece a una de las siguientes categoras:
Integridad de entidad
Integridad de dominio
Integridad referencial
Integridad definida por el usuario
Integridad de entidad
La integridad de entidad define una fila como entidad nica para una tabla determinada. La
integridad de entidad exige la integridad de las columnas de los identificadores o la clave
principal de una tabla, mediante ndices y restricciones UNIQUE, o restricciones PRIMARY KEY.
Integridad de dominio
La integridad de dominio viene dada por la validez de las entradas para una columna
determinada. Puede exigir la integridad de dominio para restringir el tipo mediante tipos de
datos, el formato mediante reglas y restricciones CHECK, o el intervalo de valores posibles
mediante restricciones FOREIGN KEY, restricciones CHECK, definiciones DEFAULT, definiciones
NOT NULL y reglas.
Integridad referencial
La integridad referencial protege las relaciones definidas entre las tablas cuando se crean o se
eliminan filas. En SQL Server la integridad referencial se basa en las relaciones entre claves
externas y claves principales o entre claves externas y claves exclusivas, mediante restricciones
FOREIGN KEY y CHECK. La integridad referencial garantiza que los valores de clave sean
coherentes en las distintas tablas. Para conseguir esa coherencia, es preciso que no haya
referencias a valores inexistentes y que, si cambia el valor de una clave, todas las referencias a
ella se cambien en consecuencia en toda la base de datos.
Cuando se exige la integridad referencial, SQL Server impide a los usuarios:
Agregar o cambiar filas en una tabla relacionada si no hay ninguna fila asociada en la
tabla principal.
Cambiar valores en una tabla principal que crea filas hurfanas en una tabla relacionada.
Eliminar filas de una tabla principal cuando hay filas relacionadas coincidentes.
Por ejemplo, en las tablas Sales.SalesOrderDetail y Production.Product de la base de datos
AdventureWorks2008R2, la integridad referencial se basa en la relacin entre la clave externa
(ProductID) de la tabla Sales.SalesOrderDetail y la clave principal (ProductID) de la
tabla Production.Product. Esta relacin garantiza que un pedido de ventas no pueda nunca
hacer referencia a un producto que no existe en la tablaProduction.Product.

Integridad definida por el usuario
La integridad definida por el usuario permite definir reglas de empresa especficas que no
pertenecen a ninguna otra categora de integridad. Todas las categoras de integridad admiten
la integridad definida por el usuario. Esto incluye todas las restricciones de nivel de columna y
nivel de tabla en CREATE TABLE, procedimientos almacenados y desencadenadores.

Limitaciones SQL Integrity

Las restricciones de integridad se utilizan para aplicar las reglas de negocio para las
tablas de bases de datos.
Las restricciones disponibles en SQL son clave externa , Not Null , Unique , Check .
Las restricciones se pueden definir de dos maneras
1) Las restricciones pueden especificarse inmediatamente despus de la definicin de
columna. Esto se conoce como definicin de columna.
2) Las restricciones pueden especificarse despus se definen todas las columnas. Esto
se conoce como definicin de tabla.
1) La clave principal de SQL:
Esta restriccin define una columna o combinacin de columnas que identifica de
forma nica cada fila de la tabla.
Sintaxis para definir una clave primaria a nivel de la columna:
column name datatype [CONSTRAINT constraint_name] PRIMARY KEY
Sintaxis para definir una clave primaria a nivel de tabla:
[CONSTRAINT constraint_name] PRIMARY KEY (column_name1,column_name2,..)
column_name1, column_name2 son los nombres de las columnas que definen la
clave primaria.
La sintaxis dentro del soporte, es decir [CONSTRAINT] es opcional.
Por ejemplo: Para crear una tabla de empleados con restriccin de clave primaria, la
consulta sera.
Clave principal a nivel de la columna:
CREATE TABLE employee
( id number(5) PRIMARY KEY,
name char(20),
dept char(10),
age number(2),
salary number(10),
location char(10)
);
O
CREATE TABLE employee
( id number(5) CONSTRAINT emp_id_pk PRIMARY KEY,
name char(20),
dept char(10),
age number(2),
salary number(10),
location char(10)
);
Clave principal a nivel de la columna:
CREATE TABLE employee
( id number(5),
name char(20),
dept char(10),
age number(2),
salary number(10),
location char(10),
CONSTRAINT emp_id_pk PRIMARY KEY (id)
);
Clave principal en el nivel de tabla:
CREATE TABLE employee
( id number(5), NOT NULL,
name char(20),
dept char(10),
age number(2),
salary number(10),
location char(10),
ALTER TABLE employee ADD CONSTRAINT PK_EMPLOYEE_ID PRIMARY KEY (id)
);

2) Tecla de SQL Extranjera o la integridad de referencia:
Esta restriccin identifica cualquier columna hace referencia a la clave principal de otra
tabla. Establece una relacin entre dos columnas en la misma tabla o entre diferentes
tablas. Para una columna que se define como una clave externa, que debera ser un
definido como una clave principal en la tabla que se est refiriendo. Una o ms
columnas se pueden definir como clave externa.
Sintaxis para definir una clave externa a nivel de la columna:
[CONSTRAINT constraint_name] REFERENCES Referenced_Table_name(column_name)
Sintaxis para definir una clave externa a nivel de tabla:
[CONSTRAINT constraint_name] FOREIGN KEY(column_name) REFERENCES
referenced_table_name(column_name);
Por ejemplo:
1) Vamos a usar la tabla "producto" y "order_items." clave externa a nivel de la
columna:
CREATE TABLE product
( product_id number(5) CONSTRAINT pd_id_pk PRIMARY KEY,
product_name char(20),
supplier_name char(20),
unit_price number(10)
);
CREATE TABLE order_items
( order_id number(5) CONSTRAINT od_id_pk PRIMARY KEY,
product_id number(5) CONSTRAINT pd_id_fk REFERENCES, product(product_id),
product_name char(20),
supplier_name char(20),
unit_price number(10)
);
Clave externa a nivel de tabla:
CREATE TABLE order_items
( order_id number(5) ,
product_id number(5),
product_name char(20),
supplier_name char(20),
unit_price number(10)
CONSTRAINT od_id_pk PRIMARY KEY(order_id),
CONSTRAINT pd_id_fk FOREIGN KEY(product_id) REFERENCES product(product_id)
);
2) Si la tabla de empleados tiene un 'mgr_id', es decir, id gerente como una clave
externa que hace referencia a la clave principal 'id' dentro de la misma tabla, la consulta
sera como,
CREATE TABLE employee
( id number(5) PRIMARY KEY,
name char(20),
dept char(10),
age number(2),
mgr_id number(5) REFERENCES employee(id),
salary number(10),
location char(10)
);
3) SQL Not Null Restriccin:
Esta restriccin garantiza que todas las filas de la tabla contienen un valor definido para
la columna que se especifica como no nulo.Lo que significa un valor nulo no est
permitido.
Sintaxis para definir una restriccin NOT NULL:
[CONSTRAINT constraint name] NOT NULL
Por ejemplo: Para crear una tabla de empleados con valor nulo, la consulta sera como
CREATE TABLE employee
( id number(5),
name char(20) CONSTRAINT nm_nn NOT NULL,
dept char(10),
age number(2),
salary number(10),
location char(10)
);
4) SQL Clave nica:
Esta restriccin asegura que una columna o un grupo de columnas en cada fila tienen
un valor distinto. Una columna (s) puede tener un valor nulo, pero los valores no puede
ser duplicada.
Sintaxis para definir una clave nica a nivel de la columna:
[CONSTRAINT constraint_name] UNIQUE
Sintaxis para definir una clave nica a nivel de tabla:
[CONSTRAINT constraint_name] UNIQUE(column_name)
Por ejemplo: Para crear una tabla de empleados con clave nica, la consulta sera como,
Clave nica a nivel de la columna:
CREATE TABLE employee
( id number(5) PRIMARY KEY,
name char(20),
dept char(10),
age number(2),
salary number(10),
location char(10) UNIQUE
);
o
CREATE TABLE employee
( id number(5) PRIMARY KEY,
name char(20),
dept char(10),
age number(2),
salary number(10),
location char(10) CONSTRAINT loc_un UNIQUE
);
Clave nica a nivel de tabla:
CREATE TABLE employee
( id number(5) PRIMARY KEY,
name char(20),
dept char(10),
age number(2),
salary number(10),
location char(10),
CONSTRAINT loc_un UNIQUE(location)
);
5) SQL restriccin CHECK:
Esta restriccin define una regla de negocio en una columna.Todas las filas deben
cumplir esta regla. La restriccin se puede aplicar para una sola columna o un grupo de
columnas.
Sintaxis para definir una restriccin de comprobacin:
[CONSTRAINT constraint_name] CHECK (condition)
Por ejemplo: En la tabla de empleados para seleccionar el sexo de una persona, la
consulta sera como
Compruebe restriccin a nivel de la columna:
CREATE TABLE employee
( id number(5) PRIMARY KEY,
name char(20),
dept char(10),
age number(2),
gender char(1) CHECK (gender in ('M','F')),
salary number(10),
location char(10)
);
Compruebe restriccin a nivel de tabla:
CREATE TABLE employee
( id number(5) PRIMARY KEY,
name char(20),
dept char(10),
age number(2),
gender char(1),
salary number(10),
location char(10),
CONSTRAINT gender_ck CHECK (gender in ('M','F'))
);

SQL CREATE TABLE Syntax
CREATE TABLE table_name
(
column_name1 data_type(size),
column_name2 data_type(size),
column_name3 data_type(size),
....
);




CREATE TABLE CUSTOMERS
(
ID INT NOT NULL,
NAME VARCHAR (20) NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR (25) ,
SALARY DECIMAL (18, 2),
PRIMARY KEY (ID))
);

Restricciones de integridad en SQL
ndices
Los ndices constituyen un mecanismo informtico para acelerar el acceso a datos
almacenados en ficheros. Son importantes para posibilitar un procesamiento eficiente
de las operaciones sobre la base de datos y tambin para garantizar un cumplimiento
eficiente de las restricciones de integridad referencial. Los ndices estn asociados a
atributos concretos de una tabla (un solo atributo o la agregacin de varios atributos) y
su funcin es agilizar las operaciones que se realicen sobre dichos atributos.
Fsicamente adoptan la forma de un fichero adjunto a la tabla. Existen varios tipos de
ndices y una gran variedad de tcnicas de implementacin, algunas de ellas muy
sofisticadas, pero siempre se persigue el objetivo general de evitar en lo posible el
acceso secuencial a las tuplas de una tabla para realizar una operacin. Considrese
por ejemplo una seleccin en una tabla condicionada al valor de un determinado
atributo:
La obtencin de las tuplas de salida requiere en principio realizar un recorrido
secuencial de todas las tuplas de la tabla para ver en cules se produce la igualdad. Si
la cardinalidad de la tabla es grande (muchas filas) este recorrido puede consumir
mucho tiempo. Por el contrario si se dispone de un ndice asociado al correspondiente
atributo de la tabla entonces la consulta anterior es muy rpida y el acceso a las tuplas
que satisfacen la igualdad es inmediato gracias al acceso directo o indexado. El ndice
tambin permite optimizar el acceso con condicionales de menor, mayor, etc.
Un ndice est siempre asociado a un subconjunto de los atributos de una tabla. La
creacin de ndices se realiza mediante la sentenciaCREATE INDEX de la siguiente
manera:
CREATE INDEX nombre_indice ON nombre_tabla(atributo1, atributo2, ...);
La eliminacin o borrado de ndices se realiza mediante la sentencia DROP INDEX de la
siguiente manera:
DROP INDEX nombre_indice;
SELECT * FROM tabla WHERE atributo=valor;
Para una misma tabla pueden crearse varios ndices y cada uno de ellos puede estar
asociado a un solo atributo o en general a la agregacin de varios atributos (clave de
bsqueda). No es obligatoria la existencia de ndices pero lo normal es crear
automticamente por defecto un ndice para la clave primaria de una tabla y las
alternas que pudieran existir (restricciones de tipo UNIQUE). No es obligatorio que los
atributos sobre los que se define un ndice deban aceptar nicamente valores nicos o
no repetidos.
Los ndices pueden crearse y borrarse dinmicamente en el tiempo segn se necesiten
para realizar alguna consulta determinada. Se ha de tener muy presente que la
creacin de un ndice requiere de un cierto tiempo de computacin y de cantidad de
memoria de almacenamiento secundario (disco). En general el efecto de un ndice es
escaso en tablas con cardinalidad (nmero de filas) pequea pero puede llegar a ser
muy relevante en tablas grandes.
Internamente los ndices se implementan utilizando una potente estructura de datos
denominada rbol-B. Aunque no es lo corriente existen implementaciones en las
cuales las columnas indexadas se almacenan una sola vez, no en el fichero ndice y en
la tabla aparte. Esto evidentemente reduce el tiempo de actualizacin del ndice y
requiere menos espacio en disco.
La gestin de los ndices se realiza de manera inteligente por el propio sistema. No es
necesario indicar explcitamente qu ndices se van a utilizar para una consulta
determinada sino que es el propio SGBD, al analizar la condicin de la consulta
(clausula WHERE) el que selecciona automticamente el ndice a usar.
Un ndice asociado a un conjunto de atributos de una tabla debe actualizarse cada vez
que se realice alguna de las siguientes operaciones:
1. Insercin de una nueva tupla.
1. Borrado de una tupla.
1. Modificacin del valor de alguno de los atributos indexados.
Esta actualizacin la realiza automticamente el SGBD y requiere de un tiempo de
procesado usualmente pequeo dependiente del nmero de filas afectadas por la
operacin. La conveniencia de utilizar un ndice sobre unos atributos depender de la
frecuencia relativa con que se realicen operaciones de consulta sobre esos atributos.
En general durante la utilizacin prctica de una base de datos las operaciones de
consulta son con mucho las ms frecuentes.
A modo de ejemplo veamos el caso de una operacin de consulta en una tabla basada
en una comparacin de igualdad de los valores de dos atributos a1 y a2, segn se
hayan definido ndices o no.
SELECT * FROM tabla WHERE a1=v1 AND a2=v2;
ndice Procesamiento
Ninguno
Recorrido de todas las filas de la tabla comprobando la condicin
compuesta.
Sobre a1
1. Usar el ndice para obtener directamente todas las tuplas que
satisfagan la igualdad del atributo a1 con el valor v1.
2. Examinar secuencialmente todas esas tuplas comprobando la
igualdad del atributo a2 con el valor v2.
Sobre a2
1. Usar el ndice para obtener directamente todas las tuplas que
satisfagan la igualdad del atributo a2 con el valor v2.
2. Examinar secuencialmente todas esas tuplas comprobando la
igualdad del atributo a1 con el valor v1.
Un ndice sobre a1 y
otro sobre a2
1. Usar el ndice sobre a1 para obtener todas las tuplas que satisfagan
la igualdad del atributo a1 con el valor v1.
2. Usar el ndice sobre a2 para obtener todas las tuplas que satisfagan
la igualdad del atributo a2 con el valor v2.
3. La salida es la interseccin de esos dos conjuntos de tuplas.
ndice mltiple:
Agregacin de a1 y a2
Usar el ndice para obtener directamente todas las tuplas que
verifican la condicin compuesta de igualdad.
En general, para una condicin compuesta de este tipo el procesamiento ms eficiente
se obtiene para un ndice agregado de los dos atributos, aunque la eficiencia prctica
depender del nmero de tuplas que verifiquen las condiciones. Puede darse el caso
de que un ndice mltiple que sea bastante bueno para realizar eficientemente
consultas con condiciones de igualdad no lo sea para comparaciones de menor o
mayor.
Restricciones
Una caracterstica deseable en un SGBD relacional es que la especificacin de
restricciones pueda realizarse ntegramente utilizando el lenguaje de definicin de
datos (DDL) de manera que forme parte integrada del propio esquema relacional en s
y no sea algo externo que se gestiona por el usuario a su libre parecer o por la lgica
de las aplicaciones que se ejecuten sobre la base de datos. El lenguaje SQL posibilita
los siguientes tipos de restricciones que se especifican durante la creacin de las
tablas:
Restriccin Efecto
NOT NULL No se permite que un atributo tome valores nulos.
UNIQUE
No se permiten valores repetidos en un atributo o
agregacin de atributos. Especificacin de claves candidatas.
Se aceptan mltiples valores nulos.
PRIMARY KEY
Definicin de un atributo o agregacin de atributos como
clave primaria. Implcitamente NOT NULL.
FOREIGN KEY
(atributo1, ...)
Definicin de un atributo o agregacin de atributos como
clave ajena. Si no se especifica lo contrario se permiten
REFERENCES
nombre_tabla(atributo1,
...)
ON DELETE CASCADE
valores nulos, lo cual no suele ser recomendable. Los
atributos referenciados han de constituir clave primaria o
clave alternativa. Si los atributos referenciados son clave
primaria en la otra tabla basta con especificar el nombre de
la tabla. La clausula ON DELETE CASCADE es opcional y
hace referencia a si se deben propagar los borrados de
tuplas en la tabla referenciada en aquellas tablas que las
referencien. Si no se incluye se rechazan como errneos los
borrados de tuplas que ocasionen violacin de la integridad
referencial.
CHECK (predicado)
Cada tupla de la tabla debe verificar el predicado lgico
referente a la validez del valor concreto de un atributo.
Pueden incluirse subconsultas que hagan referencia a otras
tablas.
Las restricciones han de evaluarse cuando se insertan tuplas, cuando se borran tuplas
o bien cuando se modifica el valor de un atributo en alguna tupla ya que en todo
momento ha de garantizarse el mantenimiento de la integridad referencial. Existe un
mecanismo que posibilita agrupar varias operaciones de manera que la verificacin de
las restricciones no se realice para cada operacin individual sino que se pospone
hasta la realizacin de todo el conjunto de operaciones. Estas comprobaciones sobre si
se cumplen o no las restricciones impuestas pueden ser computacionalmente costosas
segn el tamao de la base de datos y la complejidad de la restriccin.
Las restricciones pueden tener asociado un nombre si se definen de la siguiente
manera:
CONSTRAINT nombre_constraint definicin_constraint
Por defecto una restriccin est activa tras su definicin. Las restricciones con nombre
pueden activarse o desactivarse a voluntad mediante la clausula ENABLE
CONSTRAINT o DISABLE CONSTRAINT utilizadas dentro de una sentencia ALTER
TABLE de la siguiente manera:
ALTER TABLE nombre_tabla ENABLE CONSTRAINT nombre_constraint;
ALTER TABLE nombre_tabla DISABLE CONSTRAINT nombre_constraint;
Los asertos son predicados lgicos que ha de cumplir la base de datos considerada
como un todo (no cada tupla de una tabla por separado, como es el caso de
un constraint) y que pueden involucrar un nmero cualquiera de atributos en todas
las tuplas de una o varias tablas. Permiten expresar condiciones complejas que se
desea que la base de datos satisfaga siempre. No se especifican dentro de una
sentencia de creacin de tabla sino que pueden crearse y eliminarse de manera
independiente mediante las sentencias CREATE ASSERTION y DROP ASSERTION de la
siguiente manera:
CREATE ASSERTION nombre_aserto CHECK (predicado);
DROP ASSERTION nombre_aserto;
Naturalmente el predicado lgico a satisfacer puede incluir varias sentencias de
seleccin sobre cualesquiera tablas de la base de datos. Al crear un aserto el SGBD
comprueba su validez sobre el estado actual de la base de datos. En lo sucesivo solo se
permitirn inserciones, modificaciones y borrados en la base de datos que no hagan
que se viole el aserto. Esta comprobacin de la validez del predicado puede requerir
un relativamente elevado coste computacional.
Valores nulos
La posibilidad de asignar valores nulos a los atributos permite aadir ciertas
posibilidades semnticas a la informacin almacenada en la base de datos (dato no
relevante, desconocido, etc). Sin embargo la interpretacin que las sentencias SQL
hagan de los valores nulos puede resultar problemtica y producir resultados un tanto
extraos. Cmo debe reaccionar una operacin que acta sobre valores nulos es algo
que suele ser particular de cada SGBD concreto.
Es comn que el resultado de cualquier operacin aritmtica (suma, resta,
multiplicacin, etc) que involucra un valor nulo, sea nulo. A las comparaciones y
operaciones lgicas en las que aparecen valores nulos se les suele otorgar un valor
lgico de falsedad por defecto aunque se podra argumentar que el valor lgico
resultante debera significar desconocido.
En una clausula de ordenacin ORDER BY la salida que se corresponde con valores
nulos para el criterio de ordenacin se suele incorporar al principio del todo o bien al
final, ante la imposibilidad de ordenar utilizando los valores nulos. Las funciones de
agregacin como las de suma, mximo, mnimo y media aritmtica simplemente
ignoran los valores nulos en su entrada. La excepcin es la funcin de cuenta COUNTque
s cuenta los valores nulos. Si se aplica una funcin de agregacin sobre una coleccin
de datos vaca se devuelve un valor nulo a excepcin nuevamente de la funcin de
cuenta que devuelve un cero.
Para estudiar el efecto de los valores nulos vase la salida de una serie de operaciones
sobre la siguiente tabla t de ejemplo compuesta de cuatro atributos.
a
b c d

4 10 100 NULL
1 15 NULL NULL
2 200 200 NULL
5 NULL 300 NULL
8 13 NULL NULL
6 13 400 NULL
3 10 500 NULL
7 NULL NULL NULL
SELECT * FROM t;

A B C D
---------- ---------- ---------- ----------
4 10 100
1 15
2 200 200
5 300
8 13
6 13 400
3 10 500
7

SELECT a,b FROM t ORDER BY b;

A B
---------- ----------
4 10
3 10
8 13
6 13
1 15
2 200
5
7

SELECT b,c FROM t WHERE b=c;

B C
---------- ----------
200 200

SELECT MIN(b) FROM t;

MIN(B)
----------
10

SELECT MIN(d) FROM t;

MIN(D)
----------

SELECT SUM(c) FROM t;

SUM(C)
----------
1500

SELECT SUM(d) FROM t;

SUM(D)
----------

SELECT COUNT(*) FROM t WHERE b<100;

COUNT(*)
----------
5

SELECT COUNT(*) FROM t WHERE d>0;

COUNT(*)
----------
0

SELECT COUNT(*) FROM t WHERE c!=0;

COUNT(*)
----------
5
En los siguientes ejemplos puede comprobarse la intervencin de los valores nulos en
las operaciones de conjuntos.
SELECT b FROM t WHERE b NOT IN (SELECT a FROM t);

B
----------
10
15
200
13
13
10

SELECT c FROM t WHERE c IN (SELECT d FROM t);

no rows selected

SELECT d FROM t UNION ALL SELECT b FROM t;

D
----------

10
15
200

D
----------

13
13
10

16 rows selected.
Veamos ahora que la intervencin de un valor nulo en una operacin aritmtica
ocasiona un resultado igualmente nulo.
SELECT b+c FROM t;

B+C
----------
110

400
SELECT a*d FROM t;

A*D
----------

8 rows selected.


413
510

8 rows selected.

Definicin de ndices
Un ndice es una estructura de datos que permite acceder a diferentes filas de una misma tabla
a travs de un campo (o campos clave).
Un ndice permite un acceso mucho ms rpido a los datos.
[arriba]

Introduccin a los ndices.
Para entender lo que es un ndice debemos saber primero como se almacena la
informacin internamente en las tablas de una base de datos. Cada tabla se divide en pginas
de datos, imaginemos un libro, podriamos escribirlo en "una sola hoja enorme" al estilo
pergamino egipcio, o bien en pginas a las que podemos acceder rpidamente a traves de un
ndice. Est idea es la que se aplica en el mundo de las bases de datos, la informacin esta
guardada en una tabla (el libro) que tiene muchas hojas de datos (las pginas del libro), con un
ndice en el que podemos buscar la informacin que nos interesa.
Si queremos buscar la palabra zapato en un diccionario , qu hacemos?
Leemos todo el diccionario hasta encontrar la palabra, con lo que nos habremos leido el
diccionario enterito (seguro que aprenderiamos un montn!)
Buscamos en el ndice en que pgina est la letra z, y es en esa pgina donde buscamos.
Ni que decir tiene que la opcin dos es la correcta, y es de este modo como se utiliza un ndice
en las bases de datos, se define el nidice a travs de un campo (o campos) y es a partir de
este punto desde donde de busca.

Los ndices se actualizan automticamente cuando realizamos operaciones de escritura en la
base de datos. Este es un aspecto muy importante de cara al rendimiento de las operaciones de
escritura, ya que adems de escribir los datos en la tabla se escribiran tambin en el indice. Un
nmero elevado de ndices har ms lentas estas operaciones. Sin embargo, salvo casos
excepcionales, el beneficio que aportan los indices compensa (de largo) esta penalizacin.
arriba

Creacin de ndices
La creacin de ndices, como ya hemos visto, permite acelerar las consultas que se realizan en
la base de datos.
Las sentencias de SQL para manipular ndices son:

CREATE INDEX;

DROP INDEX;

La sintaxis para la creacin de indices es la siguiente:

CREATE [UNIQUE] INDEX <nombre_indice>
ON <nombre_tabla>(
<nombre_campo> [ASC | DESC]
{,<nombre_campo> [ASC | DESC]})
);
La plabra clave UNIQUE especifica que que no pueden existir claves duplicadas en el ndice.
ASC | DESC especifican el criterio de ordenacin elegido, ascendente o descendente, por
defecto es ascendente.
Ejemplo: En el apartado dedicado a la definicin de tablas creamos la tabla tClientes, este
ejmplo crea un ndice nico en el campo NIF. Esto nos permitir buscar mucho mas rpido por
el campo NIF y nos asegurar que no tengamos dos NIF iguales.

CREATE UNIQUE INDEX UIX_CLIENTES_NIF
ON tCLIENTES (NIF);
Las claves primarias son ndices.
Los nombres de los ndices deben ser nicos.
Para eliminar un ndice debemos emplear la sentencia DROP INDEX.

DROP INDEX <nombre_tabla>.<nombre_indice>;
Ejemplo:Para eliminar el ndice creado anteriormente.

DROP INDEX tCLIENTES.UIX_CLIENTES_NIF;
Directrices generales para
disear ndices
SQL Server 2008 R2
Otras versiones

Personas que lo han encontrado til: 5 de 7 - Valorar este tema
Los administradores de bases de datos ms experimentados pueden disear un buen conjunto
de ndices, pero esta tarea es muy compleja, consume mucho tiempo y est sujeta a errores,
incluso con cargas de trabajo y bases de datos con un grado de complejidad no excesivo. La
comprensin de las caractersticas de la base de datos, las consultas y las columnas de datos
facilita el diseo de los ndices.
Consideraciones acerca de las bases de datos
Cuando disee un ndice, tenga en cuenta las siguientes directrices acerca de la base de datos:
Si se utiliza un gran nmero de ndices en una tabla, el rendimiento de las instrucciones
INSERT, UPDATE, DELETE y MERGE se ver afectado, ya que todos los ndices deben
ajustarse adecuadamente a medida que cambian los datos de la tabla.
o Evite crear demasiados ndices en tablas que se actualizan con mucha
frecuencia y mantenga los ndices estrechos, es decir, defnalos con el menor
nmero de columnas posible.
o Utilice un nmero mayor de ndices para mejorar el rendimiento de consultas
en tablas con pocas necesidades de actualizacin, pero con grandes volmenes
de datos. Un gran nmero de ndices contribuye a mejorar el rendimiento de las
consultas que no modifican datos, como las instrucciones SELECT, ya que el
optimizador de consultas dispone de ms ndices entre los que elegir para
determinar el mtodo de acceso ms rpido.
La indizacin de tablas pequeas puede no ser una solucin ptima, porque puede
provocar que el optimizador de consultas tarde ms tiempo en realizar la bsqueda de
los datos a travs del ndice que en realizar un simple recorrido de la tabla. De este
modo, es posible que los ndices de tablas pequeas no se utilicen nunca; sin embargo,
sigue siendo necesario su mantenimiento a medida que cambian los datos de la tabla.
Los ndices en vistas pueden mejorar de forma significativa el rendimiento si la vista
contiene agregaciones, combinaciones de tabla o una mezcla de agregaciones y
combinaciones. No es necesario hacer referencia de forma explcita a la vista en la
consulta para que el optimizador de consultas la utilice. Para obtener ms informacin,
vea Disear vistas indizadas.
Utilice el Asistente para la optimizacin de motor de base de datos para analizar las
bases de datos y crear recomendaciones de ndices. Para obtener ms informacin,
vea Descripcin del Asistente para la optimizacin de motor de base de datos.
Consideraciones sobre las consultas
Cuando disee un ndice, tenga en cuenta las siguientes directrices acerca de las consultas:
Cree ndices no agrupados en todas las columnas que se utilizan con frecuencia en
predicados y condiciones de combinacin de las consultas.
Importante
Evite agregar columnas innecesarias. Si agrega demasiadas columnas de ndice, puede reducir el espacio en
disco y el rendimiento del mantenimiento del ndice.
La utilizacin de ndices puede mejorar el rendimiento de las consultas, ya que los datos
necesarios para satisfacer las necesidades de la consulta existen en el propio ndice. Es
decir, slo se necesitan las pginas de ndice y no las pginas de datos de la tabla o el
ndice agrupado para recuperar los datos solicitados; por tanto, se reduce la E/S global
en el disco. Por ejemplo, una consulta de las columnas a y b de una tabla que dispone
de un ndice compuesto creado en las columnas a, b y c puede recuperar los datos
especificados del propio ndice.
Escriba consultas que inserten o modifiquen tantas filas como sea posible en una sola
instruccin, en lugar de utilizar varias consultas para actualizar las mismas filas. Al
utilizar slo una instruccin, se puede aprovechar el mantenimiento de ndices
optimizados.
Analice el tipo de la consulta y cmo se utilizan las columnas en ella. Por ejemplo, una
columna utilizada en una consulta de coincidencia exacta sera una buena candidata
para un ndice no agrupado o agrupado. Para obtener ms informacin, vea Tipos de
consultas e ndices.
Consideraciones sobre las columnas
Cuando disee un ndice, tenga en cuenta las siguientes directrices acerca de las columnas:
Utilice una longitud corta en la clave de los ndices agrupados. Los ndices agrupados
tambin mejoran si se crean en columnas nicas o que no admitan valores NULL. Para
obtener ms informacin, vea Directrices para disear ndices clster.
Las columnas con tipos de
datos ntext, text, image, varchar(max), nvarchar(max) y varbinary(max)
no se pueden especificar como columnas de clave de ndice. Sin embargo, los tipos de
datos varchar(max), nvarchar(max), varbinary(max) y xml pueden
participar en un ndice no agrupado como columnas de ndice sin clave. Para obtener
ms informacin, vea ndice con columnas incluidas.
El tipo de datos xml slo puede ser una columna de clave en un ndice XML. Para
obtener ms informacin, vea ndices en columnas del tipo de datos XML.
Examine la unicidad de las columnas. Un ndice nico en lugar de un ndice no nico
con la misma combinacin de columnas proporciona informacin adicional al
optimizador de consultas y, por tanto, resulta ms til. Para obtener ms informacin,
veaDirectrices para disear ndices nicos.
Examine la distribucin de los datos en la columna. A menudo, se crean consultas cuya
ejecucin es muy larga al indizar una columna con pocos valores nicos, o bien al
realizar una combinacin en dicha columna. Se trata de un problema fundamental con
los datos y la consulta, y normalmente no se puede resolver sin identificar esta
situacin. Por ejemplo, una agenda telefnica ordenada por apellidos no localizar
rpidamente a una persona si todas las personas de la ciudad se llaman Smith o Jones.
Para obtener ms informacin acerca de la distribucin de datos, vea Utilizar las
estadsticas para mejorar el rendimiento de las consultas.
Considere la posibilidad de usar ndices filtrados en columnas que tengan subconjuntos
bien definidos, por ejemplo columnas dispersas, columnas con una mayora de valores
NULL, columnas con categoras de valores y columnas con intervalos de valores
diferenciados. Un ndice filtrado bien diseado puede mejorar el rendimiento de las
consultas, as como reducir los costos de almacenamiento y de mantenimiento de los
ndices. Para obtener ms informacin, vea Directrices generales para disear ndices
filtrados.
Tenga en cuenta el orden de las columnas si el ndice va a contener varias columnas. La
columna que se utiliza en la clusula WHERE en una condicin de bsqueda igual a (=),
mayor que (>), menor que (<) o BETWEEN, o que participa en una combinacin, debe
situarse en primer lugar. Las dems columnas deben ordenarse basndose en su nivel
de diferenciacin, es decir, de ms distintas a menos distintas.
Por ejemplo, si el ndice se define como LastName, FirstName, resultar til si el criterio
de bsqueda es WHERE LastName = 'Smith' o WHERE LastName = Smith AND
FirstName LIKE 'J%'. Sin embargo, el optimizador de consultas no utilizar el ndice
en una consulta que slo busque FirstName (WHERE FirstName = 'Jane').
Tenga en cuenta la indizacin de columnas calculadas. Para obtener ms informacin,
vea Crear ndices en columnas calculadas.
Caractersticas de los ndices
Despus de determinar que un ndice resulta adecuado para una consulta, puede seleccionar el
tipo de ndice que mejor se ajusta a la situacin. Entre las caractersticas de los ndices se
incluyen:
ndices agrupados y no agrupados
ndices exclusivos y no exclusivos
ndices de una sola columna y de varias columnas
Orden ascendente o descendente en las columnas del ndice
ndices de tabla completa y filtrados en ndices no agrupados





Creacin de Constraint

Los constraints se utilizan para prevenir el registro de datos no vlidos a las tablas.
Se pueden utilizar los constraints para:

- Imponer reglas en los datos de una tabla cuando una fila es insertada, modificada o
borrada de la tabla, el constraint se debe cumplir para que la operacin se realice.
- Previene la eliminacin de una tabla si existen dependencias con otras.
Las reglas de negocio se implementan mediante restricciones (constraints), disparadores
(triggers) o cdigo de aplicacin.
Las restricciones se almacenan en el SQL Server en las tablas syscomments, sysreferences y
sysconstraints.

La sintaxis de creacin de una Tabla en SQL server es la siguiente, es posible crear
una tabla con sus constraint incluidos:
CREATE TABLE Tabla
( { < definicinColumna >
| < restriccinTabla > } [ ,...n ])
< definicinColumna > ::= { columnatipoDeDatos }
[ [ DEFAULT expresinConstante ]
[ < restriccinColumna > ] [ ,..n]
< restriccinColumna > ::=
[ CONSTRAINT nombreRestriccin ]
| [ { PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED ] ]
| [ [ FOREIGN KEY ]
REFERENCES tablaRef [ ( columnaRef ) ]
[ ON DELETE { CASCADE | NO ACTION } ]
[ ON UPDATE { CASCADE | NO ACTION } ]]
| CHECK ( expresinLgica ) }
< restriccinTabla > ::=
[ CONSTRAINT nombreRestriccin ]
{ [ { PRIMARY KEY | UNIQUE }
[CLUSTERED | NONCLUSTERED]
{ ( columna [ ASC | DESC ] [ ,...n ] ) } ]
| FOREIGN KEY
[ ( columna [ ,...n ] ) ]
REFERENCES tablaRef [ ( columnaRef [ ,...n ] ) ]
[ ON DELETE { CASCADE | NO ACTION } ]
[ ON UPDATE { CASCADE | NO ACTION } ]
| CHECK ( condicionesBsqueda ) }

Creacin de una Tabla de Ejemplo:
USE northwind
CREATE TABLE dbo.Products
(
ProductID int IDENTITY (1,1) NOT NULL,
ProductName nvarchar (40) NOT NULL,
SupplierID int NULL,
CategoryID int NULL,
QuantityPerUnit nvarchar (20) NULL,
UnitPrice money NULL CONSTRAINT DF_Products_UnitPrice DEFAULT(0),
UnitsInStock smallint NULL CONSTRAINT DF_Products_UnitsInStock DEFAULT
(0),
UnitsOnOrder smallint NULL CONSTRAINT DF_Products_UnitsOnOrder DEFAULT
(0),
ReorderLevel smallint NULL CONSTRAINT DF_Products_ReorderLevel DEFAULT
(0),
Discontinued bit NOT NULL CONSTRAINT DF_Products_Discontinued DEFAULT(
0),
CONSTRAINT PK_Products PRIMARY KEY CLUSTERED (ProductID),
CONSTRAINT FK_Products_Categories FOREIGN KEY (CategoryID)
REFERENCES dbo.Categories(CategoryID) ON UPDATE CASCADE,
CONSTRAINT FK_Products_Suppliers FOREIGN KEY (SupplierID)
REFERENCES dbo.Suppliers(SupplierID) ON DELETE CASCADE,
CONSTRAINT CK_Products_UnitPrice CHECK (UnitPrice >= 0),
CONSTRAINT CK_ReorderLevel CHECK (ReorderLevel >= 0),
CONSTRAINT CK_UnitsInStock CHECK (UnitsInStock >= 0),
CONSTRAINT CK_UnitsOnOrder CHECK (UnitsOnOrder >= 0)
)
GO
Revisin de constraint en una tabla:
use northwind
go
sp_helpconstraint customers
Obtener informacin de los Constraint a travs de las tablas del sistema:
Select * from information_schema.table_constraints
Select * from information_schema.check_constraints
Select * from information_schema.referential_constraints
go
Creacin de Constraint:
DROP TABLE INSTRUCTORES
CREATE TABLE INSTRUCTORES
(CODIGO INT IDENTITY(1,1) NOT NULL,
NOMBRE VARCHAR(50),
APELLIDO VARCHAR(50),
TELEFONO VARCHAR(10)
)
Llave Primaria:
ALTER TABLE INSTRUCTORES
ADD
CONSTRAINT PK_INSTRUCTORES PRIMARY KEY CLUSTERED (CODIGO)
Valor Predeterminado:
ALTER TABLE INSTRUCTORES
ADD
CONSTRAINT DF_NOMBRE DEFAULT SIN NOMBRE
FOR NOMBRE
Agregar una Columna a la tabla para agregar luego un constraint:

ALTER TABLE INSTRUCTORES
ADD NACIMIENTO SMALLDATETIME
Restriccin Check para fecha de nacimiento:
ALTER TABLE INSTRUCTORES
ADD
CONSTRAINT CH_CUMPLEAOS CHECK (NACIMIENTO>=1995-01-
01 ANDNACIMIENTO<=GETDATE())

Restriccin Unique:
ALTER TABLE INSTRUCTORES
ADD
CONSTRAINT U_APELLIDO UNIQUE NONCLUSTERED (APELLIDO)

Sintaxis de una llave Foranea:

[CONSTRAINT nombreRestriccin]
[FOREIGN KEY] [(columna[,n])]
REFERENCES tablaRef [(columnaRef [,n])].
[ ON DELETE { CASCADE | NO ACTION } ]
[ ON UPDATE { CASCADE | NO ACTION } ]
Borrar un Constraint
ALTER TABLE INSTRUCTORES
DROP CONSTRAINT CH_CUMPLEAOS
Para que la llave fornea y la restriccin Check no comprueben los datos ya
ingresados:

USE Northwind
ALTER TABLE dbo.Employees
WITH NOCHECK->NO COMPRUEBA LOS DATOS EXISTENTES
ADD CONSTRAINT FK_Employees_Employees
FOREIGN KEY (ReportsTo)
REFERENCES dbo.Employees(
USE Northwind
ALTER TABLE dbo.Employees
WITH NOCHECK
ADD CONSTRAINT FK_Employees_Employees
FOREIGN KEY (ReportsTo)
REFERENCES dbo.Employees(EmployeeID)

Deshabilitar los constraint, para que los nuevos datos no se verifiquen por la
restriccin

USE Northwind
ALTER TABLE dbo.Employees
NOCHECK
CONSTRAINT FK_Employees_Employees
USE Northwind
ALTER TABLE dbo.Employees
NOCHECK
CONSTRAINT FK_Employees_Employees
REGLAS.
Un objeto de SQL Server son las reglas que son como constraint de tipo check, pero
que pueden asociarse a mas de un campo.

CREAR UNA REGLA
CREATE RULE AOS
AS
@NACIMIENTO>=1995-01-01 AND @NACIMIENTO<=GETDATE()
VINCULAR LA REGLA

EXEC sp_bindruleAOS, INSTRUCTORES.NACIMIENTO
DESVINCULAR LA REGLA
EXEC sp_unbindrule INSTRUCTORES.NACIMIENTO
BORRAR LA REGLA
DROP RULE AOS
VALOR DEFAULT
CREATE DEFAULT NADA AS unknown
VINCULAR EL DEFAULT
sp_bindefault NADA, INSTRUCTORES.NOMBRE
DESVINCULAR
sp_unbindefault INSTRUCTORES.NOMBRE


SQL > Manipulacin de Tabla > Constraint(restriccin)
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.
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.
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.
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.
Clave primaria y Clave externa se comentan en las siguientes dos secciones.
SQL > Manipulacin de Tabla > Clave primaria
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).
A continuacin se presentan ejemplos para la especificacin de una clave
primaria cuando se crea una tabla:
MySQL:
CREATE TABLE Customer
(SID integer,
Last_Name varchar(30),
First_Name varchar(30),
PRIMARY KEY (SID));
Oracle:
CREATE TABLE Customer
(SID integer PRIMARY KEY,
Last_Name varchar(30),
First_Name varchar(30));
SQL Server:
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:
MySQL:
ALTER TABLE Customer ADD PRIMARY KEY (SID);
Oracle:
ALTER TABLE Customer ADD PRIMARY KEY (SID);
SQL Server:
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.
SQL Clave externa >>
SQL > Manipulacin de Tabla > Clave externa
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 delCUSTOMER, 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 tablaCUSTOMER. 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.
La estructura de estas dos tablas ser la siguiente:
Tabla CUSTOMER
Nombre de Columna Caracterstica
SID Clave Primaria
Last_Name
First_Name
Tabla ORDERS
Nombre de Columna Caracterstica
Order_ID Clave Primaria
Order_Date
Customer_SID Clave Externa
Amount
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 tablaORDERS:
MySQL:
CREATE TABLE ORDERS
(Order_ID integer,
Order_Date date,
Customer_SID integer,
Amount double,
PRIMARY KEY (Order_ID),
FOREIGN KEY (Customer_SID) REFERENCES CUSTOMER (SID));
Oracle:
CREATE TABLE ORDERS
(Order_ID integer PRIMARY KEY,
Order_Date date,
Customer_SID integer REFERENCES CUSTOMER (SID),
Amount double);
SQL Server:
CREATE TABLE ORDERS
(Order_ID integer PRIMARY KEY,
Order_Date datetime,
Customer_SID integer REFERENCES CUSTOMER (SID),
Amount double);
A continuacin se presentan ejemplos 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:
MySQL:
ALTER TABLE ORDERS
ADD FOREIGN KEY (Customer_SID) REFERENCES CUSTOMER (SID);
Oracle:
ALTER TABLE ORDERS
ADD (CONSTRAINT fk_orders1) FOREIGN KEY (Customer_SID) REFERENCES
CUSTOMER (SID);
SQL Server:
ALTER TABLE ORDERS
ADD FOREIGN KEY (Customer_SID) REFERENCES CUSTOMER (SID);
SQL CREATE VIEW >>
SQL > Manipulacin de Tabla > Create View
Las vistas pueden considerarse como tablas virtuales. Generalmente hablando,
una tabla tiene un conjunto de definiciones, y almacena datos fsicamente. Una
vista tambin tiene un conjunto de definiciones, que se construye en la parte
superior de la(s) tabla(s) u otra(s) vista(s), y no almacena datos fsicamente.
La sintaxis para la creacin de una vista es la siguiente:
CREATE VIEW "NOMBRE_VISTA" AS "Instruccin SQL";
La Instruccin SQL puede ser cualquiera de las instrucciones SQL que hemos
descripto en esta gua de referencia.
Utilicemos un ejemplo simple para ilustrar. Supongamos que tenemos la
siguiente tabla:
Tabla Customer
Nombre de Columna Tip de Datos
First_Name char(50)
Last_Name char(50)
Address char(50)
City char(50)
Country char(25)
Birth_Date datetime
y deseamos crear una vista denominada V_Customer que contiene slo las
columnas First_Name, Last_Name y Pas de esta tabla, ingresaramos
CREATE VIEW V_Customer
AS SELECT First_Name, Last_Name, Country
FROM Customer;
Ahora tenemos una vista llamada V_Customer con la siguiente estructura:
View V_Customer
Nombre de Columna Tip de Datos
First_Name char(50)
Last_Name char(50)
Country char(25)
Podemos utilizar tambin una vista para aplicar uniones a dos tablas. En este
caso, los usuarios slo ven una vista en vez de dos tablas, y la instruccin SQL
que los usuarios necesitan emitir se vuelve mucho ms simple. Digamos que
tenemos las siguientes dos tablas:
Tabla Store_Information
Store_Name Sales Txn_Date
Los Angeles 1500 05-Jan-1999
San Diego 250 07-Jan-1999
Los Angeles 300 08-Jan-1999
Boston 700 08-Jan-1999
Tabla Geography
Region_Name Store_Name
East Boston
East New York
West Los Angeles
West San Diego
y deseamos construir una vista que tenga ventas organizadas segn la regin.
Colocaramos la siguiente instruccin SQL:
CREATE VIEW V_REGION_SALES
AS SELECT A1.Region_Name REGION, SUM(A2.Sales) SALES
FROM Geography A1, Store_Information A2
WHERE A1.Store_Name = A2.Store_Name
GROUP BY A1.Region_Name;
Esto nos brinda una vista, V_REGION_SALES, que se ha definido para las
ventas de los negocios segn los registros de la regin. Si deseamos saber el
contenido de esta vista, ingresamos,
SELECT * FROM V_REGION_SALES;
Resultado:
REGION SALES
East 700
West 2050
SQL CREATE INDEX >>
SQL > Manipulacin de Tabla > Create Index
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.
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.
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:
Tabla Customer
Nombre de Columna Tip de Datos
First_Name char(50)
Last_Name char(50)
Address char(50)
City char(50)
Country char(25)
Birth_Date datetime
Si deseamos crear un ndice tanto en Ciudad como en Pas, ingresaramos,
CREATE INDEX IDX_CUSTOMER_LAST_NAME
ON Customer (Last_Name);
Pour crer un index dans City et Country, il faut saisir
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.
Por favor note que la sintaxis exacta para CREATE INDEX puede ser distinta
segn las diferentes bases de datos. Debera consultar con su manual de
referencia de base de datos para obtener la sintaxis precisa.
SQL ALTER TABLE >>
SQL > Manipulacin de Tabla > 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"
[modificar especificacin];
[modificar especificacin] depende del tipo de modificacin que deseamos
realizar. Para los usos mencionados anteriormente, las instrucciones [modificar
especificacin] 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
Recorramos ejemplos para cada uno de lo anteriormente mencionado,
utilizando la tabla cliente creada en la seccin CREATE TABLE, il convient de
se reporter aux exemples mentionns ci-dessus.
Tabla Customer
Nombre de Columna Tip de Datos
First_Name char(50)
Last_Name char(50)
Address char(50)
City char(50)
Country char(25)
Birth_Date datetime
Primero, deseamos agregar una columna denominada Gender a esta tabla.
Para hacerlo, ingresamos,
ALTER TABLE Customer ADD Gender char(1);
Estructura de la tabla resultante:
Table Customer
Nombre de Columna Tip de Datos
First_Name char(50)
Last_Name char(50)
Address char(50)
City char(50)
Country char(25)
Birth_Date datetime
Gender char(1)
Luego, deseamos renombrar Address" a Addr. Para hacerlo, ingresamos,
ALTER TABLE Customer CHANGE Address Addr char(50);
Estructura de la tabla resultante:
Table customer
Nombre de Columna Tip de Datos
First_Name char(50)
Last_Name char(50)
Addr char(50)
City char(50)
Country char(25)
Birth_Date datetime
Gender char(1)
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);
Estructura de la tabla resultante:
Table Customer
Nombre de Columna Tip de Datos
First_Name char(50)
Last_Name char(50)
Addr char(30)
City char(50)
Country char(25)
Birth_Date datetime
Gender char(1)
Finalmente, deseamos eliminar la columna Gender. Para hacerlo,
ingresamos,
ALTER TABLE Customer DROP Gender;
Estructura de la tabla resultante:
Table Customer
Nombre de Columna Tip de Datos
First_Name char(50)
Last_Name char(50)
Addr char(30)
City char(50)
Country char(25)
Birth_Date datetime
SQL DROP TABLE >>
SQL > Manipulacin de Tabla > 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;
SQL TRUNCATE TABLE >>
SQL > Manipulacin de Tabla > Truncate Table
A veces deseamos eliminar los datos en una tabla. Una forma de hacer esto es
con DROP TABLE, que vimos en la ltima seccin Pero Si deseamos
simplemente deshacernos de los datos pero no de la tabla en s? Para esto,
podemos utilizar el comando TRUNCATE TABLE. La sintaxis
para TRUNCATE TABLE es
TRUNCATE TABLE "nombre_tabla";
Entonces, si deseamos truncar una tabla denominada cliente que creamos
en SQL CREATE TABLE, simplemente ingresamos
TRUNCATE TABLE Customer;
SQL INSERT INTO >>
SQL > Manipulacin de Tabla > Insert Into
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. Primero observemos como podemos INSRER datos a travs de una
fila 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", ...);
Suponiendo que tenemos una taba con la siguiente estructura,
Tabla Store_Information
Nombre de Columna Tip de Datos
Store_Name char(50)
Sales float
Txn_Date datetime
y ahora deseamos insertar una fila adicional en la tabla que represente los
datos de ventas para Los ngeles el 10 de enero de 1999. En ese da, este
negocio tena $900 dlares estadounidenses en ventas. Por lo tanto,
utilizaremos la siguiente escritura SQL:
INSERT INTO Store_Information (Store_Name, Sales, Txn_Date)
VALUES ('Los Angeles', 900, '10-Jan-1999');
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.
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, utilizarTO_CHAR (Txn_Date,
'yyyy') = 1998.
SQL UPDATE >>
SQL > Manipulacin de Tabla > 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";
Por ejemplo, digamos que actualmente tenemos la tabla a continuacin:
Tabla Store_Information
Store_Name Sales Txn_Date
Los Angeles 1500 05-Jan-1999
San Diego 250 07-Jan-1999
Los Angeles 300 08-Jan-1999
Boston 700 08-Jan-1999
y notamos que las ventas para Los Angeles el 08/01/1999 es realmente de
500 en vez de 300 dlares estadounidenses, y que esa entrada en particular
necesita actualizarse. Para hacerlo, utilizamos el siguiente SQL:
UPDATE Store_Information
SET Sales = 500
WHERE Store_Name = 'Los Angeles'
AND Txn_Date = '08-Jan-1999';
La tabla resultante ser vera
Tabla Store_Information
Store_Name Sales Txn_Date
Los Angeles 1500 05-Jan-1999
San Diego 250 07-Jan-1999
Los Angeles 500 08-Jan-1999
Boston 700 08-Jan-1999
En este caso, hay slo una fila que satisface la condicin en la
clusula WHERE. Si hay mltiples filas que satisfacen la condicin, todas ellas
se modificarn.
Tambin es posible UPDATE mltiples columnas al mismo tiempo. La sintaxis
en este caso se vera como la siguiente:
UPDATE "nombre_tabla"
SET colonne 1 = [[valor1], colonne 2 = [valor2]
WHERE "condicin";
SQL DELETE FROM >>
SQL > Manipulacin de Tabla > Delete From
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";
Es ms fcil utilizar un ejemplo. Por ejemplo, digamos que actualmente
tenemos la siguiente tabla:
Tabla Store_Information
Store_Name Sales Txn_Date
Los Angeles 1500 05-Jan-1999
San Diego 250 07-Jan-1999
Los Angeles 300 08-Jan-1999
Boston 700 08-Jan-1999
y decidimos no mantener ninguna informacin sobre Los ngeles en esta tabla.
Para lograrlo, ingresamos el siguiente SQL:
DELETE FROM Store_Information
WHERE Store_Name = 'Los Angeles';
Ahora el contenido de la tabla se vera,
Tabla Store_Information
Store_Name Sales Txn_Date
San Diego 250 07-Jan-1999
Boston 700 08-Jan-1999
SQL Avanzado >>
SQL > SQL Avanzado
En esta seccin, describiremos las siguientes palabras claves y conceptos
SQL:
SQL UNION
SQL UNION ALL
SQL INTERSECT
SQL MINUS
SQL Subconsulta
SQL EXISTS
SQL CASE
SQL > SQL Avanzado > Union
El propsito del comando SQL UNION es combinar los resultados de
dos consultas juntas. En este sentido,UNION es parecido a Join, ya que
los dos se utilizan para informacin relacionada en mltiples tablas. Una
restriccin de UNION es que todas las columnas correspondientes
necesitan ser del mismo tipo de datos. Tambin, cuando
utilizamos UNION, slo se seleccionan valores distintos (similar
a SELECT DISTINCT).
La sintaxis es la siguiente:
[Instruccin SQL 1]
UNION
[Instruccin SQL 2];
Supongamos que tenemos las siguientes dos tablas,
Tabla Store_Information
Store_Name Sales Txn_Date
Los Angeles 1500 05-Jan-1999
San Diego 250 07-Jan-1999
Los Angeles 300 08-Jan-1999
Boston 700 08-Jan-1999
Tabla Internet_Sales
Txn_Date Sales
07-Jan-1999 250
10-Jan-1999 535
11-Jan-1999 320
12-Jan-1999 750
y deseamos saber de todas las fechas donde hay una operacin de
venta. Para hacerlo, utilizamos la siguiente instruccin SQL:
SELECT Txn_Date FROM Store_Information
UNION
SELECT Txn_Date FROM Internet_Sales;
Resultado:
Txn_Date
05-Jan-1999
07-Jan-1999
08-Jan-1999
10-Jan-1999
11-Jan-1999
12-Jan-1999
Por favor note que si ingresamos "SELECT DISTINCT Txn_Date" para
cada o ambas instrucciones SQL, obtendremos el mismo conjunto de
resultados.
SQL UNION ALL >>
SQL > SQL Avanzado > Union All
El propsito del Comando SQL UNION ALL es tambin combinar los
resultados de dos consultas juntas. La diferencia entre UNION
ALL y UNION es que, mientras UNION slo selecciona valores
distintos, UNION ALLselecciona todos los valores.
La sintaxis para UNION ALL es la siguiente:
[Instruccin SQL 1]
UNION ALL
[Instruccin SQL 2];
Utilicemos el mismo ejemplo de la seccin anterior para ilustrar la
diferencia. Supongamos que tenemos las siguientes dos tablas,
Tabla Store_Information
Store_Name Sales Txn_Date
Los Angeles 1500 05-Jan-1999
San Diego 250 07-Jan-1999
Los Angeles 300 08-Jan-1999
Boston 700 08-Jan-1999
Tabla Internet_Sales
Txn_Date Sales
07-Jan-1999 250
10-Jan-1999 535
11-Jan-1999 320
12-Jan-1999 750
y deseamos encontrar las fechas en donde se realiz una operacin de
venta en un negocio como as tambin las fechas donde hay una venta a
travs de Internet. Para hacerlo, utilizamos la siguiente instruccin SQL:
SELECT Txn_Date FROM Store_Information
UNION ALL
SELECT Txn_Date FROM Internet_Sales;
Resultado:
Txn_Date
05-Jan-1999
07-Jan-1999
08-Jan-1999
08-Jan-1999
07-Jan-1999
10-Jan-1999
11-Jan-1999
12-Jan-1999
SQL INTERSECT >>
SQL > SQL Avanzado > Intersect
Parecido al comando UNION, INTERSECT tambin opera en dos
instrucciones SQL. La diferencia es que, mientras UNION acta
fundamentalmente como un operador OR (O) (el valor se selecciona si
aparece en la primera o la segunda instruccin), el
comando INTERSECT acta como un operador AND (Y) (el valor se
selecciona si aparece en ambas instrucciones).
La sintaxis es la siguiente:
[Instruccin SQL 1]
INTERSECT
[Instruccin SQL 2];
Digamos que tenemos las siguientes dos tablas:
Tabla Store_Information
Store_Name Sales Txn_Date
Los Angeles 1500 05-Jan-1999
San Diego 250 07-Jan-1999
Los Angeles 300 08-Jan-1999
Boston 700 08-Jan-1999
Tabla Internet_Sales
Txn_Date Sales
07-Jan-1999 250
10-Jan-1999 535
11-Jan-1999 320
12-Jan-1999 750
y deseamos encontrar todas las fechas donde hay ventas tanto en el
negocio como en Internet. Para hacerlo, utilizamos la siguiente
instruccin SQL:
SELECT Txn_Date FROM Store_Information
INTERSECT
SELECT Txn_Date FROM Internet_Sales;
Resultado:
Txn_Date
07-Jan-1999
Por favor note que el comando INTERSECT slo arrojar valores
distintivos.
SQL MINUS >>
SQL > SQL Avanzado > Minus
MINUS opera en dos instrucciones SQL. Toma todos los resultados de
la primera instruccin SQL, y luego sustrae aquellos que se encuentran
presentes en la segunda instruccin SQL para obtener una respuesta
final. Si la segunda instruccin SQL incluye resultados que no estn
presentes en la primera instruccin SQL, dichos resultados se ignoran.
La sintaxis es la siguiente:
[Instruccin SQL 1]
MINUS
[Instruccin SQL 2];
Continuemos con el mismo ejemplo:
Tabla Store_Information
Store_Name Sales Txn_Date
Los Angeles 1500 05-Jan-1999
San Diego 250 07-Jan-1999
Los Angeles 300 08-Jan-1999
Boston 700 08-Jan-1999
Tabla Internet_Sales
Txn_Date Sales
07-Jan-1999 250
10-Jan-1999 535
11-Jan-1999 320
12-Jan-1999 750
y deseamos encontrar todas las fechas donde hay ventas en el negocio,
pero no aquellas realizadas por Internet. Para hacerlo, utilizamos la
siguiente instruccin SQL:
SELECT Txn_Date FROM Store_Information
MINUS
SELECT Txn_Date FROM Internet_Sales;
Resultado:
Txn_Date
05-Jan-1999
08-Jan-1999
'05-Jan-1999', '07-Jan-1999',et '08-Jan-1999' son los valores distintivos
arrojados desde SELECT Txn_Date FROM Store_Information.
Tambin se arroja '07-Jan-1999' de la segunda instruccin
SQL, SELECT Txn_Date FROM Internet_Sales, de este modo se lo
excluye del conjunto final de resultados.
Por favor note que el comando MINUS slo arrojar valores distintos.
Algunas bases de datos pueden utilizar EXCEPT en vez de MINUS. Por
favor verifique la documentacin para su base de datos especfica para
el uso apropiado.
SQL Subconsulta >>
SQL > SQL Avanzado > Subconsulta
Es posible incorporar una instruccin SQL dentro de otra. Cuando esto
se hace en las instrucciones WHERE oHAVING, tenemos una
construccin de subconsulta.
La sintaxis es la siguiente:
SELECT "nombre1_columna"
FROM "nombre1_tabla"
WHERE "nombre2_columna" [Operador de Comparacin]
(SELECT "nombre3_columna"
FROM "nombre2_tabla"
WHERE "Condicin");
[Operador de Comparacin] podran ser operadores de igualdad tales
como =, >, <, >=, <=. Tambin puede ser un operador textual como
"LIKE". La parte en rojo se considera como la "consulta interna",
mientras que la parte en verde se considera como la "consulta externa".
Utilisons le mme exemple que celui que nous avons utilis pour illustrer
les jointures SQL :
Table Store_Information
Store_Name Sales Txn_Date
Los Angeles 1500 05-Jan-1999
San Diego 250 07-Jan-1999
Los Angeles 300 08-Jan-1999
Boston 700 08-Jan-1999
Table Geography
Region_Name Store_Name
East Boston
East New York
West Los Angeles
West San Diego
et en utilisant une sous-requte pour trouver les ventes de tous les
magasins dans la rgion West (Ouest), il faudra utiliser linstruction SQL
suivante :
SELECT SUM(Sales) FROM Store_Information
WHERE Store_Name IN
(SELECT Store_Name FROM Geography
WHERE Region_Name = 'West');
Resultado:
SUM(Sales)
2050
Dans cet exemple, au lieu de joindre directement les deux tables et
dajouter seulement le montant des ventes des magasins de la rgion
West (Ouest), nous allons dabord utiliser la sous-requte pour trouver
les magasins situs dans la rgion West (Ouest), puis additionner le
montant des ventes de ces magasins.
Dans lexemple ci-dessus, la requte interne est dabord excute, puis
le rsultat est envoy la requte externe. Ce type de sous-requte est
appel sous-requte simple. Si la requte interne dpend de la requte
externe, nous aurons une sous-requte corrle. Vous trouverez ci-
dessous un exemple de de sous-requte corrle :
SELECT SUM(a1.Sales) FROM Store_Information a1
WHERE a1.Store_Name IN
(SELECT Store_Name FROM Geography a2
WHERE a2.Store_Name = a1.Store_Name);
Notez la clause WHERE dans la requte interne, o la condition
ncessite une table de la requte externe.
SQL EXISTS >>
SQL > SQL Avanzado > Exists
En la seccin anterior, utilizamos IN para enlazar la consulta interna y la
consulta externa en una instruccin de subconsulta. IN no es la nica
forma de hacerlo uno puede utilizar muchos operadores tales como >,
<, o =. EXISTS es un operador especial que describiremos en esta
seccin.
EXISTS simplemente verifica si la consulta interna arroja alguna fila. Si
lo hace, entonces la consulta externa procede. De no hacerlo, la
consulta externa no se ejecuta, y la totalidad de la instruccin SQL no
arroja nada.
La sintaxis para EXISTS es
SELECT "nombre1_columna"
FROM "nombre1_tabla"
WHERE EXISTS
(SELECT *
FROM "nombre2_tabla"
WHERE "Condicin");
Por favor note que en vez de *, puede seleccionar una o ms columnas
en la consulta interna. El efecto ser idntico.
Utilizamos las mismas tablas de ejemplos:
Tabla Store_Information
Store_Name Sales Txn_Date
Los Angeles 1500 05-Jan-1999
San Diego 250 07-Jan-1999
Los Angeles 300 08-Jan-1999
Boston 700 08-Jan-1999
Table Geography
Region_Name Store_Name
East Boston
East New York
West Los Angeles
West San Diego
colocaramos la siguiente consulta SQL:
SELECT SUM(Sales) FROM Store_Information
WHERE EXISTS
(SELECT * FROM Geography
WHERE region_name = 'West');
Obtendremos el siguiente resultado:
SUM(Sales)
2750
Al principio, esto puede parecer confuso, debido a que la subsequencia
incluye la condicin [Region_Name = 'West'], an as la consulta sum
los negocios para todas las regiones. Si observamos de cerca,
encontramos que debido a que la subconsulta arroja ms de 0 filas, la
condicin EXISTS es verdadera, y la condicin colocada dentro de la
consulta interna no influencia la forma en que se ejecuta la consulta
externa.
SQL CASE >>
SQL > SQL Avanzado > Case
CASE se utiliza para brindar un tipo de lgica "si-entonces-otro" para
SQL. Su sintaxis es:
SELECT CASE ("nombre_columna")
WHEN "condicin1" THEN "resultado1"
WHEN "condicin2" THEN "resultado2"
...
[ELSE "resultadoN"]
END
FROM "nombre_tabla";
"condicin" puede ser un valor esttico o una expresin. La
clusula ELSE es opcional.
En nuestra Tabla Store_Information de ejemplo,
Tabla Store_Information
Store_Name Sales Txn_Date
Los Angeles 1500 05-Jan-1999
San Diego 250 07-Jan-1999
Los Angeles 300 08-Jan-1999
Boston 700 08-Jan-1999
si deseamos multiplicar las sumas de ventas de 'Los Angeles' por 2 y las
sumas de ventas de 'San Diego' por 1,5, ingresamos,
SELECT Store_Name, CASE Store_Name
WHEN 'Los Angeles' THEN Sales * 2
WHEN 'San Diego' THEN Sales * 1.5
ELSE Sales
END
"Nuevas Ventas",
Txn_Date
FROM Store_Information;
"Nuevas Ventas" es el nombre que se le otorga a la columna con la
instruccin CASE.
Resultado:
Store_name Nuevas Ventas Txn_Date
Los Angeles 3000 05-Jan-1999
San Diego 375 07-Jan-1999
San Francisco 300 08-Jan-1999
Boston 700 08-Jan-1999


SQL Sintaxis >>
SQL > SQL Sintaxis
En esta pgina, enumeramos la sintaxis SQL para cada uno de los
comandos SQL en esta gua de referencia. Para obtener explicaciones
detalladas para cada sintaxis SQL, por favor dirjase a la seccin
individual haciendo clic en la palabra clave.
El propsito de esta pgina es brindar una pgina de referencia rpida
para la sintaxis SQL. Le sugerimos que agregue esta pgina a favoritos
ahora presionando Control-D para que pueda tener esta pgina de
sintaxis a mano.
Select
SELECT "nom de colonne" FROM "nombre_tabla";
Distinct
SELECT DISTINCT "nombre_columna"
FROM "nombre_tabla";
Where
SELECT "nombre_columna"
FROM "nombre_tabla"
WHERE "condition";
And/Or
SELECT "nombre_columna"
FROM "nombre_tabla"
WHERE "condicin simple"
{[AND|OR] "condicin simple"}+;
In
SELECT "nombre_columna"
FROM "nombre_tabla"
WHERE "nombre_columna" IN ('valor1', 'valor2', ...);
Between
SELECT "nombre_columna"
FROM "nombre_tabla"
WHERE "nombre_columna" BETWEEN 'valor1' AND 'valor2';
Like
SELECT "nombre_columna"
FROM "nombre_tabla"
WHERE "nombre_columna" LIKE {patrn};
Order By
SELECT "nombre_columna"
FROM "nombre_tabla"
[WHERE "condicin"]
ORDER BY "nombre_columna" [ASC, DESC];
Count
SELECT COUNT("nombre_columna")
FROM "nombre_tabla";
Group By
SELECT "nombre_columna 1", SUM("nombre_columna 2")
FROM "nombre_tabla"
GROUP BY "nombre_columna 1";
Having
SELECT "nombre_columna 1", SUM("nombre_columna 2")
FROM "nombre_tabla"
GROUP BY "nombre_columna 1"
HAVING (condicin de funcin aritmtica);
Create Table
CREATE TABLE "nombre_tabla"
("columna 1" "tipo_de_datos_para_columna_1",
"columna 2" "tipo_de_datos_para_columna_2",
... );
Drop Table
DROP TABLE "nombre_tabla";
Truncate Table
TRUNCATE TABLE "nombre_tabla";
Insert Into
INSERT INTO "nombre_tabla" ("colonne 1", "colonne 2", ...)
VALUES ("valor 1", "valor 2", ...);
Update
UPDATE "nombre_tabla"
SET "colonne 1" = [nuevo valor]
WHERE "condicin";
Delete From
DELETE FROM "nombre_tabla"
WHERE "condicin";


Crear una Base de Datos y Esquemas en SQL 2008
use master
go
---------Crear una base de datos

Create database Ejemplo
on primary
(name='EjemData',filename='c:\data\ejemdata1.md
f',
size=10MB, MaxSize=500Mb, filegrowth=25%
)
log on
(name='EjemLog',filename='c:\data\ejemLog.ldf',
size=5MB, MaxSize=500Mb, filegrowth=25%
)
go
---------Borrar una base de datos
drop database ejemplo

---------Crear un grupo adicional a parte del
PRIMARY predeterminado

alter database Ejemplo
add filegroup Secundario

---------agregar un archivo al grupo adicional
creado
alter database ejemplo
add file
(name='EjemSec',filename='c:\data\ejemSec1.ndf'
,
size=10MB, MaxSize=500Mb, filegrowth=25%
)to filegroup Secundario

---------opciones de la base de datos

Alter database Ejemplo
set AUTO_CREATE_STATISTICS on

---------Cree un login---------------
use master
go
create login UserInformatica with password ='P@
ssw0rd'

---------cree un user para el login------------
---
use ejemplo
create user UserInformatica for login
UserInformatica
with default_schema = Informatica
go
---------Esquemas
---------Cree el esquema asociado al user------
--
create schema Informatica authorizationUserInfo
rmatica
Go
---------Dar permisos de creacion de tabla al
usuario---------------------
grant create table to UserInformatica
go
---------Cambiar de usuario--------------------
--------
---------Ejecutar acciones en nombre de
UserInformatica
---------sin salirme del usuario actual--------
--------
execute as user = 'UserInformatica'
go

create table Empleado
(
codigo int, nombre varchar(100)
)
go
--------Regresar al usuario actual
revert
go

Crear un inicio de sesin
SQL Server 2014
Otras versiones

Personas que lo han encontrado til: 2 de 4 - Valorar este tema
En este tema se describe cmo crear un inicio de sesin en SQL Server 2014 mediante SQL
Server Management Studio o Transact-SQL. Un inicio de sesin es la identidad de la persona o
proceso que se est conectando a una instancia de SQL Server.
En este tema
Antes de empezar:
Informacin previa
Seguridad
Para crear un inicio de sesin, utilizando:
SQL Server Management Studio
Transact-SQL
Seguimiento: pasos que se deben realizar despus de crear un inicio de sesin
Informacin previa
Un inicio de sesin es una entidad de seguridad o una entidad que puede ser autenticada por
un sistema seguro. Los usuarios necesitan iniciar sesin para conectarse a SQL Server. Puede
crear un inicio de sesin basado en una entidad de seguridad de Windows (como un usuario de
dominio o un grupo de dominio de Windows) o puede crear un inicio de sesin que no lo est
(como un inicio de sesin de SQL Server).
Nota
Para usar la autenticacin de SQL Server, el Motor de base de datos debe utilizar la autenticacin de modo
mixto. Para obtener ms informacin, vea Elegir un modo de autenticacin.
Como entidad de seguridad, se pueden conceder permisos a los inicios de sesin. El mbito de
un inicio de sesin es todo el Motor de base de datos. Para establecer conexin con una base
de datos concreta de la instancia de SQL Server, un inicio de sesin debe estar asignado a un
usuario de la base de datos. Los permisos dentro de la base de datos se conceden y deniegan al
usuario de la base de datos, no al inicio de sesin. Los permisos que tienen como mbito la
instancia completa de SQL Server (por ejemplo, el permiso CREATE ENDPOINT) se pueden
conceder a un inicio de sesin.
Seguridad
Permisos
Requiere el permiso ALTER ANY LOGIN o ALTER LOGIN del servidor.
[Principio]
Usar SQL Server Management Studio
Para crear un inicio de sesin de SQL Server
1. En el Explorador de objetos, expanda la carpeta de la instancia de servidor en la que
desea crear el nuevo inicio de sesin.
2. Haga clic con el botn secundario en la carpeta Seguridad, seleccione Nuevo y, a
continuacin, seleccione Inicio de sesin.
3. En el cuadro de dilogo Inicio de sesin - Nuevo, en la pgina General, escriba el
nombre de un usuario en el cuadro Nombre de inicio de sesin. Como alternativa,
haga clic en (Buscar) para abrir el cuadro de dilogo Seleccionar usuarios o grupos.
Si hace clic en Buscar:
a. En Seleccionar este tipo de objeto, haga clic en Tipos de objeto para abrir el
cuadro de dilogo Tipos de objeto y seleccione alguna o todas las opciones
siguientes: Entidades de seguridad integradas, Grupos y Usuarios. Las
opcionesEntidades de seguridad integradas y Usuarios estn seleccionadas
de forma predeterminada. Cuando termine, haga clic enAceptar.
b. En Desde esta ubicacin, haga clic en Ubicaciones para abrir el cuadro de
dilogo Ubicaciones y seleccione una de las ubicaciones de servidor
disponibles. Cuando termine, haga clic en Aceptar.
c. En Escribir los nombres de objeto para seleccionar (ejemplos), escriba el
usuario o el nombre de grupo que desea buscar.Para obtener ms informacin,
vea Seleccionar usuarios, equipos o grupos (cuadro de dilogo).
d. Haga clic en Avanzadas para obtener ms opciones avanzadas de
bsqueda. Para obtener ms informacin, vea Seleccionar usuarios, equipos o
grupos (cuadro de dilogo) - Pgina Avanzadas.
e. Haga clic en Aceptar.
4. Para crear un inicio de sesin basado en una entidad de seguridad de Windows,
seleccione Autenticacin de Windows. Esta es la seleccin predeterminada.
5. Para crear un inicio de sesin que se guarde en una base de datos de SQL Server,
seleccione Autenticacin de SQL Server.
a. En el cuadro Contrasea, escriba una contrasea para el nuevo usuario. Vuelva
a escribir la contrasea en el cuadroConfirmar contrasea.
b. Al cambiar una contrasea existente, seleccione Especificar contrasea
anterior y escriba la contrasea anterior en el cuadro Contrasea anterior.
c. Para aplicar las opciones de la directiva de contraseas a efectos de
complejidad y exigencia, seleccione Exigir directivas de contraseas. Para
obtener ms informacin, vea Directiva de contraseas. Esta es una opcin
predeterminada cuando se selecciona Autenticacin de SQL Server.
d. Para aplicar las opciones de la directiva de contraseas a efectos de expiracin,
seleccione Exigir expiracin de contrasea.Debe seleccionar la opcin Exigir
directivas de contraseas para habilitar esta casilla. Esta es una opcin
predeterminada cuando se selecciona Autenticacin de SQL Server.
e. Para obligar al usuario a crear una nueva contrasea despus de utilizarse el
inicio de sesin por primera vez, seleccione El usuario debe cambiar la
contrasea en el siguiente inicio de sesin. Debe seleccionar la opcin Exigir
expiracin de contrasea para habilitar esta casilla. Esta es una opcin
predeterminada cuando se selecciona Autenticacin de SQL Server.
6. Para asociar el inicio de sesin a un certificado de seguridad independiente,
seleccione Asignado a certificado y seleccione el nombre de un certificado existente
de la lista.
7. Para asociar el inicio de sesin a una clave asimtrica independiente,
seleccione Asignado a clave asimtrica y seleccione el nombre de una clave existente
de la lista.
8. Para asociar el inicio de sesin a una credencial de seguridad, active la casilla
de Asignado a credencial y seleccione una credencial existente de la lista o haga clic
en Agregar para crear una nueva credencial. Para quitar una asignacin a una
credencial de seguridad del inicio de sesin, seleccione la credencial en Credenciales
asignadas y haga clic en Quitar. Para obtener ms informacin sobre las credenciales
en general, vea Credenciales (motor de base de datos).
9. En la lista Base de datos predeterminada, seleccione una base de datos
predeterminada para el inicio de sesin. Maestra es el valor predeterminado para esta
opcin.
10. En la lista Idioma predeterminado, seleccione un idioma predeterminado para el inicio
de sesin.
11. Haga clic en Aceptar.
Opciones adicionales
El cuadro de dilogo Inicio de sesin - Nuevo tambin proporciona opciones de cuatro
pginas adicionales: Roles del servidor,Asignacin de usuarios, Elementos
protegibles y Estado.
Roles de servidor
La pgina Roles de servidor enumera todos los roles posibles que se pueden asignar al nuevo
inicio de sesin. Las siguientes opciones estn disponibles:
Casilla bulkadmin
Solo los miembros del rol fijo de servidor bulkadmin pueden ejecutar la instruccin
BULK INSERT.
Casilla dbcreator
Los miembros del rol fijo de servidor dbcreator pueden crear, modificar, quitar y
restaurar cualquier base de datos.
Casilla diskadmin
Los miembros del rol fijo de servidor diskadmin pueden administrar archivos de disco.
Casilla processadmin
Los miembros del rol fijo de servidor processadmin pueden finalizar procesos mediante
la ejecucin de una instancia del Motor de base de datos.
Casilla public
Todos los usuarios, grupos y roles de SQL Server pertenecen al rol fijo de
servidor public de forma predeterminada.
Casilla securityadmin
Los miembros del rol fijo de servidor securityadmin administran los inicios de sesin y
sus propiedades. Administran los permisos de servidor GRANT, DENY y
REVOKE. Tambin administran los permisos de base de datos GRANT, DENY y
REVOKE. Asimismo, pueden restablecer contraseas para inicios de sesin de SQL
Server.
Casilla serveradmin
Los miembros del rol fijo de servidor serveradmin pueden cambiar opciones de
configuracin en el servidor y cerrar el servidor.
Casilla setupadmin
Los miembros del rol fijo de servidor setupadmin pueden agregar y quitar servidores
vinculados, y ejecutar algunos procedimientos almacenados del sistema.
Casilla sysadmin
Los miembros del rol fijo de servidor sysadmin pueden realizar cualquier actividad en el
Motor de base de datos.
Asignacin de usuarios
La pgina Asignacin de usuarios enumera todas las bases de datos posibles y las pertenencias
al rol de base de datos en esas bases de datos que se pueden aplicar al inicio de sesin. Las
bases de datos seleccionadas determinan las pertenencias a roles disponibles para el inicio de
sesin. En esta pgina estn disponibles las opciones siguientes:
Usuarios asignados a este inicio de sesin
Selecciona las bases de datos a las que se puede obtener acceso con este inicio de
sesin. Cuando se seleccione una base de datos, sus roles vlidos se mostrarn en el
panel Miembros del rol de base de datos para: database_name.
Mapa
Permite que el inicio de sesin obtenga acceso a las bases de datos que se muestran a
continuacin.
Base de datos
Muestra las bases de datos disponibles en el servidor.
Usuario
Especifica el usuario de base de datos que se va a asignar al inicio de sesin. De forma
predeterminada, el nombre del usuario de base de datos coincide con el inicio de
sesin.
Esquema predeterminado
Especifica el esquema predeterminado del usuario. Cuando se crea un usuario por
primera vez, el esquema predeterminado es dbo.Es posible especificar un esquema
predeterminado que an no existe. No puede especificar un esquema predeterminado
para un usuario asignado a un grupo, un certificado o una clave asimtrica de Windows.
Cuenta de invitado habilitada para: database_name
Atributo de solo lectura que indica si la cuenta de invitado est habilitada en la base de
datos seleccionada. Utilice la pgina Estadodel cuadro de dilogo Propiedades de
inicio de sesin de la cuenta de invitado para habilitarla o deshabilitarla.
Miembros del rol de base de datos para: database_name
Selecciona los roles para el usuario en la base de datos especificada. Todos los usuarios
son miembros del rol public de todas las bases de datos, y no pueden eliminarse. Para
obtener ms informacin acerca de los roles de base de datos, vea Roles de nivel de
base de datos.
Elementos protegibles
La pgina Elementos protegibles muestra todos los elementos protegibles posibles y los
permisos en esos elementos protegibles que se pueden conceder al inicio de sesin. En esta
pgina estn disponibles las opciones siguientes:
Cuadrcula superior
Contiene uno o ms elementos para los que se pueden establecer permisos. Las
columnas mostradas en la cuadrcula superior varan dependiendo de la entidad de
seguridad o el elemento protegible.
Para agregar elementos a la cuadrcula superior:
1. Haga clic en Buscar.
2. En el cuadro de dilogo Agregar objetos, seleccione una de las opciones
siguientes: Objetos especficos, Todos los objetos de los
tipos o Servidorserver_name. Haga clic en Aceptar.
Nota
Cuando se selecciona Servidorserver_name, se rellena automticamente la cuadrcula superior con todos
los objetos protegibles de ese servidor.
3. Si selecciona Objetos especficos:
a. En el cuadro de dilogo Seleccionar objetos, en Seleccionar estos
tipos de objeto, haga clic en Tipos de objeto.
b. En el cuadro de dilogo Seleccionar tipos de objeto, seleccione
alguno o todos los tipos de objeto siguientes:Extremos, Inicios de
sesin, Servidores, Grupos de disponibilidad y Roles del
servidor. Haga clic en Aceptar.
c. En Escribir los nombres de objeto para seleccionar (ejemplos), haga
clic en Examinar.
d. En el cuadro de dilogo Buscar objetos, seleccione cualquiera de los
objetos disponibles del tipo que seleccion en el cuadro de
dilogo Seleccionar tipos de objeto y haga clic en Aceptar.
e. En el cuadro de dilogo Seleccionar objetos, haga clic en Aceptar.
4. Si selecciona Todos los objetos de los tipos en el cuadro de
dilogo Seleccionar tipos de objeto, seleccione alguno o todos los tipos de
objeto siguientes: Extremos, Inicios de sesin, Servidores, Grupos de
disponibilidad y Roles del servidor. Haga clic en Aceptar.
Nombre
El nombre de cada entidad de seguridad o elemento protegible que se agrega a la
cuadrcula.
Tipo
Describe el tipo de cada elemento.
Pestaa Explcito
Enumere los posibles permisos del elemento protegible seleccionados en la cuadrcula
superior. No todas las opciones estn disponibles para todos los permisos explcitos.
Permisos
Nombre del permiso.
Otorgante de permisos
La entidad de seguridad que concedi el permiso.
Conceder
Active esta casilla para conceder el permiso al inicio de sesin. Desactvela para revocar
el permiso.
WITH GRANT
Refleja el estado de la opcin WITH GRANT para el permiso indicado. Este cuadro es de
solo lectura. Para aplicar este permiso, use la instruccin GRANT.
Denegar
Active esta casilla para denegar el permiso al inicio de sesin. Desactvela para revocar
el permiso.
Estado
La pgina Estado enumera algunas de las opciones de autenticacin y autorizacin que se
pueden configurar en el inicio de sesin de SQL Server seleccionado.
En esta pgina estn disponibles las opciones siguientes:
Permiso para conectarse al motor de la base de datos
Cuando trabaje con esta configuracin, debe pensar en el inicio de sesin seleccionado
como una entidad de seguridad a la que se le puede otorgar o denegar un permiso
para un elemento protegible.
Seleccione Conceder para conceder el permiso CONNECT SQL al inicio de
sesin. Seleccione Denegar para denegar el permiso CONNECT SQL al inicio de sesin.
Inicio de sesin
Cuando trabaje con esta configuracin, debe pensar en el inicio de sesin seleccionado
como un registro de una tabla. Los cambios que se realicen en los valores que se
muestran aqu se aplicarn al registro.
Un inicio de sesin que se ha deshabilitado sigue existiendo en el registro. Pero si
intenta conectarse a SQL Server, el inicio de sesin no se autenticar.
Seleccione esta opcin para habilitar o deshabilitar este inicio de sesin. Esta opcin
utiliza la instruccin ALTER LOGIN con las opciones ENABLE o DISABLE.
Autenticacin de SQL Server
La casilla Inicio de sesin bloqueado solo est disponible si el inicio de sesin
seleccionado se conecta usando la autenticacin de SQL Server y el inicio de sesin est
bloqueado. Este valor es de solo lectura. Para desbloquear un inicio de sesin que est
bloqueado, ejecute ALTER LOGIN con la opcin UNLOCK.
[Principio]
Usar Transact-SQL
Para crear un inicio de sesin utilizando la autenticacin de Windows
1. En el Explorador de objetos, conctese a una instancia del Motor de base de datos.
2. En la barra Estndar, haga clic en Nueva consulta.
3. Copie y pegue el siguiente ejemplo en la ventana de consulta y haga clic en Ejecutar.
4. -- Create a login for SQL Server by specifying a server name and
a Windows domain account name.
5.
6. CREATE LOGIN [<domainName>\<loginName>] FROM WINDOWS;
7. GO
Para crear un inicio de sesin utilizando la autenticacin de SQL Server
1. En el Explorador de objetos, conctese a una instancia del Motor de base de datos.
2. En la barra Estndar, haga clic en Nueva consulta.
3. Copie y pegue el siguiente ejemplo en la ventana de consulta y haga clic en Ejecutar.
4. -- Creates the user "shcooper" for SQL Server using the security
credential "RestrictedFaculty"
5. -- The user login starts with the password "Baz1nga," but that
password must be changed after the first login.
6.
7. CREATE LOGIN shcooper
8. WITH PASSWORD = 'Baz1nga' MUST_CHANGE,
9. CREDENTIAL = RestrictedFaculty;
10. GO
Funciones en el nivel de base
de datos
SQL Server 2005
Otras versiones

Personas que lo han encontrado til: 3 de 6 - Valorar este tema
Las funciones fijas de base de datos se definen en el nivel de base de datos y existen en cada
una de ellas. Los miembros de las funciones de base de
datos db_owner y db_securityadmin pueden administrar a los miembros de una funcin fija de
base de datos; sin embargo, slo los miembros de una funcin de base de
datos db_owner pueden agregar miembros a la funcin fija de base de datos db_owner.
Las funciones fijas de base de datos son las siguientes:
db_accessadmin
db_backupoperator
db_datareader
db_datawriter
db_ddladmin
db_denydatareader
db_denydatawriter
db_owner
db_securityadmin

db_accessadmin
SQL Server 2005
Personas que lo han encontrado til: 2 de 2 - Valorar este tema
Los miembros de la funcin fija de base de datos db_accessadmin pueden agregar o quitar
accesos a inicios de sesin de Windows, grupos de Windows e inicios de sesin de SQL Server.

db_backupoperator
SQL Server 2005
Este tema an no ha recibido ninguna valoracin - Valorar este tema
Los miembros de la funcin fija de base de datos db_backupoperator pueden crear copias de
seguridad de la base de datos.

db_datareader(LECTURA)
SQL Server 2005
Personas que lo han encontrado til: 2 de 4 - Valorar este tema
Actualizado: 12 de diciembre de 2006
Los miembros de la funcin fija de base de datos db_datareader(LECTURA) pueden ejecutar la
instruccin SELECT en cualquier tabla o vista de la base de datos.


db_datawriter (ESCRITURA)
SQL Server 2005
Este tema an no ha recibido ninguna valoracin - Valorar este tema
Los miembros de la funcin fija de base de datos db_datawriter(ESCRITURAs) pueden agregar,
eliminar o cambiar datos en todas las tablas de usuario.

db_ddladmin
SQL Server 2005
Este tema an no ha recibido ninguna valoracin - Valorar este tema
Los miembros de la funcin fija de base de datos db_ddladmin pueden ejecutar cualquier
comando del lenguaje de definicin de datos (DDL) en una base de datos.

db_denydatareader
SQL Server 2005
Este tema an no ha recibido ninguna valoracin - Valorar este tema
Los miembros de la funcin fija de base de datos db_denydatareader no pueden leer datos de
las tablas de usuario dentro de una base de datos.

db_denydatawriter
SQL Server 2005
Este tema an no ha recibido ninguna valoracin - Valorar este tema
Los miembros de la funcin fija de base de datos db_denydatawriter no pueden agregar,
modificar ni eliminar datos de tablas de usuario de una base de datos.

db_owner( ) todos los permisos
SQL Server 2005
Personas que lo han encontrado til: 3 de 5 - Valorar este tema
Los miembros de la funcin fija de base de datos db_owner(todos los permisos)pueden
realizar todas las actividades de configuracin y mantenimiento de la base de datos.

db_securityadmin
SQL Server 2005
Este tema an no ha recibido ninguna valoracin - Valorar este tema
Los miembros de la funcin fija de base de datos db_securityadmin pueden modificar la
pertenencia a funciones y administrar permisos.

También podría gustarte