PL/SQL MÁGICO

Sentencia SELECT, SQL

Objetivos

• Enumerar las capacidades de las sentencias SELECT de SQL.
• Ejecutar una sentencia SELECT básica.

NOTA: Usamos como ejemplo la base de datos: ORCL, la cual viene por defecto en cualquier versión de ORACLE.

Sintaxis

SELECT *|{[DISTINCT] column|expression [alias],...}
FROM table;

En la Sintaxis

  1. SELECTSelecciona la lista de columnas a consultar.
  2. *: Se usa para que en la consulta se muestren todos los campos/columnas de la tabla.
  3. DISTINCT : suprime los duplicados(omite registros duplicado).
  4. column|expression:  Columnas o expresiones a mostrar en la consulta.
  5. alias:  Nombre personalizado que se le quiere asignar  al campo o columna.
  6. FROM: Especifica la o las tablas que contienen las columnas a mostrar en la consulta.
  7. table: Es la tabla que se esta consultando.
  8. |:  Es equivalente a ‘o‘, eje: esto aquello = esto aquello.
  9. {}: Agrupa objetos similares.
  10. []: Todo lo que esta entre corchetes es Opcional.
SELECT  * 
FROM departments;

El anterior ejemplo muestra todos los campos o columnas de la tabla en cuestión(departments).

SELECT  department_id, 
        department_name,
        manager_id,
        location_id
FROM departments;

Este Query muestra el mismo resultado que el anterior, la diferencia es que aquí yo enumeré todas las columnas de la tabla.

SELECT  department_id, 
        department_name
FROM departments;

Aquí solo enumeré 2 columnas de la tabla.

Directrices de las Sentencias SQL

Siguiendo los lineamientos a continuación, puede crear sentencias válidas que resulten fáciles de leer y de editar:

• Las sentencias SQL no son sensibles a mayúsculas/minúsculas. (a menos que se indique que lo sean).

• Las sentencias SQL se pueden introducir en una o en varias líneas.

• Las palabras clave no se pueden dividir en líneas ni se pueden abreviar.

• Las cláusulas se suelen colocar en líneas aparte para facilitar su lectura y su edición.

• Se deben utilizar sangrados para facilitar la lectura del código.

• Las palabras claves se suelen introducir en mayúsculas; el resto de palabras, como nombres y columnas, se introduce en minúsculas.

Expresiones Aritméticas

OperadorDescripción
+Suma
Resta
*Multiplicación
/División

Operadores Aritméticos: El cuadro muestra los operadores aritméticos disponibles en SQL. Puede utilizar operadores aritméticos en cualquier cláusula de una sentencia SQL (excepto en la cláusula FROM). 

Nota: Con los tipos de datos DATE TIMESTAMP, puede utilizar únicamente los operadores de suma y de resta.

SELECT last_name, salary, salary+ 300 
FROM employees;

La anterior consulta muestra el apellido, salario y el salario más 300.

SELECT last_name, salary, 12*salary+100
FROM   employees;

La anterior muestra el apellido, salario y el salario por 12 más 100.

SELECT last_name, salary, 12*(salary+100)
FROM   employees; 

El anterior muestra el apellido, salario y el salario más 300 por 12.

Nota: Me limité a hacer ejemplos con estos Operadores pero cualquiera de los ya mencionados puede ser usado siempre y cuando la situación lo requiera.

OJO: El uso de paréntesis es muy importante, este Query lo muestra claramente:

SELECT last_name, salary, 12*salary+100, 12*(salary+100)
FROM   employees;

Descripción del Valor Nulo (NULL)

• Un valor nulo es aquel que no está disponible, no está asignado, es desconocido o no es aplicable. 

• Un valor nulo no es lo mismo que un cero, tampoco es igual a un espacio en blanco.

• Si faltan valores en una fila para una columna, se dice que el valor es nulo.

• Las columnas de cualquier tipo de datos pueden contener valores nulos. A menos que tengan      restricciones (NOT NULL  o PRIMARY KEY) los cuales impiden el uso de valores nulos en las  columnas.

• Las expresiones aritméticas que contienen un valor nulo se evalúan como nulas.

Nota: usaremos como ejemplo la columna: commission_pct ya que la misma contiene valores nulos debido a que solo las posiciones de directores de ventas o representantes de ventas reciben comisiones.

SELECT last_name, salary, commission_pct
FROM   employees;

Muestra registros con valores nulos y no nulos en la columna: commission_pct.

SELECT last_name, 12*salary*commission_pct 
FROM   employees;

En este ejemplo el cálculo no se realiza correctamente en los registros con el campo commission_pct nulo.

Alias de la Columna

• Cambia el nombre de una cabecera de columna.

• Es útil para hacer legible columnas donde se realizan los cálculos complejos.

• Sigue inmediatamente al nombre de columna o puede usarse la palabra clave AS (opcional) entre el nombre de la columna y el alias para más claridad.

• Requiere comillas dobles: “” si contiene espacios o caracteres especiales, o si es sensible a mayúsculas/minúsculas.

SELECT last_name as Nombre, salary salario,
    phone_number "Numero de Telefono"
FROM   employees;

SELECT last_name apellido, salary as "Sal", phone_number as "telefono"
FROM   employees;

Como muestra el ejemplo, cualquier forma que se use es válida, pero si se quiere mostrar el nombre de columna con un formato especifico o con espacios entonces dicho alias debe estar entre comillas dobles: “”.

Operador de Concatenación

• Enlaza columnas o cadenas de caracteres con otras columnasexpresiones aritméticas o valores constantes.

• Se representa mediante dos barras verticales (||).

• Las columnas o expresiones enlazadas se combinan y crean una única columna de salida.

• Si se concatena una columna no nula con una nula el resultado sería la columna no nula.

SELECT first_name,last_name, first_name||last_name
FROM   employees;

SELECT last_name||'hola', first_name||360
FROM   employees;

SELECT hire_Date||commission_pct
FROM   employees;

Cadenas de Literales

• Un literal es un carácter, un número o una fecha que se ha incluido en la sentencia SELECT.

• Un literal no es un nombre de columna ni un alias de columna.

• Los valores de literales de caracteres y fecha deben ir entre comillas simples (‘ ‘); los literales de números no es necesario que las tengas.

• Las cadenas de literales se incluyen en cada fila devuelta.

SELECT last_name ||' is a '||job_id 
       AS "Employee Details"
FROM   employees;

SELECT first_name ||' gana '||salary 
       AS "Salary by Employee"
FROM   employees;

SELECT 'El Empleado numero: '||employee_id||' fue contratado el '||hire_date 
       AS "Fecha de Contratación por Emp"
FROM   employees;

Filas Duplicadas

• Si consultas una tabla que tiene registros con columnas con el mismo valor(campos sin restricciones como UNIQUE PRIMARY KEY) dichos registros se mostraran duplicados. Para evitar esto debes incluir la palabra clave DISTINCT después de SELECT pero antes de las columnas a mostrar.

SELECT department_id 
FROM   employees; 

SELECT department_id, job_id
FROM   employees; 

En las dos consultas anteriores se muestran algunos valores duplicados.

SELECT DISTINCT department_id 
FROM   employees; 

SELECT DISTINCT department_id, job_id
FROM   employees;

En las dos últimas consultas vemos registros únicos por cada fila.