Sunteți pe pagina 1din 11

Views

Diagrama Entidade-Relacionamento
analista (1,n) analistacurso (1,n) curso

(1,1)

faz

(1,n) atividadesanalise (1,1) compe (1,n) atividadesprog

(1,n)

faz

(1,1)

programador

Tabelas
curso codcurso curso duracao dtcurso Chave primria - codcurso analista codanalista analista idade endereco chave primria codanalista int varchar(50) int date not null not null not null not null

int varchar(50) int char(30)

not null not null not null not null

analistacurso codanalista int not null codcurso int not null chave primria codanalista, codcurso chave estrangeira codanalista da tabela de analista chave estrangeira codcurso da tabela de curso programador codprogramador int programador varchar(50) idade int endereco char(30) chave primria - codprogramador

not null not null not null not null

atividadesanalise int codatividadeanalise dtinicio date dttermino date descricao varchar(100) codanalista int chave primria codatividadeanalise chave estrangeira codanalista da tabela de analista

not null not null not null not null not null

atividadesprog int not null codatividadeprog dtinicio date not null dttermino date not null descricao varchar(100) not null codprogramador int not null codatividadeanalise int not null chave primria codatividadeprog chave estrangeira codprogramador da tabela de programador chave estrangeira codatividadeanalise da tabela de atividadesanalise

Dados
curso Codcurso 1 2 3 4 5 6 analista Codanalista 1 2 3 4 5 6 analistacurso codanalista codcurso 1 1 2 1 3 2 4 2 1 2 1 3 2 4 3 1 programador codprogramador 10 20 30 40 atividadesanalise Codatividadeanalise 10 20 30 40 Dtinicio 01/01/2006 03/02/2006 05/07/2006 06/06/2006 Dttermino 30/01/2006 28/02/2006 20/09/2006 30/07/2006 Descricao Processo de venda Pedido de Compra Cadastro Fornecedor Cadastro Produto codanalista 2 2 1 4 Programador Jeferson Andrea Ana Paula Fernando Idade 34 25 23 20 Endereo Av. Ipiranga, 10 Souza Reis, 200 Av. Carlos Gomes, 100 Av. Ipiranga, 20 Analista Joo Joice Pedro Maria Rafael Bruno Idade 20 24 32 28 39 23 Endereco Av. Carlos Gomes, 200 Av. Independncia, 10 Av. Carlos Gomes, 100 Dom Pedro II, 10 Plnio Brasil Milano, 50 Carlos Pasinato, 87 Curso Oracle 8i Delphi Windows 98 Linux Visual Basic Office Duracao 360 300 20 35 120 15 dtcurso 01/03/2006 30/05/2006 28/04/2006 06/06/2006 28/04/2006 30/05/2006

atividadesprog Codatividade Prog 100 101 102 103 104 Dtinicio 05/01/2006 05/02/2006 05/02/2006 06/07/2006 09/07/2006 Dttermino Descricao 07/01/2006 10/02/2006 15/02/2006 10/07/2006 15/07/2006 Tela 105 Relatrio 12 Procedure 75 Tela 165 Relatrio 16 codprogramador 10 10 20 10 30 Codativida deanalise 10 20 20 30 30

EXERCCIOS VIEW
Formato de data no SQL Server: mmdd-aaaa

1 Criar uma view funcionario que contenha o nome dos funcionrios, endereo e idade. Incluir nessa view uma coluna informando o tipo de funcionrio Analista ou Programador. Formatar o nome e endereo do funcionrio para maisculo.
create view funcionario(nome, idade, endereco,cargo) as select a.analista as nome ,a.endereco,a.idade,'analista' FROM analista a union select p.programador as proramador,p.endereco,p.idade,'programador' from programador p

2 Criar uma view analistasemcurso que contenha o nome dos analistas que no fizeram curso.
create view analistasemcurso as select a.analista as 'Nome Analista' from analista a where a.codanalista not in ( select ac.codanalista from analistacurso ac )

