02 sql reference

68

Upload: nelly-lisbeth-hernandez-quintero

Post on 28-Jul-2015

263 views

Category:

Technology


2 download

TRANSCRIPT

Solución inteligente para Empresas de Telecomunicaciones y Servicios Públicos

INTRODUCCION A BASE DE DATOS(Sept/2011)

Agenda

1.Introducción

2.Basic Elements of Oracle SQL

3.SQL Queries and Subqueries

4.Operators

5.Expressions, Conditions, and Queries

6.Functions

7.SQL Statements

8.SQL Tuning Workshop

Referencia SQL

1. Introducción

SQL (Lenguaje de consulta estructurado): es un conjunto de sentencias con las que los programas y usuarios pueden accedera a las base de datos.

El doctor E.F codd en su paper “a relational model of data for lange shared data banks” en junio de 1970 estableció el modelo que hoy aceptamos como “el modelo para el manejo de systemas de base de datos relacionales” (RDBMS). Luego se desarrollo SEQUEL (Structured English Query Language) por IBM Corporation, Inc. Que con el tiempo se convirtio en SQL.

Convenciones Lexicas

Cuando se crea un sentencia SQL. Se puede incluir uno o mas <tabs>, <enter>, <space>.

No es sensible a mayusculas en el caso de palabras reservadas, palabras claves, identificadores y parametros. Sin embargo si para los literales de tipo texto y los nombres en comillas.

Referencia SQL

2. Basic Elements of Oracle SQL

Datatypes Literals Format Models Nulls Pseudocolumns Comments Database Objects Schema Object Names and Qualifiers Syntax for Schema Objects and Parts in SQL Statements

Referencia SQL

Datatypes

Cada valor manipulado por oracle tiene un tipo de dato. El valor de cierto tipo de dato tiene un conjunto de propiedades asociadas, al igual que un dominio.

Cuando creas una tabla o cluster, se debe especificar el tipo de dato de cada columna. Cuando creas un procedimiento o funcion, se debe especificar el tipo de datos de cada argumento.

http://download.oracle.com/docs/cd/B10501_01/server.920/a96540/sql_elements2a.htm#45504

Referencia SQL

Tipos de datos

Pertenecientes a la base de datos

NUMBER

CHAR

VARCHAR2

DATE

LONG

LONG RAW

RAW

ROWID

BLOB, CLOB, NCLOB, BFILE

Referencia SQL

Literales

Los terminos de “literales” y “valores contantes” son sinonimos y representan un valor de datos establecido. Los tipos de literales son:

Literales de Texto

Litereles de Enteros

Literales Numericos

Literales Intervalo

Se pueden espeficar literales como parte de una expresion o condicion. Veamos la sintaxis de cada tipo.

Referencia SQL

Literales de Texto

Definen un texto o carácter. Ejemplos : ‘hola mundo’, ‘d’. Y su sintaxis:

Donde N especifica el uso de caracteres Nacionales.

C es cualquier miembro del conjunto de caracteres.

‘’ son dos comillas simples que marcan el comienzo y el final de la cadena

Referencia SQL

Literales Numericos

Estan el dominio de los numero fraccionarios. Ejemplos: 1.1, -12.3, .01, 23E-10.

Referencia SQL

Literales de Intervalos

Estos literales especifican un periodo de tiempo. Oracle soporta dos tipo de literales de intervalos, YEAR TO MONTH y.

YEAR TO MONTH

Referencia SQL

Literales de Intervalo

DAY TO SECOND

Referencia SQL

Modelo de formatos

TO_DATE('27-OCT-98', 'DD-MON-RR')

TO_CHAR(salary, '$99,990.99')

to_char(0.1, '00.0999')

Referencia SQL

Modelo de formatos

Elemento Ejemplo Descripcion, (comma) 9,999 Coma en un punto Especifico. (period) 99.99 Decimal$ $ 9.999 Signo Dólar0 0999 Cero a la izquierda

9990 Cero a la derecha9 9999 Cantidad de DigitosB B9999 Retorna Blanco en esa posicionC C999 Retorna el simbolo de Moneda ISO (NLS_ISO_CURRENCY)D 99D99 Retorna el carácter decimalEEEE 9.9EEEE Retorna un Valor usando notacion cientificaG 9G999 Pone el separador de grupo (miles)L L999 Retorna carácter de monedaMI 9999MI Retorna negativo o positivoPR 9999PR Retorna valor negativio en <>RN RN Retorna Romano Mayuscularn rn Retorna Romano MinusculaS S9999 Retorna negativo

