Sunteți pe pagina 1din 51

Report Builder

SQL y conceptos bsicos


Qu es SQL?

Es la abreviatura de Structured Query


Language.
Es el lenguaje que se a convertido en
el estndar para la creacin y el
manejo de bases de datos
relacinales.
Permite agregar registros, borrar, crear
tablas, etc.
Para que me servir?

Los datos de un reporte se extraen de


las consultas de la pestaa de datos,
ests consultas a fin de cuentas
vienen de una sentencia SQL.
Hay casos que el asistente no nos
permite definir, por lo que tenemos
que definir la seleccin manualmente.
Qu es lo que necesitare?

Como se mencion SQL tiene


instrucciones que permiten insertar
datos, borrar, hacer regresin, etc. Sin
embargo nosotros usaremos
solamente el comando SELECT.
Qu hace el Select?

Select crea una tabla temporal a partir


de las tablas que se desee, donde nos
permite definir:
Orden
Campos a incluir
Agrupaciones
Uniones
Qu usar para probar?

Para nuestras pruebas usaremos el


IbConsole, utilera que se vi en el
curso anterior. Abra una base de datos
y seleccione del men Tools la
opcin Interactive SQL, la cual nos
permine ejectuar comandos SQL
directamente.
Qu usar para probar?
Qu usar para probar?
Definiendo campos en el
select

El select permite definir que campos


deseamos que aparezcan en la
consulta, la sintaxis es:
SELECT {lista de campos}
FROM {Tabla}
En la lista de campos se enumeran los
campos deseados separados por
comas.
Definiendo campos en el
select

Por ejemplo, si deseamos todos los


campos de la tabla clientes el
comando seria:
Select * From clientes
El * significa que se incluyan todos
los campos.
Este dara el siguiente resultado mas o
menos:
Definiendo campos en el
select
Definiendo campos en el
select

Muchas veces no queremos tener


todos los campos y solo deseamos
unos cuantos. En este caso se
especifica la lista de campos,
supongamos que deseamos: nombre
del cliente, contacto y limite de crdito.
Select nombre, contacto1, Limite_Credito
From Clientes
Definiendo campos en el
select

El predicado anterior nos arroja el siguiente


resultado:
Filtrando registros

Lo ms comn es que deseemos que


en el resultado se incluyan solo los
registros que cumplan ciertas
condiciones, para ello se usa la
clusula Where. La sintaxis es:
SELECT {lista de campos}
FROM {Tabla}
Where {Condicin}
Filtrando registros

Ejemplo: deseamos el nombre,


contacto y lmite de crdito mayor a
1000.
La sentencia seria:
Select nombre, contacto1, limite_credito
from clientes
Where (Limite_Credito>1000)
Filtrando registros

El resultado seria:
Filtrando registros

Si quisiramos incluir los que tiene


1000 en el lmite de crdito la
sentencia cambiaria a:
Select nombre, contacto1, limite_credito
from clientes
Where (Limite_Credito>=1000)
Filtrando registros

El resultado seria:
El Null

Si se observo un poco el primer


ejemplo del Select, se encontraron
ciertos campos que contenian el valor
Null.
El valor Null significa que a ese campo
no se le asigno valor, es diferente a
vacio, cero o falso.
El Null

Tcnicamente no es un valor por lo


que puede aparecer en cualquier
campo independientemente del tipo.
Para comparar el Null se usa l
operador Is Null.
Supongamos que deseamos una lista
de los clientes sin contacto asignado.
El Null
La sentencia seria:
Select nombre, contacto1, limite_credito from clientes
Where (Contacto1 Is Null)
El resultado arrojara:
El Null
Por el contrario, si lo que deseamos es ver aquellos
que NO son nulos la sentencia seria:
Select nombre, contacto1, limite_credito from clientes
Where (Contacto1 Is Not Null)
El operador IN

El operador In compara el valor con


los que se incluyen en una lista, un
ejemplo sencillo seria los clientes que
tuvieran limite de crdito igual a 0 o a
1500.
Select nombre, contacto1, limite_credito
from clientes Where Limite_Credito in
(0,1500)
El operador IN
El operador Between

Between compara el valor con un


rango incluyendo los extremos. La
sintaxis es
Between Valor1 And Valor2
Ejemplo:
Select nombre, contacto1, limite_credito
from clientes Where Limite_Credito
between 1000 and 1500
El operador Between
El operador Like

Like nos ayuda para comparar a


buscar un texto en un string. Se ayuda
con los siguientes comodines:
El underscore (_), que sustituye a 1
caracter.
El (%), el cual sustituye a cualquier
secuencia de caracteres, incluyendo el
vaco.
El operador Like

Ejemplo: Si buscamos las empresas


que sus nombres comiencen con Ka
la sentencia sera:
Select nombre, contacto1, limite_credito
from clientes Where Nombre Like 'Ka%'
El operador Like

Nos resultara:
Ordenando los resultados

Una vez que tenemos los registros


que deseamos el siguiente paso es
ordenarlos para que se nos facilite el
manejo.
La clusula Order nos da esta funcin,
se sigue de la lista de campos que
indican como se va a ordernar.
Ordenando los resultados

La sintaxis es:
SELECT {lista de campos}
FROM {Tabla}
Where {Condicin}
Order by {lista de campos}
Si queremos ordenar los campos del
select anterior por el nombre del
cliente, la sentencia quedara de la
siguiente manera:
Ordenando los resultados

Select nombre, contacto1, limite_credito


from clientes Where Nombre Like 'Ka%'
Order by Nombre
Usando ms de una tabla

Hasta el momento hemos usado solo


