Вы находитесь на странице: 1из 16

RESUMO ORACLE PARTE I BANCO DE DADOS II FUNES DE LINHA FUNES DE CARACTERES

Ex. 1) LOWER (cadeia) Converte caracteres alfabticos em letras minsculas UPPER (cadeia) - Converte caracteres alfabticos em letras maisculas. Ela muito utilizada, pois maisculas e minsculas fazem muita diferena na clusula WHERE. INITCAP (cadeia) Converte o primeiro caractere de cada palavra em maiscula e o restante em minsculas. SELECT first_name "Nome", LOWER(first_name) "Minsculas", UPPER(first_name) "Maisculas", INITCAP(first_name) "1 Letra Maiscula" FROM employees; Ex. 2) LENGTH (cadeia) Retorna a quantidade de caracteres da coluna ou expresso fornecida. SUBSTR (cadeia, posio, tamanho) Extrai uma subcadeia de outra cadeia ou coluna. SELECT first_name "Nome", LENGTH(first_name) "Quantidade de caracteres", SUBSTR(first_name, 1, 3) "Do 1 ao 3 caractere" FROM employees; Ex. 3) SELECT UPPER(last_name) "Maisculas", LOWER(last_name) "Minsculas", LENGTH(last_name) "Quantidade de letras", SUBSTR(last_name, 3, 2) "3 e 4 letras" FROM employees; ThasPaivaAlonso 1

RESUMO ORACLE PARTE I BANCO DE DADOS II Obs.: No exemplo acima, o comando SUBSTR tem como parmetros o campo last_name, a posio 3 e o tamanho 2 . Portanto ir exibir 2 caracteres do campo last_name a partir da posio indicada, no caso a posio 3. Ex. 4) CONCAT (cadeia1, cadeia2) - Concatena duas colunas ou cadeias de caracteres. Semelhante ao operador de concatenao ||. O CONCAT no d espao entre as colunas. SELECT UPPER(last_name) Maisculas, LOWER(last_name) Minsculas, LENGTH(last_name) Quantidade de letras, SUBSTR(last_name, 3, 2) 3 e 4 letras CONCAT(first_name, last_name) Nome e Sobrenome FROM employees WHERE department_id = 50; O exemplo acima exibe os campos first_name e last_name concatenados e apenas os empregados do departamento 50. Ex. 5) INSTR Mostra a posio do 1 caractere encontrado. SELECT first_name "Nome", INSTR (first_name, 'r') "Posicao da letra r" FROM employees WHERE department_id = 30; Ex. 6) LPAD Alinha direita e preenche o que falta esquerda. RPAD Alinha esquerda e preenche o que falta direita. - Exibe o salrio com o tamanho do campo 15. Caso no haja esta quantidade de nmeros completa at o tamanho 15 com o caractere *. Alinha o salrio em duas colunas distintas: um a direita e outro esquerda:

ThasPaivaAlonso

RESUMO ORACLE PARTE I BANCO DE DADOS II SELECT salary "Salrio", RPAD(salary, 15,'*') "Alinhado a esquerda", LPAD(salary,15,'*') "Alinhado a direita" FROM employees WHERE department_id = 50; Ex. 7) - Exibe do departamento 80, o nome alinhado a esquerda e o nome alinhado a esquerda e o nome alinhado a direita com tamanho de 20 caracteres. Completa com @: SELECT first_name "Nome", RPAD(first_name, 20,'@') "Alinhado a esquerda", LPAD(first_name,20,'@') "Alinhado a direita" FROM employees WHERE department_id = 80; Ex. 8) TRIM Tira um conjunto de caracteres de uma String. - Exibe o sobrenome do funcionrio extraindo a letra 'r' quando houver: SELECT last_name "Sobrenome", TRIM('R' FROM last_name) "Sem a letra R" FROM employees WHERE department_id = 30; FUNES NUMRICAS

Ex. 1) ROUND (coluna, d) Arredonda o valor ou coluna especificada, em que d indica o nmero de casas decimais desejado. Se d for negativo, significa que o valor esquerda do ponto decimal ser arredondado. Arredonda para cima.

