|
|
Línea 277: |
Línea 277: |
| </source> | | </source> |
| }} | | }} |
− |
| |
− |
| |
− |
| |
− | ===SELECT===
| |
− | *Esta es una claúsula especial a la que le vamos a dedicar bastante tiempo.
| |
− | *Consiste en hacer consultas de nuestro conjunto de datos y poder recuperarlos.
| |
− | *La cantidad de consultas que se pueden realizar es muy grande y variado, siempre que se pueda establecer la consulta y la lógica matemática de su resolución, va a haber una sentencia SQL que permita implementarla.
| |
− | Esta sentencia que empieza por la claúsual SELECT va a terner hasta 5 posibles claúsulas, de las cuales solo son obligatorias las dos primeras
| |
− | <source lang=SQL>
| |
− | SELECT
| |
− | FROM
| |
− | </source>
| |
− | Las 5 posibles que estudaremos son
| |
− | <source lang=SQL>
| |
− | SELECT
| |
− | FROM
| |
− | WHERE
| |
− | GROUP BY
| |
− | HAVING
| |
− | (ORDER BY)
| |
− | </source>
| |
− | {{MRM_Clave|Title=Importante (lo estudiaremos)|
| |
− | *'''''Having''''' solo se usa como opción en el '''group by'''.
| |
− | *'''''Order by''''' es un criterio de ordenación y no se considera como cláusula propiamente dicho
| |
− | }}
| |
− | *Usando el álgebra relacional y permite recuperar un subconjunto de los datos de la base de datos.
| |
− | *Esta sentencia devuelve un conjunto de tuplas como resultado de ejecutar la consulta.
| |
− | *Las operaciones del algebra relacional son
| |
− |
| |
− | ;Proyecciones
| |
− | ;Selecciones
| |
− | ;Producto cartesiano
| |
− | ;Join
| |
− |
| |
− | ====Claúsula Select====
| |
− | [[Archivo:dml_select_t1.png]]<br />
| |
− | <hr />
| |
− | [[Archivo:dml_select_t2.png]]<br />
| |
− | <hr />
| |
− | [[Archivo:dml_select_t3.png]]<br />
| |
− | <hr />
| |
− | [[Archivo:dml_select_t4.png]]<br />
| |
− | <hr />
| |
− | [[Archivo:dml_select_t5.png]]<br />
| |
− | <hr />
| |
− | [[Archivo:dml_select_t6.png]]<br />
| |
− | <hr />
| |
− | [[Archivo:dml_select_t7.png]]<br />
| |
− | <hr />
| |
− | [[Archivo:dml_select_t8.png]]<br />
| |
− | <hr />
| |
− | [[Archivo:dml_select_t9.png]]<br />
| |
− | <hr />
| |
− | [[Archivo:dml_select_t10.png]]<br />
| |
− | <hr />
| |
− | ;Uso de funciones
| |
− | *Podemos usar funciones sobre todas las filas y obtener el resultado.
| |
− | *Algunas funciones típicas son
| |
− | ;Funciones de carácter
| |
− | [[Archivo:dml_func_01.png]]<br />
| |
− | <hr />
| |
− | ;Descripción de las funciones
| |
− | [[Archivo:dml_func_02.png]]<br />
| |
− | [[Archivo:dml_func_03.png]]<br />
| |
− | ;Ejemplos
| |
− | [[Archivo:dml_func_04.png]]<br />
| |
− | [[Archivo:dml_func_05.png]]<br />
| |
− | <hr />
| |
− | ;Funciones con valores numércios
| |
− | [[Archivo:dml_func_06.png]]<br />
| |
− | [[Archivo:dml_func_07.png]]<br />
| |
− | <hr />
| |
− | ;Funciones con fechas
| |
− | [[Archivo:dml_func_08.png]]<br />
| |
− | [[Archivo:dml_func_09.png]]<br />
| |
− | [[Archivo:dml_func_10.png]]<br />
| |
− | ====Funciones de agregación o grupo====
| |
− | *Son funciones que se aplican a un conjunto de valores de diferentes filas
| |
− | *Nos darán como resultado un sólo valor
| |
− | *Conviene renombrar la columna
| |
− | [[Archivo:dml_func_11.png]]<br />
| |
− | [[Archivo:dml_func_12.png]]<br />
| |
− | [[Archivo:dml_func_13.png]]<br />
| |
− | {{MRM_Actividad|Title=Realiza las siguientes consultas|
| |
− | *El usuario que más cobra
| |
− | *El trabajo más remunerado
| |
− | *La remuneración media, en número de trabajos y el que más y menos se paga
| |
− | *El empleado con la fecha de contratación mayor y menor
| |
− | *El total de comisiones pagadas a los empleados
| |
− | }}
| |
− |
| |
− | ===From===
| |
− | *Esta es una operación de un producto cartesiano
| |
− | *El producto cartesiano consiste en juntar todas las tuplas de una relación con cada una de las tuplas de otra
| |
− | *Genera gran cantidad de información, por ese motivo los gestores de bases de datos intentan hacerlo lo último
| |
− | {{MRM_Actividad|Title=probar from|
| |
− | *Realiza un producto cartesiano entre empleados y departamentos
| |
− | }}
| |
− | *En el from además de una relación o tabla, puede ir cualquier cosa que me devuelva una relación, incluso una consulta
| |
− | {{MRM_Actividad|Title=probar from|
| |
− | Realiza un producto cartesiano entre empleados y departamentos, solo nombres, y fuérzalo en el from.
| |
− | }}
| |
− | ===Where===
| |
− | *La claúsura '''''where''''' establece la operación de selección.
| |
− | *Es decir de todas las filas, indica cuales son las que queremos seleccionar.
| |
− | [[Archivo:where1.png]]<br />
| |
− | *En esta claúsura, utiliza operadores de comparación para establecer el criterio de las filas seleccionadas
| |
− | [[Archivo:dml_func_14.png]]<br />
| |
− | [[Archivo:dml_func_15.png]]<br />
| |
− | [[Archivo:dml_func_16.png]]<br />
| |
− | [[Archivo:dml_func_17.png]]<br />
| |
− | [[Archivo:dml_func_18.png]]<br />
| |
− | [[Archivo:dml_func_19.png]]<br />
| |
− | [[Archivo:dml_func_20.png]]<br />
| |
− | [[Archivo:dml_func_31.png]]<br />
| |
− | [[Archivo:dml_func_22.png]]<br />
| |
− | <hr />
| |
− |
| |
− | ====Ejercicios select/from/where con funciones ====
| |
− | <br />
| |
− | {{MRM_Actividad|Title=Realiza las siguientes consultas|
| |
− |
| |
− | [[Archivo:ej1_query.png]]
| |
− | *En este caso JOB_ID nos da el tipo de trabajo
| |
− | Secretari@ es el tipo '''''ST_CLERK'''''
| |
− | <source lang=sql>
| |
− | mysql> SELECT *
| |
− | FROM EMPLOYEES
| |
− | WHERE JOB_ID ="ST_CLERK"
| |
− | AND
| |
− | HIRE_DATE>"1997-12-31";
| |
− | </source>
| |
− | <hr />
| |
− | [[Archivo:ej2_query.png]]
| |
− |
| |
− | <source lang=sql>
| |
− | SELECT LAST_NAME, JOB_ID,SALARY, COMMISSION_PCT
| |
− | FROM EMPLOYEES
| |
− | WHERE COMMISSION_PCT IS NOT NULL
| |
− | ORDER BY LAST_NAME DESC;
| |
− | </source>
| |
− |
| |
− | <hr />
| |
− | [[Archivo:ej3_query.png]]
| |
− | <source lang=sql>
| |
− | SELECT 'El salario de '||Last_name||
| |
− | 'va a ser con un incremento del 10% de '||
| |
− | round(Salary *1.10) ||
| |
− | ' dólares' as "Nuevo Salario"
| |
− | FROM EMPLOYEES
| |
− | where COMMISSION_pCT IS NULL
| |
− |
| |
− | </source>
| |
− | <hr />
| |
− | [[Archivo:ej4_query.png]]
| |
− | <source lang=sql>
| |
− | select last_name,
| |
− | trunc(months_between(sysdate, hire_date)/12) as "años",
| |
− | trunc(mod(months_between(sysdate, hire_date),12))as "meses"
| |
− | from employees
| |
− | order by hire_date;
| |
− | </source>
| |
− | <hr />
| |
− | [[Archivo:ej5.png]]
| |
− | <source lang=sql>
| |
− | select *
| |
− | from empleados
| |
− | where substr(last_name,1,1) in ('J', 'K', 'L', 'M')
| |
− |
| |
− | </source>
| |
− | <hr />
| |
− | [[Archivo:ej6.png]]
| |
− | <source lang=sql>
| |
− |
| |
− | select last_name, salary,
| |
− | decode (commission_pct,NULL, 'No' ,
| |
− | 'Yes') as "comisión"
| |
− | from employees
| |
− |
| |
− | </source>
| |
− | <hr />
| |
− | [[Archivo:ej7.png]]
| |
− | <source lang=sql>
| |
− |
| |
− |
| |
− | select department_name, location_id,job_id, salary
| |
− | from departments d, employees e
| |
− | where d.department_id = e.department_id
| |
− | and
| |
− | location_id = '&localizacion';
| |
− | </source>
| |
− | <hr />
| |
− | [[Archivo:ej8.png]]
| |
− | <source lang=sql>
| |
− | SELECT COUNT(*)
| |
− | FROM employees
| |
− | WHERE last_name LIKE '%n';
| |
− | --or
| |
− | SELECT COUNT(*)
| |
− | FROM employees
| |
− | WHERE SUBSTR(last_name, -1) = 'n';
| |
− | </source>
| |
− | <hr />
| |
− | [[Archivo:ej10.png]]
| |
− | <source lang=sql>
| |
− | SELECT DISTINCT job_id
| |
− | FROM employees
| |
− | WHERE department_id IN (10, 20);
| |
− | </source>
| |
− | <hr />
| |
− | [[Archivo:ej12.png]]
| |
− | <source lang=sql>
| |
− | SELECT last_name, hire_date
| |
− | FROM employees
| |
− | WHERE TO_CHAR(hire_date, 'DD') < 16;
| |
− | </source>
| |
− | <hr />
| |
− | [[Archivo:ej13.png]]
| |
− | <source lang=sql>
| |
− | SELECT last_name, salary, TRUNC(salary, -3)/1000
| |
− | FROM employees;
| |
− | </source>
| |
− | <hr />
| |
− | [[Archivo:ej14.png]]
| |
− | <source lang=sql>
| |
− | SELECT e.last_name, m.last_name manager, m.salary,
| |
− | j.grade_level
| |
− | FROM employees e JOIN employees m
| |
− | ON e.manager_id = m.employee_id
| |
− | JOIN job_grades j
| |
− | ON m.salary BETWEEN j.lowest_sal AND j.highest_sal
| |
− | AND m.salary > 15000;
| |
− | </source>
| |
− | <hr />
| |
− | [[Archivo:ej21.png]]
| |
− | <source lang=sql>
| |
− | SELECT last_name, TO_CHAR(hire_date, 'Month DD') BIRTHDAY
| |
− | FROM employees
| |
− | ORDER BY TO_CHAR(hire_date, 'DDD');
| |
− | </source>
| |
− | <hr />
| |
− | }}
| |
− |
| |
− | ====Ejercicios de agrupación ====
| |
− | <br />
| |
− | {{MRM_Actividad|Title=Ejercicios de agrupación|
| |
− | [[Archivo:ej9.png]]
| |
− | <source lang=sql>
| |
− | SELECT d.department_id, d.department_name, d.location_id, COUNT(e.employee_id)
| |
− | FROM employees e
| |
− | RIGHT OUTER JOIN departments d
| |
− | ON
| |
− | e.department_id = d.department_id
| |
− | GROUP BY d.department_id, d.department_name, d.location_id;
| |
− | </source>
| |
− | <hr />
| |
− | [[Archivo:ej11.png]]
| |
− | <source lang=sql>
| |
− | SELECT e.job_id, count(e.job_id) FREQUENCY
| |
− | FROM employees e
| |
− | JOIN departments d
| |
− | ON e.department_id = d.department_id
| |
− | WHERE d.department_name IN ('Administration', 'Executive')
| |
− | GROUP BY e.job_id
| |
− | ORDER BY FREQUENCY DESC;
| |
− | </source>
| |
− | <hr />
| |
− |
| |
− | [[Archivo:ej15.png]]
| |
− | <source lang=sql>
| |
− | SELECT d.department_id, d.department_name, count(e1.employee_id) employees,
| |
− | NVL(TO_CHAR(AVG(e1.salary), '99999.99'), 'No average') avg_sal,
| |
− | e2.last_name, e2.salary, e2.job_id
| |
− | FROM departments d RIGHT OUTER JOIN employees e1
| |
− | ON d.department_id = e1.department_id
| |
− | RIGHT OUTER JOIN employees e2
| |
− | ON d.department_id = e2.department_id
| |
− | GROUP BY d.department_id, d.department_name, e2.last_name,
| |
− | e2.salary,
| |
− | e2.job_id
| |
− | ORDER BY d.department_id, employees;
| |
− | </source>
| |
− | <hr />
| |
− |
| |
− | [[Archivo:ej18.png]]
| |
− | ;a) Contrate menos de tres empleados:
| |
− | <source lang=sql>
| |
− | SELECT d.department_id, d.department_name, COUNT(*)
| |
− | FROM
| |
− | departments d JOIN employees e
| |
− | ON
| |
− | d.department_id = e.department_id
| |
− | GROUP BY d.department_id, d.department_name
| |
− | HAVING COUNT(*) < 3;
| |
− | </source>
| |
− | ;b) Tenga el mayor número de empleados:
| |
− | <source lang=sql>
| |
− | SELECT d.department_id, d.department_name, COUNT(*)
| |
− | FROM
| |
− | departments d JOIN employees e
| |
− | ON
| |
− | d.department_id = e.department_id
| |
− | GROUP BY d.department_id, d.department_name
| |
− | HAVING COUNT(*) = (SELECT MAX(COUNT(*))
| |
− | FROM
| |
− | employees
| |
− | GROUP BY department_id);
| |
− | </source>
| |
− |
| |
− | ;c) Tenga el menor número de empleados:
| |
− | <source lang=sql>
| |
− | SELECT d.department_id, d.department_name, COUNT(*)
| |
− | FROM
| |
− | departments d JOIN employees e
| |
− | ON
| |
− | d.department_id = e.department_id
| |
− | GROUP BY d.department_id, d.department_name
| |
− | HAVING COUNT(*) = (SELECT MIN(COUNT(*))
| |
− | FROM
| |
− | employees
| |
− | GROUP BY department_id);
| |
− | </source>
| |
− |
| |
− | <hr />
| |
− | [[Archivo:ej19.png]]
| |
− | <source lang=sql>
| |
− | SELECT e.employee_id, e.last_name, e.department_id, e.salary,
| |
− | AVG(s.salary)
| |
− | FROM
| |
− | employees e JOIN employees s
| |
− | ON
| |
− | e.department_id = s.department_id
| |
− | GROUP BY e.employee_id, e.last_name, e.department_id,
| |
− | e.salary;
| |
− | </source>
| |
− | <hr />
| |
− | }}
| |
− |
| |
− | ====Ejercicios con subconsultas ====
| |
− | <br />
| |
− | {{MRM_Actividad|Title=Ejercicios de subconsultas
| |
− | [[Archivo:ej16.png]]
| |
− | <source lang=sql>
| |
− | SELECT department_id, MIN(salary)
| |
− | FROM employees
| |
− | GROUP BY department_id
| |
− | HAVING AVG(salary) = (SELECT MAX(AVG(salary))
| |
− | FROM employees
| |
− | GROUP BY department_id);
| |
− | </source>
| |
− | <hr />
| |
− | [[Archivo:ej17.png]]
| |
− | <source lang=sql>
| |
− | SELECT *
| |
− | FROM
| |
− | departments
| |
− | WHERE department_id NOT IN(SELECT department_id
| |
− | FROM employees
| |
− | WHERE job_id = 'SA_REP'
| |
− | AND department_id IS NOT NULL);
| |
− |
| |
− | </source>
| |
− | <hr />
| |
− | [[Archivo:ej20.png]]
| |
− | <source lang=sql>
| |
− | SELECT last_name, TO_CHAR(hire_date, 'DAY') day
| |
− | FROM employees
| |
− | WHERE TO_CHAR(hire_date, 'Day') = (SELECT TO_CHAR(hire_date, 'Day')
| |
− | FROM employees
| |
− | GROUP BY TO_CHAR(hire_date, 'Day')
| |
− | HAVING COUNT(*) = (SELECT MAX(COUNT(*))
| |
− | FROM employees
| |
− | GROUP BY TO_CHAR(hire_date,'Day')));
| |
− |
| |
− | </source>
| |
− | <hr />
| |
− | }}
| |
− |
| |
− | ===Concepto de join o reunión natural===
| |
− | <br />
| |
− | {{MRM_Definicion|Title=JOIN|
| |
− | ;El join consiste en unir filas de diferentes tablas
| |
− | ;Con la condición que esas filas tengan una relación directa
| |
− | Por relación directa vamos a entender que son dos realidades
| |
− | que en el mundo real están relacionadas
| |
− | {{MRM_Ejemplo|
| |
− | ;Las facturas de cada empleados
| |
− | Un empleado tiene realción directa con sus facturas
| |
− | }}
| |
− | ;La relación directa queda almacenada con la clave extranjera que propagamos.
| |
− | ;Se tratará de los clientes sus facturas
| |
− | es decir para cada cliente, reunirlo con las facturas
| |
− | cuyo valor en el campo id_cliente coincida con la clave de cliente
| |
− | }}
| |
− | [[Archivo:join_img1.png]]
| |
− | Una forma de realizar esta reunión sería
| |
− | <source lang=sql>
| |
− | select campos
| |
− | from tabla t1 otra_tabla t2
| |
− | where t1.clave_ppal = t2.clave_foranea
| |
− | </source>
| |
− | *Por ejemplo:
| |
− | <source lang=sql>
| |
− | select *
| |
− | from cliente c, factura f
| |
− | where c.id = f.cliente_id
| |
− | </source>
| |
− |
| |
− | *Por ser una operación muy frecuente se ha implementado un operador explícito para ello
| |
− | [[Archivo:join_img2.png]]
| |
− | ;La sintaxis posible que vamos a estudiar
| |
− | [[Archivo:join_img3.png]]
| |
− | ;A continución vemos su significado para analizar cada una de ellas
| |
− | [[Archivo:join_img4.png]]
| |
− | ;Creación de uniones naturales
| |
− | [[Archivo:join_img5.png]]
| |
− | *Miramos el ejemplo de '''''employees''''' y '''''departments'''''
| |
− | *En ella vemos que la coincidencia de '''clave principal''' y '''foránea''' que las relaciona
| |
− | '''''department_id'''''
| |
− | *Podemos hacer el join natural
| |
− | [[Archivo:join_img6.png]]
| |
− | *Pero en este caso tenemos un pequeño problema
| |
− | *Hay que tener cuidad con el operador '''''natural join''''' si hay más de una columna que coincida los nombres
| |
− | ;Veamos el siguiente ejemplo
| |
− |
| |
− | <source lang=sql>
| |
− | SELECT DEPARTMENT_NAME, LAST_NAME, EMPLOYEE_ID
| |
− | FROM DEPARTMENTS d, EMPLOYEES e
| |
− | where d.DEPARTMENT_ID=e.DEPARTMENT_ID
| |
− | </source>
| |
− | *Nos da la siguiente salida
| |
− | [[Archivo:join_img7.png]]
| |
− | *Pero si hacemos la unión natura
| |
− | <source lang=sql>
| |
− | SELECT DEPARTMENT_NAME, LAST_NAME, EMPLOYEE_ID
| |
− | FROM DEPARTMENTS
| |
− | NATURAL JOIN EMPLOYEES
| |
− |
| |
− | </source>
| |
− | o
| |
− | <source lang=sql>
| |
− | SELECT DEPARTMENT_NAME, LAST_NAME, EMPLOYEE_ID
| |
− | FROM EMPLOYEES
| |
− | NATURAL JOIN DEPARTMENTS
| |
− | </source>
| |
− | *Vemos la siguiente salida
| |
− | [[Archivo:join_img8.png]]
| |
− | *Por que el operador 'NATURAL JOIN' junta las filas de los campos que coincidan nombres
| |
− | *Si observamos la imagen anterior estas dos tablas tiene las campos en común
| |
− | '''''DEPARTMENTS_ID'''''
| |
− | '''''MANAGER_ID'''''
| |
− | *Para esto está el operador USING dentro del JOIN
| |
− | <source lang=sql>
| |
− | SELECT DEPARTMENT_NAME, LAST_NAME, EMPLOYEE_ID
| |
− | FROM DEPARTMENTS JOIN EMPLOYEES
| |
− | USING (DEPARTMENT_ID)
| |
− | </source>
| |
− | *Ahora vemos que el resultado es igual a los 19 registros
| |
− | ;Qué pasa con las filas que no tienen relación
| |
− | *En el ejemplo anterior tenemos un empleado que no pertenece a ningún departamento
| |
− | *También tenemos departamentos dónde no hay ningún empleado trabajando
| |
− | {{MRM_Clave|
| |
− | ;Podría ser que también nos interesaran esas tuplas}}
| |
− | [[Archivo:join_img10.png]]
| |
− | ;INNER vS OUTER
| |
− | [[Archivo:join_img11.png]]
| |
− | ;Unión por la izquierda
| |
− | [[Archivo:join_img12.png]]
| |
− | ;Unión por la derecha
| |
− | [[Archivo:join_img13.png]]
| |
− | ;Y si queremos todas (Tanto de la izquierda como de la derecha)
| |
− | [[Archivo:join_img14.png]]
| |
− |
| |
− |
| |
− |
| |
− |
| |
− |
| |
− | ;Juntar una tabla consigo misma
| |
− | *En este caso debemos ver que el mismo atributo juega roles diferentes
| |
− | En empleados un concepto es el id de empleado (su clave) y otro el id de la empleada que es gerente (clave extranjera)
| |
− | [[Archivo:join_img15.png]]
| |
− |
| |
− | ====Funciones de conversión de tipos====
| |
− | [[Archivo:func_conv1.png]]<br />
| |
− | <hr />
| |
− | [[Archivo:func_conv1.png]]<br />
| |
− | <hr />
| |
− | [[Archivo:func_conv2.png]]<br />
| |
− | <hr />
| |
− | [[Archivo:func_conv3.png]]<br />
| |
− | <hr />
| |
− | [[Archivo:func_conv4.png]]<br />
| |
− | <hr />
| |
− | [[Archivo:func_conv5.png]]<br />
| |
− | <hr />
| |
− | [[Archivo:func_conv6.png]]<br />
| |
− | <hr />
| |
− | [[Archivo:func_conv7.png]]<br />
| |
− | <hr />
| |
− | [[Archivo:func_conv8.png]]<br />
| |
− | <hr />
| |
− | [[Archivo:func_conv9.png]]<br />
| |
− | <hr />
| |
− | [[Archivo:func_conv10.png]]<br />
| |
− | <hr />
| |
− |
| |
− | ====Funciones de agrupación o grupo====
| |
− | *Son funciones que nos va a mostrar un valor por cada conjunto de filas a las que se aplica la función
| |
− | [[Archivo:sql_group1.png]]<br />
| |
− | <hr />
| |
− | [[Archivo:sql_group2.png]]<br />
| |
− | <hr />
| |
− | [[Archivo:sql_group3.png]]<br />
| |
− | <hr />
| |
− | [[Archivo:sql_group4.png]]<br />
| |
− | <hr />
| |
− | [[Archivo:sql_group5.png]]<br />
| |
− | <hr />
| |
− | [[Archivo:sql_group6.png]]<br />
| |
− | <hr />
| |
− | [[Archivo:sql_group7.png]]<br />
| |
− | <hr />
| |
− | [[Archivo:sql_group8.png]]<br />
| |
− | <hr />
| |
− | [[Archivo:sql_group9.png]]<br />
| |
− | <hr />
| |
− | [[Archivo:sql_group10.png]]<br />
| |
− | <hr />
| |
− | [[Archivo:sql_group11.png]]<br />
| |
− | <hr />
| |
− | [[Archivo:sql_group12.png]]<br />
| |
− | <hr />
| |
− | [[Archivo:sql_group13.png]]<br />
| |
− | <hr />
| |
− | [[Archivo:sql_group14.png]]<br />
| |
− | <hr />
| |
− | [[Archivo:sql_group15.png]]<br />
| |
− | <hr />
| |
− | [[Archivo:sql_group16.png]]<br />
| |
− | <hr />
| |
− | [[Archivo:sql_group17.png]]<br />
| |
− | <hr />
| |
− | [[Archivo:sql_group18.png]]<br />
| |
− | <hr />
| |
− | ====Actividades de funciones y agregados====
| |
− | [[Archivo:ej_func_01.png]]
| |
− | <source lang=sql>
| |
− | </source>
| |
− | <hr />
| |
− | [[Archivo:ej_func_01.png]]
| |
− | <source lang=sql>
| |
− |
| |
− | </source>
| |
− | <hr />
| |
− | [[Archivo:ej_func_02.png]]
| |
− | <source lang=sql>
| |
− | </source>
| |
− | <hr />
| |
− | [[Archivo:ej_func_03.png]]
| |
− | <source lang=sql>
| |
− | </source>
| |
− | <hr />
| |
− | [[Archivo:ej_func_04.png]]
| |
− | <source lang=sql>
| |
− | </source>
| |
− | <hr />
| |
− | [[Archivo:ej_func_05.png]]
| |
− | <source lang=sql>
| |
− | </source>
| |
− | <hr />
| |
− | [[Archivo:ej_func_06.png]]
| |
− | <source lang=sql>
| |
− | </source>
| |
− | <hr />
| |
− | [[Archivo:ej_func_07.png]]
| |
− | <source lang=sql>
| |
− | </source>
| |
− | <hr />
| |
− | [[Archivo:ej_func_08.png]]
| |
− | <source lang=sql>
| |
− | </source>
| |
− | <hr />
| |
− | [[Archivo:ej_func_09.png]]
| |
− | <source lang=sql>
| |
− | </source>
| |
− | <hr />
| |
− | [[Archivo:ej_func_10.png]]
| |
− | <source lang=sql>
| |
− | </source>
| |
− | <hr />
| |
− | [[Archivo:ej_func_11.png]]
| |
− | <source lang=sql>
| |
− | </source>
| |
− |
| |
− | <hr />
| |
− | [[Archivo:ej_func_12.png]]
| |
− | <source lang=sql>
| |
− | </source>
| |
− | <hr />
| |
− | [[Archivo:ej_func_13.png]]
| |
− | <source lang=sql>
| |
− | </source>
| |
− | <hr />
| |
− | [[Archivo:ej_func_14.png]]
| |
− | <source lang=sql>
| |
− | </source>
| |
− | <hr />
| |
− | [[Archivo:ej_func_15.png]]
| |
− | <source lang=sql>
| |
− | </source>
| |
− | <hr />
| |
− | [[Archivo:ej_func_16.png]]
| |
− | <source lang=sql>
| |
− | </source>
| |
− | <hr />
| |
− | [[Archivo:ej_func_17.png]]
| |
− | <source lang=sql>
| |
− | </source>
| |
− | <hr />
| |
− | [[Archivo:ej_func_18.png]]
| |
− | <source lang=sql>
| |
− | </source>
| |
− | <hr />
| |
− | [[Archivo:ej_func_19.png]]
| |
− | <source lang=sql>
| |
− | </source>
| |
− | <hr />
| |
− | [[Archivo:ej_func_20.png]]
| |
− | <source lang=sql>
| |
− | </source>
| |
− | <hr />
| |
− | [[Archivo:ej_func_21.png]]
| |
− | <source lang=sql>
| |
− |
| |
− | </source>
| |
− | [[Archivo:ej_func_22.png]]
| |
− | <source lang=sql>
| |
− | </source>
| |
− |
| |
− | <hr />
| |