3 Criar uma view ativanalise2sem que contenha o cdigo e o nome dos analistas que terminaram ou comearam atividade aps o dia 01/07/2006.
create view ativanalise2sem as select a.codanalista, a.analista from analista a where a.codanalista in( select aa.codanalista from atividadesanalise aa where aa.dtinicio>'2006-07-01' or aa.dttermino>'2006-07-01')

4 - Criar uma view ativprogramador1sem que contenha o cdigo e o nome dos programadores que comearam atividade aps o dia 01/01/2006 e antes de 01/07/2006.
create view ativprogramador1sem as SELECT codprogramador, programador FROM programador where codprogramador in( select codprogramador from atividadesprog where dtinicio>'2006-01-01 ' and dttermino<'2006-07-01' )

5 - Criar uma view cursonaoreal que contenha o cdigo, o nome e durao dos cursos no realizados pelos analistas.
create view cursonaoreal as

select c.codcurso, c.curso, duracao from dbo.curso c where codcurso not in( select codcurso from analistacurso )

6 - Criar uma view analistasemcurso2 que contenha o cdigo, nome e idade dos analistas que no realizaram cursos.
create view analistasemcurso2 as select codanalista, analista, idade from analista where codanalista not in( select codanalista from analistacurso )

7 - Criar uma view qtdativprogramador que contenha o nome do programador e a quantidade de atividades realizadas por cada programador.
create view qtdativprogramador as select p.programador , count(at.codprogramador) as 'Numero de Atividades' from programador p, atividadesprog at where p.codprogramador = at.codprogramador group by p.programador

Itegridade

Analista alter table analista add constraint verificarIdade check (idade>20) alter table analista add constraint unicoNomeAnalista unique(analista) alter table atividadesanalise add constraint dataInicioAnalise default getdate() for dtinicio alter table atividadesanalise add constraint dataTerminoAnalise default getdate()+10 for dttermino alter table atividadesprog add constraint dataInicioProg default getdate() for dtinicio alter table atividadesprog add constraint dataTerminoProg default getdate()+10 for dttermino alter table curso add constraint verificaDurcao check(duracao>0) alter table curso add constraint dataCurso

default getdate() for dtcurso alter table programador add constraint unicoNomeProgramador unique(programador)

Loja alter table encomenda add constraint dataEncomenda default getdate() for data_encomenda alter table estoque add constraint verificaQuantidade check(quantidade>0) alter table fornecedor add constraint unicoCNPJ unique(cnpj) alter table itens_venda add constraint verificaQuantidadeVendas check(quantidade>0) alter table pessoa add constraint UnicoCPF unique(cpf) alter table pessoa add constraint UnicoRG unique(rg) alter table pessoa add constraint unicoEmail unique(email) alter table pessoa_fone add constraint verificaNumero check(numero > 0) alter table venda add constraint dataVenda default getdate() for data
ALTER TABLE TABELA1 ADD CONSTRAINT [FK_TABELA1_TABELA2] FOREIGN KEY (ID_TABELA1) REFERENCES TABELA1(ID_TABELA1) ON DELETE CASCADE
ALTER TABLE TABELA1 ADD CONSTRAINT [FK_TABELA1_TABELA2] FOREIGN KEY (ID_TABELA1) REFERENCES TABELA1(ID_TABELA1) ON DELETE CASCADE

Cursores
1 - Criar um cursor para selecionar o nome de um programador. Verificar a quantidade de atividades realizadas pelo programador (tabela atividadesProg). Ao percorrer o cursor, mostrar o nome do programador e se a quantidade de atividades >= 3, trazer mensagem: Programador alocado. Caso contrrio, programador Disponvel.
declare cur_exe1_numAtividades cursor for select Nome_Programador, Numero_de_Atividades from qtdativprogramador declare @nome varchar(20), @numero int open cur_exe1_numAtividades fetch next from cur_exe1_numAtividades into @nome,@numero while @@fetch_status=0 begin if @numero>=3 begin select @nome, 'Programador alocado' Status end else begin select @nome, 'Programador disponivel' Status end fetch next from cur_exe1_numAtividades into @nome, @numero end close cur_exe1_numAtividades deallocate cur_exe1_numAtividades