una tabla, lo cual no es muy til ya en
la prctica, ya que regularmente la
informacin se encuentra en 2 ms
tablas. Para hacer un select de N
tablas se usa la clusula Join, la
sintaxis es la siguiente.
Usando ms de una tabla
SELECT {lista de campos}
FROM {Tabla}
[Left] Join {Tabla}
On {Condicin}
{otros join}
Where {Condicin}
Order by {lista de campos}
Usando ms de una tabla

Cuando un nombre de campo aparece


en varias de las tablas que estamos
usando debemos de especificar de
que tabla es, la sintaxis es:
Tabla.campo.
Ejemplo:
Doctos_Ve_Det.Articulo_Id
Usando ms de una tabla
Este es el join mas comn, otro muy comn
es el Left Join.
La diferencia es que el join sencillo incluye
solo los registros que tengan
correspondencia en una tabla y otra.
El Left Join Incluye todos los registros de la
primera tabla aunque no tenga
correspondencia en la segunda, en estos
casos en la tabla resultante pone Null en los
campos que corresponderan a la segunda
tabla.
Usando ms de una tabla

En un select tambin se pueden hacer


clculos al vuelo, incluyendo la expresin
en la lista de campos a desplegar.
Por ejemplo, un select que nos diera una
tabla con el nombre del cliente, el nmero
de documento, el artculo, las unidades y el
total por artculo seria de la siguiente
manera:
Usando ms de una tabla
Select Clientes.Nombre,Folio,Unidades,Articulos.Nombre,
Precio_Unitario,(Precio_Unitario * Unidades) From Clientes
Join Doctos_Ve
On (Clientes.Cliente_Id=Doctos_Ve.Cliente_Id)
Join Doctos_Ve_Det
On (Doctos_Ve.Docto_Ve_Id=Doctos_Ve_Det.Docto_Ve_Id)
Join Articulos
On (Doctos_Ve_Det.Articulo_Id=Articulos.Articulo_Id)
Order By Clientes.Nombre, Folio
Usando mas de una tabla
Usando ms de una tabla

Definir completo la tabla y el nombre


del archivo puede ser muy latoso
cuando tienen nombres muy largos o
son muchos campos en esta situacin.
Los alias nos ayudan en esta
situacin, nos dan la opcin de asignar
un segundo nombre a la tabla mas
prctico que el original.
Usando ms de una tabla

Para los nombres de los campos es lo


mismo, se puede asignar un alias de forma
que sea ms fcil identificarlos con la
clusula as.
Ejemplo: se volver a hacer el mismo
comando que la vez anterior, pero se
asignara a cada tabla una letra como alias y
a el producto de precio por unidades se le
llamara precio_total.
Usando ms de una tabla
Select A.Nombre,Folio,Unidades,D.Nombre,
Precio_Unitario,(Precio_Unitario * Unidades) as
Precio_Total From Clientes A
Join Doctos_Ve B
On (A.Cliente_Id=B.Cliente_Id)
Join Doctos_Ve_Det C
On (B.Docto_Ve_Id=C.Docto_Ve_Id)
Join Articulos D
On (C.Articulo_Id=D.Articulo_Id)
Order By A.Nombre, Folio
Usando ms de una tabla
Agrupando

Una necesidad comn es la de


agrupar los registros de acuerdo a un
criterio y totalizar ciertos campos. Para
esto se usa el comando Group By.
Los grupos tambin se pueden filtrar
utilizando la clusula Having, que es la
correspondiente al Where en este
caso.
Agrupando

La sintaxis quedara de la siguiente manera:


SELECT {lista de campos}
FROM {Tabla}
[Left] Join {Tabla}
On {Condicin}
{otros join}
Group by {lista de campos}
Having {Condicin}
Order by {lista de campos}
Agrupando
Ejemplo: Supongamos que deseamos totalizar por articulo por
cliente, el comando quedara:

Select A.Nombre,D.Nombre,Sum(Unidades) As Tot_Unidades,


Sum(Precio_Unitario * Unidades) as Precio_Total From Clientes A
Join Doctos_Ve B
On (A.Cliente_Id=B.Cliente_Id)
Join Doctos_Ve_Det C
On (B.Docto_Ve_Id=C.Docto_Ve_Id)
Join Articulos D
On (C.Articulo_Id=D.Articulo_Id)
Group by A.Nombre, D.Nombre
Order by A.Nombre, D.Nombre
Agrupando
Agrupando
Si deseramos filtrar los grupos que tienen un Precio_Total
mayor a 100, el comando quedara:
Select A.Nombre,D.Nombre,Sum(Unidades) As Tot_Unidades,
Sum(Precio_Unitario * Unidades) as Precio_Total From Clientes A
Join Doctos_Ve B
On (A.Cliente_Id=B.Cliente_Id)
Join Doctos_Ve_Det C
On (B.Docto_Ve_Id=C.Docto_Ve_Id)
Join Articulos D
On (C.Articulo_Id=D.Articulo_Id)
Group by A.Nombre, D.Nombre
Having (Sum(Precio_Unitario * Unidades)>100)
Order by A.Nombre, D.Nombre
Agrupando
Agrupando
Por ltimo, si desearamos solo el monto total por cliente
quedara:
Select A.Nombre,Sum(Unidades) As Tot_Unidades,
Sum(Precio_Unitario * Unidades) as Precio_Total From Clientes A
Join Doctos_Ve B
On (A.Cliente_Id=B.Cliente_Id)
Join Doctos_Ve_Det C
On (B.Docto_Ve_Id=C.Docto_Ve_Id)
Join Articulos D
On (C.Articulo_Id=D.Articulo_Id)
Group by A.Nombre
Having (Sum(Precio_Unitario * Unidades)>100)
Order by A.Nombre
Agrupando

S-ar putea să vă placă și