SELECT ROUND(45.953,2), ROUND(45.953,0), ThasPaivaAlonso 3

RESUMO ORACLE PARTE I BANCO DE DADOS II ROUND(45.923,-1), ROUND(45.99) FROM DUAL; Ex. 2) TRUNC (coluna, d) Trunca o valor ou coluna especificada, em q d indica o nmero de casas decimais desejado. Se d for negativo, significa que o valor esquerda do ponto decimal ser truncado. Arredonda para a mesma dezena.

SELECT TRUNC(45.953,2), TRUNC(45.953,0), TRUNC(45.953,-1), TRUNC(45.99) FROM dual; Ex. 3) MOD (a, b) Retorna o resto da diviso de a e b, em que a e b podem ser constantes, colunas ou expresses.

SELECT MOD(450,2), MOD(432.666,3) FROM dual;

FUNES DE GRUPO

Ex. 1) AVG (coluna) Mdia dos valores de uma coluna. SUM (coluna) - Soma dos valores de uma coluna. MIN (coluna) Valor mnimo de uma coluna. MAX (coluna) Valor mximo de uma coluna. - Exibe a mdia salarial, menor e o maior salrio e a soma salarial dos funcionrios da tabela EMPLOYEES:

ThasPaivaAlonso

RESUMO ORACLE PARTE I BANCO DE DADOS II SELECT AVG(salary) "Media", MIN(salary) "Menor", MAX(salary) "Maior", SUM(salary) "Soma" FROM employees; Ex. 2) COUNT (coluna) - Total de linhas selecionadas. - Exibe a quantidade de empregados da empresa: SELECT COUNT(*) "Qtde", COUNT(ROWID) "Qtde de linhas" FROM employees; Obs. Usamos o ROWID para melhorar a recuperao da quantidade de registros. Ex. 3) IS NULL - Exibe o campo nulo. SELECT employee_id "ID Cargo", department_id "Depto" FROM employees WHERE department_id IS NULL; Ex. 4) STDDEV Desvio padro VARIANCE varincia SELECT STDDEV(salary) "Desvio padro", VARIANCE(salary) "Varincia" FROM employees; Ex. 5) MEDIAN Mediano SELECT MEDIAN(salary) "Mediano", AVG(salary) "Mdia" FROM employees;

ThasPaivaAlonso

RESUMO ORACLE PARTE I BANCO DE DADOS II Ex. 6) GROUP BY - Usado para classificar os grupos. SELECT job_id "Cargo", AVG(salary) "Media", MIN(salary) "Menor", MAX(salary) "Maior" FROM employees GROUP BY job_id; No exemplo, a coluna job_id no tem funo de grupo, por isso precisa colocar no GROUP BY. Ex. 7) ORDER BY Usado para ordenar por determinada coluna. SELECT department_id, SUM(salary), COUNT(ROWID) FROM employees GROUP BY department_id ORDER BY 1; No exemplo acima, a consulta ordenada pela coluna department_id na ordem crescente. Ex. 8) Aninhando funes SELECT MAX(AVG(salary)) "Maior salario medio" FROM employees GROUP BY department_id; Ex. 9) HAVING Usado para restringir grupos. SELECT department_id Depto, SUM(salary) Soma salario FROM employees GROUP BY department_id HAVING SUM(salary) > 20000 ORDER BY 1; ThasPaivaAlonso 6

RESUMO ORACLE PARTE I BANCO DE DADOS II

FUNES DE DATA

Ex. 1) MONTHS_BETWEEN Nmero de meses entre duas datas. SELECT MONTHS_BETWEEN(SYSDATE,HIRE_DATE) "Numero de meses" FROM employees; Ex. 2) SELECT SYSDATE "Data atual", hire_date "Dt. Adm", MONTHS_BETWEEN(sysdate, hire_date) "Qt. Meses", ROUND ((MONTHS_BETWEEN(sysdate, hire_date))/12) "Anos" FROM employees;

