Está en la página 1de 48

SQL

SQL (Structured Query Language) es un lenguaje de programación diseñado


para almacenar, manipular y recuperar datos almacenados en bases de datos
relacionales. La primera encarnación de SQL apareció en 1974, cuando un
grupo de IBM desarrolló el primer prototipo de una base de datos relacional.
Relational
datos Software
relacional (luego se convirtió en Oracle) lanzó la primera base de
comercial.

Existen estándares para SQL. Sin embargo, el SQL que puede utilizarse en
cada uno de las principales RDBMS actuales viene en distintas formas. Esto se
debe a dos razones: 1) el estándar SQL es bastante complejo, y no es práctico
implementar el estándar completo, y 2) cada proveedor de base de datos
necesita una forma de diferenciar su producto de otros. En esta guía de
referencia, dichas diferencias se señalarán cuando sea apropiado.

Este siti
Este sitio
o de la guía
guía de re refe
fere
renc
ncia
ia SQL
SQL en enum
umer
era
a lo
loss com
oman
ando
doss SQ
SQL
L
normalmente utilizados, y se divide en las siguientes secciones :

• Comandos SQL: Las instrucciones SQL básicas para almacenamiento,


recuperación y manipulación de datos en una base de datos relacional.
• Manipulación de Tabla: Cómo se utilizan las instrucciones SQL para
administrar las tablas dentro de una base de datos.
• SQL Avanzado: Comandos SQL avanzados.
• Sintaxis SQL: Una página única que enumera la sintaxis para todos los
comandos SQL en esta guía de referencia.
r eferencia.

Para cada comando, primero se presentará y explicará la sintaxis SQL, seguida


por un ejemplo. Al final de esta guía de referencia, deberá tener una idea
general de la sintaxis SQL. Además, deberá poder realizar consultas SQL
utilizando la sintaxis apropiada. Según mi experiencia creo que el comprender
lo básico de SQL es mucho más fácil que dominar todas las dificultades de este
lenguaje de base de datos, y espero que también llegue a la misma conclusión.

Si está interesado en cómo recuperar datos utilizando SQL, le recomendamos


que
qu e em
empi
piec
ece
e co
con
n la se
secc
cción Co
ión Coman
mando
doss SQL. Si es está
tá in
inte
tere
ressado en
comprender cómo puede utilizarse SQL para manipular una tabla de base de
datos, le recomendamos que comience con la sección Manipulación de Tabla.
Si está buscando ayuda sobre un comando SQL específico, puede utilizar el
Mapa del Sitio para encontrar el comando que está buscando.

Bien, suf
Bien, sufici
icient
ente
e introd
introducción.. Agr
ucción greg
egue
ue es
este
te siti
sitio
o a fa
favvor
orit
itos
os ah
ahor
oraa y
comience a aprender SQL!

Nota: Si enseña 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 SQL

SELECT
¿Para qué utilizamos los comandos SQL? El uso común es la selección de
datos desde tablas ubicadas en una base de datos. Inmediatamente, vemos
dos palabras claves: necesitamos SELECT la información FROM una tabla.
(Note que la tabla es un contenedor que reside en la base de datos donde se
almace
almacena
na tablas,
manipular la inform
informac
ación
ión.. la
consulte Para
ParSección
a obtene
obtener
r más
más inf
inform
ormaci
Manipulación ación
deón ace
acerca
Tabla ).rca
Pordelo cóm
cómoo
tanto
tenemos la estructura SQL más básica:

SELECT "nombre_columna" FROM "nombre_tabla"

Para ilustrar el ejemplo anterior, suponga que tenemos la siguiente tabla:

Tabla Store_Information

store_name Sales Date


Loss Ange
Lo Angele
less 15
1500
00 € 05
05-J
-Jan
an-1
-199
999
9
San Diego 250 € 07-Jan-1999
Loss Ang
Lo Angel
eles
es 30
300
0€ 08-
8-Ja
Jan-
n-1
1999
999
Bost
Bo ston
on 70
700
0€ 08
08-J
-Jan
an-1
-199
999
9

Podemos utilizar esta tabla como ejemplo a lo largo de la guía 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
San Angeles
Diego
Los Angeles
Boston

Pueden seleccionarse los nombres de columnas múltiples, así como también


los nombres de tablas múltiples.

DISTINCT

La palabr
palabra clave SELECTno
a clave noss perm
permite
ite to
toma
marr toda
toda la in
info
form
rmac
ación
ión de ununa a
columna (o columnas) en una tabla. Esto, obviamente, sig ign
nif
ifiica
necesariamente que habrá redundancias. ¿Qué sucedería si sólo deseamos
seleccionar cada elemento DISTINCT? Esto es fácil 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


Loss Ange
Lo Angele
less 15
1500
00 € 05
05-J
-Jan
an-1
-199
999
9
San Diego 250 € 07-Jan-1999
Loss Ang
Lo Angel
eles
es 30
300
0€ 08-
8-Ja
Jan-
n-1
1999
999
Bost
Bo ston
on 70
700
0€ 08
08-J
-Jan
an-1
-199
999
9

Ingresamos,

SELECT DISTINCT store_name FROM Store_Information

Resultado:

store_name
Los Angeles
San Diego
Boston

WHERE

Luego, podríamos desear seleccionar condicionalmente los datos de una tabla.


Po
Porr ejem
ejempl
mayores aplo,
o, po
podr
dría
$1.000 íamo
moss de
dólares dese
sear
ar só
sólo
lo re
recu
cupe
estadounidenses.pera
rarr lo
Para los
s ne
ello,nego
goci cios
os co
utilizamos con
lan palabra
ve
vent
ntas
as
clave WHERE. La sintaxis es la siguiente:

SELECT "nombre_columna"
FROM "nombre_tabla"
WHERE "condición"

Por ejemplo, para seleccionar todos los negocios con ventas mayores a 1.000€
dólares estadounidenses en la Tabla Store_Information,

Tabla Store_Information
store_name Sales Date
Loss Ange
Lo Angele
less 15
1500
00 € 05
05-J
-Jan
an-1
-199
999
9
San Diego 250 € 07-Jan-1999
Loss Ang
Lo Angel
eles
es 30
300
0€ 08-
8-Ja
Jan-
n-1
1999
999
Bost
Bo ston
on 70
700
0€ 08
08-J
-Jan
an-1
-199
999
9

Ingresamos,
SELECT store_name
FROM Store_Information
WHERE Sales > 1000

Resultado:

store_name
Los Angeles

AND OR

En la sección anterior, hemos visto que la palabra clave WHERE también


puede utilizarse para seleccionar datos condicionalmente desde una tabla. Esta
condición puede ser una condición simple (como la que se presenta en la
secció
sección
n ant
anteri
erior)
or),, o puede
puede ser una
una condi
condició
ciónn com
compue
puesta
sta.. Las con
condic
dicion
iones
es
compuestas están formadas por múltiples condiciones simples conectadas por
AND u OR. No hay límites en el número de condiciones simples que pueden
presentarse en una sola instrucción SQL.

La sintaxis de una condición compuesta es la siguiente:

SELECT "nombre_columna"
FROM "nombre_tabla"
WHERE "condición simple"
{[AND|OR] "condición simple"}+

{}+ significa que la expresión dentro de las llaves ocurrirá una o más veces.
Note que AND u OR pueden utilizarse indistintamente. Además, podemos
utilizar el símbolo paréntesis () para indicar el orden de la condición.

Por eje
ejempl
mplo,
o, pod
podemo
emoss de
desea
searr sel
selecc
eccion
ionar
ar tod
todos
os los negoci
negocios
os con ven
ventas
tas
mayores a 1000€ dólares estadounidenses o todos los negocios con ventas
menore
men oress a 500
500€
€ dólare
dólaress estad
estadou
ounid
nidens
enses
es pe
pero
ro may
mayore
oress a 275
275€
€ dól
dólare
aress
estadounidenses en la Tabla Store_Information,

Tabla Store_Information

store_name Sales Date


Los An
Angeles 1500 € 05-Jan-1
-19
999
San Diego 250 € 07-Jan-1999
San
San Fr
Fran
anccis
iscco 300 € 08-J
08-Ja
an-1
-199
999
9
Bost
Boston
on 70
700
0 € 08
08-J
-Jan
an-1
-199
999
9

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 sección introduce aquél
relacionado con la cláusula 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:

SELECT "nombre_columna"
FROM "nombre_tabla"
WHERE "nombre_columna" IN (''valor1', ''valor2', ...)

El número de valores en los paréntesis pueden ser uno o más, con cada valor
separado por comas. Los valores pueden ser números o caracteres. Si hay
sólo un valor dentro del paréntesis, este comando es equivalente a

WHERE "nombre_columna" = 'valor1'

Por ejemplo, podríamos 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 An
Angeles 1500 € 05-Jan-1
-19
999

S an
San
Sa Dianc
n Fregcois
Fran 200
iscco 350 €€ 08-J
07-Ja
08-Ja
an
n-1
-1999
999
-1999
Bost
Boston
on 70
700
0 € 08
08-J
-Jan
an-1
-199
999
9

Ingresamos,

SELECT *
FROM Store_Information
WHERE store_name IN ('Los Angeles', 'San Diego')

