02 sql reference
TRANSCRIPT
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
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
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
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 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
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 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 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
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?