sql oracle

Upload: felipe-calheiros

Post on 11-Jul-2015

156 views

Category:

Documents


1 download

TRANSCRIPT

Verso 9iFundamentos de Banco de DadosLuiz Frederico Lopes de Oliveira [email protected]

1

IntroduoObjetivos do Curso Forma de Avaliao Cronograma Previsto Introduo a Linguagem SQL Modelo de Dados

2

Objetivos do cursoHabilidades e CompetnciasConhecer os elementos bsicos de um SGBD Relacional Conhecer os recursos da linguagem SQL no Oracle9i

3

Forma de AvaliaoProvas: VA1 e VA2 Trabalho EscritoNota VA1: Listas de Exerccios Nota VA2: Listas de Exerccios

SeminriosNota VA1:Ferramentas para gerao de SQL Ferramentas para tunning de SQL Utilitrios Oracle: Import, Export, SqlLoader Planos de execuo de SQL Nota 2: Apresentao das atualizaes na modelagem de dados

4

CronogramaPARTE 1Instrues SQL SELECT Funes SQL Exibindo Dados de Vrias Tabelas Funes de Grupo Subconsultas Manipulando Dados Usando Operadores de Conjunto Recuperao Hierrquica5

CronogramaPARTE 2Criando e Gerenciando Tabelas Incluindo Restries Criando Views Outros Objetos de Banco de Dados Linguagem PL/SQL Triggers Funes e Procedimentos Pacotes Extenses do Oracle para Instrues DML 6

CronogramaBibliografiahttp://www.oracle.com/technology/documentation/o racle9i.html Manual do Curso Oracle 9i Database: Linguagem SQL Oracle 9i: SQL, PL-SQL e Administrao Eduardo Terra Morelli, Editora rica Oracle 9i Jos Antnio Ramalho, Editora Berkeley Oracle 9i - Programao PL/SQL Scott Urman, Editora Campus7

Linguagem SQLDados HistricosEm junho de 1979, o Dr. E.F.Codd publicou A Relational Model of Data for Large Shared Data Banks A IBM Corporation, inc. desenvolveu a linguagem SEQUEL (Structured English Query Language) Posteriormente passou a se chamar SQL

Instituies que estabelecem padres para a linguagemANSI (American National Standard Institute) 8 ISO (International Standards Organization)

Linguagem SQLSubdivises da linguagemDML Data Manipulation Language Manipulao dos dados DDL Data Definition Language Criao, alterao e excluso dos objetos DCL Data Control Language Controle de Transao Efetivao ou no das transaes Controle de Sesso Configurar a sesso Controle do Sistema 9 Configurar a instncia Oracle

Linguagem SQLUsando SQL no OracleSQL*Plus Ferramenta para interao com o banco de dados Oracle Usurio: DESENV Senha: DESENV

10

Modelo de dadosUsurio DESENV

11

Modelo de dadosUsurio HR

12

Instrues SQL SELECT Funes SQL Exibindo Dados de Vrias Tabelas Funes de Grupo Subconsultas Manipulando Dados Usando Operadores de Conjunto Recuperao Hierrquica13

Instrues SQL SELECTRecursos

14

Instrues SQL SELECTForma bsica do comando SELECTSELECT

SELECT CD_MAT, NM_FUNC FROM FUNC; SELECT * FROM FUNC;15

Instrues SQL SELECTUso de ALL, UNIQUE e DISTINCTSELECT CD_DEPTO FROM FUNC; SELECT DISTINCT CD_DEPTO FROM FUNC;

Restringindo a Consulta (WHERE)SELECT CD_MAT, NM_FUNC FROM FUNC WHERE CD_DEPTO = A00;16