Ex. 3) LAST DAY ltimo dia do ms. SELECT sysdate "Data atual", hire_date "Data Admissao", LAST_DAY(hire_date) "Ultimo dia do mes" FROM employees WHERE department_id = 30; Ex. 4) TRUNC Data truncada 1 dia do ms SELECT SYSDATE "Data atual", LAST_DAY(SYSDATE) "Ultimo dia", TRUNC(SYSDATE, 'MONTH') "Primeiro dia" FROM DUAL; Ex. 5) NEXT DAY Dia seguinte a data especificada. SELECT sysdate, NEXT_DAY(sysdate, 'QUARTA-FEIRA') FROM DUAL;

ThasPaivaAlonso

RESUMO ORACLE PARTE I BANCO DE DADOS II Ex. 6) ADD_MONTHS Adiciona meses de calendrio para a data. SELECT sysdate, ADD_MONTHS(sysdate,4) "Adiciona Mes", ADD_MONTHS(sysdate,-2) "Subtrai Mes" FROM DUAL; Ex. 7) TRUNC Data truncada. ROUND Data de arredondamento. SELECT sysdate "Data atual", ROUND(sysdate,'YEAR') "Ano arredondado para cima", TRUNC(sysdate,'YEAR') "Ano arredondado para baixo", ROUND(sysdate,'MONTH') "Mes arredondado para cima", TRUNC(sysdate,'MONTH') "Mes arredondado para baixo" FROM DUAL; Ex. 8) Exibe todos os funcionrios que trabalham h mais de 150 meses SELECT MONTHS_BETWEEN(SYSDATE,HIRE_DATE) FROM EMPLOYEES WHERE MONTHS_BETWEEN(sysdate,HIRE_DATE) > 150 ORDER BY 1 DESC;

FUNES DE CONVERSO

TO_CHAR, TO_NUMBER, TO_DATE: A) Com datas: SELECT SYSDATE, TO_CHAR(sysdate,'MONTH'), TO_CHAR(sysdate,'MM'), TO_CHAR(sysdate,'MON'), ThasPaivaAlonso 8

RESUMO ORACLE PARTE I BANCO DE DADOS II TO_CHAR(sysdate,'YEAR'), TO_CHAR(sysdate,'YY'), TO_CHAR(sysdate,'YYYY'), TO_CHAR(sysdate,'RR'), TO_CHAR(sysdate,'RRRR'), TO_CHAR(sysdate,'DAY'), TO_CHAR(sysdate,'DY'), TO_CHAR(sysdate,'DD'), TO_CHAR(sysdate,'HH12'), TO_CHAR(sysdate,'HH24'), TO_CHAR(sysdate,'MI'), TO_CHAR(sysdate,'SS') FROM DUAL; Formatos: MONTH Ms por extenso. MM Ms com duas letras. MON Ms com trs letras. YEAR Ano por extenso. YY Ano com dois dgitos (RR). YYYY Ano com quatro dgitos (RRRR). DAY Dia da semana por extenso. DY Dia da semana abreviado. DD Dia da semana por nmero. HH12 De 0 a 12 (AM/PM) HH24 De 0 a 24 MI Minutos. SS Segundos. Ex. : SELECT hire_date "Data Admissao", TO_CHAR (hire_date,'YEAR') "Ano por extenso", TO_CHAR (hire_date,'MONTH') "Mes por extenso", TO_CHAR (hire_date,'HH24:MI:SS') "Horario" FROM employees;

ThasPaivaAlonso

RESUMO ORACLE PARTE I BANCO DE DADOS II B) Com valores: SELECT TO_CHAR(salary, '99,999.99'), TO_CHAR(salary, '00999'), TO_CHAR(salary, '$9999.00'), TO_CHAR(salary, '00999'), TO_CHAR(salary, 'L9999.99') FROM employees WHERE department_id = 10;

JUNO DE TABELAS

