sábado, 9 de agosto de 2014

Reglas de precedencia






Se pueden usar paréntesis “()” para modificar o sobrescribir las reglas de precedencia.
Las reglas de precedencia determina el orden con que se evalúan y calculan las expresiones.
En la tabla de precedencia se indica el orden con que se ejecutan por defectos las reglas, sin embargo de ser necesario, se pueden modificar encerrando en paréntesis la expresión que quiera que se evalué primero.
La consulta
SELECT
    last_name
   ,job_id
   ,salary
FROM hr.employees
WHERE job_id = 'SA_REP'
  OR job_id = 'AD_PRES'
  AND salary > 15000;




Evalúa primero las expresiones relacionadas en el AND
   job_id = 'AD_PRES'
AND salary > 15000
El resultado del AND  de esas expresiones lo evalúa luego con el OR
job_id = 'SA_REP'
  OR resultado del AND


En esta misma consulta  podemos sobrescribir las reglas de precedencia con paréntesis.
SELECT
    last_name
   ,job_id
   ,salary
FROM hr.employees
WHERE (job_id = 'SA_REP'
  OR job_id = 'AD_PRES')
  AND salary > 15000;


Primero evalúa lo que está en paréntesis,
        (job_id = 'SA_REP'
  OR job_id = 'AD_PRES')

 el resultado de esa evaluación lo evalúa con la expresión AND
Resultado del parrentesis

AND salary > 15000

viernes, 8 de agosto de 2014

Operadores lógicos AND, OR o NOT, definiendo condiciones


Una condición lógica es evalúa el resultado de dos condiciones que devuelven un solo resultado, basado en esas condiciones evaluadas.
Un registro es devuelto o mostrado solo si el resultado  general es verdadero.




Todos los ejemplos vistos hasta este tema solo habían tenido una sola condición verdadera en su cláusula WHERE.


Usando el operador lógico AND
El operador lógico AND requiere que las dos componentes de las condiciones evaluadas sean verdaderas.
Es decir, si necesito todos los empleados que ganen $2600 y en su job_id contengan  el prefijo “SH”, es necesario usar el operador lógico AND así:
SELECT
   last_name
  ,job_id
  ,salary
FROM hr.employees
WHERE salary=2600
  AND job_id LIKE 'SH%';





La tabla de la verdad indica el comportamiento de la evolución de los componentes  






Usando el operador OR

El operador OR requiere que alguna delas dos componentes de la condición sean verdaderas.
Si es necesitamos  mostrar todos los empleados que ganen $2600 o en su job_id contengan el prefijo “SH”, es necesario usar el operador OR asi:
SELECT
   last_name
  ,job_id
  ,salary
FROM hr.employees
WHERE salary=2600
  OR job_id LIKE '%SH%';




El operador OR busca todos los registros que en su salario “salary” sean igual a 2600 sin importar el “job_id” que tengan, pero también busca todos los id de trabajo “job_id” que contengan el prefijo “SH” sim importa el “salary” que tengan.
Imegn operador 4






Operador lógico NOT

El operador lógico NOT indica todo lo que no sea, es decir si necesitamos todos los registros a excepción de algunos cuantos, podemos usar el operador NOT.
Pongamos el caso hipotético que necesitamos todos los empleados  que su “job_id” no sean AC_ACCOUNT, FI_ACCOUNT, SH_CLERK, ST_CLERK, usaríamos una consulta asi:
SELECT
    last_name
   ,job_id
   ,salary
FROM hr.employees
WHERE job_id NOT IN ('AC_ACCOUNT','FI_ACCOUNT','SH_CLERK','ST_CLERK');






Su tabla de la verdad es:



miércoles, 6 de agosto de 2014

Operadores de comparación






Los operadores de comparación son usados en condiciones que compara una expresión con otro valor o expresión, son usados en la cláusula WHERE.


Usando operadores de comparación
Digamos que se desea extraer el nombre y el salario de todos los empleados que ganen menos o  $3000.
SELECT
  last_name,
  salary
FROM hr.employees
WHERE salary <= 3000;
El resultado seria:


Si queremos buscar un valor en un rango de valores debemos usar el operador BETWEEN
SELECT
  last_name,
  salary
FROM hr.employees
WHERE salary BETWEEN 2900 AND 3000;

Donde 2900 es el valor límite inferior y 3000 es el valor límite superior
El resultado de la consulta seria:


Operador IN
Se usa el operador IN para evaluar los valores que están en la columna evaluada, si el valor que está en la columna evaluada esta en los valores o lista  que contiene el operador IN, el registro es mostrado.
Es decir, si deseamos que se muestre solo los salarios de los empleados que ganan  ‘3000’,’2500’ y ‘2300’, podemos ejecutarla consulta:
SELECT
  last_name,
  salary
FROM hr.employees
WHERE salary IN ('3000','2500','2300');




Cabe agregar que si la columna evaluada no contiene uno de los valores relacionados en la lista que recibe el operador IN, no será mostrado.



