Está en la página 1de 42

La instrucción SELECT

SELECT [ distinct] lista_de_expresiones


from lista_de_tablas
[ where codición_de_selección ]
[ group by lista_de_columnas ]
[ having condición_de_selección_de_grupos ]
[ order by lista_de_columnas]

1
Información a utilizar en los ejemplos

EJEMPLO: Un pequeño comercio de compra y venta de


productos, ha decidido guardar su información de la
siguiente forma:
Tabla Descripción
CLIENTES.DB Información de sus clientes
PROVEE.DB Datos de sus proveedores
PRODUCTO.DB Productos que compra a sus
proveedores para revender.
VENTAS.DB Ventas efectuadas de sus productos a
sus clientes. 2
Tablas

Clientes.db

Provee.db

3
Tablas

Producto.db

Cada producto lleva el código del


proveedor al que Ud.se lo compró.

4
Tablas

Ventas.db

Para cada venta (fila) se identifica el


producto vendido y el cliente que lo compró.
5
SQL Explorer

6
Creando un ALIAS

Presione el botón derecho


del mouse y seleccione la
opción New …

7
Creando un ALIAS

Seleccione la opción
Apply para que se
Indique el directorio
definadonde se
el Alias.
encuentran las tablas
8
SQL Explorer

Consultas

9
Select - from

SELECT Lista_de_campos
FROM nombre_de_la_tabla
Permite obtener los campos (columnas) indicados
para TODOS los registros de la tabla.

SELECT * FROM nombre_de_la_Tabla


Retorna la tabla completa. El carácter *
representa todas las columnas.
10
Ejemplo de Select - from

Ejecuta la consulta
11
Ejemplo de Select - from
SELECT * from Producto.db

Permite acceder a la consulta


anterior.

12
La condición de selección

SELECT *
from Producto
where cod_prov = 3

La clausula WHERE es un filtro. Sólo permite obtener


como resultado de la consulta aquellos registros que
cumplan con la condición indicada. 13
La condición de selección

SELECT * from Ventas