2 - Criar um cursor para selecionar o cdigo, o nome, a idade, e todas as atividades realizadas pelo analista. Ao lado de cada atividade, mostrar se ela foi realizada por um analista jr, pleno ou snior. Condies: 1. Jr Idade <=21 2. Pleno Idade <=28 3. Snior Idade >=29

declare cur_exe2 cursor for select a.codanalista, a.analista, a.idade, at.codatividadeanalise from analista a,atividadesanalise at where a.codanalista=at.codanalista

declare @codigo int, @nome varchar(20), @idade int, @atividade varchar(20) open cur_exe2 fetch next from cur_exe2 into @codigo, @nome, @idade, @atividade while @@fetch_status=0 begin if @idade<=21 begin select @codigo as 'codigo', @nome as 'nome', @idade as 'idade', @atividade as 'curso', 'JR' as 'Ttulo Analista' end else if @idade>21 and @idade<=28 begin select @codigo as 'codigo', @nome as 'nome', @idade as 'idade', @atividade as 'curso', 'Pleno' as 'Ttulo Analista' end else if @idade>=29 begin select @codigo as 'codigo', @nome as 'nome', @idade as 'idade', @atividade as 'curso', 'Snior' as 'Ttulo Analista' end fetch next from cur_exe2 into @codigo, @nome, @idade, @atividade end close cur_exe2 deallocate cur_exe2

3 - Criar uma tabela de acumAtividades com a estrutura: codFuncionario int not null nome varchar(20) not null totAtividades int not null pk codFuncionario Criar um cursor com o cdigo do funcionrio, nome e a quantidade de atividades realizadas. Inserir na tabela acumAtividades.
declare cur_exe3 cursor for select a.analista, a.codanalista, count(a.codanalista) as numero, 'Analista' as cargo from analista a, atividadesanalise ac where a.codanalista=ac.codanalista group by a.codanalista, a.analista

union select p.programador, p.codprogramador, count(p.codprogramador) as numero, 'Programador' as cargo from programador p, atividadesprog ap where p.codprogramador=ap.codprogramador group by p.codprogramador, p.programador declare @nome varchar(20),@codigo int, @numero int,@cargo varchar(20) open cur_exe3 fetch next from cur_exe3 into @nome, @codigo, @numero,@cargo while @@fetch_status=0 begin insert into acumAtividades values(@codigo, @nome, @numero) fetch next from cur_exe3 into @nome, @codigo, @numero,@cargo end close cur_exe3 deallocate cur_exe3

4 - Criar uma tabela de funcLivres com a estrutura:

codFunc Nome Funcao pk codFunc

int varchar(50) varchar(50)

not

null

not not null null

Criar um cursor com o cdigo, nome e funo do funcionrio que traga todos os funcionrios que ainda no realizaram nenhuma atividade. Inserir os dados na tabela funcLivres.
declare cur_exe4 cursor for select codanalista, analista, 'Analista' as 'Tipo' from analista where (codanalista not in (select codanalista from atividadesanalise)) union select codprogramador, programador, 'Programador' as tipo from programador where(codprogramador not in(select codprogramador from atividadesprog)) declare @nome varchar(50),@codigo int, @funcao varchar(25) open cur_exe4 fetch next from cur_exe4 into @codigo, @nome, @funcao while @@fetch_status=0 begin insert into funcLivres values(@codigo, @nome, @funcao) fetch next from cur_exe4 into @codigo, @nome, @funcao end close cur_exe4 deallocate cur_exe4

Indices CREATE TABLE agencia( cod int not null, nome varchar(50) not null, endereco varchar(100) not null, numfunc int not null PRIMARY KEY (cod) ) CREATE NONCLUSTERED INDEX idx_nome ON agencia (nome);

S-ar putea să vă placă și