Instrues SQL SELECTOperadores de Comparao( = ) igual (^=) ou () ou (!=) diferente ( > ) maior ( >= ) maior ou igual ( < ) menor ( 54

Intervalo de Valores (BETWEEN) Intervalos numricos, alfanumricos e datasSELECT CD_MAT,NM_FUNC FROM FUNC 18 WHERE CD_MAT BETWEEN 100 AND 140

Instrues SQL SELECTLista de Valores (IN)SELECT CD_MAT,NM_FUNC FROM FUNC WHERE CD_MAT IN (10,100,320) SELECT CD_MAT,NM_FUNC FROM FUNC WHERE CD_MAT NOT IN (10,100,320)

Valor Desconhecido (NULL)SELECT CD_MAT,NM_FUNC FROM FUNC WHERE CD_GERENTE IS NULL19

Instrues SQL SELECTContedo de um Texto (LIKE)SELECT CD_MAT,NM_FUNC FROM FUNC WHERE NM_FUNC LIKE E% AND CD_DEPTO LIKE D_1

Contedo de um Texto com EscapeSELECT FROM WHERE CD_MAT,CD_DEPTO,TX_MOTIVO HST_PROMO TX_MOTIVO LIKE %/_% ESCAPE /20

No podem ser usados como Escape: % _

Instrues SQL SELECTDefinindo apelido (ALIAS) de coluna Segue o nome da coluna Usa a palavra-chave AS Uso de aspas duplas formata apelidoSELECT NM_FUNC AS NOME, VL_SAL SAL, NM_SOBRENOME Sobrenome FROM FUNC WHERE VL_SAL > 1000

ConcatenaoSELECT NM_FUNC || NM_SOBRENOME FROM FUNC WHERE VL_SAL > 100021

Instrues SQL SELECTOperadores Aritmticos +-*/SELECT NM_FUNC, NM_SOBRENOME, VL_SAL * -1.1 FROM FUNC WHERE VL_SAL > 1000

Valores NULL em expresses aritmticasSELECT VL_SAL * 1.1 * COLUNA_NULL FROM FUNC WHERE VL_SAL > 100022

Instrues SQL SELECTPrecedncia CondicionalOperadores Aritmticos Concatenao Comparao Negao Lgica (NOT) Conjuno (AND) Disjuno (OR)

Precedncia AritmticaUnrios (+, -) Multiplicao e Diviso ( *, / ) Adio, Subtrao ( +, - )23

Instrues SQL SELECTMudando a Precedncia das OperaesSELECT CD_MAT,NM_SOBRENOME FROM FUNC WHERE (CD_DEPTO = D11 OR CD_DEPTO = D21 ) AND NR_CARGO > 54 SELECT (VL_SAL + 100) * 2 FROM FUNC WHERE NR_CARGO = 5424

Instrues SQL SELECTInformaes do Sistema e LiteraisSELECT USER FROM DUAL; SELECT SYSDATE FROM DUAL; SELECT 1, qualquer coisa FROM DUAL; DESC[RIBE] ;25

Instrues SQL SELECTOperadores ANY, SOME e ALLSELECT CD_MAT,NM_FUNC FROM FUNC WHERE CD_MAT > ANY (10,100); SELECT CD_MAT,NM_FUNC FROM FUNC WHERE CD_MAT > SOME (10,100); SELECT CD_MAT,NM_FUNC FROM FUNC WHERE CD_MAT > ALL (10,100);26

Instrues SQL SELECTOrdenando Resultados (ORDER BY) Ascendente ou Descendente SELECT CD_DEPTO, NM_SOBRENOME, VL_SAL FROM FUNC WHERE VL_SAL > 4000 ORDER BY CD_DEPTO ASC, 3 DESC;

27

Instrues SQL SELECTOrdenando Resultados (ORDER BY) (Cont.) Usando um apelido (Alias) SELECT VL_SAL * 1.1 PROJECAO, CD_DEPTO FROM FUNC WHERE VL_SAL > 4000 ORDER BY 2, PROJECAO DESC;

28

Instrues SQL SELECTOrdenando Resultados (ORDER BY) (Cont.) Ordenando Valores NULL SELECT CD_DEPTO, CD_GERENTE FROM DEPTO ORDER BY 2; SELECT CD_DEPTO, CD_GERENTE FROM DEPTO ORDER BY 2 NULLS FIRST; 29

Instrues SQL SELECTExerccio_43 Exerccio_VA_1

30

Instrues SQL SELECT Funes SQL Exibindo Dados de Vrias Tabelas Funes de Grupo Subconsultas Manipulando Dados Usando Operadores de Conjunto Recuperao Hierrquica31

Funes SQLFinalidadesExecutar clculos usando dados Modificar itens de dados individuais Manipular a sada para grupos de linhas Formatar Datas e Nmeros Converter tipos de dados de colunas

TiposFunes de uma nica linha Funes de vrias linhas

32

Funes SQLFunes de uma nica linhaManipulam itens de dados Aceitam argumentos e retornam um valor Agem em cada linha retornada Retornam um resultado por linha Podem modificar o tipo de dados Podem ser aninhadas Aceitam argumentos que podem ser uma coluna ou expresso

33

Funes SQLTipos de funes de uma nica linhaCaractereEntrada caractere e retorna caractere ou numrica

NumricasEntrada numrica e retorna numrico

DataEntrada DATE e retorna DATE (Exceto MONTHS_BETWEEN, que retorna nmero)

Converso Propsito GeralNVL, NVL2 , NULLIF COALESCE CASE, DECODE

34

Funes SQLFunes de CaractereLOWER(exp|col): Converte caracteres alfabticos para minscula UPPER(exp|col): Converte caracteres alfabticos para maiscula INITCAP(exp|col): Converte caracteres alfabticos para maiscula na primeira letra de cada palavra e minsculas nas demais CONCAT(exp1|col1,exp2|col2): Equivalente a || SUBSTR(exp|col,m[,n]): Retorna n caracteres a partir da posio m.Se m for negativo, comea a contar do final. 35 Se n for omitido, retorna caracteres at o final.

Funes SQLFunes de CaractereLENGTH(exp|col): Retorna nmero de caracteres INSTR(exp|col,string,m,n): Retorna a posio da string em exp|col.m posio para iniciar a pesquisa n o nmero da ocorrncia O valor default de m e n 1.

LPAD(exp|col,n,string): Preenche exp|col com n string justificando a direitaSe string no for informada, preenche com .

RPAD(exp|col,n,string): Preenche exp|col com n string justificando a esquerdaSe string no for informada, preenche com .36

Funes SQLFunes de CaractereTRIM(caractere_remoo FROM origem): Remove o caractere_remoo do inicio e final de origem. Se somente origem for informado, remove o caractere REPLACE(texto, pesquisa, substituio): Procura por pesquisa em texto. Se encontrar, substitui por substituio.

37

Funes SQLFunes de CaractereLOWER(Curso SQL) = curso sql UPPER(Curso SQL) = CURSO SQL INITCAP(Curso SQL) = Curso Sql CONCAT(Curso, Sql) = CursoSql SUBSTR(CursoSql,1,5) = Curso LENGTH(CursoSql) = 8 INSTR(CursoSql,o) = 5 LPAD(CursoSql,15,*) = *******CursoSql RPAD(CursoSql,15,*) = CursoSql******* TRIM(C FROM CursoSql) = ursoSql38

Funes SQLFunes NumricasROUND(exp|col,n): Arredonda para n casas decimais.Se n for omitido, arredonda para nenhuma casa decimal Se n for negativo, os nmeros a esquerda da vrgula decimal sero arredondados

TRUNC(exp|col,n): Trunca em n casas decimais.Se n for omitido, trunca em nenhuma casa decimal Se n for negativo, os nmeros a esquerda da vrgula decimal sero truncados

MOD(m,n): Retorna o resto de m dividido por n.39

Funes SQLFunes NumricasROUND(45.926,2) ROUND(45.926) ROUND(45.926,-1) TRUNC(45.926,2) TRUNC(45.926) TRUNC(45.926,-2) MOD(1600,300) Observaes: = = = = = = = 45.93 46 50 45.92 45 0 100

As funes ROUND e TRUNC podem ser usadas com datas. A funo MOD muito utilizada para determinar se um 40 nmero par ou mpar

Funes SQLFunes de DataConsideraes Iniciais: O banco armazena as datas com sculo, ano, ms, dia, hora, minuto e segundo O formato de exibio e entrada default DDMON-RR Intervalo vlido: 01 de janeiro de 4712 A.C. at 31 de dezembro de 9999 D.C. SYSDATE uma funo que retorna data e hora41

Funes SQLFunes de DataAritmtica com Datas: Data + NmeroResultado: Data Adicionar nmeros de dias a uma data

Data - NmeroResultado: Data Subtrair nmeros de dias de uma data

Data - DataResultado: Nmero de dias Verificar quantidade de dias entre duas datas

Data + Nmero/24Resultado: Data Adicionar horas a uma data42

Funes SQLFunes de DataMONTHS_BETWEEN(data1,data2): Nmero de meses entre data1 e data2 ADD_MONTHS(data1,n): Adiciona um nmero n de meses data1 NEXT_DAY(data1,caract): Retorna o prximo dia da semana especificado por caract LAST_DAY(data): Retorna o ltimo dia do ms ROUND(data,fmt): Retorna a data arredondada para a unidade especificada pelo formato fmtSe fmt for omitido, arredonda para o dia mais prximo43

Funes SQLFunes de DataTRUNC(data,fmt): Retorna a data truncada para a unidade especificada pelo formato fmtSe fmt for omitido, trunca para o dia mais prximo

44

Funes SQLFunes de DataMONTHS_BETWEEN(01-SEP-95,11-JAN-94) = 19.6774194 ADD_MONTHS(11-JAN-94,6) = 11-JUL-94 NEXT_DAY(01-SEP-95,FRIDAY) = 08-SEP-95 LAST_DAY(01-FEB-95) = 28-FEB-95 ROUND(25-JUL-95,MONTH) ROUND(25-JUL-95,YEAR) TRUNC(25-JUL-95,MONTH) TRUNC(25-JUL-95,YEAR) = 01-AUG-95 = 01-JAN-96 = 01-JUL-95 = 01-JAN-9545

Funes SQLFunes de ConversoConverso de Dados Implcita Nas designaes: VARCHAR2 ou CHAR para VARCHAR2 ou CHAR para NUMBER para DATE para NUMBER DATE VARCHAR2 VARCHAR2

Na avaliao de expresses: VARCHAR2 ou CHAR para NUMBER VARCHAR2 ou CHAR para DATE46

Funes SQLFunes de ConversoConverso de Dados Explcita

47

Funes SQLFunes de ConversoTO_CHAR( nmero|data, [fmt], [nlsparams] ): Converte nmero ou data em uma string de caracteres Converso de Nmero Nlsparams: Caractere decimal Separador de grupo Smbolo de moeda local/internacional Converso de Data Nlsparams: Idioma em que os nomes e abreviaes 48 de meses e dias sero retornados

Funes SQLFunes de ConversoTO_NUMBER( caract, [fmt], [nlsparams] ): Converte uma string de caracteres contendo dgitos para um nmero TO_DATE( caract, [fmt], [nlsparams] ): Converte uma string de caracteres que representa uma data em um valor de data

49

Funes SQLFunes de ConversoUsando TO_CHAR com datas TO_CHAR(01-JAN-95,MM/YY) = 01/94 Principais formatos de data: YYYY - Ano completo em nmeros YEAR - Ano por extenso MM - Ms com dois dgitos MONTH - Nome do ms MON - Nome do ms abreviado (3 letras) DD - Dia do ms numrico DAY - Nome do dia da semana DY - Nome do dia da semana abreviado 50

Funes SQLFunes de ConversoTO_CHAR(01-JAN-95,HH24:MI:SS) = 15:45:01 Principais formatos de hora: HH ou HH12 - Hora (1-12) HH24 - Hora (0-23) MI - Minutos SS - Segundos SSSSS - Milisegundos Sufixos para influenciar exibio dos nmeros: TH - Ordinal SP - Por extenso SPTH - Ordinal por extenso 51 THSP - Idem ao anterior

Funes SQLFunes de ConversoUsando TO_CHAR com nmeros TO_CHAR(10000,$99,999.00) = $ 10.000,00 Principais formatos de nmero: 9 - Representa um nmero 0 - Fora a exibio de um zero $ - Coloca um smbolo de dlar L - Usa o smbolo da moeda local flutuante . - Imprime uma vrgula decimal , - Imprime um indicador de milhar52

Funes SQLFunes de ConversoTO_CHAR(DATA,DD/MM/YYYY) TO_CHAR(VL_SAL,$99,999.00) TO_NUMBER(100000) TO_DATE(01-01-2005,DD-MM-YYYY)

53

Funes SQLAninhando FunesAs funes aninhadas so avaliadas do nvel mais interno para o mais externo TO_CHAR(NEXT_DAY(ADD_MONTHS(SYSDATE ,6), FRIDAY),fmDay, Month Dth, YYYY) Prxima sexta-feira, aps seis meses de sysdate

54

Funes SQLFunes de Propsito GeralNVL(expr1,expr2): Se expr1 for NULL, retorna expr2. Caso contrrio, retorna a prpria expr1. NVL2(expr1,expr2,expr3): Se expr1 for NULL, retorna expr2. Caso contrrio, retorna expr3. NULLIF(expr1,expr2): Compara expr1 com expr2. Se forem iguais, retorna NULL. Se forem diferentes, retorna expr1. COALESCE(expr1,expr2,...,exprN): Retorna a primeira expr diferente de NULL da lista.55

Funes SQLFunes de Propsito GeralNVL(CD_GERENTE,0) NVL(DT_INI,SYSDATE) NVL(NM_SIGLA,No Preenchido) NVL2(CD_GERENTE,A,B) NULLIF(LENGTH(NM_FUNC), LENGTH(NM_SOBRENOME)) COALESCE(NM_FUNC,NM_SOBRENOME, No Informado)

56

Funes SQLFunes de Propsito GeralFunes que possibilitam o uso da lgica IF-THEN-ELSE: Expresso CASE CASE expr WHEN compara1 THEN retorna1 WHEN compara2 THEN retorna2 ... ELSE retornaN END DECODE(expr,pesquisa1,resultado1,default): Compara exp com pesquisaN e se for igual retorna resultadoN. Pode retornar o valor default caso 57 nenhuma comparao tenha sucesso.

Funes SQLFunes de Propsito GeralExpresso CASE SELECT CASE CD_DEPTO WHEN D11 THEN VL_SAL*1.1 WHEN D21 THEN VL_SAL*1.2 ELSE VL_SAL END FROM FUNC

58

Funes SQLFunes de Propsito GeralFuno DECODE SELECT DECODE(CD_DEPTO,D11,VL_SAL*1.1,D21,VL_SAL*1.2,

VL_SAL)FROM FUNC

59

Funes SQLAumentando o conhecimentoFunes Caractere Ltrim: remove caracteres esquerda Rtrim : remove caracteres direita Translate: substitui caracteres entre strings Ascii: retorna o valor ASCII ou EBCDIC Funes Numricas Abs: valor absoluto Floor: maior inteiro menor ou igual Power: potncia Sign: sinal da expresso Vrias Funes Trigonomtricas 60

Funes SQLAumentando o conhecimentoFunes de Data SessionTimeZone: fuso horrio da sesso LocalTimestamp: data e hora no fuso da sesso Funes de Converso CharToRowid To_Clob To_Lob Funes de Propsito Geral Empty_Blob: equivalente ao NULL para Blob Empty_Clob: equivalente ao NULL para Clob Greatest: maior valor da lista 61 Least: menor valor da lista

Funes SQLExerccio_104

Exerccio_VA_2

62

Instrues SQL SELECT Funes SQL Exibindo Dados de Vrias Tabelas Funes de Grupo Subconsultas Manipulando Dados Usando Operadores de Conjunto Recuperao Hierrquica63

Exibindo dados de vrias tabelasProdutos CartesianosCaractersticas: Acontecer quando uma condio de juno for omitida ou for invlida Todas as linhas da primeira tabela so unidas a todas as linhas da segunda tabela Para ser evitado, dever existir uma condio de juno vlida em uma clusula WHERE

SELECT NM_FUNC, NM_DEPTO FROM FUNC, DEPTO64

Exibindo dados de vrias tabelasTipos de JunesAt Oracle 8iEqijuno No-eqijuno Juno externa Autojuno

Oracle 9i oferece sintaxe que compatvel com SQL: 1999Junes hbridas Junes naturais Clusula Using Outer joins de dois lados ou completas 65 Condies de juno arbitrrias para junes externas

Exibindo dados de vrias tabelasUnindo tabelas usando sintaxe oracle SELECT tab1.coluna, tab2.coluna FROM tab1, tab2 WHERE tab1.col_join = tab2.col_join;Observaes Coloque o nome da tabela antes dos nomes de todas as colunas do SELECT para fins de clareza e para melhorar o acesso ao banco de dados66

Exibindo dados de vrias tabelasUnindo tabelas usando sintaxe oracleObservaes (continuao): Coloque o nome da tabela antes do nome da coluna quando aparecer o mesmo nome de coluna em mais de uma tabela Para unir n tabelas, necessrio um mnimo de n-1 condies de juno. Cada condio de juno pode possuir mais de uma linha, caso a juno seja formada por mais de uma coluna.

67

Exibindo dados de vrias tabelasEqijunesUsada quando o valor nas colunas da juno devem ser iguais Geralmente este tipo de juno envolve uma chave estrangeira e uma chave primria Tambm so conhecidas como junes simples ou internas SELECT FUNC.NM_FUNC, DEPTO.NM_DEPTO FROM FUNC, DEPTO WHERE FUNC.CD_DEPTO = 68 DEPTO.CD_DEPTO

Exibindo dados de vrias tabelasUnindo mais de duas tabelasSELECT A.NM_SIGLA SIGLA_ATV, P.NM_PROJ PROJETO, PA.DT_INI INICIO, PA_DT_FIM FIM FROM ATIV A, PROJ P, PRJATV PA WHERE A.CD_ATIV = PA.CD_ATIV AND PA.CD_PROJ = P.CD_PROJ69

Exibindo dados de vrias tabelasNo-eqijunesApresentam condies de juno que no possuem um operador de igualdade SELECT F.NM_FUNC, P.NM_PROJ FROM FUNC F, PROJ P WHERE F.DT_ADM BETWEEN P.DT_INI AND P.DT_FIM

70

Exibindo dados de vrias tabelasJunes externas (Outer Joins)Usado para ver as linhas que no possuem valor correspondente para a condio de juno Operador de juno o sinal de mais (+) O operador s pode aparecer em um lado da expresso, o lado com informaes incompletas SELECT F.NM_FUNC Gerente,D.NM_DEPTO FROM FUNC F,DEPTO D WHERE F.CD_MAT = D.CD_GERENTE SELECT F.NM_FUNC Gerente,D.NM_DEPTO FROM FUNC F,DEPTO D WHERE F.CD_MAT(+) = D.CD_GERENTE71

Exibindo dados de vrias tabelasUnindo uma tabela a ela mesmaAutojunes SELECT D2.NM_DEPTO Superior, D1.NM_DEPTO Inferior FROM DEPTO D1, DEPTO D2 WHERE D1.CD_DEPTO_CTB = D2.CD_DEPTO

72

Exibindo dados de vrias tabelasCriando Junes HbridasClusula CROSS JOIN Equivale ao produto cartesiano

SELECT NM_FUNC, NM_DEPTO FROM FUNC CROSS JOIN DEPTO

73

Exibindo dados de vrias tabelasCriando Junes NaturaisClusula NATURAL JOIN Baseia-se em todas as colunas com o mesmo nome nas duas tabelas Se as colunas com os mesmos nomes tiverem tipos de dados diferentes, ser retornado um erro

SELECT NM_FUNC, NM_DEPTO FROM FUNC NATURAL JOIN DEPTO

74

Exibindo dados de vrias tabelasCriando Junes com Clusula USINGUsada para especificar apenas as colunas que devem ser unidas na eqijuno As colunas referenciadas pela clusula USING no devem ter apelido ou nome de tabela em nenhuma parte da instruo

SELECT F.NM_FUNC, D.NM_DEPTO FROM FUNC F JOIN DEPTO D USING (CD_DEPTO)

75

Exibindo dados de vrias tabelasCriando Junes com Clusula ONUsada para especificar as colunas que devem ser unidas SELECT F.NM_FUNC, D.NM_DEPTO FROM FUNC F JOIN DEPTO D ON (F.CD_DEPTO = D.CD_DEPTO) Autojuno: SELECT D2.NM_DEPTO Superior, D1.NM_DEPTO Inferior FROM DEPTO D1 JOIN DEPTO D2 ON (D1.CD_DEPTO_CTB = D2.CD_DEPTO)76

Exibindo dados de vrias tabelasCriando Junes com Clusula ONJunes Triplas: As junes so efetuadas da esquerda para a direita A primeira condio de juno pode fazer referncia a colunas da primeira e segunda tabelas A segunda condio de juno pode fazer referncia a colunas das trs tabelas

77

Exibindo dados de vrias tabelasCriando Junes com Clusula ONJunes Triplas: SELECT A.NM_SIGLA SIGLA_ATV, P.NM_PROJ PROJETO, PA.DT_INI INICIO, PA_DT_FIM FIM FROM ATIV A JOIN PRJATV PA ON (A.CD_ATIV = PA.CD_ATIV) JOIN PROJ P ON (PA.CD_PROJ = P.CD_PROJ)78

Exibindo dados de vrias tabelasLEFT OUTER JOINRecupera todas as linhas da tabela mais a ESQUERDA, mesmo se no houver nenhuma correspondncia na segunda tabela

SELECT F.NM_FUNC, D.NM_DEPTO FROM FUNC F LEFT OUTER JOIN DEPTO D ON (F.CD_DEPTO = D.CD_DEPTO)79

Exibindo dados de vrias tabelasRIGHT OUTER JOINRecupera todas as linhas da tabela mais a DIREITA, mesmo se no houver nenhuma correspondncia na segunda tabela

SELECT F.NM_FUNC, D.NM_DEPTO FROM FUNC F RIGHT OUTER JOIN DEPTO D ON (F.CD_DEPTO = D.CD_DEPTO)80

Exibindo dados de vrias tabelasFULL OUTER JOINRecupera todas as linhas de ambas as tabelas mesmo se no houver correspondncia entre as suas linhas

SELECT F.NM_FUNC, D.NM_DEPTO FROM FUNC F FULL OUTER JOIN DEPTO D ON (F.CD_DEPTO = D.CD_DEPTO)81

Exibindo dados de vrias tabelasCondies AdicionaisPodemos aplicar condies adicionais atravs da clusula WHERE

SELECT F.NM_FUNC, D.NM_DEPTO FROM FUNC F JOIN DEPTO D ON (F.CD_DEPTO = D.CD_DEPTO) WHERE F.CD_FUNC = 10

82

Exibindo dados de vrias tabelasExerccio_120 Exerccio_VA_3

83

Instrues SQL SELECT Funes SQL Exibindo Dados de Vrias Tabelas Funes de Grupo Subconsultas Manipulando Dados Usando Operadores de Conjunto Recuperao Hierrquica84

Funes de grupoFunes que operam em conjuntos de linhas para fornecer um resultado por grupo:SUM(distinct | all n): Valor da soma de n. AVG(distinct | all n): Valor mdio de n. COUNT(*|distinct | all expr): Nmero de linhas. MAX(distinct | all expr): Valor mximo de expr. MIN(distinct | all expr): Valor mnimo de expr. STDDEV(distinct | all n): Desvio padro de n. VARIANCE(distinct | all n): Variancia de n.

85

Funes de grupoObservaesDISTINCT faz com que a funo considere apenas valores distintos. Porm, o default ALL. Um argumento expr pode ser CHAR, VARCHAR2, NUMBER ou DATE Todas as funes de grupo ignoram valores nulos. Exceo COUNT(*) SELECT colunas, funes(colunas) FROM tabelas WHERE condies GROUP BY colunas ORDER BY colunas86

Funes de grupoFuno COUNT(*)A funo count(*) tem trs formatos: COUNT(*): Nmero de linhas da tabela COUNT(expr): Nmero de linhas com valores no-nulos da coluna informada em expr COUNT( DISTINCT expr): Nmero de linhas com valores no-nulos e exclusivos da coluna informada em expr

87

Funes de grupoFunes de Grupos e Valores NulosCertifique-se que existe um funcionrio com VL_SAL NULO e observe o resultado dos SQL abaixo

SELECT AVG(VL_SAL) FROM FUNC SELECT AVG(VL_SAL) FROM FUNC WHERE VL_SAL IS NOT NULL SELECT AVG(NVL(VL_SAL,0)) FROM FUNC

88

Funes de grupoClusula GROUP BYUtilizada para dividir as linhas de uma tabela em grupos No possvel usar um apelido de coluna nesta clusula Todas as colunas da lista SELECT que no estejam em funes de grupo devem estar na clusula GROUP BY Por default, as linhas so classificadas por ordem crescente das colunas includas na lista GROUP BY. Se necessrio, utilize a clusula ORDER BY As colunas do GROUP BY no precisam estar na 89 lista SELECT

Funes de grupoClusula GROUP BY SELECT CD_DEPTO, SUM(VL_SAL) FROM FUNC GROUP BY CD_DEPTO SELECT AVG(VL_SAL) FROM FUNC GROUP BY CD_DEPTO SELECT CD_DEPTO, CD_CARGO,SUM(VL_SAL) FROM FUNC GROUP BY CD_DEPTO, CD_CARGO

90

Funes de grupoClusula HAVINGNo possvel usar funes de grupo na clusula WHERE Use a clusula HAVING para restringir grupos SELECT CD_DEPTO,AVG(VL_SAL) FROM FUNC GROUP BY CD_DEPTO HAVING AVG(VL_SAL) > 1000 SELECT CD_DEPTO,AVG(VL_SAL) FROM FUNC GROUP BY CD_DEPTO HAVING MAX(VL_SAL) > 100091

Funes de grupoClusula HAVINGSELECT CD_DEPTO,AVG(VL_SAL) FROM FUNC WHERE CD_DEPTO LIKE D% GROUP BY CD_DEPTO HAVING AVG(VL_SAL) > 1000

Aninhando Funes de GrupoPodem ser aninhadas at um profundidade de dois SELECT MAX(AVG(VL_SAL)) FROM FUNC GROUP BY CD_DEPTO 92

Funes de grupoExerccio_69 Exerccio_VA_4

93

Instrues SQL SELECT Funes SQL Exibindo Dados de Vrias Tabelas Funes de Grupo Subconsultas Manipulando Dados Usando Operadores de Conjunto Recuperao Hierrquica94

SubconsultasUtilizadas com os seguintes objetivosFornecer valores para condies em clusulas WHERE, HAVING e START WITH Definir conjuntos de linhas a ser inserido em uma outra tabela em uma instruo INSERT ou CREATE TABLE Definir um ou mais valores a serem atribudos em instrues UPDATE Definir a tabela a ser operada numa consulta (clusula FROM). Tambm pode ser feito em instrues INSERT, UPDATE e DELETE95

Subconsultas uma instruo SELECT incorporada a uma clusula de outra instruo. Exemplo: Quem tem um salrio maior que o de fulano ? SELECT NM_FUNC FROM FUNC WHERE VL_SAL>(SELECT VL_SAL FROM FUNC WHERE NM_FUNC=fulano) A subconsulta executada uma vez e o resultado utilizado pela consulta principal possvel colocar subconsultas nas clusulas 96 WHERE, HAVING, FROM e SELECT

SubconsultasObservaesColoque as subconsultas entre parnteses Coloque as subconsultas no lado direito da condio de comparao Use operadores de uma nica linha com subconsultas que retornam uma nica linha Use operadores de vrias linhas com subconsultas que retornam vrias linhas Tambm podem existir subconsultas que retornam mais de uma coluna97

SubconsultasSubconsultas de uma nica linhaSELECT NM_FUNC FROM FUNC WHERE VL_SAL = ( SELECT VL_SAL FROM FUNC WHERE NM_SOBRENOME=WILARES)

Funes de grupo em subconsultasSELECT NM_FUNC FROM FUNC WHERE VL_SAL > (SELECT AVG(VL_SAL) FROM FUNC 98 WHERE CD_DEPTO=D11)

SubconsultasClusula HAVING com subconsultasSELECT CD_DEPTO,SUM(VL_SAL) FROM FUNC GROUP BY CD_DEPTO HAVING SUM(VL_SAL) ANY (SELECT DT_FIM FROM PROJ) SELECT NM_FUNC FROM FUNC WHERE DT_ADM > SOME (SELECT DT_FIM FROM PROJ)101

SubconsultasValores NULL em subconsultasOperadores NOT IN ou ALL podem causar problemas SELECT NM_FUNC FROM FUNC WHERE CD_MAT NOT IN ( SELECT CD_GERENTE FROM DEPTO) SELECT NM_FUNC FROM FUNC WHERE CD_MAT NOT IN ( SELECT NVL(CD_GERENTE,0) 102 FROM DEPTO)

SubconsultasSubconsultas de vrias colunasComparaes emparelhadas: SELECT CD_ATIV FROM PRJATV WHERE (CD_PROJ,DT_INI) IN ( SELECT CD_PROJ,DT_INI FROM PROJ)

103

SubconsultasSubconsultas de vrias colunasComparaes no-emparelhadas: SELECT CD_ATIV FROM PRJATV WHERE CD_PROJ IN (SELECT CD_PROJ FROM PROJ) AND DT_INI IN (SELECT DT_INI FROM PROJ)

104

SubconsultasSubconsultas na clusula FROMUso semelhante ao das views SELECT MAX(QTD_DIAS),MIN(QTD_DIAS) FROM (SELECT P.NM_PROJ, A.DT_FIM A.DT_INI AS QTD_DIAS FROM PROJ P, PRJATV A WHERE P.CD_PROJ = A.CD_PROJ) WHERE NM_PROJ LIKE A%105

SubconsultasSubconsulta escalarUma expresso de subconsulta escalar uma subconsulta que retorna exatamente um valor de coluna de uma linha No Oracle8i: Clusulas FROM e WHERE de uma instruo SELECT Lista VALUES de uma instruo INSERT No Oracle9i: DECODE e CASE Qualquer clusula do SELECT, exceto ORDER BY 106 Clusula SET de um UPDATE

SubconsultasSubconsulta escalarSELECT NM_FUNC, VL_SAL, (SELECT AVG(SAL) FROM FUNC WHERE CD_DEPTO = F2.CD_DEPTO AND IN_SEXO = M) AS MED_DEPTO, (SELECT AVG(SAL) FROM FUNC WHERE IN_SEXO = M) MED_GERAL FROM FUNC F2 107 WHERE IN_SEXO = F

SubconsultasSubconsulta correlacionadaSo usadas para processamento por linha Cada subconsulta executada uma vez para cada linha da consulta externa Ocorre quando uma subconsulta faz referncia a uma coluna de uma tabela da instruo externa SELECT NM_FUNC FROM FUNC F2 WHERE VL_SAL > ( SELECT AVG(SAL) FROM FUNC WHERE CD_DEPTO = F2.CD_DEPTO)108

SubconsultasOperador EXISTSTesta a existncia de linhas no conjunto resultado Se for encontrada uma linha na subconsulta: A pesquisa na subconsulta pra Retorna TRUE SELECT NM_FUNC FROM FUNC WHERE EXISTS ( SELECT X FROM DEPTO WHERE CD_GERENTE = CD_MAT) Tambm pode ser usado com NOT: 109 NOT EXISTS

SubconsultasUPDATE correlacionadaUsada para atualizar as colunas de uma tabela baseado nos valores de outra tabela UPDATE FUNC F SET VL_SAL = (SELECT MAX(SAL) FROM FUNC WHERE CD_DEPTO = F.CD_DEPTO) Lembrete: Subconsultas tambm podem ser usadas na clusula WHERE de instrues DELETE DELETE FROM FUNC F WHERE VL_SAL=(SELECT MAX(SAL)FROM FUNC 110 WHERE CD_DEPTO = F.CD_DEPTO)

SubconsultasClusula WITHUtilizada para repetir um mesmo bloco de consulta em instrues SELECT quando este bloco aparecer mais de uma vez em uma consulta complexa Melhora o desempenho, pois s avaliada uma vez independente da quantidade de vezes que aparece na consulta Facilita a leitura da consulta

111

SubconsultasClusula WITHWITH dept_costs AS ( SELECT D.NM_DEPTO, SUM(F.VL_SAL) AS dept_total FROM FUNC F, DEPTO D WHERE F.CD_DEPTO = D.CD_DEPTO GROUP BY D.NM_DEPTO), avg_cost AS ( SELECT SUM(dept_total)/COUNT(*) AS dept_avg FROM dept_costs) SELECT * FROM DEPT_COSTS WHERE DEPT_TOTAL > (SELECT DEPT_AVG FROM AVG_COST) ORDER BY DEPARTMENT_NAME112

SubconsultasExerccio_53

Exerccio_VA_5

113

Instrues SQL SELECT Funes SQL Exibindo Dados de Vrias Tabelas Funes de Grupo Subconsultas Manipulando Dados Usando Operadores de Conjunto Recuperao Hierrquica114

Manipulando DadosDML (Data Manipulation Language)Adiciona novas linhas a uma tabela Modifica linhas de uma tabela Remove linhas de uma tabela Uma TRANSAO consiste em um conjunto de instrues DML

115

Manipulando DadosAdicionando linhas a uma tabelaINSERT Bsico INSERT INTO {Tabela|View|Materialized View} [(Colunas)] VALUES {(expresses) | Subquery } INSERT INTO FUNC (VL_SAL,CD_MAT,NM_FUNC,CD_DEPTO, IN_SEXO,NM_SOBRENOME) VALUES (1838,272,Laura,D21,F, Pereira);

Lista de colunas opcional

116

Manipulando DadosAdicionando linhas a uma tabelaTratando valores NULL: Mtodo implcito: omite a coluna na lista de colunas Mtodo explcito: palavra-chave NULL na clusula VALUES ou para datas e caracteres Usando valores especiais SYSDATE para datas USER para username Funo TO_DATE para datas117

Manipulando DadosCopiando linhas das tabelasINSERT com SELECT (Subquery)INSERT INTO FUNC ( CD_MAT, NM_FUNC, NM_SOBRENOME, CD_DEPTO,IN_SEXO) SELECT CD_MAT + CD_MAT / 20 , NM_SOBRENOME, NM_FUNC, D01, IN_SEXO FROM FUNC WHERE CD_DEPTO = E21;

118

Manipulando DadosAdicionando linhas usando uma subconsulta na clusula INSERTINSERT INTO ( SELECT CD_MAT, NM_SOBRENOME, NM_FUNC, CD_DEPTO, IN_SEXO FROM FUNC WHERE CD_DEPTO = E21 ) VALUES (9999, Silva, Carla, D01,F); 119

Manipulando DadosAdicionando linhas usando uma subconsulta na clusula INSERTUsando WITH CHECK OPTIONINSERT INTO ( SELECT CD_MAT, NM_SOBRENOME, NM_FUNC, CD_DEPTO, IN_SEXO FROM FUNC WHERE CD_DEPTO = E21 WITH CHECK OPTION ) VALUES (9999, Silva, Carla, 120 D01,F);

Manipulando DadosAlterando dados de uma tabelaUPDATE Bsico UPDATE {Tabela|View|Materialized View} SET Colunas = {expresses|Subquery} [WHERE ] UPDATE FUNC SET NR_RAMAL = 4176 WHERE CD_MAT IN (272,274)

121

Manipulando DadosAtualizando dados com subconsultasUPDATE com SELECT UPDATE FUNC SET (VL_SAL,NR_CARGO) = (SELECT VL_SAL * 0.9,NR_CARGO FROM FUNC WHERE CD_MAT = 10 ) WHERE NR_CARGO = 58; UPDATE FUNC SET VL_SAL = (SELECT MAX(VL_SAL) FROM FUNC ), NR_CARGO =(SELECT MIN(NR_CARGO) 122 FROM FUNC );

Manipulando DadosRemovendo linhas de uma tabelaDELETE Bsico DELETE [FROM] {Tabela|View|Materialized View} [WHERE ] DELETE FROM FUNC WHERE NM_FUNC = Elizabeth; DELETE FROM FUNC WHERE CD_MAT = 60;

123

Manipulando DadosErros mais comuns ao manipular linhas de uma tabelaValor obrigatrio ausente em uma coluna NOT NULL Valor duplicado que viola a restrio de unicidade Restrio de chave estrangeira violada Restrio CHECK violada Tipos de dados diferentes Valor muito grande para a coluna124

Manipulando DadosRecurso Explicit DefaultCom o recurso explicit default podemos usar a palavra-chave DEFAULT como um valor de coluna onde o valor default desejado Este recurso foi adicionado para fins de compatibilidade com o SQL:1999 Standard O explicit default pode ser usado nas instrues INSERT ou UPDATE UPDATE FUNC SET COLUNA = DEFAULT WHERE CD_MAT = 272125

Manipulando DadosIntercalando linhasInstruo MERGE Executa uma operao UPDATE se a linha existir e uma operao INSERT se for uma linha nova: Evita atualizaes separadas Aumenta o desempenho e a facilidade de utilizao muito til em aplicaes e data warehousing126

Manipulando DadosIntercalando linhasMERGE INTO tabela apelido USING (tab|view|subconsulta) apelido ON (condio de juno) WHEN MATCHED THEN UPDATE SET.... WHEN NOT MATCHED THEN INSERT ... VALUES ...;

127

Manipulando DadosIntercalando linhasMERGE INTO COPY_FUNC CF USING FUNC F ON (CF.CD_MAT = F.CD_MAT) WHEN MATCHED THEN UPDATE SET CF.NM_FUNC = F.NM_FUNC, ... WHEN NOT MATCHED THEN INSERT VALUES (F.CD_MAT, F.NM_FUNC,...);128

Manipulando DadosTransao de Banco de DadosIniciam quando a primeira instruo DML executada Termina com um dos seguintes eventos: Uma instruo COMMIT ou ROLLBACK executada Uma instruo DDL ou DCL executada O usurio termina uma sesso Ocorre uma falha no sistema

129

Manipulando DadosControlando TransaesCOMMIT: Torna permanente todas as transaes pendentes ROLLBACK: Descarta todas as transaes pendentes SAVEPOINT nome: Marca um ponto de salvamento na transao ROLLBACK TO SAVEPOINT nome: Efetua um rollback at o ponto de salvamento especificado. Todos os pontos de salvamento e alteraes existentes aps o ponto de salvamento sero descartados 130

Manipulando DadosEstado dos dados antes de ROLLBACK ou COMMITO estado anterior dos dados pode ser recuperado O usurio atual pode revisar os resultados das operaes DML usando a instruo SELECT Os outros usurios no podem ver os resultados das instrues DML do usurio atual As linhas afetadas so bloqueadas; os outros usurios no podero alterar os dados contidos nestas linhas131

Manipulando DadosEstado dos dados aps COMMITAs alteraes nos dados se tornam permanentes O estado anterior dos dados perdido permanentemente Todos os usurios podem ver os resultados As linhas afetadas so desbloqueadas; essas linhas ficam disponveis para que os outros usurios as manipulem Todos os pontos de salvamento so apagados132

Manipulando DadosEstado dos dados aps ROLLBACKAs alteraes nos dados so desfeitas O estado anterior dos dados restaurado As linhas afetadas so desbloqueadas Todos os pontos de salvamento so descartados

133

Manipulando DadosAumentando o conhecimentoRollback no nvel de instruo Consistncia na leitura Bloqueios

134

Manipulando DadosExerccio_49 Exerccio_VA_6

135

Instrues SQL SELECT Funes SQL Exibindo Dados de Vrias Tabelas Funes de Grupo Subconsultas Manipulando Dados Usando Operadores de Conjunto Recuperao Hierrquica136

Usando operadores de conjuntoOperadores SETCombinam o resultado de duas ou mais consultas. Tambm conhecidas como consultas compostas Todos os operadores tm a mesma precedncia e sero avaliados da esquerda para direita possvel usar parnteses para alterar a ordem de execuo ORDER BY pode aparecer somente no final da instruo (Aceita nome ou apelidos das colunas da primeira instruo ou notao posicional)137

Usando operadores de conjuntoOperadores SET UNION UNION ALL INTERSECT MINUS

138

Usando operadores de conjuntoOperador UNION Retorna o resultado de duas consultas aps eliminar duplicaes O nmero de colunas e os tipos de colunas que esto sendo selecionadas devem ser idnticas Os valores NULL no so eliminados durante a verificao de duplicidade Por default, a sada classificada em ordem crescente a partir da primeira coluna da clusula SELECT 139

Usando operadores de conjuntoOperador UNIONSELECT CD_MAT, NM_SOBRENOME, NR_CARGO FROM FUNC WHERE CD_MAT = 30 UNION SELECT CD_MAT, NM_SOBRENOME, NR_CARGO FROM FUNC WHERE CD_MAT = 30140

Usando operadores de conjuntoOperador UNION ALL Retorna o resultado de duas consultas SEM eliminar duplicaes A sada NO classificada O nmero de colunas e os tipos de colunas que esto sendo selecionadas devem ser idnticas A inverso das ordem das consultas no altera o resultado141

Usando operadores de conjuntoOperador UNION ALLSELECT CD_MAT, NM_SOBRENOME, NR_CARGO FROM FUNC WHERE CD_MAT = 30 UNION SELECT CD_MAT, NM_SOBRENOME, NR_CARGO FROM FUNC WHERE CD_MAT = 30142

Usando operadores de conjuntoOperador INTERSECT Retorna as linhas comuns s consultas O nmero de colunas e os tipos de colunas que esto sendo selecionadas devem ser idnticas A inverso das ordem das consultas no altera o resultado

143

Usando operadores de conjuntoOperador INTERSECTSELECT CD_MAT, NM_SOBRENOME, NR_CARGO FROM FUNC WHERE CD_MAT IN (30,40,50) INTERSECT SELECT CD_MAT, NM_SOBRENOME, NR_CARGO FROM FUNC WHERE CD_MAT = (40,50,60)144

Usando operadores de conjuntoOperador MINUS Retorna as linhas retornadas na primeira consulta e ausentes na segunda O nmero de colunas e os tipos de colunas que esto sendo selecionadas devem ser idnticas A inverso na ordem das consultas altera o resultado Todas as colunas contidas na clusula WHERE devem estar contidas na clusula SELECT 145

Usando operadores de conjuntoOperador MINUSSELECT CD_MAT, NM_SOBRENOME, NR_CARGO FROM FUNC WHERE CD_MAT IN (30,40,50) MINUS SELECT CD_MAT, NM_SOBRENOME, NR_CARGO FROM FUNC WHERE CD_MAT = (40,50,60)146

Usando operadores de conjuntoColunas fictcias para completar comandosSELECT TO_NUMBER(NULL), NM_SOBRENOME, NR_CARGO FROM FUNC WHERE CD_MAT IN (30,40,50) UNION ALL SELECT CD_MAT, NO PREENCHIDO, NR_CARGO FROM FUNC WHERE CD_MAT = (40,50,60)147

Usando operadores de conjuntoExerccio_121

148

Instrues SQL SELECT Funes SQL Exibindo Dados de Vrias Tabelas Funes de Grupo Subconsultas Manipulando Dados Usando Operadores de Conjunto Recuperao Hierrquica149

Recuperao hierrquicaEstrutura em rvore

150

Recuperao hierrquicaConsulta hierrquicaSELECT [LEVEL] colunas FROM tabelas,views,etc WHERE condio START WITH condio CONNECT BY PRIOR condio LEVEL: pseudocoluna que retorna 1 para linharaiz, 2 para um filho de uma raiz e assim por diante START WITH: especifica a linha-raiz da hierarquia CONNECT BY: colunas com relacionamento 151 me-filha

Recuperao hierrquicaConsulta hierrquicaPonto Inicial: Especificar condio a ser atendida Exemplos: START WITH manager_id IS NULL START WITH employee_id = ( SELECT employee_id FROM employees WHERE last_name = Kochhar)

152

Recuperao hierrquicaConsulta hierrquicaPercorrendo a rvore: Direo: De cima para baixo: Coluna 1: chave me Coluna 2: chave filha CONNECT BY PRIOR employee_id = manager_id De baixo para cima: Coluna 1: chave filha Coluna 2: chave me CONNECT BY PRIOR manager_id = 153 employee_id

Recuperao hierrquicaConsulta hierrquica de cima para baixo SELECT employee_id, last_name, manager_id FROM employees START WITH last_name = King CONNECT BY PRIOR employee_id = manager_id;

154

Recuperao hierrquicaConsulta hierrquica de baixo para cima SELECT employee_id, last_name, manager_id FROM employees START WITH employee_id = 101 CONNECT BY PRIOR manager_id = employee_id;

155

Recuperao hierrquicaConsulta hierrquica usando LEVEL SELECT LPAD(last_name, LENGTH(last_name) + (LEVEL*2)2,_) AS nome FROM employees START WITH last_name = King CONNECT BY PRIOR employee_id = manager_id;

156

Recuperao hierrquicaCompactando ramificaesPara eliminar um n Clusula WHERE WHERE last_name != Higgins Para eliminar um ramo Clusula CONNECT BY CONNECT BY PRIOR employee_id = manager_id AND last_name != Higgins

157

Recuperao hierrquicaExerccio_158

158