9999S Retorna positivo con +

Referencia SQL

Null

Cuando una columna no tiene un valor asociado decimos que el valor es null. Mas sin embargo, se puede restringir a la columna como para que no puedan haber valores nulos.

Null no representa el valor cero, ni tampoco la cadena vacia ‘’. Todas las operaciones con null retornaran null excepto la condenación.

Funcion NVL: NVL (variable,0).

Condiciones evaluadas con null retornaran UNKNOWN. Y estas condiciones no retornaran columnas si son puestas en el campo WHERE.

Referencia SQL

Pseudocolumnas

Las pseudocolumnas actuan igual que una columna pero sus datos no estan guardados en la tabla.

CURRVAL and NEXTVAL

LEVEL

ROWID

ROWNUM

XMLDATA

Referencia SQL

Comentarios

En cual cualquier sentencia SQL se pueden adicionar comentarios.

SELECT last_name, salary + NVL(commission_pct, 0),

job_id, e.department_id

FROM employees e, departments d

/*The DEPARTMENTS table is used to get the department name.*/

WHERE e.department_id = d.department_id

AND salary + NVL(commission_pct,0) > -- Subquery:

(SELECT salary + NVL(commission_pct,0)

FROM employees

WHERE last_name = 'Pataballa');

Referencia SQL

Objetos

Los objetos pueden o no estar asociados a un schema. Un schema es una colección lógica de datos estructurados y objetos.

http://download.oracle.com/docs/cd/B10501_01/server.920/a96540/sql_elements8a.htm

Referencia SQL

Nombramiento de objetos de esquema

Máximo 30 caracteres. Excepto las base de datos que solo pueden tener máximo 8 caracteres y los links hasta 128.

No se pueden utilizar las palabras reservadas.

No pueden empezar con “SYS_“, y deben empezar con un carácter alfabético.

En un espacio de nombres dos objetos no pueden tener el mismo nombre.

Referencia SQL

6. Consultas SQL

f

RUT Nombres Apellidos Fecha_Nac Sueldo Ciudad

123 Jaja Merio 01/Jan/68 1’456.323 C

534 Mario Torres 432.122 P

899 Perla Torres 14/Jun/56 6’856.556 P

566 Mario Bolaños 5/Sep/89 432.121 B

Fila, Tupla

ColumnaEspecial Columna

ColumnaEspecialCampos

Estruc

tura

Datos

Referencia SQL

6. Consultas SQL

SelecciónProyección

Tabla 2

Tabla 1Tabla 1

Join

Tabla 1

Referencia SQL

6. Consultas SQL

Bloque Básico:

SELECT identifica las columnas que se quieren ver

FROM identifica de que tabla

WHERE condición para traer ciertos registros y otro no

Referencia SQL

6. Consultas SQL

f

Referencia SQL

3. Operadores

Un operador manipula campos de datos y retorna un resultado. Estos pueden ser unitarios o binarios. Y además, tienen cierta precedencia con la cual Oracle determina en una expresión cual operador debe evaluarse primero. Los usuario pueden crear sus propios operadores. Veamos:

Arithmetic Operators

Se pueden usar operadores aritméticos para negar, sumar, dividir, restar y multiplicar. +, -, *, /.

Concatenation Operator

Se usa para unir dos cadenas de texto. ||

Set Operators

Utilizados para combinar dos o mas consultas en un mismo resultado. UNION, MINUS, INTERCEPT.

Referencia SQL

UNION [ALL], INTERSECT, MINUS

UNION ALL :

SELECT product_id FROM inventories

INTERSECT

SELECT product_id FROM order_items;

INTERSECT :

SELECT product_id FROM inventories

INTERSECT

SELECT product_id FROM order_items;

Referencia SQL

UNION [ALL], INTERSECT, MINUS

Se pueden combinar múltiples consultas usando los operadores de conjunto. Todo tienen la misma precedencia.

UNION :

SELECT location_id, department_name "Department",

TO_CHAR(NULL) "Warehouse" FROM departments

UNION

SELECT location_id, TO_CHAR(NULL) "Department", warehouse_name

FROM warehouses;

Referencia SQL

UNION [ALL], INTERSECT, MINUS

MINUS :

SELECT product_id FROM inventories

MINUS

SELECT product_id FROM order_items;

Referencia SQL

4. Expresiones

