2.2Editor de consultas y SQL
Lo esencial en 30 segundos
- Una consulta es una interrogación de la base; WinDev ofrece dos enfoques complementarios: el editor de consultas visual (que genera el SQL) y el SQL directo para los casos complejos.
- Los componentes SQL esenciales: SELECT (qué), FROM (dónde), WHERE (filtrar), ORDER BY (ordenar), JOIN (combinar archivos relacionados), GROUP BY + agregados (SUM, COUNT, AVG, MIN/MAX).
- Dos buenas prácticas fundamentales: hacer la consulta parametrizada (reutilizable) y filtrar en la base con WHERE en lugar de traerlo todo y ordenar después en WLangage.
Mini-caso hilado — Yacine consulta las ventas de su negocio
Yacine, desarrollador WinDev en una pyme de venta de material eléctrico en Orán, debe mostrar, junto a cada pedido, el nombre del cliente y no solo su código. Abre el editor de consultas visual, elige los archivos Commande y Client, marca los campos útiles y crea una unión sobre el código de cliente: WinDev genera el SQL, sin riesgo de error de sintaxis. Para el cuadro de mando del jefe, añade un GROUP BY con SUM para obtener la facturación por cliente. Después se da cuenta de que la consulta está escrita de forma fija sobre un periodo: la hace parametrizada ({pDateDebut, pDateFin}) para reutilizarla de un mes a otro, y procura dejar el filtrado en la base (WHERE) en lugar de traer todas las filas y ordenarlas en WLangage.
Caso autónomo de esta sección: reaparece en el curso, el esquema, el guion y el reto de 48 h de la sección 2.2.
1. Dos formas de escribir una consulta
Una consulta es una interrogación de la base: «dame los pedidos de más de 1000 € con el nombre del cliente». WinDev ofrece (1) el editor de consultas: una herramienta visual en la que se eligen los archivos, se marcan los campos y se definen condiciones, ordenaciones y agrupaciones — WinDev genera el SQL correspondiente, ideal para empezar sin errores de sintaxis; (2) el SQL directo (SELECT, FROM, WHERE, ORDER BY…), para los casos complejos o cuando se domina el lenguaje. Como HFSQL admite SQL, ambos conviven.
2. Los componentes SQL y la unión
Las nociones esenciales: SELECT (qué campos), FROM (qué archivos), WHERE (filtrar las filas), ORDER BY (ordenar). La unión (JOIN) combina varios archivos relacionados — indispensable para mostrar el nombre del cliente junto a su pedido. GROUP BY con los agregados (SUM, COUNT, AVG, MIN/MAX) produce las estadísticas y totales por categoría.
3. Reutilizar y filtrar en la base
Una consulta es reutilizable en todas partes: origen de un campo Tabla, origen de un informe o recorrida en WLangage. Dos buenas prácticas: los parámetros (la ciudad o el periodo se convierten en una variable en lugar de escribirse de forma fija — una consulta reutilizable en lugar de diez) y el filtrado en la base (dejar que el motor filtre con WHERE en lugar de traerlo todo y ordenar en WLangage: infinitamente más rápido).
🔎 Ejemplo concreto — 🔎 Ejemplo concreto — Unión y parámetros
Mostrar el nombre del cliente y calcular la facturación por cliente: Yacine escribe el SQL correspondiente.
SELECT C.NomClient, SUM(L.MontantLigne) AS ChiffreAffaires
FROM Client C
JOIN Commande CD ON CD.CodeClient = C.CodeClient
JOIN LigneCommande L ON L.NumCommande = CD.NumCommande
WHERE CD.DateCommande >= {pDateDebut} // parametre, pas en dur
GROUP BY C.NomClient
ORDER BY ChiffreAffaires DESC
Lecture : JOIN affiche le nom du client ; GROUP BY + SUM donnent le CA
Reflexe : filtrer C0TE BASE (WHERE) et parametrer la periode
Lectura: JOIN combina los archivos relacionados para mostrar el nombre del cliente; GROUP BY + SUM totalizan la facturación por cliente.
Lección: el parámetro {pDateDebut} hace la consulta reutilizable, y WHERE deja que el motor filtre en la base — mucho más rápido.
Vocabulario de la sección
- Consulta
- Una interrogación de la base: seleccionar, filtrar, ordenar y agrupar datos; reutilizable como origen de tabla, de informe o en WLangage.
Ejemplo sencillo: Yacine escribe una consulta «facturación por cliente».
Lo que no es: una simple visualización de archivo sin condición ni ordenación.
Reflejo: interrogar los datos → una consulta.
- Editor de consultas
- La herramienta visual de WinDev: se eligen los archivos, se marcan los campos y se definen condiciones, ordenaciones y agrupaciones; WinDev genera el SQL.
Ejemplo sencillo: Yacine une Client y Commande sin escribir una línea de SQL.
Lo que no es: teclear la consulta a mano en SQL directo.
Reflejo: crear visualmente y sin errores de sintaxis → el editor de consultas.
- WHERE (filtrado)
- La condición que solo conserva ciertas filas; planteada en la base, deja que el motor utilice sus índices y transmita solo lo útil.
Ejemplo sencillo: Yacine solo muestra los pedidos del periodo deseado.
Lo que no es: cargarlo todo y filtrar después en WLangage.
Reflejo: reducir el volumen transmitido → filtrar en la base con WHERE.
- Unión (JOIN)
- Combinar varios archivos relacionados en una misma consulta — indispensable para mostrar el nombre del cliente junto a su pedido.
Ejemplo sencillo: Yacine une Commande y Client por el código de cliente.
Lo que no es: mostrar solo el identificador del cliente, sin su nombre.
Reflejo: cruzar información de varios archivos → una unión.
- GROUP BY + agregados
- Agrupar para calcular estadísticas: SUM (suma), COUNT (número), AVG (media), MIN/MAX.
Ejemplo sencillo: Yacine totaliza la facturación por cliente.
Lo que no es: listar cada pedido línea a línea sin total.
Reflejo: totales por categoría → GROUP BY con agregados.
En la práctica — En la práctica — Crear y aprovechar una consulta
- Cree una consulta con el editor visual: elija los archivos, marque los campos útiles, añada las condiciones de selección y la ordenación, como Yacine.
- Añada una unión si necesita información de varios archivos relacionados (mostrar el nombre del cliente en la línea de pedido).
- Para estadísticas, utilice GROUP BY con los agregados (SUM, COUNT, AVG) — por ejemplo, la facturación por cliente o por comercial.
- Haga la consulta parametrizada (la ciudad y el periodo se convierten en parámetros) para reutilizarla, y deje que el filtrado se haga en la base (WHERE).
Guion paso a paso — escribir la consulta de Yacine (5 min)
1) Abra el editor de consultas y añada los archivos Client, Commande y LigneCommande. 2) Marque NomClient y cree una unión sobre el código de cliente. 3) Añada un GROUP BY sobre NomClient con SUM(MontantLigne) para la facturación. 4) Declare un parámetro {pDateDebut} en lugar de escribir el periodo de forma fija. 5) Deje el filtrado en la base (WHERE) y pruebe el resultado.
Esta consulta servirá de origen a un campo Tabla (2.4) y a un informe (2.3): escríbala una vez y reutilícela en todas partes.
Plantilla para copiar y pegar — mi consulta parametrizada
SELECT C.NomClient, SUM(L.MontantLigne) AS CA
FROM Client C JOIN Commande CD ON CD.CodeClient = C.CodeClient
JOIN LigneCommande L ON L.NumCommande = CD.NumCommande
WHERE CD.DateCommande >= {pDateDebut}
GROUP BY C.NomClient ORDER BY CA DESC
Regles : (1) requete parametree = reutilisable
(2) filtrage COTE BASE (WHERE) > tout ramener et trier en WLangage
Selección simple
Yacine lista los productos cuyo stock está por debajo del umbral, con un simple WHERE, sin unión.
Unión de cliente
Yacine muestra el nombre del cliente junto a cada pedido uniendo Commande y Client.
Estadísticas por comercial
Yacine agrupa con GROUP BY y SUM para la facturación por comercial.
Consulta parametrizada
Yacine sustituye el periodo escrito de forma fija por {pDateDebut, pDateFin}: la consulta sirve cada mes.
✓ Buenas prácticas
- Empezar por el editor visual: genera el SQL sin errores de sintaxis.
- Utilizar una unión para mostrar la información relacionada (nombre del cliente).
- Parametrizar la consulta y filtrar en la base (WHERE).
✗ Errores frecuentes
- Traerlo todo y ordenar después en WLangage (saturación de red/memoria).
- Escribir los criterios de forma fija en lugar de parametrizar la consulta.
- Olvidar la unión y mostrar solo el código de cliente.
Puntos clave
- Dos enfoques complementarios: editor de consultas visual (genera el SQL) y SQL directo.
- Nociones clave: SELECT, FROM, WHERE, ORDER BY, JOIN, GROUP BY + agregados (SUM, COUNT, AVG, MIN/MAX).
- Una consulta es reutilizable como origen de tabla, de informe o recorrida en WLangage.
- Buenas prácticas: consultas parametrizadas y filtrado en la base (WHERE).
Reto 48 h — aplícalo mañana
Como Yacine, cree una consulta que una dos archivos relacionados (por ejemplo, pedidos y clientes) para mostrar el nombre del cliente, y luego añada un GROUP BY con SUM para un total por cliente. Convierta por último el periodo en un parámetro {pDateDebut} y explique en una frase por qué filtrar en la base es más rápido que traerlo todo y ordenar en WLangage.
- Creo una consulta con el editor visual y leo el SQL generado.
- Sé utilizar una unión y agregados (GROUP BY, SUM).
- Parametrizo mis consultas y filtro en la base.
Preguntas frecuentes
¿Por qué hay que filtrar en la base en lugar de traer todos los datos?
Porque el motor utiliza sus índices y solo transmite las filas útiles, mientras que traerlo todo satura la red y la memoria para acabar descartando la mayoría de los datos — el error de rendimiento más frecuente. Ponga las condiciones en la consulta (WHERE), haga que la base ordene (ORDER BY) y delegue los agregados.
¿Basta con el editor de consultas o hay que escribir SQL directo?
El editor visual basta para la gran mayoría de las necesidades (selección, filtros, ordenaciones, uniones, agrupaciones) y genera el SQL sin errores de sintaxis. El SQL directo sirve para los casos complejos o cuando se desea un control fino; ambos enfoques conviven, ya que HFSQL admite SQL.
¿Por qué hay que filtrar en la base en lugar de traer todos los datos?