Resultado:

store_name Sales Date


Loss An
Lo Ange
gele
less 1500
1500 € 05
05-J
-Jan
an-1
-199
9999
San Diego 250 € 07-Jan-1999

SQL BETWEEN >>

Mientras que la palabra clave IN ayuda a las personas a limitar el criterio de


sele
se lecc
cció
permiteión
nla selección
pa
para
ra uno
uno de
o un
más
márango.
s valo
valore
res
Las sintaxis
disc
discre
reto
tos,
s, lala pala
para palabr
bra
a cl
cláusula clave BETWEEN
ave
BETWEEN es la
siguiente:

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 ej
Por ejem
empl
plo,
o, po
podr
dría
íamo
moss dese
desear
ar selec
selecci
cion
onar
ar la vi
visu
sual
aliz
izac
ació
ión
n de toda
toda la
información 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 An
Angeles 1500 € 05-Jan-1
-19
999
San Diego 250 € 07-Jan-1999
San
Sa n Fr
Fran
anccis
iscco 300 € 08-J
08-Ja
an-1
-199
999
9
Bost
Bo ston
on 70
700
0 € 08
08-J
-Jan
an-1
-199
999
9

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


según las diferentes bases de datos. Esta guía de referencia simplemente elige
uno de los formatos.

Resultado:

store_name Sales Date


San Diego 250 € 07-Jan-1999
San
Sa nF
Fra
ranc
ncis
isco
co 300
300 € 08
08-J
-Jan
an-1
-199
9999
Boston 700 € 08-Jan-1999

SQL LIKE >>

LIKE es otra palabra clave que se utiliza en la cláusula WHERE. Básicamente,


LIKE le peperm
rmitite
e ha
hace
cerr un
una
a búsq
búsque
ueda
da ba
basa
sada
da en un pa
patr
trón
ón en ve
vezz de
especificar exactamente lo que se desea (como en IN) o determinar un rango
(como en BETWEEN). La sintaxis es la siguiente:

SELECT "nombre_columna"
FROM "nombre_tabla"
WHERE "nombre_columna" LIKE {patrón}

{patrón} generalmente consiste en comodines. Aquí hay algunos ejemplos:

• 'A_Z': Toda línea que comience con 'A', otro carácter y termine con 'Z'.
Por ejemplo, 'ABZ' y 'A2Z' deberían satisfacer la condición, mientras
'AKKZ' no debería (debido a que hay dos caracteres entre A y Z en vez
de uno).

• 'A
'ABC
BC%':
%': Toda
Todass la
lass lín
línea
eass que
que co
comi
mien
enza
zan
n co
conn 'A
'ABC
BC'.'. Po
Porr ej
ejem
empl
plo,
o,
'ABCD' y 'ABCABC' ambas deberían satisfacer la condición.

• '%XYZ': Todas las líneas que terminan con 'XYZ'. Por ejemplo, 'WXYZ' y
'ZZXYZ' ambas deberían satisfacer la condición.

• '%AN%': : Todas las líneas que contienen el patrón 'AN' en cualquier


la
lado
do.. Por
Por ejem
ejemplplo,
o, 'L
'LOS
OS AN
ANGE
GELE
LES'
S' y 'S
'SAN
AN FRAN
FRANCICISC
SCO'
O' am
ambo
boss
deberían satisfacer la condición.

Digamos que tenemos la siguiente tabla:


Tabla Store_Information

store_name Sales Date


LOS ANGELES 1500 € 05-Jan-1999
SAN DIEGO 250 € 07-Jan-1999
SAN
SA N FR
FRAN
ANCI
CIS
SCO 300 € 08-J
08-Ja
an-
n-19
199
99

BOST
BOSTON
ON 70
700
0 € 08
08-J
-Jan
an-1
-199
999
9

Deseamos encontrar todos los negocios cuyos nombres contengan ‘AN’. Para
hacerlo, ingresamos,

SELECT *
FROM Store_Information
WHERE store_name LIKE '%AN%'

Resultado:

sLtOoSreAN
_n
ANaGmEeLES S
15a0le0s€ D
05a-tJean-1999
SAN DIEGO 250 € 07-Jan-1999
SAN
SA N FRA
FRANCNCIS
ISCO
CO 300 € 08-Ja -Jan-19
n-19999

SQL ORDER BY >>

Hasta ahora, hemos visto cómo obtener datos de una tabla utilizando los
comandos SELECT y WHERE. Con frecuencia, sin embargo, necesitamos
enum
enumer
erar
ar el re
resu
sultltad
ado
o en un orden
orden part
partic
icul
ular
ar.. Es
Esto
to po
podr
dría
ía se
serr en orde
orden
n
ascendente,
de texto. En en orden
tales descendente,
casos, o podría
podemos utilizar la basarse en valores
palabra clave ORDERnuméricos
BY parao
alcanzar nuestra meta.

La sintaxis para una instrucción ORDER BY es la siguiente:

SELECT "nombre_columna"
FROM "nombre_tabla"
[WHERE "condición"]
ORDER BY "nombre_columna" [ASC, DESC]

[] signi
significa
fica que la instrucción WHERE es opcional. Sin embargo, si existe una
instrucción
cláusula WHERE, viene antes de la cláusula ORDER BY ASC significa que los
result
res ultado
adoss se mos
mostra
trarán
rán en ord
orden
en ascend
ascendente, y DESC sig
ente, signif
nifica
ica que los
resultados se mostrarán en orden descendente. Si no se especifica ninguno, la
configuración predeterminada es ASC.
Es posible ordenar por más de una columna. En este caso, la cláusula 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 según la columna 1. Si hay una
relación para el valor de la columna 1, se clasificará en orden ascendente
según la columna 2.

Porr ej
Po ejem
empl
plo,
o, podr
podría
íamo
moss de
dese
sear
ar en
enum
umer
erar
ar lo
loss co
cont
nten
enid
idos
os de la Ta
Tabl
bla
a
Store_Information según la suma en dólares, en orden descendente:

Tabla Store_Information

store_name Sales Date


Los An
Angeles 1500 € 05-Jan-1
-19
999
San Diego 250 € 07-Jan-1999
San
Sa n Fr
Fran
anccis
iscco 300 € 08-J
08-Ja
an-1
-199
999
9
Bost
Boston
on 70
700
0 € 08
08-J
-Jan
an-1
-199
999
9

Ingresamos,

SELECT store_name, Sales, Date


FROM Store_Information
ORDER BY Sales DESC

Resultado:

store_name Sales Date


Los AAn
ngel
elees 1500 € 05-Jan-1999
Boston 700 € 08-Jan-1999
San
Sa n Fran
Franci
cisc
sco
o 300
300 € 08
08-J
-Jan
an-1
-199
9999
San Diego 250 € 07-Jan-1999

Además del nombre de la columna, podríamos utilizar la posición de la columna


(según la consulta SQL) para indicar en qué columna deseamos aplicar la
cláusula ORDER BY. La primera columna es 1, y la segunda columna es 2, y
asíí su
as suce
cessivam
ivamen
ente
te.. En el ejejem
empl
plo
o ante
anteri
rior
or,, al
alca
canz
nzar
arem
emos
os lo
loss mi
mism
smos
os
resultados con el siguiente comando:

SELECT store_name, Sales, Date


FROM Store_Information
ORDER BY 2 DESC
SQL
SQ L FU NCI
NCION
ONES
ES >>

Ya que hemos comenzado trabajando con números, la siguiente pregunta


natural a realizarse es si es posible hacer cálculos matemáticos con aquellos
números, tales como sumas, o sacar un promedio. ¡La respuesta es sí! SQL
tiene varias funciones aritméticas, y estas son:

- AVG
- COUNT
- MAX
- MIN
- SUM

La sintaxis para el uso de funciones es,

SELECT "tipo de función"("nombre_columna")


función"("nombre_columna")
FROM "nombre_tabla"

Por ejemplo, si deseamos obtener la sumatoria de todas las ventas de la


siguiente tabla,

Tabla Store_Information
store_name Sales Date
Loss Ange
Lo Angele
less 15
1500
00 € 05
05-J
-Jan
an-1
-199
999
9
San Diego 250 € 07-Jan-1999
Loss Ang
Lo Angel
eles
es 30
300
0€ 08-
8-Ja
Jan-
n-1
1999
999
Bost
Bo ston
on 70
700
0€ 08
08-J
-Jan
an-1
-199
999
9

ingresaríamos

SELECT SUM(Sales) FROM Store_Information

Resultado:

SUM(Sales)
2750 €

2 750 € dólares estadounidense


estadounidensess representa la suma de todas las entradas de
Ventas: 1500 € + 250 € + 300 € + 700 €.

Además de utilizar dichas funciones, también es posible utilizar SQL para


realizar tareas simples como suma (+) y resta (-). Para ingresar datos del tipo
caracter, hay también varias funciones de cadenas disponibles, tales como
fu
func
ncio
ione
ness de conc
concat
aten
enacació
ión,
n, reredu
ducc
cció
iónn y su
subc
bcad
aden
ena.
a. Lo
Loss di
dife
fere
rent
ntes
es
provee
proveedor
dores
es RDB
RDBMS MS tienen
tienen dif
difere
erente
ntess imp
implem
lement
entaci
acione
oness de fun
funcio
ciones
nes de
cadenas, y es mejor consultar las referencias para sus RDBMS a fin de ver
cómo se utilizan estas funciones.
SQL COUNT >>