Una expresión es la combinación de dos o mas valores, operadores, funciones, procedimientos a evaluar. Una expresión asume el tipo de datos de sus componentes.

Referencia SQL

Expresiones

Simple Expressions

Compound Expressions

CASE Expressions

CURSOR Expressions

Datetime Expressions

Function Expressions

INTERVAL Expressions

Object Access Expressions

Scalar Subquery Expressions

Type Constructor Expressions

Variable Expressions

Expression Lists

Referencia SQL

Expresiones Simples

H

Referencia SQL

Expresiones compuestas

Referencia SQL

Expresiones CASE

H

Referencia SQL

Expresiones CURSOR

SELECT department_name, CURSOR(SELECT salary, commission_pct

FROM employees e

WHERE e.department_id = d.department_id)

FROM departments d;

Referencia SQL

Expresiones tipo fecha

H

Referencia SQL

Expresiones tipo fecha

circle_area(radius)

payroll.tax_rate(empno)

hr.employees.comm_pct(dependents, empno)@remote

DBMS_LOB.getlength(column_name)

my_function(DISTINCT a_column)

Referencia SQL

Expresiones tipo Intervalo

h

Referencia SQL

Expresiones de subconsultas escalares

Una expresión de consulta escalar solo devolverá una columna de una fila. Si el valor de la subconsulta retorna 0 filas, el valor será null. Si la consulta retorna mas de un registro, se levantará un error.

Referencia SQL

Lista de Expresiones

SELECT * FROM employees

WHERE (first_name, last_name, email) IN

(('Guy', 'Himuro', 'GHIMURO'),('Karen', 'Colmenares', 'KCOLMENA'))

Referencia SQL

Condiciones

Una Condición especifica una combinación de uno o mas expresiones y operadores lógicos, los cuales retornan TRUE, FALSE o UNKNOWN.

Referencia SQL

Condiciones

Referencia SQL

Condiciones

Referencia SQL

Condiciones Logicas

NOT: Niega la expresión, TRUE -> FALSE, FALSE -> TRUE.

AND: Retorna TRUE solo si todas sus expresiones es TRUE.

OR: Retorna TRUE si alguna de sus condiciones es TRUE.

Referencia SQL

Condiciones de Relaciones

N

Referencia SQL

Condiciones de Rango

N

Referencia SQL

Condiciones de nulls

N

Referencia SQL

Condiciones EXISTS

Referencia SQL

Condiciones LIKE

N

Referencia SQL

5. Funciones

Las funciones son como operadores en cuanto ellos procesan datos y retornan un resultado. Difieren en la forma en el formato de sus argumentos. Ellos pueden tener cero o mucho argumentos.

function(argument, argument, ...)

Si los tipos de datos que son pasados como parámetros no coinciden con los tipos de datos de la función, Oracle intenta convertirlos.

Referencia SQL

Ordenacion de consultas SQL

Usando la cláusula ORDER BY ordenamos los datos de la consulta lanzada.

El mecanismos por el cual Oracle ordena los valores son especificado explicítame por NTL_SORT o Implícitamente por NLS_LANGUAGE.

Referencia SQL

Joins

Un join es una consulta que combina dos o mas tablas, vistas o vistas materializadas. Si cualquiera de estas tablas tienen nombre de columnas comunes, se deberán especificar en el llamamiento de que tablas provienen para evitar ambigüedades.

Tipos:

Equijoins

Selft joins

Cartesian Products

Inner Joins

Outer Joins

Referencia SQL

Equijoins

Es un join el cual une dos columnas por medio del operador ‘=‘. Combinando así los registros con valores equivalentes para las columnas especificadas.

SELECT last_name, job_id, departments.department_id, department_name

FROM employees, departments

WHERE employees.department_id = departments.department_id;

Referencia SQL

Self Joins

Es un join de una tabla a si misma. Así, esta tabla aparecerá dos veces en la cláusula FROM, y deberán tener alias para identificarlas.

SELECT e1.last_name||' works for '||e2.last_name

"Employees and Their Managers"

FROM employees e1, employees e2

WHERE e1.manager_id = e2.employee_id

AND e1.last_name LIKE 'R%';

Referencia SQL

Cartesian Products

Si se unen dos tablas sin condiciones, se producirá un producto cartesianas, cada registro de una tabla se cada registro de la otra. Es muy ineficiente y muy pocas veces se utilizan.

Referencia SQL

Inner joins

Un join de dos o mas tablas las cuales satisfacen una condición que no necesariamente es la igualdad.

Referencia SQL

