Lenguaje deConsulta
EstructuradoSQL
Parte 1
SQL –
Introducción
Structured Query Language (Lenguaje de
Consulta Estructurado)
Es el lenguaje más usado para bases de datos
relacionales.
Lenguaje declarativo de alto nivel.
Desarrollado por IBM (1974-1977).
Se convirtió en un standard definido por :
ANSI (American National Standards Institute) e
ISO (International Standards Organization)
C. Román 2
SQL -
Introducción
Las Sentencias del SQL se dividen en:
Sentencias DDL (Data Definition Language):
Permiten crear/modificar/borrar estructuras de
datos.
Sentencias DML (Data Manipulation
Languaje): para manipular datos
También provee sentencias para:
Definir permisos (control de acceso de usuarios)
Manejo de transacciones
Otros
C. Román 3
SQL -
Introducción
Términos a utilizar
tabla → relación
fila → tupla
columna → atributo
C. Román 4
Tipos de datos
SQLANSI/ISO
Integer: Números enteros.
Float: Números reales, en coma flotante.
Char: Cadenas de texto de longitud fija.
Varchar: Cadena de texto de longitud variable.
Date: fecha que contiene el año (de cuatro
cifras), el mes y el día.
Time: La hora del día en horas, minutos y
segundos (el valor predeterminado es 0).
Datetime: Combinación de Date yTime.
C. Román 5
Sentencias DML
C. Román 6
SELECT
Recupera datos (filas, columnas) de la base de
datos y los devuelve en forma de resultados de
la consulta, su sintaxis es:
SELECT [ALL/DISTINCT] lista_select
FROM tabla [alias tabla] [,...]
[WHERE condicion]
[GROUP BY lista_columna]
[HAVING condicion]
[ORDER BY nombre_columna [ASC/DESC] [,...]
C. Román 7
SELECT
FROM
La cláusula SELECT lista los datos a recuperar.
La cláusula FROM lista las tablas que contienen
los datos a recuperar.
Ejemplo:
-- Lista los códigos y nombres de la tabla
empleado
SELECT empCod, empNombre
FROM empleado
C. Román 8
Columnas
calculadas
Para calcular columnas se definen expresiones
aritméticas, que incluyan: sumas, restas,
multiplicaciones, divisiones, paréntesis.
Ejemplo:
--Calcula horas trabajadas * pago por hora
SELECT empApPat, empHorasTrabajo,
(empHorasTrabajo*empPagoHora)
FROM empleado
C. Román 9
SELECT *
•Se utiliza el * para acceder a todas
las columnas.
• Ejemplo:
-- Lista todos los datos de empleado
SELECT *
FROM empleado
C. Román 10
DISTINCT
•DISTINCT se utiliza para eliminar filas
duplicadas de los resultados de la consulta.
• Ejemplo:
-- Lista las zonas de empleados, sin incluir zonas
repetidas
SELECT DISTINCT empZona
FROM empleado
C. Román 11
WHERE
La cláusula WHERE indica que se consideren
solo las filas que cumplen con una condición de
búsqueda.
Ejemplo:
-- Lista los datos de empleados de la Sucursal 1
SELECT *
FROM empleado
WHERE empSucursal=1
C. Román 12
WHERE
Operadores de
comparación
Con la cláusula WHERE se utilizan operadores
de comparación que comparan los valores de
dos expresiones.
Los operadores son = , <, >, <= , >=, <>
(diferente)
También se usan AND (Y), OR (O), NOT (NO)
para condiciones de búsqueda compuestas.
Ejemplos:
-- Lista los datos de empleados con un
descuento mayor al 10% del sueldo
SELECT *
FROM empleado
WHERE empDescuento>(empSueldo* 0.10)
C. Román 13
WHERE
Operadores de
comparación
Ejemplos:
-- Lista los datos de empleados contratados antes
del 10/1/2017
SELECT *
FROM empleado
WHERE empContrato< ‘10/1/2017’
-- Lista los datos de empleados con el apellido Perez
y que tengan mas de 5 años de antiguedad
SELECT *
FROM empleado
WHERE empApPaterno=‘Perez’AND
empAntiguedad>5
C. Román 14
BETWEEN
Comprueba si un valor de datos se encuentra
entre dos valores especificados.
Ejemplo:
--Lista los datos de empleados con un sueldo
entre 4000 y 7000
SELECT *
FROM empleado
WHERE empSalario BETWEEN 4000 AND 7000
C. Román 15
IN
Comprueba si un valor de datos se encuentra
entre los valores de un conjunto.
Ejemplo:
--Lista los datos de empleados de las sucursales
1, 2 y 5
SELECT *
FROM empleado
WHERE empSucursal IN (1, 2, 5)
C. Román 16
LIKE
Comprueba si una columna de texto se
corresponde con un cierto texto en particular.
Se utilizan los caracteres comodines:
% para la correspondencia con cualquier secuencia
de cero o más caracteres.
_ para la correspondencia con un carácter.
Ejemplo:
--Lista los datos de empleados cuyo apellido
comience con Pe
SELECT *
FROM empleado
WHERE empApPaterno LIKE ‘Pe%’
C. Román 17
IS NULL
IS NOT NULL
La prueba de valor nulo IS NULL verifica que se
tenga el valor nulo (NULL).
La prueba IS NOT NULL verifica que no se
tenga el valor nulo.
Ejemplo:
--Lista los datos de empleados que no tienen
teléfonos registrados
SELECT *
FROM empleado
WHERE empTelefono IS NULL
C. Román 18
Condiciones de
búsqueda
compuestas
Se pueden combinar condiciones de
búsqueda simple para formar otras más
complejas, utilizando OR, AND, NOT.
OR se utiliza para combinar condiciones de
búsqueda cuando por lo menos una deba ser
verdadera.
AND se utiliza para combinar condiciones de
búsqueda cuando todas deban ser
verdaderas.
NOT se utiliza cuando la condición de
búsqueda deba ser falsa.
C. Román 19
Condiciones de
búsqueda
compuestas
Se utilizan paréntesis para agrupar los criterios
de búsqueda.
Ejemplo:
SELECT *
FROM ventas
WHERE (nroOficina IN (100,102,105))
OR (nombreDirector IS NULL AND salario<8000)
C. Román 20
CláusulaORDER
BY
Ordena los resultados de una consulta por una
o varias columnas, para varias columnas la
primera es la clave de ordenación mayor, y las
siguientes serán de ordenación menor.
Por defecto la ordenación es ascendente, para
la ordenación descendente se utiliza la cláusula
DESC.
Ejemplo
SELECT *
FROM ventas
ORDER BY departamento, ciudad DESC
C. Román 21
Consultas con
predicado
ALL Devuelve todos los campos de la tabla.
TOP Devuelve un determinado número de
registros de la tabla.
DISTINCT Omite los registros cuyos campos
seleccionados coincidan totalmente.
DISTINCTROW Omite los registros
duplicados en la totalidad del registro y no
sólo en los campos seleccionados.
Ejemplo
SELECTTOP 10 *
FROM ventas
C. Román 22
Alias
Permite asignar un nombre a alguna columna
determinada del resultado de una consulta.
Se utiliza la palabra reservada AS.
Ejemplo
SELECT nomVen AS nombreVendedor
FROM ventas
C. Román 23
Consultas
sumarias
Se pueden realizar cálculos de datos mediante
las funciones de columna:
SUM() calcula la suma
AVG() calcula el promedio
MIN() calcula el mínimo
MAX() calcula el máximo
COUNT() cuenta el número de valores
COUNT(*) cuenta las filas de resultados
C. Román 24
Función SUM
Devuelve la suma del conjunto de valores
contenido en un campo específico de una
consulta. Su sintaxis es:
SELECT SUM (EXPR) FROMTABLA
Ejemplo
SELECT SUM(importeVenta)
FROM ventas
C. Román 25
AVG
Calcula el promedio (media aritmética) de un
conjunto de valores contenido en un campo
especificado de una consulta. Su sintaxis es la
siguiente:
SELECT AVG(EXPR) FROMTABLA
Ejemplo
SELECT AVG(importeVenta)
FROM ventas
C. Román 26
MIN, MAX
Devuelven el mínimo o el máximo de un
conjunto de valores CONTENIDO en un campo
especifico de una consulta. Su sintaxis es la
siguiente:
SELECT MIN(EXPR) FROMTABLA
SELECT MAX(EXPR) FROMTABLA
Ejemplo
SELECT MAX(importeVenta),
MIN(importeVenta)
FROM ventas
C. Román 27
COUNT
Calcula el número de registros devueltos por
una consulta. Su sintaxis es la siguiente:
SELECT COUNT(EXPR) FROMTABLA
Ejemplo
SELECT COUNT(importeVenta)
FROM ventas
WHERE importeVenta>10000
C. Román 28
COUNT(*)
Cuenta las filas resultantes de una consulta.
Ejemplo
SELECT COUNT(*)
FROM ventas
WHERE importeVenta>10000
C. Román 29
CláusulaGROUP
BY
Agrupa los registros con valores
idénticos, en la lista de campos
especificados, en un único registro.
Su sintaxis es la siguiente:
SELECT campos
FROM tabla
WHERE criterio
GROUP BY campos del grupo
C. Román 30
CláusulaGROUP
BY
Ejemplo
SELECT nombreCliente, SUM(importeVenta)
FROM ventas
GROUP BY nombreCliente
C. Román 31
Cláusula
HAVING
Una vez que los registros se han
agrupado utilizando GROUP BY,
HAVING determina cuáles de ellos se
van a mostrar. Su sintaxis es la
siguiente:
SELECT campos
FROM tabla
WHERE criterio
GROUP BY campos del grupo
HAVING condición
C. Román 32
Cláusula
HAVING
Ejemplo
SELECT nombreCliente, SUM(importeVenta)
FROM ventas
GROUP BY nombreCliente
HAVING AVG(importeVenta)>10000
C. Román 33
UNION
Combina los resultados de
dos o mas consultas en una
tabla de resultados, en la
que se tendrán las tuplas
resultantes de las consultas
(una o ambas).
Para aplicar la unión ambas
tablas deben contener el
mismo número de
columnas. Los tipos de
datos en las columnas
correspondientes deben
coincidir en ambas tablas.
Las tablas no pueden estar
ordenadas con ORDER BY,
pero si el resultado.
C. Román 34
Ejemplo.
SELECT idFabricante, idProducto
FROM productos
WHERE precio>2000
UNION
SELECT fabricante, producto
FROM pedidos
WHERE importe>3000
ORDER BY 1
C. Román 35
INTERSECT
Combina los resultados de
dos o mas consultas en una
tabla de resultados, en la
que se tendrán las tuplas
que coincidan en ambas
consultas.
Para aplicar la intersección
ambas tablas deben
contener el mismo número
de columnas. Los tipos de
datos en las columnas
correspondientes deben
coincidir en ambas tablas.
Las tablas no pueden estar
ordenadas con ORDER BY,
pero si el resultado.
C. Román 36
EXCEPT
Combina los resultados de
dos o mas consultas en una
tabla de resultados, en la
que se tendrán las tuplas
resultantes de una consulta
que no aparezcan en la
otra consulta.
Para aplicar except ambas
tablas deben contener el
mismo número de
columnas. Los tipos de
datos en las columnas
correspondientes deben
coincidir en ambas tablas.
Las tablas no pueden estar
ordenadas con ORDER BY,
pero si el resultado.
C. Román 37
Consultas en varias tablas
Reunión
(combinación)
interna
INNER JOIN
La cláusula INNER combina registros
de dos tablas siempre que haya
concordancia de valores en un
campo común. Su sintaxis es la
siguiente:
SELECT campos
FROM tabla1
INNER JOIN tabla2
ON tabla1.campo1 op_comp tabla2.campo2
C. Román 39
Reunión interna
de varias tablas
Se debe especificar una condición de reunión
para cada par de tablas.
Ejemplo
SELECT ventas.monto, ventas.ciudad, cliente.
nombre, vendedor. nombre
FROM ventas INNER JOIN cliente
ON ventas.idVendedor=cliente.idVendedor
INNER JOIN vendedor
ON cliente.idVendedor=vendedor.idVendedor
WHERE ventas.ciudad=‘La Paz’
C. Román 40
Reunión externa
izquierda
LEFTJOIN
Operación de reunión que conecta todas las
relaciones de la tabla izquierda con los datos de
la tabla derecha.
Ejemplo.
SELECT codProd, codVend, nombreVend
FROM vendedor LEFT JOIN producto
ON vendedor.codVend=producto.codVend
C. Román 41
Reunión externa
derecha
RIGHT JOIN
Operación de reunión que conecta todas las
relaciones de la tabla derecha con los datos de
la tabla izquierda.
Ejemplo.
SELECT codProd, codVend, nombreVend
FROM vendedor LEFT JOIN producto
ON vendedor.codVend=producto.codVend
C. Román 42

SQL Parte 1.pdf

  • 1.
  • 2.
    SQL – Introducción Structured QueryLanguage (Lenguaje de Consulta Estructurado) Es el lenguaje más usado para bases de datos relacionales. Lenguaje declarativo de alto nivel. Desarrollado por IBM (1974-1977). Se convirtió en un standard definido por : ANSI (American National Standards Institute) e ISO (International Standards Organization) C. Román 2
  • 3.
    SQL - Introducción Las Sentenciasdel SQL se dividen en: Sentencias DDL (Data Definition Language): Permiten crear/modificar/borrar estructuras de datos. Sentencias DML (Data Manipulation Languaje): para manipular datos También provee sentencias para: Definir permisos (control de acceso de usuarios) Manejo de transacciones Otros C. Román 3
  • 4.
    SQL - Introducción Términos autilizar tabla → relación fila → tupla columna → atributo C. Román 4
  • 5.
    Tipos de datos SQLANSI/ISO Integer:Números enteros. Float: Números reales, en coma flotante. Char: Cadenas de texto de longitud fija. Varchar: Cadena de texto de longitud variable. Date: fecha que contiene el año (de cuatro cifras), el mes y el día. Time: La hora del día en horas, minutos y segundos (el valor predeterminado es 0). Datetime: Combinación de Date yTime. C. Román 5
  • 6.
  • 7.
    SELECT Recupera datos (filas,columnas) de la base de datos y los devuelve en forma de resultados de la consulta, su sintaxis es: SELECT [ALL/DISTINCT] lista_select FROM tabla [alias tabla] [,...] [WHERE condicion] [GROUP BY lista_columna] [HAVING condicion] [ORDER BY nombre_columna [ASC/DESC] [,...] C. Román 7
  • 8.
    SELECT FROM La cláusula SELECTlista los datos a recuperar. La cláusula FROM lista las tablas que contienen los datos a recuperar. Ejemplo: -- Lista los códigos y nombres de la tabla empleado SELECT empCod, empNombre FROM empleado C. Román 8
  • 9.
    Columnas calculadas Para calcular columnasse definen expresiones aritméticas, que incluyan: sumas, restas, multiplicaciones, divisiones, paréntesis. Ejemplo: --Calcula horas trabajadas * pago por hora SELECT empApPat, empHorasTrabajo, (empHorasTrabajo*empPagoHora) FROM empleado C. Román 9
  • 10.
    SELECT * •Se utilizael * para acceder a todas las columnas. • Ejemplo: -- Lista todos los datos de empleado SELECT * FROM empleado C. Román 10
  • 11.
    DISTINCT •DISTINCT se utilizapara eliminar filas duplicadas de los resultados de la consulta. • Ejemplo: -- Lista las zonas de empleados, sin incluir zonas repetidas SELECT DISTINCT empZona FROM empleado C. Román 11
  • 12.
    WHERE La cláusula WHEREindica que se consideren solo las filas que cumplen con una condición de búsqueda. Ejemplo: -- Lista los datos de empleados de la Sucursal 1 SELECT * FROM empleado WHERE empSucursal=1 C. Román 12
  • 13.
    WHERE Operadores de comparación Con lacláusula WHERE se utilizan operadores de comparación que comparan los valores de dos expresiones. Los operadores son = , <, >, <= , >=, <> (diferente) También se usan AND (Y), OR (O), NOT (NO) para condiciones de búsqueda compuestas. Ejemplos: -- Lista los datos de empleados con un descuento mayor al 10% del sueldo SELECT * FROM empleado WHERE empDescuento>(empSueldo* 0.10) C. Román 13
  • 14.
    WHERE Operadores de comparación Ejemplos: -- Listalos datos de empleados contratados antes del 10/1/2017 SELECT * FROM empleado WHERE empContrato< ‘10/1/2017’ -- Lista los datos de empleados con el apellido Perez y que tengan mas de 5 años de antiguedad SELECT * FROM empleado WHERE empApPaterno=‘Perez’AND empAntiguedad>5 C. Román 14
  • 15.
    BETWEEN Comprueba si unvalor de datos se encuentra entre dos valores especificados. Ejemplo: --Lista los datos de empleados con un sueldo entre 4000 y 7000 SELECT * FROM empleado WHERE empSalario BETWEEN 4000 AND 7000 C. Román 15
  • 16.
    IN Comprueba si unvalor de datos se encuentra entre los valores de un conjunto. Ejemplo: --Lista los datos de empleados de las sucursales 1, 2 y 5 SELECT * FROM empleado WHERE empSucursal IN (1, 2, 5) C. Román 16
  • 17.
    LIKE Comprueba si unacolumna de texto se corresponde con un cierto texto en particular. Se utilizan los caracteres comodines: % para la correspondencia con cualquier secuencia de cero o más caracteres. _ para la correspondencia con un carácter. Ejemplo: --Lista los datos de empleados cuyo apellido comience con Pe SELECT * FROM empleado WHERE empApPaterno LIKE ‘Pe%’ C. Román 17
  • 18.
    IS NULL IS NOTNULL La prueba de valor nulo IS NULL verifica que se tenga el valor nulo (NULL). La prueba IS NOT NULL verifica que no se tenga el valor nulo. Ejemplo: --Lista los datos de empleados que no tienen teléfonos registrados SELECT * FROM empleado WHERE empTelefono IS NULL C. Román 18
  • 19.
    Condiciones de búsqueda compuestas Se puedencombinar condiciones de búsqueda simple para formar otras más complejas, utilizando OR, AND, NOT. OR se utiliza para combinar condiciones de búsqueda cuando por lo menos una deba ser verdadera. AND se utiliza para combinar condiciones de búsqueda cuando todas deban ser verdaderas. NOT se utiliza cuando la condición de búsqueda deba ser falsa. C. Román 19
  • 20.
    Condiciones de búsqueda compuestas Se utilizanparéntesis para agrupar los criterios de búsqueda. Ejemplo: SELECT * FROM ventas WHERE (nroOficina IN (100,102,105)) OR (nombreDirector IS NULL AND salario<8000) C. Román 20
  • 21.
    CláusulaORDER BY Ordena los resultadosde una consulta por una o varias columnas, para varias columnas la primera es la clave de ordenación mayor, y las siguientes serán de ordenación menor. Por defecto la ordenación es ascendente, para la ordenación descendente se utiliza la cláusula DESC. Ejemplo SELECT * FROM ventas ORDER BY departamento, ciudad DESC C. Román 21
  • 22.
    Consultas con predicado ALL Devuelvetodos los campos de la tabla. TOP Devuelve un determinado número de registros de la tabla. DISTINCT Omite los registros cuyos campos seleccionados coincidan totalmente. DISTINCTROW Omite los registros duplicados en la totalidad del registro y no sólo en los campos seleccionados. Ejemplo SELECTTOP 10 * FROM ventas C. Román 22
  • 23.
    Alias Permite asignar unnombre a alguna columna determinada del resultado de una consulta. Se utiliza la palabra reservada AS. Ejemplo SELECT nomVen AS nombreVendedor FROM ventas C. Román 23
  • 24.
    Consultas sumarias Se pueden realizarcálculos de datos mediante las funciones de columna: SUM() calcula la suma AVG() calcula el promedio MIN() calcula el mínimo MAX() calcula el máximo COUNT() cuenta el número de valores COUNT(*) cuenta las filas de resultados C. Román 24
  • 25.
    Función SUM Devuelve lasuma del conjunto de valores contenido en un campo específico de una consulta. Su sintaxis es: SELECT SUM (EXPR) FROMTABLA Ejemplo SELECT SUM(importeVenta) FROM ventas C. Román 25
  • 26.
    AVG Calcula el promedio(media aritmética) de un conjunto de valores contenido en un campo especificado de una consulta. Su sintaxis es la siguiente: SELECT AVG(EXPR) FROMTABLA Ejemplo SELECT AVG(importeVenta) FROM ventas C. Román 26
  • 27.
    MIN, MAX Devuelven elmínimo o el máximo de un conjunto de valores CONTENIDO en un campo especifico de una consulta. Su sintaxis es la siguiente: SELECT MIN(EXPR) FROMTABLA SELECT MAX(EXPR) FROMTABLA Ejemplo SELECT MAX(importeVenta), MIN(importeVenta) FROM ventas C. Román 27
  • 28.
    COUNT Calcula el númerode registros devueltos por una consulta. Su sintaxis es la siguiente: SELECT COUNT(EXPR) FROMTABLA Ejemplo SELECT COUNT(importeVenta) FROM ventas WHERE importeVenta>10000 C. Román 28
  • 29.
    COUNT(*) Cuenta las filasresultantes de una consulta. Ejemplo SELECT COUNT(*) FROM ventas WHERE importeVenta>10000 C. Román 29
  • 30.
    CláusulaGROUP BY Agrupa los registroscon valores idénticos, en la lista de campos especificados, en un único registro. Su sintaxis es la siguiente: SELECT campos FROM tabla WHERE criterio GROUP BY campos del grupo C. Román 30
  • 31.
  • 32.
    Cláusula HAVING Una vez quelos registros se han agrupado utilizando GROUP BY, HAVING determina cuáles de ellos se van a mostrar. Su sintaxis es la siguiente: SELECT campos FROM tabla WHERE criterio GROUP BY campos del grupo HAVING condición C. Román 32
  • 33.
    Cláusula HAVING Ejemplo SELECT nombreCliente, SUM(importeVenta) FROMventas GROUP BY nombreCliente HAVING AVG(importeVenta)>10000 C. Román 33
  • 34.
    UNION Combina los resultadosde dos o mas consultas en una tabla de resultados, en la que se tendrán las tuplas resultantes de las consultas (una o ambas). Para aplicar la unión ambas tablas deben contener el mismo número de columnas. Los tipos de datos en las columnas correspondientes deben coincidir en ambas tablas. Las tablas no pueden estar ordenadas con ORDER BY, pero si el resultado. C. Román 34
  • 35.
    Ejemplo. SELECT idFabricante, idProducto FROMproductos WHERE precio>2000 UNION SELECT fabricante, producto FROM pedidos WHERE importe>3000 ORDER BY 1 C. Román 35
  • 36.
    INTERSECT Combina los resultadosde dos o mas consultas en una tabla de resultados, en la que se tendrán las tuplas que coincidan en ambas consultas. Para aplicar la intersección ambas tablas deben contener el mismo número de columnas. Los tipos de datos en las columnas correspondientes deben coincidir en ambas tablas. Las tablas no pueden estar ordenadas con ORDER BY, pero si el resultado. C. Román 36
  • 37.
    EXCEPT Combina los resultadosde dos o mas consultas en una tabla de resultados, en la que se tendrán las tuplas resultantes de una consulta que no aparezcan en la otra consulta. Para aplicar except ambas tablas deben contener el mismo número de columnas. Los tipos de datos en las columnas correspondientes deben coincidir en ambas tablas. Las tablas no pueden estar ordenadas con ORDER BY, pero si el resultado. C. Román 37
  • 38.
  • 39.
    Reunión (combinación) interna INNER JOIN La cláusulaINNER combina registros de dos tablas siempre que haya concordancia de valores en un campo común. Su sintaxis es la siguiente: SELECT campos FROM tabla1 INNER JOIN tabla2 ON tabla1.campo1 op_comp tabla2.campo2 C. Román 39
  • 40.
    Reunión interna de variastablas Se debe especificar una condición de reunión para cada par de tablas. Ejemplo SELECT ventas.monto, ventas.ciudad, cliente. nombre, vendedor. nombre FROM ventas INNER JOIN cliente ON ventas.idVendedor=cliente.idVendedor INNER JOIN vendedor ON cliente.idVendedor=vendedor.idVendedor WHERE ventas.ciudad=‘La Paz’ C. Román 40
  • 41.
    Reunión externa izquierda LEFTJOIN Operación dereunión que conecta todas las relaciones de la tabla izquierda con los datos de la tabla derecha. Ejemplo. SELECT codProd, codVend, nombreVend FROM vendedor LEFT JOIN producto ON vendedor.codVend=producto.codVend C. Román 41
  • 42.
    Reunión externa derecha RIGHT JOIN Operaciónde reunión que conecta todas las relaciones de la tabla derecha con los datos de la tabla izquierda. Ejemplo. SELECT codProd, codVend, nombreVend FROM vendedor LEFT JOIN producto ON vendedor.codVend=producto.codVend C. Román 42