Otra función aritmética es COUNT. Esto nos permite COUNT el número de filas
en una tabla determinada. La sintaxis es,

SELECT COUNT("nombre_columna")
COUNT("nombre_columna")
FROM "nombre_columna"
Por ejemplo, si deseamos encontrar el número de entradas de negocios en
nuestra tabla,

Tabla Store_Information

store_name Sales Date


Loss Ange
Lo Angele
less 15
1500
00 € 05
05-J
-Jan
an-1
-199
999
9
San Diego 250 € 07-Jan-1999
Loss Ang
Lo Angel
eles
es 30
300
0€ 08-
8-Ja
Jan-
n-1
1999
999
Bost
Bo ston
on 70
700
0€ 08
08-J
-Jan
an-1
-199
999
9

ingresamos,

SELECT COUNT(store_name)
FROM Store_Information

Resultado:

Count(store_name)
4

COUNT y DISTINCT pueden utilizarse juntos en una instrucción para


determinar el número de las distintas entradas en una tabla. Por ejemplo, si
deseamos saber el número de los distintos negocios, ingresaríamos,
SELECT COUNT(DISTINCT store_name)
FROM Store_Information

Resultado:

Count(DISTINCT store_name)
3

SQL GROUP BY >>


Ahora regresamos a las funciones de agregados. ¿Recuerda que utilizamos la
palabra clave SUMpara calcular las ventas totales para todos los negocios? ¿Y
si qu
quis
isié
iéra
ramo
moss calc
calcul
ular
ar el to
tota
tall de vent
ventas
as pa
para
ra cada negoc
negocio?
io? Enton
Entonces,
ces,
necesi
nec esitam
tamos
os hac
hacer
er dos cosas:
cosas: Prim
Primero
ero,, neces
necesita
itamos
mos ase
asegur
gurarn
arnos
os de que
hayamos seleccionadoel nombre del negocio así como también las ventas
totales. Segundo, debemos asegurarnos de que todas las sumas de las ventas
estén GROUP BY negocios. La sintaxis SQL correspondiente es,

