NOTAS SQL/ORACLE
Averiguar el propietario de una tabla
select owner, table_name from all_tables where table_name = 'MI_TABLA';
Condicional CASE
https://www.techonthenet.com/oracle/functions/case.php

Se pueden hacer operaciones tipo condición IF con las sentencias CASE - WHEN - THEN – ELSE - END:
SELECT table_name, 
CASE owner 
  WHEN 'SYS' THEN 'The owner is SYS' 
  WHEN 'SYSTEM' THEN 'The owner is SYSTEM' 
  ELSE 'The owner is another value' 
END 
FROM all_tables;
Limitar número de resultados
https://blogs.oracle.com/oraclemagazine/on-rownum-and-limiting-results

Para controlar el número de filas que salen en una consulta se puede usar la variable ROWNUM, por ejemplo, para devolver los 5 salarios más altos:
select * 
from  
  ( select *  
    from emp  
    order by sal desc )  
where ROWNUM <= 5;
REGEX en Consultas
https://www.techonthenet.com/oracle/regexp_like.php

Se pueden usar expresiones Regex en consultas SQL con la función REGEX_LIKE 
Por ejemplo para encontrar los nombres que empiezan por A:
SELECT last_name 
FROM contacts 
WHERE REGEXP_LIKE (last_name, '^A(*)');
Alias con espacios y minúsculas
https://stackoverflow.com/questions/19942767/oracle-how-to-reference-an-alias-with-a-space-from-a-subquery-in-a-comparison-o

Añadiendo dobles comillas a los alias de las consultas se pueden poner textos más complejos, y no sólo tener una cadena de texto continua en mayúsculas y son caracteres especiales. 
Estos alias no sólo se muestran en el nombre de la columna, si no que también se puede hacer referencia a ellos dentro de la misma consulta, por ejemplo:
SELECT "Just one" FROM ( 
    SELECT 1 AS "Just one" FROM dual 
)
Convertir un número a cadena
Usando la función TO_CHAR y patrones numéricos, se puede convertir de número a cadena, especificando en el patrón: 
- Cuantos dígitos se representan con ‘9’ 
- Cuantos decimales con ‘.’ 
- Si hay que quitar la parte sobrante con ‘FM’ 
- Usando separadores de miles con ‘,’ 
- Usando separadores con el punto con ‘G’ 
- Cambiando a punto decimal con ‘D’ 
- Para forzar un cero en las unidades, en el caso de que sean 0 hay que poner ‘0’ 
En la siguiente consulta se ponen unos ejemplos:
select '"' || to_char(123456789.012, '9999999.99') || '"' as numero from dual 
/* el número no cabe en el formato, por lo tanto no se escribe, resultado:  
"###########" */ 
union all 
select '"' || to_char(123456789.1, '99999999999.99') || '"' as numero from dual 
/* el número cabe en el formato resultado con redondeo a dos decimales:  
" 123456789.10" */ 
union all 
select '"' || to_char(123456789.1, 'FM99999999999.99') || '"' as numero from dual 
/* con FM se quitan los espacios que sobran al principio y los ceros del final:  
"123456789.1" */ 
union all 
select '"' || to_char(123456789.014, 'FM99,999,999,999.99') || '"' as numero from dual 
/* se añaden separadores de miles con la coma:  
"123,456,789.01" */ 
union all 
select '"' || to_char(123456789.015, 'FM99G999G999G999D99') || '"' as numero from dual 
/* usando G y D se intercambian los símbolos con el formato local español, 
además, se observa que el redondeo sube a la siguiente unidad con el 5 final:  
"123,456,789.02" */ 
union all 
select '"' || to_char(0.015, 'FM99G999G999G999D99') || '"' as numero from dual 
/* si las unidades son 0, el cero no se pone:  
",02" */ 
union all 
select '"' || to_char(1.015, 'FM99G999G999G990D99') || '"' as numero from dual 
/* con 0 en las unidades si se añade:  
"0,02" */ 
union all 
select '"' || to_char(1.0, 'FM99G999G999G990D99') || '"' as numero from dual 
/* pero si no hay parte decimal se queda la coma al aire:  
"1," */ 
union all 
select '"' || to_char(1.0, 'FM99G999G999G990D09') || '"' as numero from dual 
/* para evitarlo se pone 0 en las décimas:  
"1,0" */
Agrupar en listado
http://mundodb.es/funcion-oracle-listagg

Al igual que están las funciones estadísticas que, por ejemplo, suman varios valores de varias filas en una agrupación de una fila, la función LISTAGG crea una fila agrupando varias y poniendo en su contenido la lista de elementos. 
Por ejemplo, si se tiene una tabla con los elementos:
CREATE TABLE tabla 
(nombre VARCHAR2(100), 
puesto VARCHAR2(100), 
cantidad NUMBER); 
 
INSERT INTO tabla (cantidad, nombre, puesto) VALUES (1, 'Luis', 'Puesto 1'); 
INSERT INTO tabla (cantidad, nombre, puesto) VALUES (1, 'Carlos', 'Puesto 2'); 
INSERT INTO tabla (cantidad, nombre, puesto) VALUES (2, 'Elena', 'Puesto 1'); 
INSERT INTO tabla (cantidad, nombre, puesto) VALUES (NULL, 'Luisa', 'Puesto 2'); 
INSERT INTO tabla (cantidad, nombre, puesto) VALUES (NULL, 'Jacobo', 'Puesto 1'); 
INSERT INTO tabla (cantidad, nombre, puesto) VALUES (1, 'Carmen', 'Puesto 2'); 
INSERT INTO tabla (cantidad, nombre, puesto) VALUES (2, 'Mercedes', 'Puesto 1'); 
INSERT INTO tabla (cantidad, nombre, puesto) VALUES (1, 'Pepe', 'Puesto 2'); 
INSERT INTO tabla (cantidad, nombre, puesto) VALUES (1, 'Amelia', 'Puesto 1'); 
INSERT INTO tabla (cantidad, nombre, puesto) VALUES (3, 'Jose', 'Puesto 3'); 
 
commit;

Se puede sacar la lista de nombres por puesto y hacer la suma de la cantidad con:
SELECT LISTAGG(nombre||' '||cantidad, '; ') WITHIN GROUP (ORDER BY nombre) LISTA_NOMBRES, 
    SUM(t.cantidad) SUMA_CANT, 
    COUNT(1) CUENTA 
FROM tabla t 
group by puesto 
ORDER BY 2 desc,3 desc;

Que da como resultado:
LISTA_NOMBRES SUMA_CANT CUENTA
Amelia 1; Elena 2; Jacobo ; Luis 1; Mercedes 2 6 5
Carlos 1; Carmen 1; Luisa ; Pepe 1 3 4
Jose 3 3 1