Padro Oracle EQUIJOIN - Juno de colunas idnticas nas tabelas: SELECT d.department_name, e.first_name FROM departments d, employees e WHERE e.department_id = d.department_id; NOEQUIJOIN - Ocorre quando no ha coluna em igualdade e sim corresponde a um intervalo que corresponde a duas colunas da tabela. SELECT e.last_name, e.salary, j.min_salary, j.max_salary FROM employees e, jobs j WHERE e.job_id = j.job_id AND e.salary BETWEEN j.min_salary AND j.max_salary AND e.department_id = 80; SELFJOIN (JUNO EXTERNA) - Esta juno exibe mesmo quando no ha correspondncia na tabela associada. SELECT e.employee_id, e.last_name, e.department_id FROM employees e, departments d WHERE e.department_id(+) = d.department_id; Obs.: A consulta acima exibe os departamentos que no tem funcion ThasPaivaAlonso 10

RESUMO ORACLE PARTE I BANCO DE DADOS II SELECT e.employee_id, e.last_name, e.department_id FROM employees e, departments d WHERE e.department_id = d.department_id(+); Obs.: A consulta acima exibe o empregado que no esta em departamento algum. AUTO-JUNO SELECT a.last_name || ' trabalha para ' || b.last_name FROM employees a, employees b WHERE a.manager_id = b.employee_id; A consulta acima exibe o nome do empregado e o nome do gerente que o chefia. OBS.: Usada quando queremos exibir hierarquia. No exemplo acima o gerente tambm um empregado registrado na tabela employees. Portanto, trazemos a mesma tabela 2 vezes uma com apelido para exibir empregado e outra pra exibir informaes do gerente. SELECT a.last_name "Empregado", a.manager_id "Id Gr", b.employee_id "Id Empr", b.last_name "Ger." FROM employees a, employees b WHERE a.manager_id = b.employee_id;

Padro Ansi CROSS JOIN - exibe um produto cartesiano entre as duas tabelas Usado: quantidade de dados para teste Ocorre na falta de um join ou em erro de join Ex 1) Exibir o nome do funcionario e o nome do seu cargo SELECT last_name, job_title FROM employees CROSS JOIN jobs;

ThasPaivaAlonso

11

RESUMO ORACLE PARTE I BANCO DE DADOS II NATURAL JOIN (JUNO NATURAL) - Nesta juno necessrio informar a coluna que ser feita a juno. Ir buscar colunas idnticas com valores de contedos iguais. Ex 2) Exibir o nome do departamento e a cidade que o departamento est alocado: SELECT department_name, city FROM departments NATURAL JOIN locations; CLAUSULA USING - informa a coluna que dever ser utilizada pelo join. SELECT e.last_name, j.job_title FROM employees e JOIN jobs j USING (job_id); CLAUSULA ON - usado para deixar a juno mais legvel. SELECT e.employee_id, e.last_name, d.department_id, d.department_name FROM employees e JOIN departments d ON (e.department_id = d.department_id); JUNO COM 3 TABELAS NO PADRAO ANSI SELECT e.employee_id, e.first_name, d.department_name, l.city FROM employees e JOIN departments d ON d.department_id = e.department_id JOIN locations l ON l.location_id = d.location_id; OUTER JOIN: LEFT - Exibe todas as informaes da tabela a esquerda mesmo que no tenha a direita. Ex. SELECT e.first_name || ' ' ||e.last_name "Nome", d.department_name "Departamento" ThasPaivaAlonso 12

RESUMO ORACLE PARTE I BANCO DE DADOS II FROM employees e LEFT OUTER JOIN departments d ON e.department_id = d.department_id; A consulta acima exibe o nome do empregado e o nome do departamento de todos os empregados mesmo que no esteja alocado em nenhum departamento. RIGHT - exibe todas as informaes da tabela a direita mesmo que no tenha a esquerda. SELECT e.last_name "Sobrenome", e.job_id "Cargo", d.department_id "Depto", d.department_name "Nome Depto" FROM employees e RIGHT OUTER JOIN departments d ON (e.department_id = d.department_id); A consulta acima exibe o sobrenome, o cargo, o id do departamento e o nome do departamento de todos os funcionrios; inclusive dos departamentos que no possuem funcionrio algum. FULL - Exibe todas as linhas da esquerda e da direita mesmo que no haja correspondncia. LEFT + RIGHT SELECT e.first_name || ' '||e.last_name "Nome", e.job_id "Cargo", d.department_id "Depto", d.department_name "Nome Depto" FROM employees e FULL OUTER JOIN departments d ON e.department_id = d.department_id; A consulta acima exibe os funcionrios que no trabalham departamento e os departamentos que no possuem empregado. em nenhum