where (cod_cli = 2) and (Fecha>‘10/04/2006')

14
Operadores de String

Operador like
– Permite averiguar si una cadena satisface o no
cierto patrón de caracteres
– Su segundo operando es el patrón, un string dentro
del cual pueden incluirse los siguientes caracteres:
Carácter Significado
% cero o más caracteres arbitrarios
_ (subrayado) Un carácter cualquiera

15
Operadores de String

Ejemplo:
Expresión String Aceptado String no aceptado
Nombre like '% Perez' 'Cecilia Perez' 'Perez Luciano'
Fruta like 'Manzana_' 'Manzanas' 'Manzana'

16
Operadores de String

SELECT cod_prod, nombre, marca from producto


where (nombre like 'J%') or
(nombre like '%e%') or (nombre like 'Caf_')

17
El valor nulo
Quedan sólo los
SELECT * from Producto productos que
where nombre is null no tienen
nombre.

Quedan sólo los


SELECT * from Ventas registros que
tienen una fecha
where Fecha is not null cargada.

18
Eliminando duplicados
SELECT cod_prod
from Ventas
where (Fecha> '01/01/2006')

SELECT distinct cod_prod


from Ventas
where (Fecha>'01/01/2006')

19
Consultas con varias tablas
Suponga que desea obtener para cada producto el
nombre del proveedor a quien Ud. se lo compra.

La idea es combinar la información de las dos tablas obteniendo


Cada producto
los datos llevadeelproductos.db
del producto código del proveedor al que
y el nombre del proveedor
Ud.se lo compró, no su nombre.
de proveedor.db
20
Consultas con varias tablas

Ud. podría llegar a pensar que esta consuta


resolverá su problema:

select P.cod_prod,P.nombre,P.cod_prov,
R.cod_prov,R.nombre as NombreProv
from producto P, provee R

Esta letra a continuación del nombre de la tabla


funciona como un alias que permite, dentro de la
consulta, reconocer de qué tabla se trata. 21
Producto Cartesiano
select P.cod_prod,P.nombre,P.cod_prov,
R.cod_prov,R.nombre as NombreProv
from producto P, provee R

22
Producto cartesiano
Filtra los
registros
SELECT P.cod_prod, P.nombre, incorrectamente
asociados por el
R.nombre as Proveedor producto
from producto P, provee R cartesiano de
las tablas.
where (P.cod_Prov = R.cod_Prov)

23
INNER JOIN
SELECT Producto.cod_prod, Producto.nombre,
Provee.nombre as Proveedor
FROM “Producto.db” Producto
INNER JOIN "Provee.db" Provee
ON (Producto.Cod_Prov = Provee.Cod_Prov)

Sólo devuelve
los registros que
cumplen la
condición
24
Ordenando los resultados
SELECT P.cod_prod, P.nombre, R.nombre Rehacer esta
from producto P, provee R consulta
where (P.cod_Prov = R.cod_Prov) and utilizando
(P.nombre like '%a') INNER JOIN
order by R.nombre

25
Ordenando los resultados
SELECT P.cod_prod, P.nombre, R.nombre
from producto P
inner join provee R on (P.cod_Prov = R.cod_Prov)
where (P.nombre like '%a')
order by R.nombre

26
Ordenando los resultados
SELECT P.cod_prod, P.nombre, R.nombre Rehacer esta
from producto P, provee R consulta
where (P.cod_Prov = R.cod_Prov) utilizando
order by R.nombre, P.nombre desc INNER JOIN

27
Ordenando los resultados
SELECT P.cod_prod, P.nombre, R.nombre
from producto P
INNER JOIN provee R on (P.cod_Prov = R.cod_Prov)
order by R.nombre, P.nombre desc

28
Ordenando los resultados
SELECT P.cod_prod, nombre, fecha,
V.cantidad * P.Precio as Monto
from producto P
inner join Ventas V on (P.cod_Prod = V.cod_Prod)
order by 4 desc, fecha

29
Consultas desde Delphi

Para trabajar con consultas es necesario utilizar la


componente Query

Query

Es muy similar a la tabla pero el resultado de la


consulta está guardado en memoria 37
Consultas desde Delphi

Para visualizar el resultado de la consulta


pueden utilizarse las misma componentes que
para una Tabla
– DBGrid
– DBEdit
– DBNavigator
Al igual que la tabla requiere de un componente
DataSource para conectarse con las
componente visuales. 38
Consultas desde Delphi
Insertar
– Query
• DataBaseName : el alias
• SQL : la consulta
• Active : abre la consulta
– DataSource
• DataSet : el Query
– DBGrid y DBNavigator Ejemplo_Query.dpr
• DataSource : el anterior
39
Componente Query

Propiedades
– DataBaseName = SQL_Ejem
– SQL
SELECT P.cod_prod, P.nombre, R.nombre
from producto P
inner join provee R on (P.cod_Prov = R.cod_Prov)
order by R.nombre, P.nombre desc

– Active = TRUE
40
Ejemplo_Query.dpr

Note que el resultado de la consulta es visible en


tiempo de diseño. 41
Consultas con parámetros

Utilice una consulta


para visualizar los
productos que la
empresa compra a
un determinado
proveedor.

Ejemplo_Query2.dpr 42
Consultas con parámetros
DbLookupComboBox
de la tabla de
proveedores

Resultado de la
consulta visualizado en
una grilla

43
Consulta

SELECT cod_prod, nombre


from producto P
where Cod_prov = :dato
order by nombre

El parámetro se indica con :


delante del identificador

44
Indicando el valor del parámetro
Cerrar la componente Query.
Utilizar el método ParamByName para asignar a
cada parámetro su valor.

Ejemplo:
Query1.ParamByName(‘dato’).asInteger := 2;

Abrir el Query
45
Evento OnClick del
DBlookupComboBox
procedure TForm1.DBLookupComboBox1Click(Sender:
TObject);
Var codigo : Integer;
begin
codigo := Provee.fieldbyname('cod_prov').asInteger;
Query1.close;
Query1.parambyname('dato').asInteger := codigo;
Query1.Open;
end;
46
Ejemplo_Query3.dpr

Agregue un 2do. Parámetro para indicar el valor


mínimo de un producto

47
Ejemplo_Query3.dpr

La consulta realizada es

SELECT cod_prod, nombre,precio


from producto
where (Cod_prov = :dato) and
(precio >= :valor)
order by nombre

48
Ejemplo_Query3.dpr

procedure TForm1.AplicarClick(Sender: TObject);


Var codigo : Integer;
begin
codigo := Provee.fieldbyname('cod_prov').asInteger;
Query1.close;
Query1.parambyname('dato').asInteger := codigo;
Query1.parambyname('valor').asFloat :=
StrToFloat(Edit1.Text);
Query1.Open;
end;
49

También podría gustarte