Modelo Relacional, Algebra Relacional, SQL

Post on 03-Nov-2015

16 views 0 download

description

Modelo Relacional, Algebra Relacional, SQL

Transcript of Modelo Relacional, Algebra Relacional, SQL

  • B A N C O D E D A D O S I

    Modelo de Relacional, lgebra Relacional, Sql

  • 1

    O MODELO RELACIONAL

    O Modelo Relacional representa a base de dados como uma coleo de relaes. Uma relao concebida como uma tabela de valores, cada linha da tabela representa uma coleo de valores de dados relacionados. Estes valores podem ser interpretados como fatos que descrevem uma entidade ou um relacionamento do mundo real. Os nomes de tabelas e nomes de colunas servem tambm para auxiliar na interpretao do significado dos valores em cada linha de cada tabela.

    Na terminologia do Modelo Relacional, uma linha chamada TUPLA, o cabealho de uma coluna chamado ATRIBUTO e a tabela chamada RELAO. Os tipos de dados que descrevem os tipos de valores que podem aparecer em cada coluna so chamados de DOMNIO.

    Domnio

    Um domnio D um conjunto de valores atmicos, isto , cada valor do domnio indivisvel segundo o contexto sobre o qual o modelo concebido. Um mtodo comum de especificar um domnio consiste em especificar o tipo de dado segundo o qual os valores dos dados que formam o domnio so estabelecidos.

    Exemplos

    Alunos_Matrculas: Conjunto de 5 dgitos vlidos como matrcula Alunos_Datas_Nascimento: Conjunto de datas vlidas.

    Alm de nome, tipo de dado e formato, informaes adicionais podem ser fornecidas para facilitar a interpretao dos valores do domnio.

    Exemplos

    Alunos_Datas_Nascimento: Conjunto de datas compreendidas entre 01/01/1950 e 31/12/1982. Alunos_Sexo: Deve ser M ou F.

  • 2

    RELAO (Relation Schema R)

    Uma relao R, denotada por R(A1, A2, . . . , An), representa uma relao de nome R e uma lista de atributos A1, A2, . . . , An. Cada atributo Ai refere-se a um domnio correspondente D na relao R. D chamado de domnio de Ai e denotado por dom(Ai). O grau da relao R o nmero de atributos que ela contm.

    Exemplo:

    ALUNO ( Matrcula, Nome, DataNascimento, Sexo )

    ALUNO o nome da Relao e seu grau 4 porque tem quatro atributos. Seus domnios so:

    dom ( Matrcula ) = Matrculas dom ( Nome ) = Nomes dom ( DataNascimento ) = Datas_Nascimento dom ( Sexo ) = Sexos

    TUPLA

    Uma instncia r de uma relao R(A1, A2, . . . , An), tambm denotada por r(R), um conjunto de n-tuplas r = { t1, t2, ..., tm }. Cada n-tupla t uma lista ordenada de n valores t = , onde cada valor vi, 1

  • 3

    A instncia de uma relao em um determinado momento reflete somente as tuplas vlidas que representam um estado particular do mundo real. Em geral, como o estado do mundo real muda, muda tambm a instncia da relao, transformando-se em outro estado. Entretanto, o esquema da relao, R, relativamente esttico e raramente muda, como por exemplo, quando adicionamos um novo atributo para representar uma nova informao que no existia originalmente. possvel que vrios atributos, de uma mesma relao ou de relaes diferentes, compartilhem o mesmo domnio. Os atributos indicam diferentes interpretaes para o domnio. Por exemplo, o domnio Datas_Nascimento para o atributo DataNascimento da relao ALUNO significa a data de nascimento do aluno, j para a relao PROFESSOR, representar a data de nascimento do professor.

    CARACTERSTICAS DAS RELAES

    Ordenao das tuplas na relao

    Uma relao definida como um conjunto de tuplas. Matematicamente, elementos de um conjunto no tm nenhuma ordem entre si, portanto, tuplas em uma relao no tm uma ordem particular. Entretanto, em um arquivo, registros so fisicamente armazenados no disco de tal forma que existe a uma ordem entre os registros. Esta ordem indica o primeiro, segundo, etc., e o ltimo registro no arquivo. Assim, quando listamos o contedo de uma relao como uma tabela, as linhas aparecem em uma determinada ordem. A ordenao das tuplas no faz parte da definio relacional, porque a relao tenta representar fatos em um nvel lgico ou abstrato. Muitas ordens lgicas podem ser especificadas em uma relao.

    Ordenao dos valores na tupla

    Analogamente definio precedente de uma relao, uma n-tupla uma lista ordenada de n valores, assim a ordenao de valores em uma tupla e portanto de atributos em uma definio de relao importante. Entretanto, em um nvel lgico, a ordem dos atributos e seus valores no so realmente importante tanto como a correspondncia entre atributos e seus valores.

  • 4

    Uma definio alternativa de relao

    Considerando-se desnecessria a ordenao de valores em uma tupla, pode-se consider-la como um conjunto de pares (,), onde cada par fornece o valor para cada atributo.

    Exemplo: t = < ( Matrcula, ________ ) , ( Nome, _________ ) , ( DataNascimento , _____ ) , ( Sexo , __ ) >

    t = < (Nome, ________ ) , (Sexo, _________ ) , (Matrcula, _____ ) , (DataNascimento, _____) >

    Valores nas tuplas

    Cada valor em uma tupla um valor atmico, isto , indivisvel no contexto do modelo relacional. Portanto, atributos compostos e multivalorados no so permitidos. A est a importncia das tcnicas de normalizao. Os valores de alguns atributos em uma tupla em particular podem ser desconhecidos ou no existirem para esta tupla. Um valor especial, denominado nulo, usado para estes casos.

    Notao para o modelo relacional

    Relao R de grau n R ( A1 , A2 , ... , An ) Tupla t na relao r (R) t = < v1 , v2 , ... , vn > Onde vi o valor correspondente ao atributo Ai. Nomes de Relaes Q , R , S Instncias de Relaes q , r , s Tuplas t , u , v

    Nomes dos atributos podem ser qualificados com o nome da relao a que pertencem, por exemplo:

    ALUNO.Matrcula, ALUNO.Nome, etc.

    RESTRIES NO MODELO RELACIONAL

    Restries de domnio

    Restries de domnio especificam que o valor de cada atributo A deve ser um valor atmico pertencente ao domnio dom(A) para este atributo. Os tipos de dados associados a domnios incluem os numricos inteiros, reais, caracteres, strings de tamanho fixo, strings

  • 5

    de tamanho varivel, data, etc. Os domnio podem ainda especificar um conjunto de valores vlidos explicitamente identificados.

    Restries de Chave ( Chave Primria = Primary Key )

    Uma relao definida como um conjunto de tuplas. Por definio, todos os elementos do conjunto so distintos, portanto, todas as tuplas em uma relao devem tambm ser distintas. Isto significa que no pode

    haver duas tuplas com a mesma combinao de valores para todos os atributos.

    Restrio de Integridade de Entidade

    A restrio de integridade de entidade estabelece que o valor para a chave primria no pode ser nulo. Isto porque o valor da chave primria usado para identificar individualmente tuplas de uma relao.

    Restries de chave e restries de integridade de entidade so especificadas para cada relao individualmente.

    Restrio de Integridade Referencial

    A restrio de integridade referencial especificada entre duas relaes e usada para manter a consistncia entre as tuplas dessas duas relaes. A restrio de integridade referencial estabelece que uma tupla em uma relao que se refere a outra relao deve se referir a uma tupla existente da outra relao.

    Chave Estrangeira ( Foreign Key )

    As duas condies citadas a seguir, estabelecem a restrio de integridade referencial entre duas relaes R1 e R2. Um atributo, ou conjunto de atributos, FK em uma relao R1, (so) uma chave estrangeira de R1 se:

    1. O(s) atributo(s) FK tem o mesmo domnio do(s) atributo(s) da chave primria PK da relao R2; diz-se que o(s) atributo(s) FK refere(m)-se relao R2.

  • 6

    2. O(s) valor(es) de FK na tupla t1 de R1 existe(m) como o valor de uma PK em alguma tupla de R2 ou nulo.

    Formalmente: t1 [FK] = t2 [PK].

    Importante

    Em um banco de dados de muitas relaes, existem geralmente muitas restries de integridade referencial. Para especificar estas restries, deve-se primeiro ter uma clara compreenso do significado do papel de cada atributo das vrias relaes do esquema do banco de dados. As restries de integridade referencial surgem dos relacionamentos entre as entidades.

    Exemplo:

    PROFESSOR

    CPF

    Nome DataNascimento Sexo CodigoDepartamento

    DEPARTAMENTO

    Codigo

    Nome

    CURSO

    Codigo

    Nome CodigoDepartamento

    Todas as restries de integridade devem ser especificadas se desejamos manter as restries para todas as instncias do banco de dados. Portanto, em um sistema relacional, a linguagem de definio de dados (DDL) deve prover recursos para especificar os vrios tipos de restries para que o sistema gerenciador do banco de dados possa cumpri-los automaticamente.

  • 7

    Exemplos de Relao

    Figura 1

    Figura 2

    Figura 3

    EMPREGADO Codigo Nome DataNascimento CodDep CodCargo 001 Maria Araujo 10/10/70 01 03 002 Carla Figueiredo 02/05/76 02 01 003 Marcio Francisco 30/06/49 01 02 004 Maria Bonita 20/07/80 03 05 005 Francisco Carlos 18/08/72 02 02 006 Rezende Rocha 25/03/60 01 01 007 Marcia dos Anos 27/12/55 03 03 008 Jos Ferreira 02/03/51 02 01

    009 Ferreira Fado 14/11/55 01 02

    DEPARTAMENTO Codigo Nome 01 Financeiro 02 Engenharia

    03 Comercial

    tupla

    atributos Nome da relao

    CARGO Codigo Nome Salario 01 Advogado 3000,00 02 Analista de Sistemas 4000,00 03 Contador 1000,00 04 Engenheiro 4000,00 05 Programador 1500,00 06 Medico 4000,00

    07 Auxiliar de Escritrio 400,00

  • 8

    DER Diagrama de Entidades x Relacionamentos correspondente s relaes anteriores

    N 1

    N

    1

    DEPARTAMENTO

    EMPREGADO CARGO

  • 9

    L G E B R A R E L A C I O N A L

    A lgebra relacional consiste de um conjunto de operaes que tm como entrada um ou mais relaes e produzem como sada uma nova relao

    Operaes Fundamentais

    As operaes fundamentais da lgebra relacional so: Insert, Delete, Modify, Select, Project, Union, Set difference, Cartesian Product e Rename.

    Outras Operaes

    Alm das operaes fundamentais a lgebra relacional define outras operaes, tais como: Namely, Set intersection, Natural Join, Division e Assinment.

    Operaes primrias

    So as operaes que operam com uma nica relao.

    Operaes binrias

    So as operaes que operam com duas relaes.

  • 10

    A Operao INSERT Insere uma nova tupla(linha) em uma relao. A operao insert pode violar todas as restries de integridade de uma relao.

    Estrutura geral do comando

    Insert (v1,v2,v3,...vn) into Relao

    Exemplo

    Insert (20,Departamento de Marketing) into DEPARTAMENTO

    Resultado

    Se ns considerarmos a relao DEPARTAMENTO como aquela da figura 1, ento o resultado dessa operao, um relao cujo contedo o mostrado abaixo:

    Figura 4: Relao DEPARTAMENTO aps a incluo do departemnto de Marketing

    Relao objeto do comando Insert

    Valores dos atributos da relao Insert

    DEPARTAMENTO Codigo Nome 01 Financeiro 02 Engenharia 03 Comercial

    20 Marketing

  • 11

    A Operao DELETE

    Exclui fisicamente uma tupla(linha) de uma relao. Esta operao pode violar a restrio de integridade referencial de uma relao.

    Estrutura geral do comando

    Delete from Relao with condio

    Exemplo

    Delete from DEPARTAMENTO with Cdigo = 20

    Resultado

    Se ns considerarmos a relao DEPARTAMENTO como aquela da figura anterior, ento o resultado dessa operao, um relao cujo contedo o mostrado abaixo:

    Figura 5: Relao DEPARTAMENTO aps a excluso do departamento de codigo = 20

    Condio de excluso da tupla

    Relao objeto da operao Deletet

    DEPARTAMENTO Codigo Nome 01 Financeiro 02 Engenharia

    03 Comercial

  • 12

    A Operao MODIFY

    Altera o contedo dos campos de uma tupla(linha) de uma relao. Esta operao pode violar todas as restries de integridade da relao.

    Estrutura geral do comando

    Modify Relao a1 = v1, a2=v2,...na=v2 with condio

    Exemplo

    Modify DEPARTAMENTO Nome = Recursos Humanos with Cdigo = 20

    Resultado

    Se ns considerarmos a relao DEPARTAMENTO como aquela da figura 4, ento o resultado dessa operao, um relao cujo contedo o mostrado abaixo:

    Figura 6: Relao com o nome do departamento 20 mudado para "Recursos Humanos"

    Condio de excluso da tupla

    Relao objeto da operao Modifyt

    DEPARTAMENTO Codigo Nome 01 Financeiro 02 Engenharia 03 Comercial

    20 Recursos Humanos

    a1, a2,..an so os campos da tupla a serem alterados

    v1, v2,..vn so os novos valores dos campos da tupla

  • 13

    A Operao SELECT

    A operao select seleciona tuplas(linhas) de uma relao que satisfaam a uma determinada condio (predicado).

    Estrutura geral do comando

    predicado (Relao)

    Exemplos

    a) Obter uma relao com os empregados cujo CodCargo = 3 (Departamento Comercial).

    nome = Comercial (EMPREGADO)

    Se ns considerarmos a relao EMPREGADO como aquela da figura 3, ento o resultado dessa operao, um relao cujo contedo o mostrado abaixo:

    Figura 7: Relao dos empregados com os atributos: codigo e nome

    b) Obter um relao dos empregados, do departamento financeiro (CodDep = 01) que nasceram a partir de 14/11/55.

    CodDep = 01 DataNascimento = 01/11/55 (EMPREGADO)

    Relao objeto da operao Condio de seleo das linhas

    Operador representativo da operao select

    Codigo Nome DataNascimento CodDep CodCargo 001 Maria Araujo 10/10/70 01 03 007 Marcia dos Anos 27/12/55 03 03

  • 14

    Considerando, novamente a relao EMPREGADO, da figura 3, a operao, acima, produz uma relao com o seguinte contedo:

    Figura 8: Relao dos empregados, do departamento fimanceiro, nascidos a partir de 14/11/55.

    Codigo Nome DataNascimento CodDep CodCargo 001 Maria Araujo 10/10/70 01 03 003 Marcio Francisco 30/06/49 01 02 006 Rezende Rocha 25/03/60 01 01 009 Ferreira Fado 14/11/55 01 02

  • 15

    A Operao PROJECT A operao project obtm uma relao cujos atributos so um subconjunto dos atributos de uma outra relao.

    Estrutura geral do comando

    pipredicado (Relao)

    Exemplos

    a) Listar o cdigo e o nome de todos os empregados constantes da relao EMPREGADO. Tuplas (linhas) duplicadas obtidas, so ignoradas, e no fazem parte da relao resultante.

    piCodigo, Nome (EMPREGADO),

    Se ns considerarmos a relao EMPREGADO como aquela da figura 3, ento o resultado dessa operao, um relao cujo contedo o mostrado abaixo:

    Figura 9: Relao com os atributos: Cdigo e Nome do empregado

    Repare que a relao produzida contm, apenas, os atributos especificados no predicado da operao project (Cdigo, Nome).

    Relao objeto da operao Atributos da relao a serem obtidos

    Operador representativo da operao project

    Codigo Nome 001 Maria Araujo 002 Carla Figueiredo 003 Marcio Francisco 004 Maria Bonita 005 Francisco Carlos 006 Rezende Rocha 007 Marcia dos Anos 008 Jos Ferreira 009 Ferreira Fado

  • 16

    b) Listar o nome e o salrio correspondentes de cada ocorrncia da relao CARGO (figura 2).Tuplas (linhas) duplicadas obtidas, so ignoradas, e no fazem parte da relao resultante.

    piNome, Salario (CARGO)

    Se ns considerarmos a relao CARGO, como aquela da figura 2, ento o resultado dessa operao, um relao cujo contedo o mostrado a seguir:

    Figura 10: Relao dos cargos com os atributos: Nome e Salrio

    Repare que a relao produzida contm, apenas, os atributos especificados no predicado da operao project (Cdigo, Nome).

    c) Produzir, a partir da relao EMPREGADO, uma relao cujos atributos so: CodDep e CodCargo.

    piCodDep, CodCargo (EMPREGADO)

    Considerando a relao de empregados da figura 3, a operao anterior produz a seguinte relao:

    Figura 11: Relao com os atributos: CodDep e CodCargo

    Nome Salario Advogado 3000,00 Analista de Sistemas 4000,00 Contador 1000,00 Engenheiro 4000,00 Programador 1500,00 Medico 4000,00 Auxiliar de Escritrio 400,00

    CodDep CodCargo 01 03 02 01 01 02 03 05 02 02 01 01 03 03

  • 17

    Repare que as linhas da relao Empregado correspondentes aos empregados de Codigo 008 e 009, no aparecem na relao obtida. Elas tm o mesmo CodDep e CodCargo das linhas referentes aos empregados de cdigo 002 e 003, respectivamente, portanto, na relao resultante, elas estariam duplicadas (mesmo contedo de todos os atributos). O que no permitido pela operao Project.

  • 18

    A Operao ASSIGNMENT (ATRIBUIO) vezes, precisamos dar nome relao resultante de uma operao da lgebra relaciona. Fazemos isto com a operao assignment.

    Estrutura geral do comando

    Nome Operao da lgebra Relacional

    Exemplos

    a) Obter a relao Empregados Especiais, a partir da relao Empregado, da figura 3. A nova relao deve conter, apenas, o nome dos empregados.

    Empregados Especiais pi Nome (EMPREGADO)

    A relao Empregados Especiais teria o contedo, abaixo:

    Figura 12: Relao Empregados Especiais

    b) Listar o nome dos empregados do departamento de Financeiro, a partir da relao mostrada na figura 3.

    Para obter a lista precisamos aplicar relao EMPREGADO uma operao select para obter os empregados do departamento financeiro (CodDep = 01) e

    Qualquer operao da lgebra Relacional Nome da relao resultante da operao

    Nome Maria Araujo Carla Figueiredo Marcio Francisco Maria Bonita Francisco Carlos Rezende Rocha Marcia dos Anos Jos Ferreira Ferreira Fado

  • 19

    na relao resultante aplicar a operao project para obter o nome dos empregados.

    Como o resultado de uma operao da lgebra relacional, uma relao, podemos escrever, uma soluo para obter a lista seria:

    piNome (CodDep = 01 (EMPREGADO))

    A relao resultante da expresso anterior, seria:

    Figura 13: Lista dos empregados do departamento Financeiro (CodDep = 01)

    Uma outra alternativa para obter a lista, seria usar a operao de assignment, assim:

    TEMP CodDep = 01 (EMPREGADO) Obtm a relao TEMP com os empregados com CodDep = 01 (departamento Financeiro)

    piNome (TEMP) Obtm a lista com o nome dos empregados, conforme mostrado na figura 10.

    Obtm uma relao dos empregados do departamento financeiro com todos os atributos de empregado

    Obtm a relao com o nome dos empregados

    Nome Maria Araujo Marcio Francisco Rezende Rocha Ferreira Fado

  • 20

    A Operao JOIN (JUNO) Esta operao usada para combinar tuplas (linhas) de duas relaes que sejam associadas atravs de dois ou mais de seus atributos. Ela permite trabalhar o relacionamento entre as relaes. A operao join despreza linha duplicadas obtidas.

    Estrutura geral do comando

    Relao1 predicado (Relao2)

    Exemplos

    b) Obter uma relao que contenha o codigo e nome do departamento e, os dados dos empregados a ele associados. As duas relaes: DEPARTAMENTO e EMPREGADO esto associadas atravs dos atributos: Cdigo de DEPARTAMENTO (figura 1) e CodDep de EMPREGADO (figura 3).

    A expresso a seguir produz a relao pedida

    DEPARTAMENTO departamento.cdigo = empregado.coddep (EMPREGADO)

    Figura 14: Relao dos departamentos com os seus repectivos empregados

    Segunda relao objeto da operao de juno

    Primeira relao objeto da operao

    Condio de juno entre as duas relaes

    Operador representativo da operao

    Departamento.Codigo

    Departamento.Nome

    Codigo Nome Data Nascimento

    Cd Dep

    Cd Cargo

    01 Financeiro 001 Maria Araujo 10/10/70 01 03 01 Financeiro 003 Marcio Francisco 30/06/49 01 02 01 Financeiro 006 Rezende Rocha 25/03/60 01 01 01 Financeiro 009 Ferreira Fado 14/11/55 01 02 02 Engenharia 002 Carla Figueiredo 02/05/76 02 01 02 Engenharia 005 Francisco Carlos 18/08/72 02 02 02 Engenharia 008 Jos Ferreira 02/03/51 02 01 03 Comercial 004 Maria Bonita 20/07/80 03 05 03 Comercial 007 Marcia dos Anos 27/12/55 03 03

  • 21

    SQL Strutured Query Linguage

    a linguagem padro de criao e manipulao dos bancos de dados relacionais.

    constituda das seguintes partes:

    Linguagem de Definio de Dados DDL Proporciona comandos para a criao, excluso e alterao de relaes e criao de ndices de uma relao, definio de vises, especificao de direitos de acesso e especificao de regras de integridade de dados de um banco de dados relacional.

    Linguagem de Manipulao de Dados DML Proporciona comandos para recuperao (consulta) de dados em um banco de dados relacional

    A seguir apresentamos o comando de recuperao de dados com suas respectivas clusulas e condies.

  • 22

    1. RECUPERANDO PARTE DOS DADOS DE UMA TABELA

    Os dados recuperados em uma consulta so especificados entre a palavra SELECT e a palavra FROM de um comando SELECT.

    1.1. Exemplo

    Listar o cdigo e o nome de cada empregado.

    1.2. Soluo

    SELECT Codigo, Nome

    FROM Empregado

    1.3. Resultado

    1.4. Observaes Observe que esto listados, apenas, os atributos especificados no comando SELECT, apesar da tabela conter outros atributos

    Atributos a serem listados

    Tabela onde esto os atributos a serem listados

    Codigo Nome 001 Maria Araujo 002 Carla Figueiredo 003 Marcio Francisco 004 Maria Bonita 005 Francisco Carlos 006 Rezende Rocha 007 Marcia dos Anos 008 Jos Ferreira 009 Ferreira Fado

  • 23

    2. RECUPERANDO DADOS DE UMA TABELA OBEDECENDO DETERMINADAS CONDIES.

    As condies de recuperao de dados de uma ou mais tabelas so especificadas na clusula WHERE do comando SELECT

    2.1. Listar o cdigo, o nome e a data de nascimento dos empregados de cdigo 001 e 003.

    2.2. Soluo

    SELECT Codigo, Nome, DataNascimento

    FROM Empregado

    WHERE Codigo = 001 OR Codigo = 005

    2.3. Resultado

    2.4. Observaes

    Repare que, apenas, os empregados cujos atributos satisfazem a condio especificada na clusula WHERE foram listados.

    Atributos a serem recuperados do banco

    Tabela onde esto os atributos a serem listados

    Condio para recuperao dos dados

    Codigo Nome DataNascimento 001 Maria Araujo 10/10/70 005 Francisco Carlos 18/08/72

  • 24

    3. LISTANDO TODOS OS ATRIBUTOS DE UMA TABELA.

    Para listar todos os dados de uma tabela basta especificar no lugar do nome dos atributos a serem listados um * logo em seguida palavra SELECT.

    3.1. Listar todos os atributos de cada cargo

    3.2. Soluo

    SELECT *

    FROM Cargo

    3.3. Resultado

    O asterisco indica que todos os atributos da tabela Empregado sero listados

    Tabela onde esto os atributos a serem listados

    Codigo Nome Salario 01 Advogado 3000,00 02 Analista de Sistemas 4000,00 03 Contador 1000,00 04 Engenheiro 4000,00 05 Programador 1500,00

  • 25

    4. RECUPERANDO DADOS DE MAIS DE UMA TABELA.

    A recuperao de dados de mais de uma tabela requer a utilizao da clausula WHERE para associar uma tabela outra, a menos que se queira fazer o produto cartesiano entre as tabelas considerados.

    4.1. Exemplo

    Listar o cdigo, o nome e o nome do cargo de cada empregado.

    4.2. Soluo

    SELECT Empregado.Codigo, Empregado.Nome, Cargo.Nome

    FROM Empregado, Cargo

    WHERE Cargo.Codigo = Empregado.CodCargo

    4.3. Resultado

    Atributos a serem recuperados do banco

    Tabelas onde esto os atributos a serem listados

    Ordem de apresentao dos dados

    Associa cada empregado ao seu cargo

    Codigo Nome CodCargo 001 Maria Araujo Contador 002 Carla Figueiredo Advogado 003 Marcio Francisco Analista de Sistemas 004 Maria Bonita Programador 005 Francisco Carlos Analista de sistemas 006 Rezende Rocha Advogado 007 Marcia dos Anos Contador 008 Jos Ferreira Advogado 009 Ferreira Fado Analista de Sistema

  • 26

    5. RECUPERANDO DADOS DE MAIS DE UMA TABELA COM RESTRIES DE SELEO.

    5.1. Exemplo

    Listar o cdigo, o nome e o nome do cargo de cada empregado. Somente os empregados vinculados aos departamentos 01 e 03 devem ser listados.

    5.2. Soluo

    SELECT Empregado.Codigo, Empregado.Nome, Cargo.Nome

    FROM Empregado, Cargo

    WHERE Cargo.Codigo = Empregado.CodCargo AND (Empregado.CodDep = 01 AND Empregado.CodDep = 03)

    5.3. Resultado

    5.4. Observaes

    Repare que a associao entre as tabelas e as condies de seleo dos dados aparecem todas na clusula WHERE.

    Atributos a serem recuperados do banco

    Tabelas onde esto os atributos a serem listados

    Associa cada empregado ao seu cargo e seleciona os departamentos 01 e 03 exigidos

    Codigo Nome CodCargo 001 Maria Araujo Contador 003 Marcio Francisco Analista de Sistemas 004 Maria Bonita Programador 006 Rezende Rocha Advogado 007 Marcia dos Anos Contador 009 Ferreira Fado Analista de Sistema

  • 27

    6. ORDENANDO DADOS RECUPERADOS.

    Os dados recuperados podem ser ordenados de acordo com nossa necessidade. A ordenao dos dados feita pela clausula SORT do comando SELECT.

    6.1. Exemplo

    Listar o cdigo, o nome e a data de nascimento dos empregados de cdigo 001 e 003. Mostrar a lista em ordem crescente de nome do empregado.

    6.2. Soluo

    SELECT Codigo, Nome, DataNascimento

    FROM Empregado

    WHERE Codigo = 001 OR Codigo = 005

    ORDER BY Nome

    6.3. Resultado

    6.4. Observaes

    Repare que a lista est ordenada pela coluna Nome

    Atributos a serem recuperados do banco

    Tabela onde esto os atributos a serem listados

    Condio para recuperao dos dados

    Codigo Nome DataNascimento 005 Francisco Carlos 18/08/72 001 Maria Araujo 10/10/70

    Ordenando por nome

  • 28

    7. MUDANDO O TITULO DE UMA COLUNA.

    Listar o cdigo, o nome e a data de nascimento de cada empregado. Mudar o cabealho da coluna DataNascimento para Dada de Nascimento.

    7.1. Soluo

    SELECT Codigo, Nome, DataNascimento AS Data de Nascimento

    FROM Empregado

    7.2. Resultado

    Repare que o cabealho da coluna correspondente data de nascimento, na lusta, foi mudada de DataNascimento para Data de Nascimento.

    Mudando o ttulo da coluna

    Tabela onde esto os atributos a serem listados

    Codigo Nome Data de Nascimento 001 Maria Araujo 10/10/70 002 Carla Figueiredo 02/05/76 003 Marcio Francisco 30/06/49 004 Maria Bonita 20/07/80 005 Francisco Carlos 18/08/72 006 Rezende Rocha 25/03/60 007 Marcia dos Anos 27/12/55 008 Jos Ferreira 02/03/51 009 Ferreira Fado 14/11/55

  • 29

    8. RECUPERANDO DADOS DE MAIS DE DUAS TABELAS.

    Listar o cdigo e o nome do empregado, o cdigo do departamento onde ele est vinculado e o nome do seu cargo e salrio. A coluna correspondente ao nome do departamento deve Ter o ttulo: Departamento e a correspondente ao nome do cargo: Cargo. Mostrar a lista em ordem decrescente de salrio.

    8.1. Soluo

    SELECT Empregado.Codigo, Empregado.Nome,

    Departamento.Nome AS Departamento, Cargo.Nome AS Cargo,

    Cargo.Salario

    FROM Empregado, Departamento, Cargo

    WHERE Departamento.Codigo = Empregado.CodDep

    AND

    Empregado.CodCargo = Cargo.Codigo

    ORDER BY Cargo.Salario DESC

    8.2. Resultado

    Repare os ttulos das colunas Departamento e Cargo alterados e a ordem de apresentao da lista. Do maior salrio para o menor.

    Mudando o ttulo da coluna correspondente ao nome do departamento e do cargo

    Tabela onde esto os atributos a serem listados

    Associa o Empregado ao seu Departamento

    Ordenando por salario de modo decrescente

    Associa o Empregado ao seu Cargo

    Codigo Nome Departamento Cargo Salario 003 Marcio Francisco Financeiro Analista de Sistemas 4000,00 005 Francisco Carlos Engenharia Analista de Sistemas 4000,00 009 Ferreira Fado Financeiro Analista de Sistemas 4000,00 002 Carla Figueiredo Engenharia Advogado 3000,00 006 Rezende Rocha Financeiro Advogado 3000,00 008 Jos Ferreira Engenharia Advogado 3000,00 004 Maria Bonita Comercial Programador 1500,00 001 Maria Araujo Financeiro Contador 1000,00 007 Marcia dos Anos Comercial Contador 1000,00

  • 30

    9. UTILIZANDO A FUNO DE AGREGAO: COUTN()

    Listar a quantidade de empregados por cargo. A lista deve conter o cdigo do cargo e a quantidade obtida. A coluna correspondente quantidade de empregados deve ter o ttulo: Quantidade.

    9.1. Soluo

    SELECT Empregado.CodCargo AS Cargo,

    COUNT(Empregado.Codigo) AS Quantidade

    FROM Empregado

    GROUP BY Empregado.CodCargo

    9.2. Resultado

    9.3. Observaes

    Repare os ttulos das colunas. Recorra ao contedo da tabela Empregado para conferir o resultado da lista obtida.

    Contando os empregados e mudando o ttulo da coluna

    Tabela onde esto os atributos a serem listados

    Agrupando a quantidade de empregados por cargo

    Mudando o ttulo da coluna

    Cargo Quantidade 01 03 02 03 03 02 05 01

  • 31

    10. UTILIZANDO A FUNO DE AGREGAO: SUM()

    Listar a soma dos salrios dos empregados de cada cargo. A lista deve conter o cdigo do cargo e a soma dos salrios obtida. A coluna correspondente soma dos salrios deve ter o ttulo: Salrio.

    10.1. Soluo

    SELECT Empregado.CodCargo AS Cargo,

    SUM(Cargo.Salario) AS Salario

    FROM Cargo, Empregado

    WHERE Cargo.Codigo = Empregado.CodCargo

    GROUP BY Empregado.CodCargo

    10.2. Resultado

    Repare os ttulos das colunas. Recorra ao contedo das tabelas Empregado e Cargos para conferir o resultado da lista obtida.

    Observe que s foram listados os cargos para os quais tem algum empregado vinculado.

    Somando os salrios dos empregados e mudando o ttulo da coluna

    Tabelas onde esto os atributos a serem listados

    Agrupando a soma dos salrios dos empregados por cargo

    Mudando o ttulo da coluna

    Cargo Salrio 01 9.000,00 02 12.000,00 03 2.000,00 05 1.500,00

    Associando o cargo ao empregado

  • 32

    11. UTILIZANDO A FUNO DE AGREGAO: MIN()

    Listar o menor salrio de cada departamento. A lista deve conter o cdigo, o nome e o menor salrio do departamento. A coluna correspondente ao menor salrio deve ter o ttulo: Menor Salrio.

    11.1. Soluo

    SELECT Departamento.Codigo,

    Departamento.Nome,

    MIN(Cargo.Salario) AS Menor Salario

    FROM Departamento, Cargo, Empregado

    WHERE Cargo.Codigo = Empregado.CodCargo AND Empregado.CodDep= Departamento.Codigo

    GROUP BY Departamento.Codigo Departamento.Nome

    11.2. Resultado

    11.3. Observaes

    Repare os ttulos das colunas. Recorra ao contedo das tabelas Departamento, Empregado e Cargos para conferir o resultado da lista obtida.

    Observe que s foram listados os departamentos para os quais tem algum empregado vinculado.

    Repare que as clusulas FROM e WHERE fazem referncia tabela Empregado, embora nenhum dado desta tabela pedido na lista. Ela aparece

    Obtendo o menor salrio e mudando o ttulo da coluna

    Tabelas onde esto os atributos a serem listados

    Agrupando os menores salrios por departamento

    Codigo Nome Menor Salrio 01 Financeiro 1.000,00 02 Engenharia 3.000,00 03 Comercial 1.000,00

    Associando o empregado ao cargo ao departamento

  • 33

    porque est no caminho dos relacionamentos que conduzem a tabela Departamento (que contm dados a serem listados) e a tabela Cargo (que contm dados a serem listados). Na realidade o menor salrio diz respeito aos empregados vinculados aos departamentos.

  • 34

    12. UTILIZANDO A FUNO DE AGREGAO: MAX()

    Listar o maior salrio de cada departamento. A lista deve conter o cdigo, o nome e o maior salrio do departamento. A coluna correspondente ao maior salrio deve ter o ttulo: Maiorr Salrio.

    12.1. Soluo

    SELECT Departamento.Codigo,

    Departamento.Nome,

    MAX(Cargo.Salario) AS Maior Salario

    FROM Departamento, Cargo, Empregado

    WHERE Cargo.Codigo = Empregado.CodCargo AND Empregado.CodDep= Departamento.Codigo

    GROUP BY Departamento.Codigo, Departamento.Nome

    12.2. Resultado

    12.3. Observaes

    Repare os ttulos das colunas. Recorra ao contedo das tabelas Departamento, Empregado e Cargos para conferir o resultado da lista obtida.

    Obtendo o maior salrio e mudando o ttulo da coluna

    Tabelas onde esto os atributos a serem listados

    Agrupando o maior salrio por departamento

    Codigo Nome Maior Salrio 01 Financeiro 4.000,00 02 Engenharia 4.000,00 03 Comercial 1.500,00

    Associando o o empregado cargo e ao departamento

  • 35

    Observe que s foram listados os departamentos para os quais tem algum empregado vinculado.

    Repare que as clusulas FROM e WHERE fazem referncia tabela Empregado, embora nenhum dado desta tabela pedido na lista. Ela aparece porque porque est no caminho dos relacionamentos que conduzem a tabela Departamento (que contm dados a serem listados) e a tabela Cargo (que contm dados a serem listgados). Na realidade o menor salrio diz respeito aos empregados vinculados aos departamentos.

  • 36

    13. UTILIZANDO A FUNO DE AGREGAO: AVG()

    A clusula AVG calcula a mdia aritmtica dos valores de uma determinada coluna. Linhas cuja coluna tenha valor nulo no entra no clculo da mdia.

    13.1. Exmplo

    Listar o mdia dos salrios de cada departamento. A lista deve conter o cdigo, o nome e a mdia dos salrios do departamento. A coluna correspondente mdia dos salrios deve ter o ttulo: Media dos Salrios.

    13.2. Soluo

    SELECT Departamento.Codigo,

    Departamento.Nome,

    AVG(Cargo.Salario) AS Mdia dos Salarios

    FROM Departamento, Cargo, Empregado

    WHERE Cargo.Codigo = Empregado.CodCargo AND Empregado.CodDep= Departamento.Codigo

    GROUP BY Departamento.Codigo, Departamento.Nome

    13.3. Resultado

    Obtendo mdia dos salrios e mudando o ttulo da coluna

    Tabelas onde esto os atributos a serem listados

    Agrupando mdia dos salrios por departamento

    Codigo Nome Media dos Salarios

    01 Financeiro 3.000,00 02 Engenharia 3.333,33 03 Comercial 1.250,00

    Associando o empregado ao cargo e ao departamento

  • 37

    13.4. Observaes

    Repare os ttulos das colunas. Recorra ao contedo das tabelas Departamento, Empregado e Cargo para conferir o resultado da lista obtida.

    Observe que s foram listados os departamentos para os quais tem algum empregado vinculado.

    Repare que as clusulas FROM e WHERE fazem referncia tabela Empregado, embora nenhum dado desta tabela pedido na lista. Ela aparece porque est no caminho dos relacionamentos que conduzem a tabela Departamento (que contm dados a serem listados) e a tabela Cargo (que contm dados a serem listados). Na realidade o menor salrio diz respeito aos empregados vinculados aos departamentos.

  • 38

    14. UTILIZANDO A CLAUSULA: HAVING()

    A clausula HAVING utilizada para selecionar dados (filtrar) obtidos por uma funo de agregao. Ela seleciona os dados depois que eles so agrupados, diferentemente da clausula WHERE que seleciona antes.

    14.1. Exemplo

    Listar os departamentos cuja mdia dos salrios sejam menor que R$ 3.000,00. A lista deve conter o cdigo, o nome e a mdia dos salrios do departamento. A coluna correspondente mdia dos salrios deve ter o ttulo: Mdia dos Salrios.

    14.2. Soluo

    SELECT Departamento.Codigo,

    Departamento.Nome,

    AVG(Cargo.Salario) AS Menor Salario

    FROM Departamento, Cargo, Empregado

    WHERE Cargo.Codigo = Empregado.CodCargo AND Empregado.CodDep= Departamento.Codigo

    GROUP BY Departamento.Codigo, Departamento.Nome

    HAVIING AVG(Cargo.Salario) < 3000,00

    14.3. Resultado

    Obtendo a mdia dos salrios e mudando o ttulo da coluna

    Tabelas onde esto os atributos a serem listados

    Agrupando a mdia dos salrios por departamento

    Codigo Nome Menor Salrio 03 Comercial 1.500,00

    Associando o o empregado cargo e ao departamento

    Selecionando as mdias de salrio menor que 3000,00

  • 39

    14.4. Observaes

    Repare os ttulos das colunas. Recorra ao contedo das tabelas Departamento, Empregado e Cargos para conferir o resultado da lista obtida.

    Observe que s foram listados os departamentos para os quais tem algum empregado vinculado.

    Repare que as clusulas FROM e WHERE fazem referncia tabela Empregado, embora nenhum dado desta tabela pedido na lista. Ela aparece porque porque est no caminho dos relacionamentos que conduzem a tabela Departamento (que contm dados a serem listados) e a tabela Cargo (que contm dados a serem listados). Na realidade o menor salrio diz respeito aos empregados vinculados aos departamentos.