SELECT "nombre1_columna", SUM("nombre2_colu


SUM("nombre2_columna")
mna")
FROM "nombre_tabla"
GROUP BY "nombre1-columna"

Ilustremos utilizando la siguiente tabla,

Tabla Store_Information

store_name Sales Date


Loss Ange
Lo Angele
less 15
1500
00 € 05
05-J
-Jan
an-1
-199
999
9
San Diego 250 € 07-Jan-1999
Loss Ang
Lo Angel
eles
es 30
300
0€ 08-
8-Ja
Jan-
n-1
1999
999
Bost
Boston
on 70
700
0 € 08
08-J
-Jan
an-1
-199
999
9

Deseamos saber las ventas totales para cada negocio. Para hacerlo,
ingresaríamos,

SELECT store_name, SUM(Sales)


FROM Store_Information
GROUP BY store_name

Resultado:

st
stor
ore_
e_na
name
me SU
SUM(
M(SaSale
les)
s)
Loss A
Lo Ange
ngeles
les 180
18000 €
San Diego 250 €
Boston> 700 €

La palabra clave GROUP BYse utiliza cuando estamos seleccionado columnas


múltiples desde una tabla (o tablas) y aparece al menos un operador aritmético
en la instrucción SELECT. Cuando esto sucede, necesitamos GROUP BY
todas las otras columnas seleccionadas, es decir, todas las columnas excepto
aquella(s) que se operan por un operador aritmético.

SQL HAVING >>

Otra cosa
suma que la gente(opuede
correspondiente querer
cualquier otrahacer es limitar
función el resultado
de agregado). Por según la
ejemplo,
podríamos desear ver sólo los negocios con ventas mayores a 1 500 €,
dólares. En vez de utilizar la cláusula WHERE en la instrucción SQL, a pesar
de que necesitemos utilizar la cláusula HAVING, que se reserva para funciones
de agregados. La cláusula HAVINGse coloca generalmente cerca del fin de la
instrucción SQL, y la instrucción SQL con la cláusula HAVING. puede o no
incluir la cláusula GROUP BY sintaxis para HAVING es,

SELECT "nombre1_columna", SUM("nombre2_colu


SUM("nombre2_columna")
mna")
FROM "nombre_tabla"
GROUP BY "nombre1_columna"
"nombre1_columna"
HAVING (condición de función aritmética)

Nota: La cláusula GROUP BY es opcional.

En nuestro ejemplo, tabla Store_Information,

Tabla Store_Information

store_name Sales Date


Loss Ange
Lo Angele
less 15
1500
00 € 05
05-J
-Jan
an-1
-199
999
9

S asn Ang
Los
Lo ADngel
iegeles
oes 2
3050
3000 €€ 0
07
8--JJan-
8-Ja an -1
n-119 99
999
99 9
Bost
Bo ston
on 70
7000 € 08
08-J
-Jan
an-1
-199
9999

ingresaríamos,

SELECT store_name, SUM(sales)


FROM Store_Information
GROUP BY store_name
HAVING SUM(sales) > 1500

Resultado:

st
stor
ore_
e_na
name
me SUSUM(
M(Sa
Sale
les)
s)
Loss An
Lo Angel
geles
es 1800
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 organización 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,
podemo
podemoss ve
verr ca
caso
soss dond
dondee el tí
títu
tulo
lo de la colu
column
mna
a pu
pued
eden
en co
comp
mplilica
cars
rse
e
(especialmente si incluye varias operaciones aritméticas). El uso de un alias de
columna haría el resultado mucho más legible.
l egible.

El segundo tipo de alias es el alias de tabla. Esto se alcanza al colocar un alias


dire
direct
ctam
amen
ente
te lu
lueg
ego
o dedell nomb
nombre
re de ta tabl
bla
a en la clcláu
áusula FROM. Esto es
sula
conveniente cuando desea obtener información de dos tablas separadas (el
término técnico es 'realizar uniones'). La ventaja de utiliza un alias de tablas
cuando realizamos uniones es rápidamente 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"

Brevement
Brevemente,
e, ambos
ambos tip
tipos
os de ali
alias
as se co
coloc
locan
an direct
directame
amente
nte des
despué
puéss de
dell
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
Loss Ange
Lo Angele
less 15
1500
00 € 05
05-J
-Jan
an-1
-199
999
9
San Diego 250 € 07-Jan-1999
Loss Ang
Lo Angel
eles
es 30
300
0€ 08-
8-Ja
Jan-
n-1
1999
999
Bost
Bo ston
on 70
700
0€ 08
08-J
-Jan
an-1
-199
999
9

Utilizamos el mismo ejemplo que en la sección 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


Loss An
Lo Angel
geles
es 1800
1800 €
San Diego 250 €
Boston 700 €

Note la dife
Note difere
renc
ncia
ia en el reresu
sultltad
ado:
o: lo
loss tí
títu
tulos
los de la
lass co
colu
lumn
mnas
as ah
ahor
ora
a so
son
n
diferentes. Ese es el resultado de utilizar el alias de columna. Note que en vez
de “Sum(sales)” de algún modo enigmático, ahora tenemos “Total Sales”, que
es más comprensible, como título de columna. La ventaja de utilizar un alias de
tablas no es fácil de ver en este ejemplo. Sin embargo, se tornará evidente en
la siguiente sección.

SQL JOIN >>

Ahora miremos las uniones. Para realizar uniones en SQL se requieren mucho
de lo
loss eleme
element
ntos
os qu
quee ya he
hemo
moss pr
pres
esen
enta
tado
do.. Di
Diga
gamo
moss qu
que
e tene
tenemo
moss la
lass
siguientes dos tablas:

Tabla Store_Information

store_name Sales Date


Loss Ange
Lo Angele
less 15
1500
00 € 05
05-J
-Jan
an-1
-199
999
9
San Diego 250 € 07-Jan-1999
Loss Ang
Lo Angel
eles
es 30
300
0€ 08-
8-Ja
Jan-
n-1
1999
999
Bost
Bo ston
on 70
700
0€ 08
08-J
-Jan
an-1
-199
999
9

Tabla Geography

region_n
region_name
ame store_
store_nam
namee
East Boston
East New York
West Los Angeles
West San Diego

y queremos saber las ventas por región. Vemos que la tabla Geographyincluye
información sobre regiones y negocios, y la tabla Store_Information contiene
información de ventas para cada negocio. Para obtener la información de
ventas porlas
examinar región, debemos
dos tablas, combinar la
encontramos queinformación de las dos
están enlazadas tablas.
a través delAlcampo
común “nombre_negocio” Primero presentaremos la instrucción SQL y
explicaremos el uso de cada segmento después:

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:

REGI
REGIÓN
ÓN SALE
SALES
S

E
Waesstt 7200050€€
Las primeras dos líneas le indican a SQL que seleccione dos campos, el
primero es el campo "nombre_región" de la tabla Geography (denominado
REGIÓN), y el segundo es la suma del campo "Sale less" de la tabla
Store_Information(denominado SALES). Note como se utilizan los alias de
tabla aquí: Geografía se denomina A1, e Información_Negocio se denomina
A2. Sin los alias, la primera línea sería

SELECT Geography.region_name REGION, SUM(Store_Information.Sale


SUM(Store_Information.Sales)
s)
SALES
que es mucho más problemática. En esencia, los alias de tabla facilitan el
entendimiento de la totalidad de la instrucción SQL, especialmente cuando se
incluyen tablas múltiples.

Luego, pongamos nuestra atención en la línea 2, la instrucción WHERE. Aquí


es donde se especifica la condición de la unión. En este caso, queremos
asegur
asegurarn
arnos
os que el conte
contenid
nido
o en “no“nombr
mbre_n
e_nego
egocio
cio”” en la tab
tabla
la Geo
Geogra
grafía
fía
concuerde con la tabla Store_Information, y la forma de hacerlo es igualarlos.
Esta instru
instrucción WHEREes es
cción esen
enci
cial
al pa
para
ra as
aseg
egur
urar
arse
se de que
que ob
obte
teng
nga
a el
resultado correcto. Sin la correcta instrucción WHERE se producirá una Unión
Cartesiana. Las uniones cartesianas darán por resultado que de la consulta se
arroje
númerotoda combinación
de tablas posible de
en la instrucción las dos
FROM ). Entablas (o cualquiera
este caso, una uniónque sea el
cartesiana
resultaría en un total de 4x4 = Se presenta un resultado de16 filas.

SQL Outer Join >>

Anteri
Anterio
orm
rmen
ente
te,, he
hemmos vivist
sto
o una unió ión
n iz
izqu
quie
ierd
rda,
a, o in inte
tern
rna,
a, do
dond
nde
e
seleccionamos filas comunes a las tablas que participan en la unión. ¿Qué
sucede en los casos donde estamos interesados en la selección de elementos
en una tabla sin importar si se encuentran presentes en la segunda tabla?
Ahora necesitaremos utilizar el comando SQL OUTER JOIN.
La sintaxis para realizar una unión externa en SQL depende de la base de
datos. Por ejemplo, en Oracle, colocaremos un "(+)" en la cláusula WHERE del
otro lado de la tabla para la que queremos incluir todas las filas.

Digamos que tenemos las siguientes dos tablas:

Tabla Store_Information

store_name Sales Date


Loss Ange
Lo Angele
less 15
1500
00 € 05
05-J
-Jan
an-1
-199
999
9
San Diego 250 € 07-Jan-1999
Loss Ang
Lo Angel
eles
es 30
300
0€ 08-
8-Ja
Jan-
n-1
1999
999
Bost
Boston
on 70
700
0 € 08
08-J
-Jan
an-1
-199
999
9

Tabla Geography

region_n
region_name
ame store_
store_nam
name
e
East Boston

E
Waesstt N
LoeswAYnogrekles
West San Diego

y queremos saber la suma de las ventas de todos los negocios. Si realizamos


una unión regular, no podríamos obtener lo que deseamos debido a que
habríamos omitido “Nueva York" ya que no aparece en la tabla
Store_Information. Po Porr lo ta
tant
nto,
o, nece
necesi
sita
tamo
moss real
realiz
izar
ar un
una
a un
unió
ión
n exte
extern
rna
a
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
uti lizando la sintaxis Oracle para unión
externa.

Resultado:

st
stor
ore_
e_na
name
me SASALE
LES S
Boston 700 €
New York
Los Ange
Angeles
les 1800
1800 €
San Diego 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.

SQL CONCATENAR >>

Algunass veces
Alguna veces es necesa
necesario
rio com
combin
binar
ar en for
forma
ma con
conjun
junta
ta (co
(conca
ncaten
tenar)
ar) los
resultados de varios campos diferentes. Cada base de datos brinda una forma
para realizar esto:

• MySQL: CONCAT()
• Oracle: CONCAT(), ||

SQL Server: +
La sintaxis para CONCAT() es la siguiente:

CONCAT(cad1, cad2, cad3, ...): Concatenar cad1, cad2, cad3, y cualquier otra
cadena juntas. Por favor note que la función CONCAT() de Oracle sólo permite
dos argumentos – sólo dos cadenas pueden colocarse juntas al mismo tiempo
utiliz
utilizand
ando
o esta
esta funció
función.
n. Sin emb
embarg
argo,
o, es pos
posible
ible con
concat
catena
enarr más de dos
cadenas al mismo tiempo en Oracle utilizando '||'.

Observemos algunos ejemplos. Supongamos que tenemos la siguiente tabla:


Tabla Geography

region_n
region_name
ame store_
store_nam
namee
East Boston
East New York
West Los Angeles
West San Diego

Ejemplo 1:

MySQL/Oracle:
SELECT CONCAT(region_name,store_name)
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 >>

La función de subcadena en SQL se utiliza para tomar una parte de los datos
almace
alm acenad
nados.
os. Est
Esta
a funció
función
n tiene
tiene difere
diferente
ntess no
nombr
mbres
es seg
según
ún las dif
difere
erente
ntess
bases de datos:

• MySQL: SUBSTR(), SUBSTRING()


• Oracle: SUBSTR()
SQL Server: SUBSTRING()

Los usos más frecuentes son los siguientes (utilizaremos


(utili zaremos SUBSTR() aquí):

SUBSTR(str,pos): Selecciona todos los caracteres de <str> comenzando con


posición <pos>. Note que esta sintaxis no es compatible en SQL Server.

SUBSTR(str,pos,len): Comienza con el carácter <pos> en la cadena <str> y


selecciona los siguientes caracteres <len>.

Supongamos que tenemos la siguiente tabla:

Tabla Geography

region_n
region_name
ame store_
store_nam
namee
East Boston
East New York
West Los Angeles
West 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'
SQL TRIM >>

La función TRIM en SQL se utiliza para eliminar un prefijo o sufijo determinado


de una cadena. El patrón más común a eliminarse son los espacios en blanco.
Esta función tiene diferentes nombres según las diferentes bases de datos:


MySQL: TRIM(), RTRIM(),
Oracle: RTRIM(), LTRIM() LTRIM()
• SQL Server: RTRIM(), LTRIM()

La sintaxis para estas funciones de reducción es:

TRIM([[LOCATION] [remstr] FROM ] str): [LOCATION] puede ser LÍDER,


REMANENTE, o AMBAS. Esta función se deshace del patrón [remstr] tanto
para el comienzo de la cadena como para el final, o para ambos. Si no se
especifica ningún [remstr], los espacios en blanco se eliminarán.

LTRIM(str): Elimina todos los espacios en blanco del comienzo de la cadena.

RTRIM(str): Elimina todos los espacios en blanco del final de la cadena.

Ejemplo 1 :

SELECT TRIM(' Sample ');

Resultado :

'Sample'

Ejemplo 2 :

SELECT LTRIM(' Sample ');

Resultado :
'Sample '

Ejemplo 3 :

SELECT RTRIM(' Sample ');

Resultado :

' Sample'
MANIPULACION DE TABLAS

Las tablas son la estructura básica donde se almacena la información en la


base de datos. Dado que en la mayoría de los casos, no hay forma de que el
proveedor de base de datos sepa con antelación cuales son sus necesidades
de almacenamiento de datos, es probable que necesite crear tablas en la base
de datos usted mismo. Muchas herramientas de base de datos le permiten
cre
crear ta
tab
bla
lass de
contenedores sin toda
in
ingr
gres
esar
la ar SQL,
SQL, per
ero
información, o importante
es deb
debid
ido
o a incluir
que la las
las sintaxis
tabl
tablas
as CREATE
so
son
n lo
loss
TABLEen esta guía de referencia.

Antes de sumergirnos en la sintaxis SQL para CREATE TABLE, es una buena


idea comprender lo que se incluye en una tabla. Las tablas se dividen en filas y
columnas. Cada fila representa una parte de los datos, y cada columna puede
pensarse como la representación de un componente de aquella parte de los
dato
da tos.
s. En
Ento
tonc
nces
es,, por
por ejejem
empl
plo,
o, si te
tene
nemo
moss un
unaa tabl
tablaa pa
para
ra regi
regist
stra
rarr la
inform
informaciación
ón del cli
client
ente,
e, las column
columnas
as pue
pueden
den inc
inclui
luirr inform
informaci
ación
ón tal com
como o
Primer Nombre, Apellido, Dirección, Ciudad, País, Fecha de Nacimiento y
demás. Como resultado, cuando especificamos una tabla, incluimos los títulos
de columna y los tipos de datos para esta columna en particular.

Entonces ¿Qué son los tipos de datos? Generalmente, los datos se generan en
formas variadas. Podría ser un entero (tal como 1), un número real (tal como
0,55), una línea (tal como 'sql'), una fecha/expresión de tiempo (tal como '25-
ene-2000 03:22:22'), o incluso en formato binario. Cuando especificamos una
tabla, necesitamos especificar el tipo de dato asociado con cada columna (es
decir, especificaremos que ‘First_Name’ es de char(50) tipo – lo que significa
que es una línea con 50 caracteres). Una cosa a tener en cuenta es que las
difere
diferente
ntess ba
bases
ses de dat
datos
os relac
relacion
ionale
aless per
permit
miten
en dif
difere
erente
ntess tip
tipos
os de dat
datos,
os,
entonces es prudente consultar primero una referencia específica de base de
datos.

CREATE TABLE

La sintaxis SQL para CREATE TABLEes


CREATE TABLE "nombre_tabla"
("columna 1" "tipo_de_datos_pa
"tipo_de_datos_para_columna_1",
ra_columna_1",
"columna 2" "tipo_de_datos_p
"tipo_de_datos_para_columna_2",
ara_columna_2",
... )

Entonces, si debemos crear una tabla para el cliente tal como se especifica
anteriormente, ingresaríamos

CREATE TABLE customer


(First_Name char(50),
Last_Name char(50),
Address char(50),
City char(50),
Country char(25),
Birth_Date date)

A veces, deseamos brindar un valor predeterminado a cada columna. Se utiliza


un valor predeterminado cuando no especifica un valor de columna cuando
ingresa datos a la tabla. Para establecer un valor predeterminado, agregue
“[valor] Predeterminado” luego de la instrucción de tipo de datos. En el ejemplo
ant
nter
erio
ior,
r, si desese
eamo
moss prerede
dete
term
rmin
inar
ar una
una col olu
umna
mna “Add
“Addre
resss” com
omoo
“Desconocida” y Ciudad como “Mumbai”, ingresaríamos
CREATE TABLE customer
(First_Name char(50),
Last_Name char(50),
Address char(50) default 'Unknown',
City char(50) default 'Mumbai',
Country char(25),
Birth_Date date)

También puede limitar el tipo de información que una tabla /columna puede
mantener. Esto se realiza a través de la palabra clave CONSTRAINT, que se
describe a CONTUNUACION.

SQL CONSTRAINT

Puede colocar restricciones para limitar el tipo de dato que puede ingresarse en
una tabla. Dichas restricciones pueden especificarse cuando la tabla se crea
por primera vez a través de la instrucción CREATE TABLE, o luego de crear la
tabla a través de la instrucción ALTER TABLE.

Los tipos comunes de restricciones incluyen las siguientes:

- NOT NULL
- UNIQUE
- CHECK
- Clave primaria
externa

Cada uno se describe en detalle a continuación.

NOT NULL

En forma predeterminada, una columna puede ser NULL. Si no desea permitir


un valor NULL en una columna, querrá colocar una restricción en esta columna
especificando que NULL no es ahora un valor permitido.

Por ejemplo, en la siguiente instrucción,

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 restricción UNIQUE asegura que todos los valores en una columna sean
distintos.

Por ejemplo, en la siguiente instrucción,

CREATE TABLE Customer


(SID integer Unique,
Last_Name varchar (30),
First_Name varchar(30));

La columna “SID” no puede incluir valores duplicados, mientras dicha


restricción no se aplica para columnas “Last_Name” y “First_Name”.

Por favor
puede sernote queAluna
única. columna
mismo que
tiempo, se columna
una especifica como
que clavepuede
es única primaria ttambién
o no ambién
ser
clave primaria.

CHECK

La restricción CHECK asegura que todos los valores en una columna cumplan
ciertas condiciones.

Por ejemplo, en la siguiente instrucción,

CREATE TABLE Customer


(SID integer CHECK (SID > 0),
Last_Name varchar (30),
First_Name varchar(30));
La columna “SID” sólo debe incluir enteros mayores a 0.

Por favor note que la restricción CHECKno sea ejecutada por MySQL en este
momento.

Clave primaria y Clave externa se comentan en las siguientes dos secciones.

CLAVE PRIMARIA

La clave primaria se utiliza para identificar en forma única cada línea 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 más campos en una tabla. Cuando se utilizan múltiples
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 continuación se presentan ejemplos para la especificación 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 continuación se presentan ejemplos para la especificación 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.

CLAVE EXTERNA

Una clave externa es un campo (o campos) que señala la clave primaria de


otra tabla. El propósito de la clave externa es asegurar la integridad referencial
de los datos. En otras palabras, sólo 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
incluye todos los datos del CUSTOMER,
CUSTOMER, y la tabla ÓRDENE
ÓRDENES S que incluy
incluye
e los
pedidos del CUSTOMER. La restricción 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 ase seg
guram
uramos
os que totodo
doss lo
loss ped
edid
idos
os en la tabl
tabla
a OR
ORDE
DERS
RS esté
esténn
relacionadas con un CUSTOMER en la tabla CUSTOMER. En otras palabras,
la tabla ORDERS no puede contener información 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 característica


SID Clave Primaria

Last_Name
First_Name

Tabla ORDERS

nombre de colum
nombre columna
na cara
caracterís
cterística
tica
Order_ID Clave Primaria
Order_Date
Customer_SID Clave E
Exxterna
Amount

En el ejemplo anterior, la columna Customer_SID en la tabla ORDERS es una


clave externa señalando la columna SID en la tabla CUSTOMER.

A continuación se muestran ejemplos de cómo especificar la clave externa a la


hora de crear la tabla ORDERS:

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 continuación se presentan ejemplos para la especificación de una clave


externa al modificar una tabla: Esto asume que se ha creado la tabla ORDERS,
y que la clave externa todavía 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);

CREATE VIEW – VISTAS

Las vistas pueden considerarse como tablas virtuales. Generalmente hablando,


una
vistatabla tienetiene
también un conjunto de definiciones,
un conjunto y almacena
de definiciones, que sedatos físicamente.
construye Una
en la parte
superior de la(s) tabla(s) u otra(s) vista(s), y no almacena datos físicamente.

La sintaxis para la creación de una vista es la siguiente:

CREATE VIEW "NOMBRE_VISTA" AS "Instrucción SQL"

La “Instrucción SQL” puede ser cualquiera de las instrucciones SQL que hemos
descripto en esta guía de referencia.

Utilicemo
Utilicemoss un eje
ejempl
mplo
o sim
simple
ple par
para
a ilustr
ilustrar.
ar. Su
Supon
pongam
gamos
os qu
que
e ten
tenemo
emoss 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)

y deseamos crear una vista denominada V_Customer que contiene sólo las
columnas First_Name, Last_Name y País de esta tabla, ingresaríamos

CREATE VIEW V_Customer


AS SELECT First_Name, Last_Name, Country
FROM Customer

Ahora tenemos una vista llamada V_Customercon la siguiente estructura:

View V_Customer
(First_Name char(50),
Last_Name char(50),
Country char(25))

Podemos utilizar también una vista para aplicar uniones a dos tablas. En este
caso,
que loslosusuarios
usuariosnecesitan
sólo ven emitir
una vista en vezmucho
se vuelve de dosmás
tablas, y la instrucción
simple. Digamos que SQL
tenemos las siguientes dos tablas:

Tabla Store_Information

store_name Sales Date


Loss Ange
Lo Angele
less 15
1500
00 € 05
05-J
-Jan
an-1
-199
999
9
San Diego 250 € 07-Jan-1999
Loss Ang
Lo Angel
eles
es 30
300
0€ 08-
8-Ja
Jan-
n-1
1999
999
Bost
Bo ston
on 70
700
0€ 08
08-J
-Jan
an-1
-199
999
9

Tabla Geography
region_n
region_name
ame store_
store_nam
namee
East Boston
East New York
West Los Angeles
West San Diego

y deseamos construir una vista que tenga ventas organizadas según la región.
Colocaríamos la siguiente instrucción SQL:

CREATE VIEW V_REGION_SALES


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 según los registros de la región. Si deseamos saber el
contenido de esta vista, ingresamos,

SELECT * FROM V_REGION_SALES


V_REGION_SALES

Resultado:

REGION SA
REGION SALES
LES
East 700 €
West 2050 €
CREATE INDEX

Los índices nos ayudan a obtener datos de las tablas en forma más rápida.
Util
Utilic
icem
emos
os un ejemejempl
plo
o para
para ilus
ilustra
trarr es
este
te pu
punt
nto:
o: Di
Diga
gamo
moss qu
que
e esesta
tamo
moss
interesados en leer en un libro de jardinería acerca de cómo cultivar pimientos.
En vez de leer el libro desde el comienzo hasta que encontremos una sección
sobre pimientos, es mucho más rápido para nosotros ir a la sección índice al
final del libro, ubicar qué páginas contienen la información sobre pimientos, y
luego dirigirnos a esas páginas directamente. Al dirigirnos al índice primero
ahorramos tiempo y seguramente es el método más eficiente para ubicar la
información que necesitamos.

El mismo principio se aplica para la obtención de datos desde una tabla de


base de datos. Sin un índice, el sistema de base de datos lee a través de toda
la ta
tabl
bla
a (est
(este
e pr
proc
oces
esoo se deno
denomi
mina
na “e
“esc
scan
aneo
eo de tabl
tabla”
a”)) pa
para
ra lo
loca
caliz
lizar
ar la
información deseada. Con el índice correcto en su lugar, el sistema de base de
datos puede entonces primero dirigirse al índice para encontrar de dónde
obtener los datos, y luego dirigirse a dichas ubicaciones para obtener los datos
necesarios. Esto es mucho más rápido.

Por lo tanto, generalmente se recomienda crear índices en tablas. Un índice


puede cubrir una o más columnas. La sintaxis general para la creación de un
índice es:

CREATE INDEX "NOMBRE_ÍNDICE"


" 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 País, ingresaríamos,


i ngresaríamos,

CREATE INDEX IDX_CUSTOMER_LA


IDX_CUSTOMER_LAST_NAME
ST_NAME
on CUSTOMER (Last_Name)

Pour créer un index dans City et Country, il faut saisir

CREATE INDEX IDX_CUSTOMER_LOCA


IDX_CUSTOMER_LOCATION
TION
on CUSTOMER (City, Country)

No hay una regla estricta respecto de cómo nombrar un índice. El método


genera
gen eralme
lmente
nte acepta
aceptado do es cocoloc
locar
ar un prefijo
prefijo,, tal com
como
o “ID
“IDX_”
X_”,, ant
antes
es del
nombre de un índice para evitar la confusión con otros objetos de la base de
datos. También es una buena idea brindar información sobre qué tabla y
columna(s) se utilizará el índice.

Por favor note que la sintaxis exacta para CREATE INDEX puede ser distinta
según las diferentes bases de datos. Debería consultar con su manual de
referencia de base de datos para obtener la sintaxis precisa.
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 típicos
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
donde note que
ALTER lo anterior
TABLE no para
se utiliza es una lista exhaustiva.
cambiar Hayde
la estructura otras instancias
la tabla, tales
como cambiar la especificación de la clave primaria o agregar una restricción
única para una columna.

La sintaxis SQL para ALTER TABLE es

ALTER TABLE "nombre_tabla"


[modificar especificación]

[modifica
[modif icarr esp
especi
ecific
ficaci
ación]
ón] dep
depend
ende
e del tip
tipo
o de mod
modific
ificaci
ación
ón que des
deseam
eamosos
realizar. Para los usos mencionados anteriormente, las instrucciones [modificar
especificación] 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".
• Camb
Ca mbia
iarr el tipo
tipo de da
dato
toss pa
para
ra una
una co
colu
lumn
mna:
a: MO
MODI
DIFY
FY “col
“colum
umna
na 1”
“nuevo tipo de datos”

Recorr
Reco rram
amos
os ejem
ejempl
plos
os pa
para
ra ca
cada
da uno
uno de lo anante
terio
riorme
rment
nte
e me
menc
ncio
iona
nado
do,,
utilizando la tabla “cliente” creada en la sección CREATE TABLE, il convient de
se reporter aux exemples mentionnés ci-dessus.

Tabla customer

Column Nam
Column Name
e Dat
Data
a Type
Type
First_Name char(50)
Last_Name char(50)
Address char(50)
City char(50)
Country char(25)
Birth_Date date

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 Nam
Column Name
e Dat
Data
a Type
Type
First_Name char(50)

L
Aadsdtr_eNsas me cch
ha
arr((5
500))
City char(50)
Country char(25)
Birth_Date date
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
Column Nam
Column Name
e Dat
Data
a Type
Type
First_Name char(50)
Last_Name char(50)
Ad d r char(50)
City char(50)
Country char(25)
Birth_Date date
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

Column Nam
Column Name
e Dat
Data
a Type
Type
First_Name char(50)
Last_Name char(50)
Ad d r char(30)
City char(50)
Country char(25)
Birth_Date date
Gender char(1)

Finalmente, deseamos eliminar la columna “Gender”. Para hacerlo,


ingresamos,

ALTER table customer drop Gender

Estructura de la tabla resultante:

Table customer

Column Nam
Column Name
e Dat
Data
a Type
Type
First_Name char(50)
Last_Name char(50)
Ad d r char(30)
City char(50)
Country char(25)
Birth_Date date
DROP TABLE

A veces podemos decidir que necesitamos eliminar una tabla en la base de


datos por alguna razón. De hecho, sería problemático si no podemos hacerlo
ya que esto crearía una pesadilla de mantenimiento para DBA.
Afor
Afortu
tuna
nada
dame
ment
nte,
e, SQL
SQL no
noss pe
perm
rmitite
e ha
hace
cerlo
rlo,, ya qu
que
e po
pode
demo
moss util
utiliz
izar
ar 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 sección CREATE TABLE, simplemente ingresamos

DROP TABLE customer.

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 secciónPero ¿Si deseamos
simplemente deshacernos de los datos pero no de la tabla en sí? Para esto,
pode
podemo
moss ut
utililiz
izar
ar el coma
comando TRU
ndo TRUNCA
NCATE
TE TA TABLE
BLE. 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

INSERT INTO

En las secciones anteriores, hemos visto cómo obtener información de tablas.


Pero ¿Cómo se ingresan estas filas de datos en estas tablas en primer lugar?
Esto es lo que se trata en esta sección, que explica la instrucción INSERT, y en
la siguiente sección, que explica la instrucción UPDATE .

En SQL, hay fundamental y básicamente dos formas para INSÉRERdatos en


una tabla: Una es insertar una fila por vez, y la otra es insertar filas múltiples
por vez. Primero observemos como podemos INSÉRER datos a través 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

Column Nam
Column Name
e Dat
Dataa Type
Type
store_name 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 día, este
negocio tenía $900 dólares 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')

El segundo tipo de INSERT INTO nos permite insertar filas múltiples en una
tabla. A diferencia del ejemplo anterior, donde insertamos una única fila al
especificar sus valores para todas las columnas, ahora utilizamos
utili zamos la instrucción
SELECT para especificar los datos que deseamos insertar en la tabla. Si está
pensando si esto significa que está utilizando información 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 más simple. La instrucción entera puede contener
fácilmente cláusulas WHERE, GROUP BY, y HAVING, así como también
uniones y alias.

Entonces por ejemplo, si deseamos tener una tabla Store_Information, que


recolecte la información de ventas para el año 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 información


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.

UPDATE

Una vez que hay datos en la tabla, podríamos tener la necesidad de modificar
los
estomismos.
es, Para hacerlo, utilizamos el comando UPDATE. La sintaxis para
UPDATE "nombre_tabla"
SET "columna_1" = [nuevo valor]
WHERE {condición}

Por ejemplo, digamos que actualmente tenemos la tabla a continuación:

Tabla Store_Information

store_name Sales Date


Loss Ange
Lo Angele
less 15
1500
00 € 05
05-J
-Jan
an-1
-199
999
9
San Diego 250 € 07-Jan-1999
Loss Ang
Lo Angel
eles
es 30
300
0€ 08-
8-Ja
Jan-
n-1
1999
999
Bost
Bo ston
on 70
700
0€ 08
08-J
-Jan
an-1
-199
999
9

y notamos que las ventas para Los Angeles el 08/01/1999 es realmente de


500€ en vez de 300€ dólares estadounidenses, y que esa entrada en particular
necesita actualizarse. Para hacerlo, utilizamos el siguiente SQL:

UPDATE Store_Information
SET Sales
WHERE = 500
store_name = "Los Angeles"
AND Date = "08-Jan-1999"

La tabla resultante ser vería

Tabla Store_Information

store_name Sales Date


Loss Ange
Lo Angele
less 15
1500
00 € 05
05-J
-Jan
an-1
-199
999
9
San Diego 250 € 07-Jan-1999
Loss Ang
Lo Angel
eles
es 50
500
0€ 08-
8-Ja
Jan-
n-1
1999
999

Boston 700 € 08-Jan-1999


En este caso, hay sólo una fila que satisface la condición en la cláusula
WHERE. Si hay múltiples filas que satisfacen la condición, todas ellas se
modificarán.

También es posible UPDATE múltiples columnas al mismo tiempo. La sintaxis


en este caso se vería como la siguiente:

UPDATE "nombre_tabla"
SET colonne 1 = [[valor1], colonne 2 = [valor2]
WHERE {condición}
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 {condición}

Es má
máss fá
fáci
cill ut
utili
iliza
zarr un ejemp
ejemplo
lo.. Po
Porr ej
ejem
emplo
plo,, di
diga
gamo
moss qu
que
e ac
actu
tual
alme
ment
nte
e
tenemos la siguiente tabla:

Tabla Store_Information

store_name Sales Date


Loss Ange
Lo Angele
less 15
1500
00 € 05
05-J
-Jan
an-1
-199
999
9
San Diego 250 € 07-Jan-1999
Loss Ang
Lo Angel
eles
es 30
300
0€ 08-
8-Ja
Jan-
n-1
1999
999
Bost
Bo ston
on 70
700
0€ 08
08-J
-Jan
an-1
-199
999
9

y decidimos no mantener ninguna información 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 vería,

Tabla Store_Information

stor
store_
e_na
name
me Sa
Sale
less Date
Date
Sa n D
Diiego 250 € 07-J-Ja
an-1999
Boston 700 € 08-Jan-1999
SQL AVANZADO

UNION

El propósito 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 información relacionada en múltiples tablas. Una restricción de
UNION es que todas las columnas correspondientes necesitan ser del mismo
tipo de datos. También, cuando utilizamos UNION, sólo se seleccionan valores
distintos (similar a SELECT DISTINCT).

La sintaxis es la siguiente:

[Instrucción SQL 1]
UNION
[Instrucción SQL 2]

Supongamos que tenemos las siguientes dos tablas,

Tabla Store_Information

store_name Sales Date


Loss Ange
Lo Angele
less 15
1500
00 € 05
05-J
-Jan
an-1
-199
999
9
San Diego 250 € 07-Jan-1999
Loss Ang
Lo Angel
eles
es 30
300
0€ 08-
8-Ja
Jan-
n-1
1999
999
Bost
Bo ston
on 70
700
0€ 08
08-J
-Jan
an-1
-199
999
9

Tabla Internet_Sales

Date Sales
07-Jan
07-Jan-1
-199
999
9 250
250 €
10-J
10-Jan
an-1
-199
999
9 535
535 €
11-J
11-Jan
an-1
-199
999
9 320
320 €
12-J
12-Jan
an-1
-199
999
9 750
750 €

y deseamos saber de todas las fechas donde hay una operación de venta. Para
hacerlo, utilizamos la siguiente instrucción SQL:

SELECT Date FROM Store_Information


UNION
SELECT Date FROM Internet_Sales

Resultado:
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 pr
prop
opós
ósitito
o del
del Co
Coma
mand
ndo SQL UN
o SQL UNIO
IONN ALL es tamb
tambiéién
n cocomb
mbin
inar
ar lo
loss
resultados de dos consultas juntas. La diferencia entre UNION ALL y UNION
es que,
que, mien trass UNION sól
mientra sólo
o sel
selecc
eccion
iona
a val
valore
oress dis
distintos,, UNI
tintos UNION
ON AL ALLL
selecciona todos los valores.

La sintaxis para UNION ALL es la siguiente:

[Instrucción SQL 1]
UNION ALL
[Instrucción SQL 2]

Utilicemos el mismo ejemplo de la sección anterior para ilustrar la diferencia.


Supongamos que tenemos las siguientes dos tablas,

Tabla Store_Information

store_name Sales Date


Loss Ange
Lo Angele
less 15
1500
00 € 05
05-J
-Jan
an-1
-199
999
9
San Diego 250 € 07-Jan-1999

Loss Ang
Lo Angel
eles
es 30
300
0 € 08-
8-Ja
Jan-
n-1
1999
999
Boston
Bost on 70
700
0 € 08
08-J
-Jan
an-1
-199
999
9

Tabla Internet_Sales

Date Sales
07-J
07-Jan
an-1
-199
999
9 250
250 €
10-J
10-Jan
an-1
-199
999
9 535
535 €
11-J
11-Jan
an-1
-199
999
9 320
320 €
12-J
12-Jan
an-1
-199
999
9 750
750 €

y deseamos encontrar las fechas en donde se realizó una operación de venta


en un negocio como así también las fechas donde hay una venta a través de
Internet. Para hacerlo, utilizamos la siguiente instrucción 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

INTERSECT

Parecido al comando UNION, INTERSECT también opera en dos instrucciones


diferencia es que, mientras UNIONactúa fundamentalmente como un
SQL. La diferencia
operador OR (O) (el valor se selecciona si aparece en la primera o la segunda
instrucción), el comando INTERSECT actúa como un operador AND (Y) (el
valor se selecciona si aparece en ambas instrucciones).
i nstrucciones).

La sintaxis es la siguiente:

[Instrucción SQL 1]
INTERSECT
[Instrucción SQL 2]

Digamos que tenemos las siguientes dos tablas:

Tabla Store_Information
store_name Sales Date
Loss Ange
Lo Angele
less 15
1500
00 € 05
05-J
-Jan
an-1
-199
999
9
San Diego 250 € 07-Jan-1999
Loss Ang
Lo Angel
eles
es 30
300
0€ 08-
8-Ja
Jan-
n-1
1999
999
Bost
Bo ston
on 70
700
0€ 08
08-J
-Jan
an-1
-199
999
9

Tabla Internet_Sales

Date Sales

07-J
07
10-Jan
10-Jan-1
-Jan-199
an-1999
-1999 535
999
9 250
255
530€€
11-Jan
11-Jan-1
-199
999
9 320
320 €
12-J
12-Jan
an-1
-199
999
9 750
750 €

y deseamos encontrar todas las fechas donde hay ventas tanto en el negocio
como en Internet. Para hacerlo, utilizamos la siguiente instrucción SQL:

SELECT Date FROM Store_Information


INTERSECT
SELECT Date FROM Internet_Sales

Resultado:

Date
07-Jan-1999

Por favor note que el comando INTERSECT sólo arrojará valores distintivos.

MINUS

MINUSop oper
era
a en do
doss in
inst
struc
ruccicion
ones
es SQL.
SQL. To
Toma
ma todo
todoss lo
loss resu
resulta
ltado
doss de la
primera instrucción SQL, y luego
l uego sustrae aquellos que se encuentran presentes
en la segunda instrucción SQL para obtener una respuesta final. Si la segunda
instru
instrucci
cción
ón SQL inc
incluy
luyee res
result
ultado
adoss que no es
están
tán pre
presen
sentes
tes en la primer
primera
a
instrucción SQL, dichos resultados se ignoran.

La sintaxis es la siguiente:

[Instrucción SQL 1]
MINUS
[Instrucción SQL 2]

Continuemos con el mismo ejemplo:

Tabla Store_Information
store_name Sales Date
Loss Ange
Lo Angele
less 15
1500
00 € 05
05-J
-Jan
an-1
-199
999
9
San Diego 250 € 07-Jan-1999
Loss Ang
Lo Angel
eles
es 30
300
0€ 08-
8-Ja
Jan-
n-1
1999
999
Bost
Bo ston
on 70
700
0€ 08
08-J
-Jan
an-1
-199
999
9

Tabla Internet_Sales

Date Sales

07-J
07
10-Jan
10-Jan-1
-Jan-199
an-1999
-1999 535
999
9 250
255
530€€
11-Jan
11-Jan-1
-199
999
9 320
320 €
12-J
12-Jan
an-1
-199
999
9 750
750 €

y deseamos encontrar todas las fechas donde hay ventas en el negocio, pero
no aquell
aquellas
as rea
realiza
lizadas
das por Intern
Internet.
et. Para
Para hacerl
hacerlo,
o, uti
utiliz
lizamo
amoss la sig
siguie
uiente
nte
instrucción SQL:

SELECT Date FROM Store_Information


MINUS
SELECT Date FROM Internet_Sales

Resultado:

Date
05-Jan-1999
08-Jan-1999

"05-Jan-1999", "07-Jan-1999",et "08-Jan-1999" son los valores distintivos


arrojados desde "SELECT Date FROM Store_Information." También se arroja
"07-Jan-1999" de la segunda instrucción SQL, " SELECT Date FROM
Internet_Sales," de este modo se lo excluye del conjunto final de resultados.
Por favor note que el comando MINUSsólo arrojará valores distintos.

Algunas bases de datos pueden utilizar EXCEPT en vez de MINUS. Por favor
verifique la documentación para su base de datos específica para el uso
apropiado.

SUBCONSULTA

Es posible incorporar una instrucción SQL dentro de otra. Cuando esto se hace
en las instru
instruccioness WHERE o HAVING, tene
ccione tenemo
moss ununa
a co
cons
nstru
trucc
cció
ión
n de
subconsulta.

La sintaxis es la siguiente:

SELECT "nombre1_columna"
FROM "nombre1_tabla"
WHERE "nombre2_columna" [Operador de Comparación]
(SELECT "nombre3_columna"
FROM "nombre2_tabla"
WHERE [Condición])

[Operador de Comparación] podrían ser operadores de igualdad tales como =,


>, <, >=, <=. También 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 même exemple que celui que nous avons utilisé pour illustrer les
jointures SQL :

Table Store_Information

store_name Sales Date


Loss Ange
Lo Angele
less 15
1500
00 € 05
05-J
-Jan
an-1
-199
999
9
San Diego 250 € 07-Jan-1999
Loss Ang
Lo Angel
eles
es 30
300
0€ 08-
8-Ja
Jan-
n-1
1999
999
Bost
Bo ston
on 70
700
0€ 08
08-J
-Jan
an-1
-199
999
9

Table Geography

region_n
region_name
ame store_
store_nam
namee
East Boston
East New York
West Los Angeles
West San Diego

et en utilisant une sous-requête pour trouver les ventes de tous les magasins
dans la région West (Ouest), il faudra utiliser l’instruction SQL suivante :

SELECT SUM(Sales) FROM Store_Information


WHERE Store_name IN
(SELECT store_name FROM Geography
WHERE region_name = 'West')

Résultat :

SUM(Sales)
2050

Dans cet exemple, au lieu de joindre directement les deux tables et d’ajouter
seulement le montant des ventes des magasins de la région West (Ouest),
nous allons d’abord utiliser la sous-requête pour trouver les magasins situés
dans la région West (Ouest), puis additionner le montant des ventes de ces
magasins.

Dans l’exemple ci-dessus, la requête interne est d’abord exécutée, puis le


résultat est envoyé à la requête externe. Ce type de sous-requête est appelé
sous-requête simple. Si la requête interne dépend de la requête externe, nous
aurons une sous-requête corrélée. Vous trouverez ci-dessous un exemple de
de sous-requête corrélée :

SELECT SUM(a1.Sales) FROM


WHERE a1.Store_name IN Store_Information a1
(SELECT store_name FROM Geography a2
WHERE a2.store_name = a1.store_name)

Notez la clause WHERE dans la requête interne, où la condition nécessite une


table de la requête externe.

EXISTS

En la secció
sección
n ant
anteri
erior,
or, utiliz amoss INpara enlazar la consulta interna y la
utilizamo
consulta externa en una instrucción de subconsulta. INno es la única forma de
hace
hacerl
rlo
o – un
unoo pu
pued
edee ut
utililiz
izar
ar mu
much
chos
os op
oper
erad
ador
ores
es tale
taless com
omo
o >, <, o =.
EXISTSes un operador especial que describiremos en esta sección.

EXISTSsimplemente 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 instrucción SQL no arroja nada.

La sintaxis para EXISTS es

SELECT "nombre1_columna"
FROM "nombre1_tabla"
WHERE EXISTS
(SELECT *
FROM "nombre2_tabla"
WHERE [Condición])

Por favor note que en vez de *, puede seleccionar una o más columnas en la
consulta interna. El efecto será idéntico.

Utilizamos las mismas tablas de ejemplos:

Tabla Store_Information

store_name Sales Date


Loss Ange
Lo Angele
less 15
1500
00 € 05
05-J
-Jan
an-1
-199
999
9
San Diego 250 € 07-Jan-1999
Loss Ang
Lo Angel
eles
es 30
300
0€ 08-
8-Ja
Jan-
n-1
1999
999
Bost
Bo ston
on 70
700
0€ 08
08-J
-Jan
an-1
-199
999
9

Tabla Geography

region_n
region_name
ame store_
store_nam
namee
East Boston
East New York
West Los Angeles
West San Diego
colocaríamos 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 condición [region_name = 'West'], aún así la consulta sumó los negocios
para todas las regiones. Si observamos de cerca, encontramos que debido a
que la subconsulta arroja más de 0 filas, la condición EXISTS es verdadera, y
la condición colocada dentro de la consulta interna no influencia la forma en
que se ejecuta la consulta externa.

SQL CASE >>

CASE se utiliza para brindar un tipo de lógica "si-entonces-otro" para SQL. Su


sintaxis es:

SELECT CASE ("nombre_columna


(" nombre_columna")
")
WHEN "condición1" THEN "resultado1"
WHEN "condición2" THEN "resultado2"
...
[ELSE "resultadoN"]
END
FROM "nombre_tabla"

"condición" puede ser un valor estático o una expresión. La cláusula ELSE es


opcional.

En nuestra Tabla Store_Information de ejemplo,

Tabla Store_Information

store_name Sales Date


Los An
Angeles 1500 € 05-Jan-1
-19
999
San Diego 250 € 07-Jan-1999
San
Sa n Fr
Fran
anccis
iscco 300 € 08-J
08-Ja
an-1
-199
999
9
Bost
Boston
on 70
700
0 € 08
08-J
-Jan
an-1
-199
999
9
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 instrucción


CASE.

Resultado:

store_name Nuevas Ventas Date

L
Soasn A
Dnieggeoles 3307500€€ 0075--JJaan
n--11999999
San Francisco 300 € 08-Jan-1999
Boston 700 € 08-Jan-1999
SQL Sintaxis >>

En esta página, enumeramos la sintaxis SQL para cada uno de los comandos
SQL en esta guía de referencia. Para obtener explicaciones detalladas para
cada sintaxis SQL, por favor diríjase a la sección individual haciendo clic en la
palabra clave.

El propósito de esta página es brindar una página de referencia rápida para la


sintaxis SQL. Le sugerimos que agregue esta página a favoritos ahora
presionando Control-D para que pueda tener esta página 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 "condición simple"
{[AND|OR] "condición 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 {patrón}

Order
SELECTBy"nombre_columna"
FROM "nombre_tabla"
[WHERE "condición"]
ORDER BY "nombre_columna" [ASC, DESC]

Count
SELECT COUNT("nombre_columna")
FROM "nombre_tabla"

Group By"nombre_columna 1", SUM("nombre_columna 2")


SELECT
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 (condición de función aritmética)

Create Table
CREATE TABLE "nombre_tabla"
("columna 1" "tipo_de_datos_para
"tipo_de_datos_para_columna_1",
_columna_1",
"columna 2" "tipo_de_datos_para_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", ...)
valorS ("valor 1", "valor 2", ...)

Update
UPDATE "nombre_tabla"
SET "colonne 1" = [nuevo valor]
WHERE {condition}

Delete From
DELETE FROM "nombre_tabla"
WHERE {condición}
Contenido
SQL...........
.......................
.......................
.......................
........................
.......................
.......................
........................
.......................
..................
.........
.. 1

COMANDOS SQL.......
..............
..............
..............
..............
..............
...............
............
........
........
......
.. 2

SELECT...........
.......................
.......................
.......................
........................
.......................
.......................
........................
.................
........
... 2

DISTINCT...........
.......................
.......................
.......................
........................
.......................
.......................
..................
...........
..........
.......2

WHERE............
.......................
.......................
........................
.......................
.......................
........................
...................
............
..........
.......
.. 3

AND OR............
.......................
.......................
........................
.......................
.......................
........................
.................
..........
..........
........
... 4

SQL IN >>..........
......................
........................
.......................
.......................
........................
.......................
...................
.............
........
... 5

SQL BETWEEN >>...........


.......................
........................
.......................
.......................
........................
.......................
..............
... 6

SQL LIKE >>


>>...........
......................
.......................
........................
.......................
...................
.............
..........
..........
..........
..........
.......
.. 7

SQL ORDER BY >>...........


.......................
........................
.......................
.......................
........................
...................
...........
......
..8

SQL FUNCIONES >>..........


......................
........................
.......................
.......................
........................
..................
..........
.... 10

SQL COUNT >>...........


.......................
........................
.......................
.......................
........................
...................
............
.........
.... 11

SQL GROUP BY >>..........


......................
........................
.......................
.......................
........................
...................
............
..... 11

SQL HAVING >>...........


......................
.......................
........................
.......................
.......................
......................
...............
.......12

SQL ALIAS >>...........


.......................
.......................
.......................
........................
......................
...............
..........
..........
..........
..... 13

SQL JOIN >>............


.......................
.......................
........................
.......................
................
..........
..........
..........
..........
..........
.......
.. 15

SQL Outer Join >>............


.......................
.......................
........................
.................
..........
..........
..........
..........
.........
.........
..... 16

SQL CONCATENAR >>...........


......................
.......................
........................
.....................
..............
..........
..........
..........
..... 17

SQL SUBSTRING >>..........


......................
........................
.......................
.......................
.......................
................
.........
......
..19

SQL TRIM >>..........


......................
........................
.......................
.......................
..................
...........
..........
..........
..........
..........
.......20

MANIPULACION
MANIPULACIO N DE TABLAS.......
..............
..............
.............
..........
........
........
........
.......
... 21

CREATE TABLE...........
......................
.......................
........................
.......................
...................
.............
..........
..........
..........
.......
.. 21

SQL CONSTRAINT............
.......................
.......................
........................
.......................
.......................
.................
..........
........
... 22

CLAVE PRIMARIA...........
.......................
.......................
.......................
........................
.................
..........
..........
..........
..........
.......23

CLAVE EXTERNA ............


........................
.......................
.......................
........................
.......................
......................
...............
.... 24

CREATE VIEW – VISTAS...........


.......................
........................
.......................
................
..........
..........
..........
..........
........
... 26
CREATE INDEX...........
......................
.......................
........................
.......................
.................
..........
.........
..........
..........
.........
......28

ALTER TABLE...........
.......................
........................
.......................
.......................
........................
.......................
...................
..........29

DROP TABLE............
........................
.......................
.......................
........................
.......................
.......................
...................
.........
.. 32

INSERT INTO............
........................
.......................
.......................
........................
.......................
.......................
.....................
......... 32

UPDATE ............
........................
.......................
.......................
........................
.......................
.......................
.................
..........
..........
..... 33
DELETE FROM...........
.......................
........................
.......................
.......................
.................
..........
.........
.........
..........
..........
.......35

SQL AVANZADO .......


...............
...............
..............
..............
..............
..............
...............
............
......36

UNION...........
......................
.......................
........................
.......................
.......................
.....................
..............
..........
.........
.........
........
... 36

UNION ALL............
.......................
.......................
........................
.......................
.......................
........................
.......................
.............37

INTERSECT..........
......................
........................
.......................
.......................
........................
..................
...........
..........
..........
........
... 38

MINUS...........
.......................
.......................
.......................
........................
.......................
..................
............
..........
..........
..........
.........
.... 39

SUBCONSULTA............
........................
.......................
.......................
........................
.......................
................
..........
..........
.......
.. 40

EXISTS..........
......................
........................
.......................
.......................
........................
.......................
.......................
...................
.........42

SQL CASE >>............


........................
.......................
.......................
........................
.......................
.....................
...............
.........
.... 43

SQL Sintaxis >>.......


..............
...............
...............
.............
..........
........
........
........
........
........
.......
... 45

Contenido ............
........................
.......................
.......................
........................
.......................
.......................
......................
...............
.........
.... 47

También podría gustarte