3.- Introducción al SQL


1.- Introducción al SQL


El lenguaje de gestión de bases de datos más conocido en la actualidad es el SQL, Structured Query Language, que es un lenguaje estandar internacional, comúnmente aceptado por los fabricantes de generadores de bases de datos.
El SQL trabaja con estructura cliente/servidor sobre una red de computadoras.
La PC Cliente es la que inicia la consulta; el Servidor atiende la consulta. De esta manera,  el cliente no utiliza toda su capacidad de proceso para trabajar sino que se limita a solicitar datos al Servidor. Estas peticiones y las respuestas son transferencias de textos que cada ordenador cliente se encarga de obtener por pantalla, presentar en informes tabulados, imprimir, guardar, etc., dejando el Servidor libre.
El SQL permite:
  • Definir una base de datos mediante tablas
  • Almacenar información en tablas.
  • Seleccionar la información que sea necesaria de la base de datos.
  • Realizar cambios en la información y estructura de los datos.
  • Combinar y calcular datos para conseguir la información necesaria.


2.- Búsqueda de información en una tabla


La operación más común en una base de datos es pedir información, y a la cual se denomina búsqueda o Query. El comando Select va seguido de FROM y en ocasiones de WHERE. SELECT especifica las columnas, FROM especifica las tablas y WHERE especifica las condiciones. Si no hay condiciones de búsqueda se presentarán las columnas completas, sin restricciones.

  • Por ejemplo: Si se quiere ver el contenido de toda la tabla EMP, puede sustituirse toda la lista de columnas por un asterisco:

SELECT * FROM DEPT;

El Resultado es el siguiente:



  • Por ejemplo, para seleccionar determinados registros o filas de la base de datos, debe añadirse una condición con el comando WHERE al usar SELECT... FROM:
SELECT     *
FROM        EMP
WHERE    DEPTNO=30;


Para obtener todas las columnas pero de los empleados del Departamento número 30:
El Resultado es el siguiente:




WHERE obliga al SQL a buscar en la información de la tabla y mostrar solo aquellas líneas o registros que cumple la condición.

3.- Condiciones múltiples para una búsqueda



A veces WHERE va seguido de más de una condición.
  • Por ejemplo, consultas con dos condiciones:
SELECT     ENAME,
                 JOB,
                 SAL
  FROM     EMP
WHERE    JOB = 'SALESMAN' AND SAL >=100;


En este caso se piden los datos del nombre, trabajo, salario de aquellos empleados de la tabla cuyo empleo sea 'SALESMAN' y su salario mayor o igual que 100:
El Resultado es el siguiente:
 

  • Para las condiciones alternativas, negativas (excluyentes) se utilizan los comandos OR, y NOT. Así por ejemplo:
SELECT     NAME,
                 JOB,
                 SAL
FROM        EMP
WHERE     JOB = 'manager' OR SAL >=100;


Pide los datos de empleados con categoría manager o que su salario sea mayor que 100:
El Resultado es el siguiente:



  • El siguiente ejemplo pide un listado con los nombres, categorías y número de departamento de los empleados cuyo trabajo sea clerck (oficinista) y su departamento sea distinto del 30,
SELECT     ENAME,
                 JOB,
                 DEPTNO
FROM        EMP
WHERE     JOB = 'CLERCK’ AND DEPTNO!=’30’;


El Resultado es el siguiente:
 
                                      SMITH CLERCK 20

  • Mediante los comandos BEETWEEN y AND pueden pedirse datos comprendidos en un rango determinado. El ejemplo siguiente busca y muestra el nombre y el salario de los empleados cuyo salario esté comprendido entre 800 y 900:
SELECT     ENAME,
                 SAL
FROM        EMP
WHERE     SAL BETWEEN 800 AND 900;


El Resultado es el siguiente:




  • El comando IN permite seleccionar líneas cuyo campo contenga uno de los valores de una lista especificada entre paréntesis:
SELECT     *
FROM     DEPT
WHERE     DEPTNO IN (10,30);


El Resultado es el siguiente:





4.- Búsqueda de información en varias tablas relacionales -  JOIN QUERY



Hasta ahora se han efectuado búsquedas en una sola tabla, pero puede ocurrir que la información que buscamos no esté almacenada en una sola tabla. Como SQL es una base de datos relacional permite seleccionar información de más de una tabla y combinar los resultados en un listado. La búsqueda combinada en más de una tabla se denomina búsqueda relacional o join query.
En las bases de datos jerárquicas y en anillo, las relaciones son estáticas porque están perfectamente definidas en la estructura de la base de datos desde el diseño, por lo que las consultas deben seguir ese mismo esquema. En las bases de datos relacionales como SQL, las relaciones son dinámicas; se establecen en el momento de la consulta, y es posible extraer información según convenga en cada caso.
Por ejemplo, si se desea saber el nombre del departamento donde trabaja determinado empleado, y se intenta buscar en la tabla EMP (empleados), puede verse que no tiene columna con el nombre de departamento; sin embargo, la tabla de departamentos si tiene el departamento (número y nombre). Como las dos tablas tienen una columna en común -el n[[ordmasculine]] de departamento-, es posible relacionar las dos tablas. Esto puede hacerse con dos búsquedas:
  • Primera Búsqueda