ThasPaivaAlonso

13

RESUMO ORACLE PARTE I BANCO DE DADOS II SUBCONSULTAS

Ex. 1) SELECT last_name, salary FROM employees WHERE salary > (SELECT salary FROM employees WHERE last_name = 'Abel'); OBS.: H 2 tipos de subconsulta: a) Uma linha (a subconsulta retorna somente 1 registro); Operadores: >, <, >=, <=, !=, <>, = b) Mais de uma linha (subquerie retorna mais de 1 registro); Operadores: IN, SOME, ALL, ANY Ex. 2) SELECT employee_id, last_name, job_id, salary FROM employees WHERE job_id = (SELECT job_id FROM employees WHERE employee_id = 141) AND salary > (SELECT salary FROM employees WHERE employee_id = 143); Ex. 3) SELECT employee_id, last_name, job_id FROM employees WHERE job_id = (SELECT job_id FROM employees WHERE employee_id = 176);

Ex. 4) SELECT last_name, department_id FROM employees WHERE department_id = (SELECT department_id FROM employees WHERE employee_id = 101); Ex. 5) SELECT e.first_name, d.department_name FROM employees e, departments d WHERE e.department_id = d.department_id AND e.department_id = (SELECT department_id FROM employees ThasPaivaAlonso 14

RESUMO ORACLE PARTE I BANCO DE DADOS II WHERE employee_id = 101) AND e.employee_id <> 101 ORDER BY 1; OBS.: A ultima condio traz todos os funcionrios menos o funcionrio de numero 101. Ex. 6) SELECT last_name "Nome", salary "Salario" FROM employees WHERE salary = (SELECT MAX(salary) FROM employees); Ex. 7) SELECT department_id, MIN(salary) FROM employees GROUP BY department_id HAVING MIN(salary) > (SELECT MIN(salary) FROM departments WHERE department_id = 50); Ex. 8) Usando varivel. O departamento ser digitado. SELECT department_id, MIN(salary) FROM employees GROUP BY department_id HAVING MIN(salary) >=(SELECT MIN(salary) FROM departments WHERE department_id = &dept); Ex. 9) Exibe o cargo com menor salrio mdio: SELECT job_id "Cargo", AVG(salary) "Media" FROM employees GROUP BY job_id HAVING AVG(salary) = (SELECT MIN(AVG(salary)) FROM employees GROUP BY job_id);

ThasPaivaAlonso

15

RESUMO ORACLE PARTE I BANCO DE DADOS II OPERADORES DE MAIS DE UMA LINHA: IN, ANY, ALL <ANY - Exibe o valor menor que o mximo - Exibe os funcionrios que no sejam programadores de ti cujo salrio seja menor que o de qualquer programador de TI: SELECT employee_id, last_name, salary, job_id FROM employees WHERE salary <ANY (SELECT salary FROM employees WHERE job_id ='IT_PROG') AND job_id != 'IT_PROG'; >ANY - Exibe o valor maior que o mnimo OPERADOR ALL A) >ALL - Exibe o maior que o mximo valor B) <ALL - Exibe o menor que o mnimo valor Exibe os funcionrios cujo salrio seja menor que o salrio de todos os funcionrios com um cargo de IT_PROG e cujo cargo no seja este: SELECT last_name, salary FROM employees WHERE salary <ALL (SELECT salary FROM employees WHERE job_id = 'IT_PROG') AND job_id <> 'IT_PROG'; Ex.) Exibir todos os funcionrios que no possuem subordinado: SELECT e.last_name FROM employees e WHERE e.employee_id NOT IN (SELECT g.manager_id FROM employees g WHERE manager_id IS NOT NULL);

ThasPaivaAlonso

16

Вам также может понравиться