domingo, 8 de mayo de 2016

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 o aquello = esto | aquello.
  9. {}: Agrupa objetos similares.
  10. []: Todo lo que esta entre corchetes es Opcional.
Ejemplos:
SELECT  * 
FROM departments;
 /*se muestran 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
Mediante las sencillas reglas que se detallan 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 clave se suelen introducir en mayúsculas; el resto de palabras, como nombres y columnas, se introduce en minúsculas.
_____________________________________________________________________________________
Expresiones Aritméticas
Todo esto es posible mediante expresiones aritméticas. Una expresión aritmética puede contener nombres de columna, valores numéricos constantes e los operadores aritméticos y son de gran ayuda para modificar la manera en la que se muestran los datos.
Operador Descripció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 y TIMESTAMP, puede utilizar únicamente los operadores de suma y de resta.
Ejemplos:
SELECT last_name, salary, salary+ 300 
FROM employees;
/*muestra el apellido, salario y el salario más 300*/
---
SELECT last_name, salary, 12*salary+100
FROM   employees;
 /*muestra el apellido, salario y el salario por 12 más 100*/
---
SELECT last_name, salary, 12*(salary+100)
FROM   employees; 
/*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+10012*(salary+100)
FROM   employees;
_____________________________________________________________________________________
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 o 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.

Ejemplos:
SELECT last_name, salary, commission_pct
FROM   employees; 
/*muestra registros con valores nulos en la columna: commission_pct*/
---
SELECT last_name, 12*salary*commission_pct 
FROM   employees; 
/*el cálculo no se realiza en los registros con este campo nulos*/
_____________________________________________________________________________________
Alias de la Columna
•Cambia el nombre de una cabecera de columna.
•Es útil para los cálculos.
•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.
Ejemplos:
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 columnas, expresiones 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 es resultado seria la columna no nula.
Ejemplos:
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.
Ejemplos:
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 o 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.
Ejemplos:
SELECT department_id 
FROM   employees; 
---
SELECT department_id, job_id
FROM   employees; 
/*En los dos ejemplos anteriores se muestran algunos valores duplicados.*/
---
SELECT DISTINCT department_id 
FROM   employees; 
---
SELECT DISTINCT department_id, job_id
FROM   employees;
/*En los dos últimos ejemplos vemos registros únicos por pila.*/
_____________________________________________________________________________________
Link con un Archivo de ejercicios de práctica!!!
_____________________________________________________________________________________
Fuente: Base de Datos Oracle 10g: Conceptos Fundamentales de SQL 1