Professional Documents
Culture Documents
-1 -
-2 -
Sintaxis SQL: Una pgina nica que enumera la sintaxis para todos los comandos
SQL en esta gua de referencia.
Para cada comando, primero se presentar y explicar la sintaxis SQL, seguida por un
ejemplo. Al final de esta gua de referencia, deber tener una idea general de la sintaxis
SQL. Adems, deber poder realizar consultas SQL utilizando la sintaxis apropiada. Segn
mi experiencia creo que el comprender lo bsico de SQL es mucho ms fcil que dominar
todas las dificultades de este lenguaje de base de datos, y espero que tambin llegue a la
misma conclusin.
Si est interesado en cmo recuperar datos utilizando SQL, le recomendamos que
empiece con la seccin Comandos SQL. Si est interesado en comprender cmo puede
utilizarse SQL para manipular una tabla de base de datos, le recomendamos que
comience con la seccin Manipulacin de Tabla. Si est buscando ayuda sobre un
comando SQL especfico, puede utilizar el Mapa del Sitio para encontrar el comando que
est buscando.
Bien, suficiente introduccin. Agregue este sitio a favoritos ahora y comience a
aprender SQL!
Nota: Si ensea SQL o da una clase relacionada con bases de dato, puede realizar un
enlace a este sitio como material de referencia para sus alumnos.
COMANDOS DE SQL
Para qu utilizamos los comandos SQL? El uso comn es la seleccin de datos desde
tablas ubicadas en una base de datos. Inmediatamente, vemos dos palabras claves:
necesitamos SELECT la informacin FROM una tabla. (Note que la tabla es un
contenedor que reside en la base de datos donde se almacena la informacin. Para
obtener ms informacin acerca de cmo manipular tablas, consulte la Seccin
Manipulacin de Tabla). Por lo tanto tenemos la estructura SQL ms bsica:
SELECT "nombre_columna" FROM "nombre_tabla"
Para ilustrar el ejemplo anterior, suponga que tenemos la siguiente tabla:
Tabla Store_Information
store_name Sales Date
Los Angeles 1500 05-Jan-1999
San Diego
250 07-Jan-1999
Boston
-3 -
700 08-Jan-1999
Podemos utilizar esta tabla como ejemplo a lo largo de la gua de referencia (esta tabla
aparecer en todas las secciones). Para seleccionar todos los negocios en esta tabla,
ingresamos,
SELECT store_name FROM Store_Information
Resultado:
store_name
Los Angeles
San Diego
Los Angeles
Boston
Pueden seleccionarse los nombres de columnas mltiples, as como tambin los nombres
de tablas mltiples.
En Excel Sera
SELECT store_name FROM [Store_Information$]
SQL DISTINCT >>
palabra clave SELECT nos permite tomar toda la informacin de una columna (o
columnas) en una tabla. Esto, obviamente, significa necesariamente que habr
redundancias. Qu sucedera si slo deseamos seleccionar cada elemento DISTINCT?
Esto es fcil de realizar en SQL. Todo lo que necesitamos hacer es agregar DISTINCT
luego de SELECT. La sintaxis es la siguiente:
SELECT DISTINCT "nombre_columna"
FROM "nombre_tabla"
Por ejemplo, para seleccionar todos los negocios distintos en la Tabla Store_Information,
Tabla Store_Information
store_name Sales Date
Los Angeles 1500 05-Jan-1999
San Diego
250 07-Jan-1999
Los Angeles
300 08-Jan-1999
Boston
700 08-Jan-1999
Ingresamos,
-4 -
250 07-Jan-1999
Los Angeles
300 08-Jan-1999
Boston
700 08-Jan-1999
Ingresamos,
SELECT store_name
FROM Store_Information
WHERE Sales > 1000
Resultado:
store_name
Los Angeles
SQL AND OR >>
En la seccin anterior, hemos visto que la palabra clave WHERE tambin puede utilizarse
para seleccionar datos condicionalmente desde una tabla. Esta condicin puede ser una
condicin simple (como la que se presenta en la seccin anterior), o puede ser una
condicin compuesta. Las condiciones compuestas estn formadas por mltiples
-5 -
Sales Date
Los Angeles
1500 05-Jan-1999
San Diego
250 07-Jan-1999
San Francisco
300 08-Jan-1999
Boston
700 08-Jan-1999
Ingresamos,
SELECT store_name
FROM Store_Information
WHERE Sales > 1000
OR (Sales < 500 AND Sales > 275)
Resultado:
store_name
Los Angeles
San Francisco
SQL IN >>
En SQL, hay dos usos de la palabra clave IN, y esta seccin introduce aqul relacionado
con la clusula WHERE. Cuando se lo utiliza en este contexto, sabemos exactamente el
valor de los valores regresados que deseamos ver para al menos una de las columnas. La
sintaxis para el uso de la palabra clave IN es la siguiente:
-6 -
SELECT "nombre_columna"
FROM "nombre_tabla"
WHERE "nombre_columna" IN (''valor1', ''valor2', ...)
El nmero de valores en los parntesis pueden ser uno o ms, con cada valor separado
por comas. Los valores pueden ser nmeros o caracteres. Si hay slo un valor dentro del
parntesis, este comando es equivalente a
WHERE "nombre_columna" = 'valor1'
Por ejemplo, podramos desear seleccionar todos los registros para los negocios de Los
ngeles y San Diego en la Tabla Store_Information,
Tabla Store_Information
store_name
Sales Date
Los Angeles
1500 05-Jan-1999
San Diego
250 07-Jan-1999
San Francisco
300 08-Jan-1999
Boston
700 08-Jan-1999
Ingresamos,
SELECT *
FROM Store_Information
WHERE store_name IN ('Los Angeles', 'San Diego')
Resultado:
store_name Sales Date
Los Angeles 1500 05-Jan-1999
San Diego
250 07-Jan-1999
-7 -
SELECT "nombre_columna"
FROM "nombre_tabla"
WHERE "nombre_columna" BETWEEN 'valor1' AND 'valor2'
Esto seleccionar todas las filas cuya columna tenga un valor entre 'valor1' y 'valor2'.
Por ejemplo, podramos desear seleccionar la visualizacin de toda la informacin de
ventas entre el 06 de enero de 1999, y el 10 de enero de 1999, en la Tabla
Store_Information,
Tabla Store_Information
store_name
Sales Date
Los Angeles
1500 05-Jan-1999
San Diego
250 07-Jan-1999
San Francisco
300 08-Jan-1999
Boston
700 08-Jan-1999
Ingresamos,
SELECT *
FROM Store_Information
WHERE Date BETWEEN '06-Jan-1999' AND '10-Jan-1999'
Tenga en cuenta que la fecha puede almacenarse en diferentes formatos segn las
diferentes bases de datos. Esta gua de referencia simplemente elige uno de los formatos.
Resultado:
store_name
San Diego
Sales Date
250 07-Jan-1999
700 08-Jan-1999
-8 -
SELECT "nombre_columna"
FROM "nombre_tabla"
WHERE "nombre_columna" LIKE {patrn}
{patrn} generalmente consiste en comodines. Aqu hay algunos ejemplos:
'A_Z': Toda lnea que comience con 'A', otro carcter y termine con 'Z'. Por ejemplo,
'ABZ' y 'A2Z' deberan satisfacer la condicin, mientras 'AKKZ' no debera (debido a
que hay dos caracteres entre A y Z en vez de uno).
'ABC%': Todas las lneas que comienzan con 'ABC'. Por ejemplo, 'ABCD' y
'ABCABC' ambas deberan satisfacer la condicin.
'%XYZ': Todas las lneas que terminan con 'XYZ'. Por ejemplo, 'WXYZ' y 'ZZXYZ'
ambas deberan satisfacer la condicin.
'%AN%': : Todas las lneas que contienen el patrn 'AN' en cualquier lado. Por
ejemplo, 'LOS ANGELES' y 'SAN FRANCISCO' ambos deberan satisfacer la
condicin.
Sales Date
LOS ANGELES
1500 05-Jan-1999
SAN DIEGO
250 07-Jan-1999
SAN FRANCISCO
300 08-Jan-1999
BOSTON
700 08-Jan-1999
Deseamos encontrar todos los negocios cuyos nombres contengan AN. Para hacerlo,
ingresamos,
SELECT *
FROM Store_Information
WHERE store_name LIKE '%AN%'
Resultado:
store_name
Sales Date
LOS ANGELES
1500 05-Jan-1999
SAN DIEGO
250 07-Jan-1999
SAN FRANCISCO
-9 -
300 08-Jan-1999
SQL ORDER BY >>
Hasta ahora, hemos visto cmo obtener datos de una tabla utilizando los comandos
SELECT y WHERE. Con frecuencia, sin embargo, necesitamos enumerar el resultado en
un orden particular. Esto podra ser en orden ascendente, en orden descendente, o podra
basarse en valores numricos o de texto. En tales casos, podemos utilizar la palabra clave
ORDER BY para alcanzar nuestra meta.
La sintaxis para una instruccin ORDER BY es la siguiente:
SELECT "nombre_columna"
FROM "nombre_tabla"
[WHERE "condicin"]
ORDER BY "nombre_columna" [ASC, DESC]
[] significa que la instruccin WHERE es opcional. Sin embargo, si existe una clusula
WHERE, viene antes de la clusula ORDER BY ASC significa que los resultados se
mostrarn en orden ascendente, y DESC significa que los resultados se mostrarn en
orden descendente. Si no se especifica ninguno, la configuracin predeterminada es ASC.
Es posible ordenar por ms de una columna. En este caso, la clusula ORDER BYanterior
se convierte en
ORDER BY "nombre1_columna" [ASC, DESC], "nombre2_columna" [ASC, DESC]
Suponiendo que elegimos un orden ascendente para ambas columnas, el resultado se
clasificar en orden ascendente segn la columna 1. Si hay una relacin para el valor de la
columna 1, se clasificar en orden ascendente segn la columna 2.
Por ejemplo, podramos desear enumerar los contenidos de la Tabla Store_Information
segn la suma en dlares, en orden descendente:
Tabla Store_Information
store_name
Sales Date
Los Angeles
1500 05-Jan-1999
San Diego
250 07-Jan-1999
San Francisco
300 08-Jan-1999
Boston
700 08-Jan-1999
-10 -
Ingresamos,
SELECT store_name, Sales, Date
FROM Store_Information
ORDER BY Sales DESC
Resultado:
store_name
Sales Date
Los Angeles
1500 05-Jan-1999
Boston
700 08-Jan-1999
San Francisco
300 08-Jan-1999
San Diego
250 07-Jan-1999
-11 -
Tabla Store_Information
store_name Sales Date
Los Angeles 1500 05-Jan-1999
San Diego
250 07-Jan-1999
700 08-Jan-1999
ingresaramos
SELECT SUM(Sales) FROM Store_Information
Resultado:
SUM(Sales)
2750
2 750 dlares estadounidenses representa la suma de todas las entradas de Ventas:
1500 + 250 + 300 + 700 .
Adems de utilizar dichas funciones, tambin es posible utilizar SQL para realizar tareas
simples como suma (+) y resta (-). Para ingresar datos del tipo caracter, hay tambin
varias funciones de cadenas disponibles, tales como funciones de concatenacin,
reduccin y subcadena. Los diferentes proveedores RDBMS tienen diferentes
implementaciones de funciones de cadenas, y es mejor consultar las referencias para sus
RDBMS a fin de ver cmo se utilizan estas funciones.
SQL COUNT >>
Otra funcin aritmtica es COUNT. Esto nos permite COUNT el nmero de filas en una
tabla determinada. La sintaxis es,
SELECT COUNT("nombre_columna")
FROM "nombre_columna"
Por ejemplo, si deseamos encontrar el nmero de entradas de negocios en nuestra tabla,
Tabla Store_Information
store_name Sales Date
Los Angeles 1500 05-Jan-1999
San Diego
-12 -
250 07-Jan-1999
700 08-Jan-1999
ingresamos,
SELECT COUNT(store_name)
FROM Store_Information
Resultado:
Count(store_name)
4
COUNT y DISTINCT pueden utilizarse juntos en una instruccin para determinar el
nmero de las distintas entradas en una tabla. Por ejemplo, si deseamos saber el nmero
de los distintos negocios, ingresaramos,
SELECT COUNT(DISTINCT store_name)
FROM Store_Information
Resultado:
Count(DISTINCT store_name)
3
Esta funcin no funciona
SQL GROUP BY >>
Ahora regresamos a las funciones de agregados. Recuerda que utilizamos la palabra
clave SUM para calcular las ventas totales para todos los negocios? Y si quisiramos
calcular el total de ventas para cada negocio? Entonces, necesitamos hacer dos cosas:
Primero, necesitamos asegurarnos de que hayamos seleccionado el nombre del negocio
as como tambin las ventas totales. Segundo, debemos asegurarnos de que todas las
sumas de las ventas estn GROUP BY negocios. La sintaxis SQL correspondiente es,
SELECT "nombre1_columna", SUM("nombre2_columna")
FROM "nombre_tabla"
GROUP BY "nombre1-columna"
Ilustremos utilizando la siguiente tabla,
Tabla Store_Information
-13 -
250 07-Jan-1999
700 08-Jan-1999
Deseamos saber las ventas totales para cada negocio. Para hacerlo, ingresaramos,
SELECT store_name, SUM(Sales)
FROM Store_Information
GROUP BY store_name
Resultado:
store_name SUM(Sales)
Los Angeles 1800
San Diego
250
Boston>
700
-14 -
250 07-Jan-1999
700 08-Jan-1999
ingresaramos,
SELECT store_name, SUM(sales)
FROM Store_Information
GROUP BY store_name
HAVING SUM(sales) > 1500
Resultado:
store_name
SUM(Sales)
Los Angeles
1800
SQL Alias >>
Nos concentraremos ahora en el uso de alias. Hay dos tipos de alias que se utilizan con
mayor frecuencia. Alias de columna y alias de tabla.
Resumiendo, los alias de columna existen para ayudar en la organizacin del resultado.
En el ejemplo anterior, cualquiera sea el momento en que vemos las ventas totales, se
enumeran como SUM(sales). Mientras esto es comprensible, podemos ver casos donde el
ttulo de la columna pueden complicarse (especialmente si incluye varias operaciones
aritmticas). El uso de un alias de columna hara el resultado mucho ms legible.
El segundo tipo de alias es el alias de tabla. Esto se alcanza al colocar un alias
directamente luego del nombre de tabla en la clusula FROM. Esto es conveniente cuando
desea obtener informacin de dos tablas separadas (el trmino tcnico es 'realizar
uniones'). La ventaja de utiliza un alias de tablas cuando realizamos uniones es
rpidamente aparente cuando hablamos de uniones.
Antes de comenzar con las uniones, miremos la sintaxis tanto para el alias de columna
como de tabla:
SELECT "alias_tabla"."nombre1_columna" "alias_columna"
FROM "nombre_tabla" "alias_tabla"
-15 -
Brevemente, ambos tipos de alias se colocan directamente despus del elemento por el
cual generan el alias, separados por un espacio en blanco. Nuevamente utilizamos
nuestra tabla, Store_Information,
Tabla Store_Information
store_name Sales Date
Los Angeles 1500 05-Jan-1999
San Diego
250 07-Jan-1999
Los Angeles
300 08-Jan-1999
Boston
700 08-Jan-1999
Utilizamos el mismo ejemplo que en la seccin SQL GROUP BY, salvo que hemos
colocado tanto el alias de columna como el alias de tabla:
SELECT A1.store_name Store, SUM(A1.Sales) "Total Sales"
FROM Store_Information A1
GROUP BY A1.store_name
Resultado:
Store
Total Sales
250
Boston
700
Note la diferencia en el resultado: los ttulos de las columnas ahora son diferentes. Ese es
el resultado de utilizar el alias de columna. Note que en vez de Sum(sales) de algn
modo enigmtico, ahora tenemos Total Sales, que es ms comprensible, como ttulo de
columna. La ventaja de utilizar un alias de tablas no es fcil de ver en este ejemplo. Sin
embargo, se tornar evidente en la siguiente seccin.
SQL Join >>
Ahora miremos las uniones. Para realizar uniones en SQL se requieren mucho de los
elementos que ya hemos presentado. Digamos que tenemos las siguientes dos tablas:
Tabla Store_Information
store_name Sales Date
Los Angeles 1500 05-Jan-1999
San Diego
250 07-Jan-1999
Los Angeles
300 08-Jan-1999
Boston
700 08-Jan-1999
-16 -
Tabla Geography
region_name store_name
East
Boston
East
New York
West
Los Angeles
West
San Diego
y queremos saber las ventas por regin. Vemos que la tabla Geography incluye
informacin sobre regiones y negocios, y la tabla Store_Information contiene informacin
de ventas para cada negocio. Para obtener la informacin de ventas por regin, debemos
combinar la informacin de las dos tablas. Al examinar las dos tablas, encontramos que
estn enlazadas a travs del campo comn nombre_negocio Primero presentaremos la
instruccin SQL y explicaremos el uso de cada segmento despus:
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
Resultado:
REGIN SALES
East
700
West
2050
Nota: la palabra as en la consulta , se debe modificar en excel a
SELECT A1.region_name as REGION, SUM(A2.Sales) as SALES
FROM [Geography$] A1, [Store_Information$] A2
WHERE A1.store_name = A2.store_name GROUP BY A1.region_name
Las primeras dos lneas le indican a SQL que seleccione dos campos, el primero es el
campo "nombre_regin" de la tabla Geography (denominado REGIN), y el segundo es
la suma del campo "Sales" de la tabla Store_Information (denominado SALES). Note
-17 -
250 07-Jan-1999
700 08-Jan-1999
Tabla Geography
region_name store_name
East
Boston
East
New York
West
Los Angeles
West
San Diego
-18 -
y queremos saber la suma de las ventas de todos los negocios. Si realizamos una unin
regular, no podramos obtener lo que deseamos debido a que habramos omitido Nueva
York" ya que no aparece en la tabla Store_Information. Por lo tanto, necesitamos realizar
una unin externa respecto de las dos tablas anteriores:
SELECT A1.store_name, SUM(A2.Sales) SALES
FROM Geography A1, Store_Information A2
WHERE A1.store_name = A2.store_name (+)
GROUP BY A1.store_name
Note que en este caso, estamos utilizando la sintaxis Oracle para unin externa.
Resultado:
store_name
Boston
New York
Los Angeles
San Diego
SALES
700
1800
250
Nota: Se devuelve NULL cuando no hay coincidencia en la segunda tabla. En este caso,
Nueva York" no aparece en la tabla Store_Information, por lo tanto su columna "SALES"
correspondiente es NULL.
ESTA PARTE NO FUNCIONA (Solo funciona en Oracle)
SQL Concatenar >>
Algunas veces es necesario combinar en forma conjunta (concatenar) los resultados de
varios campos diferentes. Cada base de datos brinda una forma para realizar esto:
MySQL: CONCAT()
Oracle: CONCAT(), ||
SQL Server: +
-19 -
slo dos cadenas pueden colocarse juntas al mismo tiempo utilizando esta funcin. Sin
embargo, es posible concatenar ms de dos cadenas al mismo tiempo en Oracle
utilizando '||'.
Observemos algunos ejemplos. Supongamos que tenemos la siguiente tabla:
Tabla Geography
region_name store_name
East
Boston
East
New York
West
Los Angeles
West
San Diego
Ejemplo 1:
MySQL/Oracle:
SELECT CONCAT(region_name,store_name) FROM Geography
WHERE store_name = 'Boston';
Resultado :
'EastBoston'
Ejemplo 2:
Oracle:
SELECT region_name || ' ' || store_name FROM Geography
WHERE store_name = 'Boston';
Resultado :
'East Boston'
Ejemplo 3:
SQL Server:
SELECT region_name + ' ' + store_name FROM Geography
WHERE store_name = 'Boston';
Resultado :
'East Boston'
SQL SUBSTRING >>
-20 -
MySQL: CONCAT()
Oracle: CONCAT(), ||
SQL Server: +
Boston
East
New York
West
Los Angeles
West
San Diego
Ejemplo 1:
MySQL/Oracle:
SELECT CONCAT(region_name,store_name) FROM Geography
WHERE store_name = 'Boston';
Resultado :
'EastBoston'
Ejemplo 2:
Oracle:
SELECT region_name || ' ' || store_name FROM Geography
WHERE store_name = 'Boston';
Resultado :
'East Boston'
Ejemplo 3:
-21 -
SQL Server:
SELECT region_name + ' ' + store_name FROM Geography
WHERE store_name = 'Boston';
Resultado :
'East Boston'
Solo funciona la tercera forma
SELECT region_name + ' ' + store_name FROM [Geography$]
WHERE store_name = 'Boston'
Se podria contanar tambien asi
SELECT region_name + '==> ' + store_name FROM [Geography$]
;
SQL SUBSTRING >>
La funcin de subcadena en SQL se utiliza para tomar una parte de los datos
almacenados. Esta funcin tiene diferentes nombres segn las diferentes bases de datos:
Boston
East
New York
West
Los Angeles
West
-22 -
San Diego
Ejemplo 1 :
SELECT SUBSTR(store_name, 3)
FROM Geography
WHERE store_name = 'Los Angeles';
Resultado :
's Angeles'
Ejemplo 2 :
SELECT SUBSTR(store_name,2,4)
FROM Geography
WHERE store_name = 'San Diego';
Resultado :
'an D'
Estas funciones no estn definidas
SQL TRIM >>
La funcin TRIM en SQL se utiliza para eliminar un prefijo o sufijo determinado de una
cadena. El patrn ms comn a eliminarse son los espacios en blanco. Esta funcin tiene
diferentes nombres segn las diferentes bases de datos:
-23 -
-24 -
-25 -
- 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),
-26 -
-27 -
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 >>
Una clave externa es un campo (o campos) que seala la clave primaria de otra tabla. El
propsito de la clave externa es asegurar la integridad referencial de los datos. En otras
palabras, slo se permiten los valores que se esperan que aparezcan en la base de datos.
Por ejemplo, digamos que tenemos dos tablas, una tabla CUSTOMER que incluye todos
los datos del CUSTOMER, y la tabla RDENES que incluye los pedidos del CUSTOMER.
La restriccin aqu es que todos los pedidos deben asociarse con un CUSTOMER que ya
se encuentra en la tabla CUSTOMER. En este caso, colocaremos una clave externa en la
tabla ORDERS y la relacionaremos con la clave primaria de la tabla CUSTOMER. De esta
forma, nos aseguramos que todos los pedidos en la tabla ORDERS estn relacionadas
con un CUSTOMER en la tabla CUSTOMER. En otras palabras, la tabla ORDERS no
puede contener informacin de un CUSTOMER que no se encuentre en la tabla
CUSTOMER.
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
Amount
Clave Externa
-28 -
-29 -
-30 -
View V_Customer
(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 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:
-31 -
REGION SALES
East
700
West
2050
SQL CREATE INDEX >>
Nota:Todos funcionan en postgress
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
(First_Name char(50),
Last_Name char(50),
Address char(50),
City char(50),
Country char(25),
Birth_Date date)
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)
-32 -
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.
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:
Cambiar el tipo de datos para una columna: MODIFY columna 1 nuevo tipo de
datos
char(50)
Last_Name
char(50)
Address
char(50)
City
char(50)
Country
char(25)
Birth_Date
date
-33 -
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
Column Name Data Type
First_Name
char(50)
Last_Name
char(50)
Address
char(50)
City
char(50)
Country
char(25)
Birth_Date
date
Gender
char(1)
char(50)
Last_Name
char(50)
Addr
char(50)
City
char(50)
Country
char(25)
Birth_Date
date
Gender
-34 -
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
Column Name Data Type
First_Name
char(50)
Last_Name
char(50)
Addr
char(30)
City
char(50)
Country
char(25)
Birth_Date
Date
Gender
char(1)
char(50)
Last_Name
char(50)
Addr
char(30)
City
char(50)
Country
char(25)
Birth_Date
date
-35 -
-36 -
char(50)
Sales
float
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, Date)
VALUES ('Los Angeles', 900, '10-Jan-1999')
En Excel sera
INSERT INTO [Store_Information$] (store_name, Sales, DateFecha)
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 table, ingresaremos:
INSERT INTO Store_Information (store_name, Sales, Date)
SELECT store_name, Sales, Date
FROM Sales_Information
WHERE Year(Date) = 1998
Aqu hemos utilizado la sintaxis de Servidor SQL para extraer la informacin anual por
medio de una fecha. Otras bases de datos relacionales pueden tener sintaxis diferentes.
Por ejemplo, en Oracle, utilizar to_char (date,'yyyy')=1998.
-37 -
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 Date = "08-Jan-1999"
La tabla resultante ser vera
Tabla Store_Information
store_name Sales 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.
-38 -
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 Date
San Diego
250 07-Jan-1999
Boston
700 08-Jan-1999
-39 -
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 Date
Los Angeles 1500 05-Jan-1999
San Diego
250 07-Jan-1999
700 08-Jan-1999
Tabla Internet_Sales
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 Date FROM Store_Information
UNION
SELECT Date FROM Internet_Sales
Resultado:
-40 -
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 Date" para cada o ambas
instrucciones SQL, obtendremos el mismo conjunto de resultados.
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 ALL selecciona 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 Date
Los Angeles 1500 05-Jan-1999
San Diego
250 07-Jan-1999
700 08-Jan-1999
Tabla Internet_Sales
Date
Sales
07-Jan-1999 250
-41 -
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 Date FROM Store_Information
UNION ALL
SELECT Date FROM Internet_Sales
Resultado:
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 >>
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 Date
-42 -
250 07-Jan-1999
700 08-Jan-1999
Tabla Internet_Sales
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 Date FROM Store_Information
INTERSECT
SELECT Date FROM Internet_Sales
Resultado:
Date
07-Jan-1999
Por favor note que el comando INTERSECT slo arrojar valores distintivos.
-43 -
[Instruccin SQL 1]
MINUS
[Instruccin SQL 2]
Continuemos con el mismo ejemplo:
Tabla Store_Information
store_name Sales Date
Los Angeles 1500 05-Jan-1999
San Diego
250 07-Jan-1999
700 08-Jan-1999
Tabla Internet_Sales
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 Date FROM Store_Information
MINUS
SELECT Date FROM Internet_Sales
Resultado:
Date
05-Jan-1999
08-Jan-1999
-44 -
250 07-Jan-1999
700 08-Jan-1999
Table Geography
-45 -
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')
Rsultat :
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 >>
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
-46 -
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 Date
Los Angeles 1500 05-Jan-1999
San Diego
250 07-Jan-1999
700 08-Jan-1999
Tabla Geography
region_name store_name
East
Boston
East
New York
West
Los Angeles
West
San Diego
-47 -
Sales Date
Los Angeles
1500 05-Jan-1999
San Diego
250 07-Jan-1999
San Francisco
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,
-48 -
Los Angeles
3000 05-Jan-1999
San Diego
375 07-Jan-1999
San Francisco
300 08-Jan-1999
Boston
700 08-Jan-1999
Sales Date
Los Angeles
1500 05-Jan-1999
San Diego
250 07-Jan-1999
San Francisco
300 08-Jan-1999
Boston
700 08-Jan-1999
-49 -
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",
Date
FROM Store_Information
"Nuevas Ventas" es el nombre que se le otorga a la columna con la instruccin CASE.
Resultado:
store_name
Los Angeles
San Diego
375 07-Jan-1999
San Francisco
300 08-Jan-1999
Boston
700 08-Jan-1999
SQL Sintaxis >>
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"
-50 -
-51 -