Operador LIKE
Quizás no se conozca el valor exacto que desea buscar, con el operador LIKE, puede usar un comodín o parte de la palabra o valor a buscar.  
El operador LIKE, busca en una cadena de caracteres que se especifique, si existe un carácter o expresión en el valore de la columna que contenga la cadena o carácter, retorna true y devuelve el valor encontrado.
Si deseamos traer todos los nombres de los empleados que inicien con la letra “S”, deberías consultalos asi:
SELECT
   last_name
  ,salary
FROM hr.employees
WHERE last_name LIKE 'S%';
El resultadode ejecutar esta consulta es:



También se puede usar el símbolo “_” para representar un solo carácter, si queremos traer todos los empleados  que en su segunda letra tenga la letra “a” ejecutaríamos la consulta:
SELECT
   last_name
  ,salary
FROM hr.employees
WHERE last_name LIKE '_a%';




Es necesario usar el identificador de escape “\” en caso de tener en el campo a filtrar, en nuestro caso el job_id contenga o haga parte de la cadena el carácter “_”, consultemos los empleados con su nombre y id de trabajo “job_id”:
SELECT
   last_name
  ,job_id
FROM hr.employees;  




Si deseáramos consultar todos los job_id  que iniciaran con la cadena de caracteres “SA_”  sería necesario escapar  el carácter “_”, debido a que Oracle toma el carácter como un solo carácter después de la cadena “SA”, en este caso usaríamos la consulta:
SELECT
   last_name
  ,job_id
FROM hr.employees
WHERE job_id LIKE '%SA\_%' ESCAPE '\';


Donde ESCAPE ‘\’ es como le indicamos al operador de comparación LIKE que el carácter “_” hace parte de la cadena que vamos a buscar.
Operador IS NULL
Este operador identifica busca las columnas que contengan un nulo, si fuera necesario identificar cuales empleados tiene una comisión pct nula, podemos ejecutar la consulta:
SELECT
   last_name
  ,job_id
  ,commission_pct
FROM hr.employees
WHERE commission_pct IS NULL;



De igual forma los para el operador de comparación IS NOT NULL  indica todos los que no tengan una comisión pct nula.

Cadena de caracteres y fechas


Las cadenas de caracteres y fechas deben ser encerrados en comillas simples (‘).
Los valores carácter son CASE-SENSITIVE.
Los Valores fecha son FORMAT-SENSITIVE.
Las fechas por defecto se muestran en un formato DD-MON-RR.

Digamos que deseamos mostrar todos los empleados que su apellido sea “Grant”
SELECT
  last_name,
  department_id
FROM hr.employees
WHERE last_name ='Grant';
El resultado de la consulta será:


Si ejecutamos la misma consulta solo cambiando el valor que estamos buscando de “Grant” a “grant”
SELECT
  last_name,
  department_id
FROM hr.employees
WHERE last_name ='grant';

El resultado será:



Para las fechas ocurre lo mismo con el formato, como se mencionó anteriormente, el formato de la fecha por defecto es DD-MON-RR, esto hace que al consultar una fecha, deber ser consultada con elformato requerido, asi:
SELECT
  last_name,
  hire_date,
  department_id
FROM hr.employees
WHERE hire_date='07-JUN-02';



Pero si cambiamos el formato
SELECT
  last_name,
  hire_date,
  department_id
FROM hr.employees
WHERE hire_date='07-06-02';

El resultado sería diferente:



Las bases de datos Oracle, almacena la información internamente en un formato numérico, representando Siglos, años, meses, días, horas  y segundos. 

Clausula WHERE, Limitando los registros que son seleccionados



Estructura:
SELECT *|{[DISTINCT] column/ expresión [alias]}
FROM tabla
WHERE condición o condiciones;

La cláusula WHERE va después de la cláusula FROM

Se pueden restringir los registros que son devueltos desde la consulta usando la cláusula WHERE.
Una clausula WHERE contiene una condición que debe ser cumplida, y va directamente debajo de la cláusula FROM.
Si la condición es verdadera, los registros seleccionados  se mostrarán.

La cláusula WHERE puede comparar valores en columnas, literales, expresiones aritméticas o funciones.
Esto consiste en tres elementos:
Nombres de columnas.
Comparación de condición.
Nombres de columnas,  constantes, o valores de lista.


Usando la cláusula WHERE
Si realizamos una consulta sin la cláusula  WHERE, obtendríamos todos los valores de la tabla
Digamos, si se ejecuta la consulta:
SELECT
  last_name,
  department_id
FROM hr.employees;


Observamos que los valores devueltos son todos o cualquier id de departamento.
Pero si limitamos los registros a solo los id de departamentos 10
SELECT
  last_name,
  department_id
FROM hr.employees
WHERE department_id=10;

Observamos que solo muestra todos los empleados que pertenecen al departamento 10





En la cláusula WHERE no se pueden usar alias.

DESCRIBE, mostrando la estructura de una tabla



Se puede usar el comando DESCRIBE para mostrar la estructura de una tabla.
En SQl Developer se puede seleccionar la tabla del árbol de conexión y seleccionar la pestaña Columns o Columnas.




La consulta o query

DESCRIBE hr.departments;




De debe tener en cuenta que SQL Plus soporta el comando DESCRIBE, se puede hacer un describe a un sinónimo, tabla o vista existente.

En la información que muestra, carga el nombre de la columna, el tipo de dato y si debe contener información o puede ser nulo.