outer joins

Un outer join no solo retorna los registros que satisfacen la condición, sino también, los registros de una tabla para los cuales no una que no se encuentren en la condición.

SELECT e1.employee_id, e1.manager_id, e2.employee_id

FROM employees e1, employees e2

WHERE e1.manager_id(+) = e2.employee_id;

Referencia SQL

Subconsultas

Es cuando tenemos una consulta dentro de otra. La cual nos permite resolver preguntas al subdividir el problema. Dependiendo de su ubicación en la consulta puede tener diferentes interpretaciones y restricciones.

SELECT department_id, last_name, salary

FROM employees x

WHERE salary > (SELECT AVG(salary)

FROM employees

WHERE x.department_id = department_id)

ORDER BY department_id;

Referencia SQL

Tabla DUAL

Esta es una tabla creada automáticamente por oracle que permite acceso al diccionario de datos. Tiene una columna DUMMY de tipo VARCHAR2(1) con el valor ‘X’. Alternativamente es utilizada para seleccionar unas constante, pseudocolumna, o función de cualquier tabla.

Referencia SQL

Operador ANY y SOME

• Compara un valor por cada valor en una lista o una subconsulta

• Debe esta precedido de cualquiera de los siguiente operadores

• =, !=, >, <, <=, >=

select first_name, salary from employees where salary > any (1600, 2999);

select first_name, salary from employees where substr(first_name,1,1) = any ('A', 'W', 'J');

Referencia SQL

Operador ALL

• Compara un valor por cada valor en una lista o una subconsulta

• Debe esta precedido de cualquiera de los siguiente operadores

• =, !=, >, <, <=, >=

select firt_name, salary from employees where salary > all (1600, 2999);

select first_name, salary from employees where salary > 1600 and salary > 2999;

Referencia SQL

Agregacion

La agregación es la propiedad que permite agrupar información y sacar reportes de ella usando funciones como:

• Count

• Sum

• Max

• Min

• avg

Referencia SQL

Agrupacion

La agrupación es una propiedad que nos permite como su nombre lo indica agrupar información con el fin de generar datos estadísticos:

Se puede agrupar usando funciones de agregación o usando la palabra reservada GROUP BY.

select redshift, type, count(*) as numGal, avg(stellarMass) as m_avg, max(stellarMass) as m_max from DeLucia2006agroup by redshift, typeorder by redshift, type

Referencia SQL

Agrupacion

Para poder hacer comparaciones con datos que se encuentran agrupados es necesario utilizar la sentencia HAVING

SELECT manager_id, count(*) cantidad FROM jobs job, employees emp WHERE job.job_id ='SA_REP' AND job.job_id = emp.job_id GROUP BY manager_id HAVING count(*) >= 3

Referencia SQL

Sentencias Herencia

• Sentencias usadas para generar datos en forma de arbol.

• Usado en tablas involutivas

• Palabra reservada connect by .... Prior

• SELECT level, rpad(' ',(level - 1)*10,' ')||first_name||' '||last_name nombre FROM employees connect BY prior employee_id = manager_id start with manager_id IS null

Referencia SQL

Sentencias Herencia

Modo de procesamiento:• Aplica JOIN antes CB• Selecciona filas Root (Start with)• Selecciona hijos Root• Ejecuta WHERE si no JOIN

Referencia SQL

Taller

http://www.oracle.com/technology/obe/obe9ir2/obe-in/sschema/sschema.htm

1. What are the names of the employees that have salaries between 2000

and 3000?

2. What are the names of the employees that work in Administration?

3. What are the names of the employees working in Administration or Marketing?

4. What are the employees that earn more than their manager?

5. What are the names of the salesmen who have an income (salary plus

commission) above 15000?

Referencia SQL

Taller6. What are the managers that earn more than any of their

employees?

7. What are the names of the employees who are managers of at least one

salesman?

8. What are the names of the employees who are managers of at least three

salesmen?

9. What are the names of the employees who are managers, but do not manage

any salesmen?

10. What is the average salary for each job?

11. What is the average salary of employees by job type?

12. What is the average salary of employees by location?

Referencia SQL

Taller

13. Who is the lowest paid employee in Roma?

14. What are the names of the employees who were hired before their manager?

15. For how many employees is it the case that the employee and his/her manager

work in diferent towns?

16. How many employees have a higher salary than the average salary of all

employees working in the same DEPARTMENT?

17. What is the average salary by town?

18. Which is the town with the lowest average salary?