SELECT     ENAME,
                 DEPTNO
FROM        EMP
WHERE     ENAME = 'WARD';


El Resultado es el siguiente:
WARD 30
 
  • Segunda Búsqueda
SELECT     LOC
FROM     DEPT
WHERE     DEPTNO = 30;


El Resultado es el siguiente:
FLORIDA

  • También puede llegarse al mismo resultado mediante una única búsqueda indicando la tabla y la columna separados por un punto, como en el ejemplo siguiente :
SELECT     ENAME,
                 LOC
FROM        EMP,
                 DEPT
WHERE     ENAME=''KING' AND EMP.DEPTNO =DEPT.DEPTNO;


El Resultado es el siguiente:
KING CHICAGO
 
  • En este ejemplo, se buscan los empleados en la tabla EMP cuyo nombre es KING y se utiliza el valor del código del empleado localizado para buscar en la tabla DEPT el nombre del departamento de trabajo. Por ultimo, localiza los registros donde coinciden los valores de las columnas EMPTO y DEPTO:





En el ejemplo anterior, en la tabla EMP se busca la fila que contiene al empleado 'KING', y se determina el número de departamento al que pertenece DEPTNO. Con este número de departamento de la tabla DEPT se extrae el registro con el mismo valor de DEPTNO. La cláusula
EMP.DEPTNO =DEPT.DEPTNO
especifica que los registros de las tablas EMP y DEPT deben coincidir en el valor del campo o columna DEPTNO.

5.- Funciones para el manejo de grupo de filas


 
  • Las funciones para grupos permiten seleccionar información a partir de grupos de líneas o registros. Por ejemplo, pueden agruparse todos los empleados que pertenezcan al mismo departamento y entonces calcular el salario máximo en cada grupo de departamentos:
SELECT     DEPTNO,
                  MAX(SAL)
FROM        EMP
GROUP BY DEPTNO;


El Resultado es el siguiente:




En una búsqueda de grupos, cada línea en el resultado de la búsqueda, corresponde a un grupo de líneas de nuestra tabla. La columna que se pone a continuación de group by es aquella por la que se quiere agrupar las líneas de la tabla. En el ejemplo anterior cada línea de la tabla EMP se incluye en uno de los tres grupos, uno para cada departamento, dependiendo de su valor en el campo DEPTO: todas las líneas de su mismo grupo tienen el mismo número de departamento.
Podemos combinar las funciones de grupo con las búsquedas relacionales. Existen tres funciones que pueden utilizarse con los grupos:
  1. SUM : Para sumar los valores de los campos, dentro de los grupos definidos por GROUP BY.
  2. COUNT: Para contar el número de líneas que entran en cada uno de esos grupos.
  3. AVG: Para saber el promedio de los valores de campos específicos en cada grupo.
  • El siguiente ejemplo tiene como objetivo saber cuantos empleados están trabajando en cada categoría por cada departamento, cuantos secretarios hay en el departamento de ventas y, en esos grupos, cuál es la suma y media de los salarios:
SELECT     DNAME,
                 JOB,
                 SUM(SAL),
                 COUNT(*),
                 AVG(SAL)
FROM       EMP,DEPT
WHERE    EMP.DEPTNO=DEPT.DEPTNO
GROUP BY  DNAME,JOB;


El Resultado es el siguiente:




6.- Condiciones de búsqueda de un grupo de líneas: HAVING


Así como en el operador WHERE se especifican las condiciones para las búsquedas con líneas individuales, con HAVING pueden especificarse las condiciones de búsqueda para grupos de líneas.
  • Supongamos que se quiere realizar una búsqueda como la anterior, pero en la que sólo se necesita ver aquellos grupos que tengan al menos dos empleados:

SELECT     ENAME,
                 JOB,
                 SUM(SAL),
                 COUNT(*),
                 AVG(SAL)
FROM        EMP
WHERE     EMP.DEPTNO = DEPT.DEPTNO
GROUP BY DNAME,JOB
HAVING COUNT(*)>=2


El Resultado es el siguiente:



7.- Sub-búsquedas o subqueries


  • Supóngase, por ejemplo, que se desea obtener una lista con todos los empleados que tienen el mismo empleo que “King” y SQL lo busca, en lo que constituiría una búsqueda subordinada o subbúsqueda:

SELECT     ENAME,
                 JOB
FROM        EMP
WHERE     JOB =
                          (SELECT JOB
                           FROM EMP
                           WHERE ENAME = 'KING'));

El Resultado es el siguiente:



SQL realiza las sub-búsquedas antes, porque necesita el resultado de estas para las búsquedas.
  • Como ejemplo adicional puede buscarse el empleado que gana más que la media de todos los salarios de los empleados:
SELECT     ENAME,
                 SAL
FROM        EMP
WHERE SAL >     (SELECT AVG(SAL)
                             FROM EMP);

El Resultado es el siguiente:




Comments