Documentos de Académico
Documentos de Profesional
Documentos de Cultura
PDF-SQL Compress
PDF-SQL Compress
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 :
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:
Tabla Store_Information
Resultado:
store_name
Los
San Angeles
Diego
Los Angeles
Boston
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:
Tabla Store_Information
Ingresamos,
Resultado:
store_name
Los Angeles
San Diego
Boston
WHERE
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
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
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
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
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:
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
Ingresamos,
SELECT *
FROM Store_Information
WHERE Date BETWEEN '06-Jan-1999' AND '10-Jan-1999'
Resultado:
SELECT "nombre_columna"
FROM "nombre_tabla"
WHERE "nombre_columna" LIKE {patrón}
• '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.
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
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.
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
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
Ingresamos,
Resultado:
- AVG
- COUNT
- MAX
- MIN
- SUM
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
Resultado:
SUM(Sales)
2750 €
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
ingresamos,
SELECT COUNT(store_name)
FROM Store_Information
Resultado:
Count(store_name)
4
Resultado:
Count(DISTINCT store_name)
3
Tabla Store_Information
Deseamos saber las ventas totales para cada negocio. Para hacerlo,
ingresaríamos,
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 €
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,
Tabla Store_Information
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,
Resultado:
st
stor
ore_
e_na
name
me SUSUM(
M(Sa
Sale
les)
s)
Loss An
Lo Angel
geles
es 1800
1800 €
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.
Antes de comenzar con las uniones, miremos la sintaxis tanto para el alias de
columna como de 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:
Resultado:
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.
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
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:
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
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.
Tabla Store_Information
Tabla Geography
region_n
region_name
ame store_
store_nam
name
e
East Boston
E
Waesstt N
LoeswAYnogrekles
West San Diego
Resultado:
st
stor
ore_
e_na
name
me SASALE
LES S
Boston 700 €
New York
Los Ange
Angeles
les 1800
1800 €
San Diego 250 €
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 '||'.
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:
• Oracle: SUBSTR()
SQL Server: SUBSTRING()
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 >>
•
MySQL: TRIM(), RTRIM(),
Oracle: RTRIM(), LTRIM() LTRIM()
• SQL Server: RTRIM(), LTRIM()
Ejemplo 1 :
Resultado :
'Sample'
Ejemplo 2 :
Resultado :
'Sample '
Ejemplo 3 :
Resultado :
' Sample'
MANIPULACION DE TABLAS
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
Entonces, si debemos crear una tabla para el cliente tal como se especifica
anteriormente, ingresaríamos
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.
- NOT NULL
- UNIQUE
- CHECK
- Clave primaria
externa
NOT NULL
UNIQUE
La restricción UNIQUE asegura que todos los valores en una columna sean
distintos.
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 favor note que la restricción CHECKno sea ejecutada por MySQL en este
momento.
CLAVE PRIMARIA
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));
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
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.
Tabla CUSTOMER
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
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);
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);
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
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
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:
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,
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.
Tabla Customer
(First_Name char(50),
Last_Name char(50),
Address char(50),
City char(50),
Country char(25),
Birth_Date date)
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:
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.
[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
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)
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)
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)
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
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"
INSERT INTO
La sintaxis para insertar datos en una tabla mediante una fila por vez es la
siguiente:
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:
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.
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}
Tabla Store_Information
UPDATE Store_Information
SET Sales
WHERE = 500
store_name = "Los Angeles"
AND Date = "08-Jan-1999"
Tabla Store_Information
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,
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
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
La sintaxis es la siguiente:
[Instrucción SQL 1]
UNION
[Instrucción SQL 2]
Tabla Store_Information
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:
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.
[Instrucción SQL 1]
UNION ALL
[Instrucción SQL 2]
Tabla Store_Information
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 €
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
La sintaxis es la siguiente:
[Instrucción SQL 1]
INTERSECT
[Instrucción SQL 2]
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:
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]
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:
Resultado:
Date
05-Jan-1999
08-Jan-1999
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])
Table Store_Information
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 :
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.
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.
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.
Tabla Store_Information
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:
Tabla Store_Information
Resultado:
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.
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"
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
MANIPULACION
MANIPULACIO N DE TABLAS.......
..............
..............
.............
..........
........
........
........
.......
... 21
CREATE TABLE...........
......................
.......................
........................
.......................
...................
.............
..........
..........
..........
.......
.. 21
SQL CONSTRAINT............
.......................
.......................
........................
.......................
.......................
.................
..........
........
... 22
CLAVE PRIMARIA...........
.......................
.......................
.......................
........................
.................
..........
..........
..........
..........
.......23
ALTER TABLE...........
.......................
........................
.......................
.......................
........................
.......................
...................
..........29
DROP TABLE............
........................
.......................
.......................
........................
.......................
.......................
...................
.........
.. 32
INSERT INTO............
........................
.......................
.......................
........................
.......................
.......................
.....................
......... 32
UPDATE ............
........................
.......................
.......................
........................
.......................
.......................
.................
..........
..........
..... 33
DELETE FROM...........
.......................
........................
.......................
.......................
.................
..........
.........
.........
..........
..........
.......35
UNION...........
......................
.......................
........................
.......................
.......................
.....................
..............
..........
.........
.........
........
... 36
UNION ALL............
.......................
.......................
........................
.......................
.......................
........................
.......................
.............37
INTERSECT..........
......................
........................
.......................
.......................
........................
..................
...........
..........
..........
........
... 38
MINUS...........
.......................
.......................
.......................
........................
.......................
..................
............
..........
..........
..........
.........
.... 39
SUBCONSULTA............
........................
.......................
.......................
........................
.......................
................
..........
..........
.......
.. 40
EXISTS..........
......................
........................
.......................
.......................
........................
.......................
.......................
...................
.........42
Contenido ............
........................
.......................
.......................
........................
.......................
.......................
......................
...............
.........
.... 47