Manipulación de datos (DML:
Data Manipulation Language)
SELECT
[predicado] { * | tabla.* | [tabla.]campo1 [AS alias1] [, [tabla.]campo2 [AS alias2] [, …]] } FROM expresióntabla [WHERE …] [GROUP BY …]
[HAVING …] [ORDER BY …] [WITH OWNERACCESS OPTION]
Permite
seleccionar algunos campos de algunos registros procedentes de una tabla,
consulta o combinación de tablas y consultas. Cada cláusula significa lo
siguientes:
·
predicado puede ser
ALL, DISTINCT, DISTINCTROW o bien TOP n
[PERCENT], e indica qué registros deben tomarse, de entre los que cumplan las
condiciones impuestas a los mismo. Si se omite, equivale a especificar ALL, que
implica tomar todos los registros.
·
* indica tomar todos los campos de las tablas especificadas
en la cláusula FROM.
·
tabla.* indica tomar
todos los campos de la tabla (o consulta) tabla,
debiendo aparecer ésta en la cláusula FROM.
·
[tabla.]campo [AS alias] indica que se debe tomar el campo campo de entre los que aparezcan en las tablas o consultas de la
cláusula FROM. Si existen campos con nombre iguales en tablas distintas, de
indicará cuál de ellos de desea tomar anteponiéndole el nombre de su tabla. Si se desea que en la consulta
resultante el campo aparezca con otro
nombre, se usará AS alias, siendo
éste el nuevo nombre que se desea dar al campo. Adviértase que además de campo puede especificarse cualquier
expresión SQL válida que se desee, así como que *, tabla.* y [tabla.]campo [AS alias] pueden combinarse entre sí mediante comas para indicar más
campos que se deseen recuperar.
·
FROM expresióntabla
indica de qué tabla, consulta o combinación de tablas o consultas quieren
tomarse los registros.
·
WHERE … indica una condición opcional a aplicar sobre los
registros, de forma que sólo se recuperen los que verifiquen dicha condición.
Si se omite, equivale a especificar WHERE TRUE; es decir, se toman todos los
registros que proceden de la cláusula FROM.
·
GROUP BY … indica por qué campos quiere realizarse una
agrupación.
·
HAVING … indica una condición opcional a aplicar sobre los
campos agrupados o los cálculos agregados realizados en una consulta sobre la
que se realizó una agrupación (GROUP BY). Si se omite, equivale a especificar
HAVING TRUE; es decir, se toman todos los registros que resulten de la
agrupación.
·
ORDER BY … indica el campo o campos por los que se desean
ordenar los registros, de forma que éstos se devuelvan ordenados. Si se omite,
los registros se recuperarán en un orden arbitrario, no determinado.
·
WITH OWNERACCESS OPTION indica que se desea dar al usuario
de la consulta los mismos permisos que el usuario que la creó. Sólo es útil en
entornos multiusuario en los que se han establecido grupos de seguridad.
Ejemplos:
·
SELECT * FROM Empleados;
·
SELECT Apellidos, Nombre FROM Empleados WHERE Departamento =
‘Ventas’;
·
SELECT FechaNac AS Nacimiento FROM
Empleados ORDER BY Apellidos, Nombre;
El predicado
puede tomar los valores ALL, DISTINCT, DISTINCTROW o TOP n [PERCENT]. Cada una de estas opciones significa lo siguiente:
·
ALL: Se recuperan todos los registros (que verifiquen las
condiciones WHERE y HAVING, si éstas existen).
·
DISTINCT: Se recuperan todos los registros salvo aquellos
que presenten valores duplicados en los campos seleccionados (en la cláusula
SELECT).
·
DISTINCTROW: Se recuperan todos los registros salvo aquellos
que presenten valores duplicados en todos los campos, y no sólo en los
seleccionados (en la cláusula SELECT).
·
TOP n: Recupera
los n primeros registros, según el
orden especificado en la consulta (ORDER BY). Si no se especificó un orden, se
toman n registros arbitrariamente.
·
TOP n PERCENT:
Igual que al anterior, pero ahora n
representa un porcentaje respecto al total de registros.
Ejemplos:
·
SELECT ALL * FROM Empleados ORDER BY
EmpleadoId;
·
SELECT DISTINCT Apellidos FROM
Empleados;
·
SELECT TOP 25 Apellidos, Nombre FROM
Estudiantes WHERE AñoGraduacion = 1994 ORDER BY NotaMedia DESC;
La cláusula FROM especifica las tablas
o consultas que contienen los registros que se desean recuperar. Puede
presentar alguna de las siguientes formas:
·
FROM { tabla | consulta }: Recupera los registros de la
tabla o consulta especificada.
·
FROM tabla1, tabla2: Calcula el producto cartesiano
de la tabla1 y la tabla2 (que también pueden ser
consultas). El producto cartesiano consta de todas las posibles combinaciones
de un registro de la tabla1 y otro de
la tabla2.
·
FROM tabla1 {
INNER | LEFT | RIGHT } JOIN tabla2 ON
tabla1.campo1 = tabla2.campo2: Relaciona los registros de la tabla1 con los de la tabla2 (que también pueden ser
consultas) de forma similar al producto cartesiano, pero devolviendo sólo aquellas
parejas en las que se verifique la relación tabla1.campo1 = tabla2.campo2. Si se
especifica INNER JOIN, sólo se devuelven las parejas que verifiquen la
relación. Si se especifica LEFT JOIN, se devuelven todos los registros de tabla1 (que está la izquierda del JOIN),
relacionados con los registros de tabla2
cuando alguno verifique la relación. Si se especifica RIGHT JOIN, se devuelven
los todos los registros de tabla2,
relacionados cuando proceda con los registros de tabla1. En la relación ON, no sólo se permite la igualdad (=), sino
también las comparaciones <, >, <=, >= y <>. Además, pueden
relacionarse dos tablas mediante más de dos campos, indicando cómo se combinan
las relaciones entre sí mediante AND, OR, etcétera.
Las anteriores combinaciones de tablas
y consultas pueden anidarse entre sí tanto como se desee (usando paréntesis
para indicar su precedencia), pero deben observarse las siguientes reglas:
·
No pueden relacionarse mediante JOIN dos productos
cartesianos, pero sí puede realizarse el producto cartesiano de otros productos
cartesianos o relaciones JOIN.
·
Puede anidarse un INNER JOIN dentro de un LEFT JOIN o un
RIGHT JOIN, pero no a la inversa.
Puede indicarse además que una tabla o
consulta reside en una base de datos externa usando la sintaxis:
·
FROM tabla IN { “ruta” | “ruta” “tipo” | “” [conexión] }
Adviértase que los corchetes en negrita
indica que deben escribirse corchetes en esa posición de la cláusula. Para esta
última forma, además, una alternativa más cómoda es: FROM [conexión].tabla.
Ejemplos:
·
SELECT * FROM Categorias,
Empleados WHERE Categorias.IdCategoria = Empleados.CategoriaId
·
SELECT Categorias.Nombre AS
NombreCategoria, Productos.Nombre AS NombreProducto FROM Categorias INNER JOIN
Productos ON Categorias.IdCategoria = Productos.CategoriaId;
·
SELECT DISTINCTROW Sum(PrecioUd
* Cantidad) AS Ventas, Nombre & ‘ ‘ & Apellidos AS Name FROM Empleados
INNER JOIN (Pedidos INNER JOIN [Detalle Pedidos] ON [Detalle Pedidos].PedidoId
= Pedidos.IdPedido) ON Pedidos.EmpleadoId = Empleados.IdEmpleado GROUP BY
Nombre & ‘ ‘ & Apellidos AS Name;
·
SELECT Categorias.Nombre,
Productos.Nombre FROM Categorias LEFT JOIN Productos ON Categorias.IdCategoria
= Products.CategoriaId;
·
SELECT Departamentos.Nombre, Apellidos,
Empleados.Name FROM Departmentos RIGHT JOIN Empleados ON
Departamentos.IdDepartamento = Empleados.DepartamentoId ORDER BY
Departamentos.Nombre;
·
SELECT ClienteId FROM Clientes
IN OtraBD.mdb WHERE Nombre
LIKE ‘A*’;
·
SELECT ClienteId FROM Clientes
IN "C:\DBASE\VENTAS" "dBASE IV;" WHERE Nombre LIKE ‘A*’;
·
SELECT ClienteId FROM Clientes IN
"" [Paradox 4.x;Database=C:\DATOS\VENTAS;] WHERE
Nombre LIKE ‘A*’;
·
SELECT ClienteId FROM [EXCEL
8.0;Database=c:\doc\mihoja.xls;].RangoClientes WHERE Nombre LIKE ‘A*’;
La cláusula WHERE permite especificar una condición, de
forma que la consulta sólo tomará aquellos registros procedentes de la cláusula
FROM que hagan cierta dicha condición. Omitirla equivale a especificar WHERE
TRUE que, por cumplirse siempre, hace que se tomen todos los registros. La
condición puede ser tan compleja como queramos, y puede hacer referencia a los
campos de origen, a los alias de los mismos, a constantes, parámetros y todas
las funciones (de sistema y usuario) que se desee.
Ejemplos:
·
SELECT Apellidos, Nombre, Sueldo
FROM Empleados WHERE Sueldo > 2500000;
·
SELECT * FROM Pedidos WHERE
FechaSalida = #5/10/96#;
·
SELECT * FROM Pedidos WHERE FechaSalida
= DateValue('10/5/96');
·
SELECT * FROM Clientes WHERE CP
BETWEEN ‘28001’ AND ‘28045’;
·
SELECT * FROM Pedidos WHERE
Provincia IN ('Madrid', 'Sevilla');
·
SELECT * FROM Clientes WHERE
Apellidos LIKE ‘[BZ]*’;
·
SELECT * FROM Clientes WHERE CP
IS NULL AND Provincia = ‘Madrid’;
La
cláusula GROUP BY permite realizar agrupaciones y cálculos agregados sobre los
registros de una consulta. Al especificarla, debe ir seguida de la lista de
campos por los que se desea agrupar. Los campos que podrán recuperarse en la
cláusula SELECT serán, además de todos aquellos por los que se agrupen los
registros, cualquier campo calculado agregado (es decir, aquellos que calculan
un valor a partir de campos de los registros agrupados mediante las funciones
de agregación COUNT, SUM, MIN, MAX, AVG, VAR, VARP, STDEV y STDEVP) o
constante. Si una consulta sólo recupera campos agregados que se calculan sobre
todos los registros, puede omitirse el GROUP BY.
Ejemplos:
·
SELECT Nombre, Count(Nombre)
FROM Empleados GROUP BY Nombre;
·
SELECT Nombre, Count(Nombre)
FROM Empleados WHERE Sueldo > 2000000 GROUP BY Nombre;
·
SELECT Count(*) FROM Empleados;
·
SELECT CategoriaId, Min(Sueldo),
Max(Sueldo) AS FROM Empleados GROUP BY CategoriaId;
·
SELECT Avg(Sueldo) FROM Empleados WHERE CategoriaId = 1;
La
cláusula HAVING permite establecer una condición sobre los resultados
resultantes de una agrupación establecida en una consulta mediante GROUP BY. Es
idéntica a la cláusula WHERE, salvo porque mientras que en ésta se hace
referencia a campos de los registros individuales recuperados de las tablas
indicadas en la cláusula FROM, en la cláusula HAVING se hace referencia a los
campos por los que se ha agrupado o a cálculos agregados.
Ejemplo:
·
SELECT CategoriaId, Sum(Stock)
FROM Productos GROUP BY CategoriaId HAVING Sum(Stock) > 100;
·
SELECT CategoriaId, Count(CategoriaId) FROM Empleados GROUP
BY CategoriaId HAVING Avg(Sueldo) > 1000000;
La
cláusula ORDER BY permite establecer en qué orden se devolverán los registros
seleccionados por la consulta. Su sintaxis es:
·
ORDER BY campo1 [
ASC | DESC ] [, campo2 [ ASC | DESC ]
[, … ]]
Los
campos que aparecen en ORDER BY
pueden ser cualquiera de los recuperados en la cláusula SELECT (incluyendo los
alias que se hayan definido), o cualquier expresión SQL válida, o un ordinal
que indicará la posición del campo (en la cláusula SELECT) por el que se desee
ordenar. Si la consulta es agrupada (GROUP BY), sólo podrán aparecer en esta cláusula
campos con las mismas restricciones que para HAVING. Con ASC y DESC se indica
si se desea que la ordenación se realice ascendente o descendentemente; de
omitirse, se supone ASC.
Ejemplos:
·
SELECT Apellidos, Nombre FROM Empleados
ORDER BY Apellidos;
·
SELECT Apellidos, Nombre, Sueldo FROM
Empleados ORDER BY Sueldo DESC, Apellidos;
SELECT
[predicado] { * | tabla.* | [tabla.]campo1 [AS alias1] [, [tabla.]campo2 [AS alias2] [, …]] } INTO destino FROM expresióntabla [IN basededatosexterna]
[WHERE …] [GROUP BY …] [HAVING …] [ORDER BY …]
Esta
sentencia permite seleccionar unos campos determinados de unos registros dados
y crear una nueva tabla destino en la
que insertará dichos campos. Esta es la única diferencia con el SELECT
convencional (que en lugar de crear una tabla e insertar los registros, los
devuelve). Para determinar los tipos y nombres de los campos de la tabla
destino se usan los de los campos especificados en la cláusula SELECT, por lo
que es importante dar nombre válidos a todos los campos que lo necesiten
mediante AS. Si en lugar de crear una nueva tabla se desea añadir el resultado
de la consulta a una tabla ya existente, debe usarse la sentencia INSERT INTO.
Ejemplos:
·
SELECT * INTO CopiaEmpleados FROM Empleados;
·
SELECT CategoriaId, Avg(Sueldo) AS SueldoMedio INTO Salario
FROM Empleados GROUP BY CategoriaId;
[TABLE]
consulta1 UNION [ALL] [TABLE] consulta2 [UNION [ALL] consulta3 […]]
Crea
una consulta de unión, que combina el resultado de dos o más consultas o tablas
independientes en una sola. Si se especifica UNION, se devuelven los registros
de las dos consultas implicadas, eliminando aquellos que resulten ser
idénticos. Si se especifica UNION ALL, no se omiten estos últimos (y la
consulta de unión resulta mucho más rápida). Todas las consultas deben tener el mismo número de campos, pero no se exigen
que éstos tengan el mismo tamaño ni el mismo tipo de dato. Para obtener los
nombres de los campos del resultado final sólo se examina la primera consulta (consulta1), por lo que sólo es necesario
usar alias en ésta. Pueden usarse cláusulas GROUP BY y HAVING en cada una de
las consultas, pero sólo puede usarse una cláusula ORDER BY al final, para
indicar cómo se ordena la unión de todos los registros. Este ORDER BY hace
referencia a los campos de la forma en que se les llamó en el primer SELECT.
Ejemplos:
·
TABLE NuevosClientes UNION ALL
SELECT * FROM Clientes WHERE TotalPedidos > 1000;
·
SELECT Nombre, Ciudad FROM Proveedores
WHERE Pais = 'Brazil' UNION SELECT Nombre, Ciudad FROM Clientes WHERE Pais = 'Brazil';
INSERT
INTO destino [(campo1 [, campo2 [, …]])]
VALUES (valor1 [, valor2 [, …]])
Añade
un nuevo registro al destino, que
puede ser una tabla o consulta de la base de datos sobre la que estemos
trabajando. En la sentencia SQL se indican los campos a los que se asignan los valores
deseados; si se omiten los nombre de los campos,
se tomarán éstos en orden de la definición del destino y será obligatorio especificar valores para todos los
campos existentes. Hay que especificar cada uno de los campos del registro para
los que se desea asignar un valor, así como dichos valores. Para aquellos
campos de la tabla destino que se
omitan, se insertará el valor por defecto o NULL. El registro se añade al final
de la tabla.
Ejemplo:
·
INSERT INTO Empleados (Nombre, Apellidos, Cargo) VALUES
('Antonio', 'Benítez Gil', 'Ingeniero');
INSERT
INTO destino [(campo1 [, campo2 [, …]])]
[IN basededatosexterna] SELECT campo1 [, campo2 [, …]] FROM origen
Selecciona
algunos campos de una consulta o
tabla origen y los inserta en la
tabla o consulta destino. Si
especifica una lista de campos tras
la cláusula INSERT INTO, éstos indican los campos del destino en el que se insertarán los datos recuperados del origen; si se omiten, se tomarán los
nombres de los campos recuperados del origen
y se insertarán en las columnas homónimas del destino. Adviértase que origen
es una expresión de consulta cualquiera, idéntica a las que aparecen en las
sentencias SELECT; es decir, puede especificarse una cláusula WHERE, una
agrupación, ordenación, etcétera. Opcionalmente, puede usarse la cláusula IN
para indicar que el destino reside a
una base de datos externa (para más detalles, véase la definición de SELECT).
Ejemplo:
·
INSERT INTO Clientes SELECT * FROM NuevosClientes WHERE
FechaAlta > #1/1/2000#
UPDATE
origen SET valores [WHERE condición]
Permite
actualizar los campos que deseemos de un conjunto de registros determinado que
cumpla una condición dada. Las cláusulas de esta sentencia son:
·
UPDATE origen:
Indica el origen de los registros que se desean actualizar. Puede ser una
tabla, una consulta o una combinación de tablas y/o consulta, de la misma forma
que aparecen en la cláusula FROM de la sentencia SELECT (véase la definición de
ésta para más detalles).
·
SET valores:
Indica qué campos se quieren actualizar y cómo. Es una lista de asignaciones,
separadas entre sí por comas, con la forma: campo
= valor, donde campo es cualquiera de los campos del origen y valor es el
resultado de cualquier expresión SQL válida, donde pueden aparecer los campos del
origen, incluso recursivamente.
·
WHERE condición:
Indica qué condición han de verificar
los registros del origen para ser
actualizados. Los que no la cumplan no serán modificados. Si se omite esta
cláusula, se actualizarán todos los registros del origen. Esta cláusula es idéntica al WHERE de la sentencia SELECT
(véase la definición de ésta para más detalles).
Adviértase
que, en general, no es posible deshacer los cambios realizados tras un UPDATE.
Ejemplos:
·
UPDATE Pedidos SET GastosEnvio =
GastosEnvio * 1.25, Impuestos = 0.0 WHERE Destino = 'Canarias';
·
UPDATE Empleados SET Sueldo = 5000000 WHERE Sueldo =
4750000;
DELETE
[[tabla.]*] FROM origen [WHERE condición]
Elimina
los registros que cumplan una condición
de los pertenecientes a un origen de
datos dado. Adviértase que origen
puede ser una tabla, consulta o combinación de tablas y/o consultas cualquiera.
Si dicho origen involucra más de una
tabla, es posible indicar en la cláusula DELETE la tabla cuyos registros
quieren eliminarse. No es posible, sin embargo, eliminar sólo algunas columnas
de dicha tabla: o se borra el registro completo, o no se borra nada. Puede
especificarse además una condición
que deben verificar los registros que desean borrarse del origen; si dicha condición se omiten, se borrarán todos los
registros. Si se estableció alguna relación de integridad referencial entre
tablas, el DELETE puede provocar borrados en cascada. Téngase en cuenta que, en
general, no es posible recuperar los registros eliminados tras un DELETE, y que
aunque eliminemos todos los registros de una tabla, ésta seguirá existiendo
(aunque vacía) en la base de datos: para eliminar también la definición de la
tabla, debe usarse una sentencia DROP TABLE (véase más adelante).
Ejemplo:
·
DELETE * FROM Empleados WHERE Cargo = 'Contable';
Definición de datos (DDL:
Data Definition Language)
CREATE
TABLE tabla (campo1 tipo[(tamaño)]
[NOT NULL] [índice1] [, campo2 tipo[(tamaño)] [NOT NULL]
[índice2] [, ...]] [, CONSTRAINT índicemúltiple [, ...]])
Esta
sentencia permite crear una tabla con
los campos indicados, especificando el tipo
y (opcionalmente, si éste lo requiere) el tamaño
de los mismos. Si para algún campo de indica NOT NULL, éste no podrá tomar
valores nulos. Se permite establecer índice simples (índice1, índice2, …) sobre cada campo. Un índice simple tiene la
forma:
CONSTRAINT
nombre { PRIMARY KEY | UNIQUE | NOT
NULL | REFERENCES tablaajena [(campoajeno)] }
Esta
cláusula crea un índice simple llamado nombre.
El significado de cada opción es:
·
PRIMARY KEY: Indica que el campo sobre el que se define es
clave primaria.
·
UNIQUE: Indica que el campo sobre el que se define no acepta
valores duplicados.
·
NOT NULL: Indica que el campo sobre el que se define no
acepta valores nulos.
·
REFERENCES …: Establece una relación con una tablaajena. Si se especifica el campoajeno, se establece la relación
entre éste (que debe tener definido un índice UNIQUE o PRIMARY KEY) y el campo
sobre el que se define la referencia. Si se omite, se establece entre la clave
primaria de la tablaajena y el campo
sobre el que se define la referencia.
También
se permite definir índices múltiples, que tienen la siguiente forma:
CONSTRAINT
nombre { PRIMARY KEY (campo1[, campo2 [, ...]]) |
UNIQUE
(campo1[, campo2 [, ...]]) | NOT NULL (campo1[,
campo2 [, ...]]) |
FOREIGN
KEY (campo1[, campo2 [, ...]]) REFERENCES tablaajena
[(campoajeno1 [, campoajeno2 [, ...]])]}
Esta
cláusula crea un índice múltiple llamado nombre
definido sobre los campos campo1, campo2,
…. El significado de cada opción es:
·
PRIMARY KEY: Los campos del índice múltiple son la clave
primaria de la tabla.
·
UNIQUE: Los campos del índice múltiple no pueden tomar
valores repetidos (conjuntamente).
·
NOT NULL: Los campos del índice múltiple no pueden ser
nulos.
·
FOREIGN KEY … REFERENCES …: Establece una relación con una tablaajena.
Ejemplos:
·
CREATE TABLE EstaTabla (Nombre TEXT, Apellido TEXT);
· CREATE TABLE MiTabla (Nombre TEXT, Apellido TEXT, FechaNac DATETIME, CONSTRAINT MiIndice UNIQUE (Nombre, Apellido, FechaNac));
·
CREATE TABLE NuevaTabla (Nombre TEXT, Apellido TEXT, Clave
INTEGER CONSTRAINT MiIndice PRIMARY KEY);
ALTER
TABLE tabla {ADD {COLUMN campo tipo[(tamaño)] [NOT NULL] [CONSTRAINT índice…]
| CONSTRAINT índicemúltiple} | DROP
{COLUMN campo | CONSTRAINT índice} }
·
ALTER TABLE tabla
ADD COLUMN campo tipo[(tamaño)] [NOT NULL]
[CONSTRAINT índice]
Añade una columna llamada campo del tipo y (opcionalmente, si éste lo requiere) tamaño especificados. Si se especifica NOT NULL, entonces el campo no podrá tomar valores nulos.
Opcionalmente, puede especificarse un índice un restricción sobre dicho campo
(para más información, véase la definición de CREATE TABLE).
·
ALTER TABLE tabla
ADD CONSTRAINT índice { PRIMARY KEY |
UNIQUE | NOT NULL | REFERENCES tablaajena
[(campoajeno1, campoajeno2, …)] }
Añade un índice múltiple a la tabla. Para más detalles, véase la
definición de CREATE TABLE.
·
ALTER TABLE tabla
DROP COLUMN campo
Elimina el campo de la tabla, y por
tanto todos los datos que contuviera dicha columna.
·
ALTER TABLE tabla
DROP CONSTRAINT índice
Elimina el índice (simple o múltiple) previamente definido sobre tabla. No modifica los datos de la
misma.
Ejemplos:
·
ALTER TABLE Empleados ADD COLUMN Sueldo CURRENCY;
·
ALTER TABLE Empleados DROP COLUMN Sueldo;
·
ALTER TABLE Pedidos ADD CONSTRAINT RelPedidos FOREIGN KEY
(EmpleadoNum) REFERENCES Empleados (NumEmpleado);
·
ALTER TABLE Pedidos DROP CONSTRAINT RelPedidos;
CREATE
[ UNIQUE ] INDEX índice ON tabla (campo1 [ASC|DESC][, campo2
[ASC|DESC], ...])
[WITH { PRIMARY | DISALLOW NULL | IGNORE NULL }]
Crea
un índice sobre una tabla para
permitir una rápida ordenación por los campos indicados. Para cada uno de
éstos, se indica si deben ordenarse ascendente (ASC) o descendentemente (DESC);
si omite, se asume que se desea ordenar ascendentemente. Si se especifica que
el índice es UNIQUE, entonces no se permitirán valores duplicados en los campos
del mismo. Además, puede opcionalmente indicarse que:
·
PRIMARY: El índice constituya la clave primaria de la tabla.
·
DISALLOW NULL: Los campos que forman el índice no acepten
nulos.
·
IGNORE NULL: Los registros con nulos en los campos que
forman el índice no se incluyan en el mismo.
Ejemplos:
·
CREATE INDEX NuevoIndice ON Empleados (Telefono, CP);
·
CREATE UNIQUE INDEX Id ON Clientes (IdCliente) WITH DISALLOW
NULL;
DROP
{ TABLE tabla | INDEX índice ON tabla }
Permite
eliminar una tabla (TABLE) o un índice simple o múltiple definido sobre
una tabla (INDEX … ON).
Ejemplos:
·
DROP INDEX NuevoIndice ON Empleados;
·
DROP TABLE Empleados;
Tipos de datos
En
la siguiente tabla se muestran los tipos de datos ANSI SQL (que deben estar
presentes en todas las implementaciones estándar de SQL) y las equivalencias de
los mismos con los tipos de datos Microsoft Jet SQL, así como sus sinónimos
válidos.
Tipo de
dato ANSI SQL |
Tipo de
dato Microsoft Jet SQL |
Sinónimo |
BIT,
BIT VARYING |
BINARY
(Ver notas) |
VARBINARY |
(No
soportado) |
BIT
(Ver notas) |
BOOLEAN,
LOGICAL, LOGICAL1, YESNO |
(No
soportado) |
BYTE |
INTEGER1 |
(No
soportado) |
COUNTER |
AUTOINCREMENT |
(No
soportado) |
CURRENCY |
MONEY |
DATE,
TIME, TIMESTAMP |
DATETIME |
DATE,
TIME, TIMESTAMP |
(No
soportado) |
GUID |
|
DECIMAL |
(No
soportado) |
|
REAL |
SINGLE |
FLOAT4,
IEEESINGLE, REAL |
DOUBLE
PRECISION, FLOAT |
DOUBLE |
FLOAT,
FLOAT8, IEEEDOUBLE, NUMBER, NUMERIC |
SMALLINT |
SHORT |
INTEGER2,
SMALLINT |
INTEGER |
LONG |
INT,
INTEGER, INTEGER4 |
INTERVAL |
(No
soportado) |
|
(No
soportado) |
LONGBINARY |
GENERAL,
OLEOBJECT |
(No
soportado) |
LONGTEXT |
LONGCHAR,
MEMO, NOTE |
CHARACTER,
CHARACTER VARYING |
TEXT |
ALPHANUMERIC,
CHAR, CHARACTER, STRING, VARCHAR |
(No
soportado) |
VALUE
(Ver notas) |
|
Notas:
·
El tipo de dato ANSI SQL BIT no se corresponde con el tipo de dato Microsoft Jet SQL BIT, sino con el tipo de dato BINARY. No hay equivalente en ANSI SQL
para el tipo de dato Microsoft Jet SQL BIT.
·
La palabra reservada VALUE
no representa ningún tipo de dato definido en Microsoft Jet SQL, pero sí en
otros dialectos de SQL.
La
tabla siguiente muestra los tipos de datos primarios definidos en Microsoft Jet
SQL, así como sus correspondientes tamaño y significado. Los sinónimos
permitidos para cada uno de ellos aparecen en la tabla anterior.
Tipo
de dato |
Tamaño |
Descripción |
BINARY |
1
byte por carácter |
Cualquier
tipo de dato puede almacenarse en un campo de este tipo. No se hace ningún
tipo de traducción (por ejemplo, a texto) a los datos. Éstos se recuperarán
exactamente igual a como se introdujeron. |
BIT |
1
byte |
Valores
YES y NO y campos que contienen valores lógicos. |
BYTE |
1
byte |
Un
valor entero entre 0 y 255. |
COUNTER |
4
bytes |
Un
número entero automáticamente incrementado por la base de datos cada vez que
se añade un nuevo registro a la tabla. Internamente corresponde a un LONG. |
CURRENCY |
8
bytes |
Un
número con 4 decimales comprendido entre ‑922.337.203.685.477,5808 y
922.337.203.685.477,5807. |
DATETIME
|
8
bytes |
Una
valor de fecha u hora comprendido entre los años 100 y 9999. Internamente
corresponde a un DOUBLE. |
GUID |
128
bits |
Un
número de identificación única usado para llamadas remotas. |
SINGLE |
4
bytes |
Un
número en coma flotante de simple precisión en los rangos ‑3,402823E38
a ‑1,401298E‑45 para valores negativos, 1,401298E‑45 a
3,402823E38 para valores positivos, y el 0. |
DOUBLE |
8
bytes |
Un
número en coma flotante de doble precisión en los rangos ‑1,79769313486232E308
a ‑4,94065645841247E‑324 para valores negativos,
4,94065645841247E‑324 a 1,79769313486232E308 para valores positivos, y
el 0. |
SHORT |
2
bytes |
Un
entero corto comprendido entre ‑32.768 y 32.767. |
LONG |
4
bytes |
Un
entero largo comprendido entre ‑2.147.483.648 y 2.147.483.647. |
LONGTEXT |
1
byte por carácter |
Texto
de 0 a 1,2 gigabytes. |
LONGBINARY |
Según
se requiera |
Datos
de 0 a 1,2 gigabytes. Se usa para almacenar objetos OLE. |
TEXT |
1
byte por carácter |
Texto
de 0 a 255 caracteres. |