Instituto Federal do Rio Grande do Norte diego.nascimento@ifrn.edu.br 24 de agosto de 2014 Ementa do Curso 1 Introduo 2 Abordagem Entidade-relacionamento 3 Abordagem Relacional 4 Normalizao 5 Liguagem Estruturada de Consulta SQL 6 Consultas Avanadas Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 2 / 104 Ementa do Curso 1 Introduo 2 Abordagem Entidade-relacionamento 3 Abordagem Relacional 4 Normalizao 5 Liguagem Estruturada de Consulta SQL 6 Consultas Avanadas Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 3 / 104 Objetivos da Disciplina Capacitar para desenvolvimento de sistemas que utilizam a tecnologia de Banco de Dados (BD); Apresentar os conceitos fundamentais da rea; Ensinar as tcnicas de modelagem de dados, bem como as tcnicas de normalizao; Implementar projetos com BD; Utilizar uma linguagem relacional; e Elaborar consultas de complexidade variada. Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 4 / 104 Motivaes em Estudar Banco de Dados Sistemas de Bancos de Dados (BD) tm sido amplamente utilizados no desenvolvimento de sistemas computacionais corporativos; A disseminao de BDs requer a capacitao de prossionais da rea na utilizao e no gerenciamento de tais sistemas, diante de um nvel de complexidade crescente; e Geralmente, prossionais de BD so muito bem remunerados. Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 5 / 104 Banco de Dados Denio So conjuntos de registros dispostos em estrutura regular que possibilita a organizao dos dados e produo de informao. Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 6 / 104 Caractersticas Natureza auto-descritiva de um sistema de BD Um catlogo do SGBD armazena a descrio do banco de dados (meta-dados), permite trabalhar com diferentes BDs. Independncia programa-dados Permite mudanas na estrutura de armazenamento e operaes dos dados sem ter que mudar os programas que acessam os dados. Abstrao de dados Um modelo de dados usado para esconder detalhes de armazenamento, apresentando ao usurio uma viso conceitual dos dados; Suporta mltiplas vises dos dados Cada usurio pode ter diferentes vises do banco de dados, a qual descreve somente os dados de interesse dos usurio. Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 7 / 104 Propriedades Implcitas Um banco de dados representa algum aspecto do mundo real; Um banco de dados uma coleo lgica e coerente de dados com algum signicado inerente; Uma organizao de dados ao acaso no pode ser corretamente interpretado como um banco de dados; Um banco de dados projetado, construdo e povoado por dados, atendendo a uma proposta; e Possui um grupo de usurios denido em algumas aplicaes preconcebidas de acordo com o interesse desse grupo de usurio. Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 8 / 104 Benefcios Controle de Redundncia; Compartilhamento dos dados com vrios usurios; Restringe o acesso no autorizado dos dados; Prov mltiplas interfaces para diferentes tipos de usurios; Representa relacionamentos complexos dos dados; Manuteno de restries de integridade; Prov Backup e Recuperao; e Potencial para ditar padres. Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 9 / 104 Evoluo Ilustrao Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 10 / 104 Aplicaes Tradicionais Sistemas bancrios; Controle em hotelaria; Pronturio de pacientes em hospitais; Sites de relacionamento; Controle de estoque de supermercados; Cadastramento de funcionrios por uma empresa; e Sistemas acadmico. Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 11 / 104 Avanos Tecnolgicos de Armazenamento Figuras; Vdeos; Mensagens sonoras; Mapas; e Dados temporais. Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 12 / 104 Sistema Gerenciador de Banco de Dados Denio uma coleo de programas de propsito geral que facilita os processos de denio, construo, manipulao e compartilhamento de bancos entre vrios usurios e aplicaes. Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 13 / 104 Objetivo de um SGBD Gerenciamento eciente (mais rpidos que arquivos); com segurana (crashes); de grandes quantidades (gigabyte); de informaes persistentes; e compartilhadas (mltipos usurios). Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 14 / 104 Congurao de um Sistema de Bando de Dados Ilustrao Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 15 / 104 Ementa do Curso 1 Introduo 2 Abordagem Entidade-relacionamento 3 Abordagem Relacional 4 Normalizao 5 Liguagem Estruturada de Consulta SQL 6 Consultas Avanadas Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 16 / 104 Modelos de Banco de Dados Denio uma descrio dos tipos de informaes que esto armazenadas em um banco de dados. Para construir um modelo de dados usa-se uma linguagem de modelagem de dados; A linguagem de modelagem pode ser textual ou grca; Existem linguagens de modelagem para descrever modelos de dados em diferentes nveis de abstrao e objetivos; Cada representao de um modelo de dados recebe a denominao de esquema de banco de dados; Para um projeto de banco de dados, normalmente so considerados dois nveis de abstrao de modelos de dados: Modelo conceitual; e Modelo lgico. Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 17 / 104 Modelo Conceitual Denio uma descrio do banco de dados de forma independente de implementao em um SGBD. O modelo conceitual registra que dados podem aparecer no banco de dados, mas no registra como estes dados esto armazenados a nvel de SGBD. Ilustrao Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 18 / 104 Modelo Lgico Denio uma descrio de um banco de dados no nvel de abstrao visto pelo usurio do SGBD. Desta forma, o modelo lgico dependente do tipo particular de SGBD que est sendo usado. Ilustrao Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 19 / 104 Entidade Denio Conjunto de objetos da realidade modelada sobre os quais deseja-se manter informaes o banco de dados. Ilustrao Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 20 / 104 Relacionamento Denio Conjunto de associaes entre ocorrncia de entidades. Ilustrao Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 21 / 104 Cardinalidade de Relacionamento Denio o nmero (mnimo, mximo) de ocorrncias de entidade associadas a uma ocorrncia da entidade em questo atravs do relacionamento. Classicao de relacionamentos binrios: 1:1 (um-para-um); 1:N (um-para-muitos); N:N (muitos-para-muitos); Relacionamento Ternrio; e Cardinalidade Mnima. Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 22 / 104 Relacionamento Binrio 1:1 Ilustrao Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 23 / 104 Relacionamento Binrio 1:N Ilustrao Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 24 / 104 Relacionamento Binrio N:N Ilustrao Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 25 / 104 Relacionamento Ternrio Ilustrao Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 26 / 104 Cardinalidade Mnima Ilustrao Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 27 / 104 Atributo Denio Dado que associado a cada ocorrcia de uma entidade ou de um relacionamento. Ilustrao Cardinalidade de atributo: Obrigatrio; Mono-valorado; ou Multi-valorados. Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 28 / 104 Identicao de Entidade Denio Um identicador um conjunto de um ou mais atributos (e possivelmente relacionamentos, como visto abaixo) cujos valores servem para distinguir uma ocorrncia da entidade das demais ocorrncias da mesma entidade. Tipo de identicao: Simples; ou Composto. Ilustrao Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 29 / 104 Relacionamento Identicado Denio H casos em que o identicador de uma entidade composto no somente por atributos da prpria entidade mas tambm por relacionamentos dos quais a entidade participa. Ilustrao Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 30 / 104 Generalizao Ilustrao Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 31 / 104 Entidade Associativa Ilustrao Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 32 / 104 Smbolos do Diagrama Entidade Relacionamento Ilustrao Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 33 / 104 Ementa do Curso 1 Introduo 2 Abordagem Entidade-relacionamento 3 Abordagem Relacional 4 Normalizao 5 Liguagem Estruturada de Consulta SQL 6 Consultas Avanadas Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 34 / 104 Tabela Denio um conjunto no ordenado de linhas (tuplas); Cada linha composta por uma srie de campos (valor do atributo); Cada campo identicado por nome de campo (nome de atributo); e O conjunto de campos das linhas de uma tabela que possuem o mesmo nome formam uma coluna. Ilustrao Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 35 / 104 Chaves Denio E a forma na qual se estabelece relaes entre linhas de tabelas de um banco de dados relacional. Tipos de chaves: Primria; Estrangeira; e Alternativa; Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 36 / 104 Chave Primria Denio Uma chave primria uma coluna ou uma combinao de colunas cujos valores distinguem uma linha das demais dentro de uma tabela. Ilustrao Tab: Departamento COD DESC D1 Compras D2 Engenharia D3 Vendas Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 37 / 104 Chave Estrangeira Denio Uma chave estrangeira uma coluna ou uma combinao de colunas, cujos valores aparecem necessariamente na chave primria de uma tabela. Ilustrao Tab: Empregado COD NOME COD_DEP CAT_FUNC E1 Souza D1 - E2 Santos D2 C5 E3 Silva D2 C5 E5 Soares D1 C2 Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 38 / 104 Chave Alternativa Denio Em alguns casos, mais de uma coluna ou combinaes de colunas podem servir para distinguir uma linha das demais. Ilustrao Tab: Empregado COD NOME COD_DEP CAT_FUNC CPF E1 Souza D1 - 132.121.331-20 E2 Santos D2 C5 891.221.111-11 E3 Silva D2 C5 341.511.773-45 E5 Soares D1 C2 631.692.754-88 Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 39 / 104 Ementa do Curso 1 Introduo 2 Abordagem Entidade-relacionamento 3 Abordagem Relacional 4 Normalizao 5 Liguagem Estruturada de Consulta SQL 6 Consultas Avanadas Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 40 / 104 Normalizao Denio uma regra que deve ser obedecida por uma tabela para que esta seja considerada bem projetada. Tipos de Normalizao: Primeira forma normal (1FN); Segunda forma normal (2FN); Terceira forma normal (3FN); e Quarta forma normal (4FN). Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 41 / 104 Tabela No Normalizada Exemplo Tab: Projeto_Empregado COD_PROJ TIPO DESC COD_EMP NOME CAT SAL INI DURAC LSC001 Desenvolvimento Sistema de Estoque 2146 Joo A1 4 01/11/91 24 LSC001 Desenvolvimento Sistema de Estoque 3145 Slvio A2 4 02/10/91 24 LSC001 Desenvolvimento Sistema de Estoque 6126 Jos B1 9 03/10/92 18 LSC001 Desenvolvimento Sistema de Estoque 1214 Carlos A2 4 04/10/92 18 LSC001 Desenvolvimento Sistema de Estoque 8191 Mrio A1 4 01/11/92 12 PAG02 Manuteno Sistema de RH 8191 Mrio A1 4 01/05/93 12 PAG02 Manuteno Sistema de RH 4112 Joo A2 4 04/01/91 24 PAG02 Manuteno Sistema de RH 6126 Jos B1 9 01/11/92 12 Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 42 / 104 Primeira Forma Normal (1FN) Denio Diz-se que uma tabela est na primeira forma normal, quando ela no contm tabelas aninhadas. Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 43 / 104 Tabela na 1FN Exemplo Tab: Projeto COD TIPO DESC LSC001 Desenvolvimento Sistema de Estoque PAG02 Manuteno Sistema de RH Tab: Empregado COD_PROJ COD_EMP NOME CAT SAL INI DURAC LSC001 2146 Joo A1 4 01/11/91 24 LSC001 3145 Slvio A2 4 02/10/91 24 LSC001 6126 Jos B1 9 03/10/92 18 LSC001 1214 Carlos A2 4 04/10/92 18 LSC001 8191 Mrio A1 4 01/11/92 12 PAG02 8191 Mrio A1 4 01/05/93 12 PAG02 4112 Joo A2 4 04/01/91 24 PAG02 6126 Jos B1 9 01/11/92 12 Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 44 / 104 Dependncia Funcional Denio Diz-se que uma coluna C2 depende funcionalmente de uma coluna C1 (ou que a coluna C1 determina a coluna C2) quando, em todas linhas da tabela, para cada valor de C1 que aparece na tabela, aparece o mesmo valor de C2. Ilustrao Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 45 / 104 Segunda Forma Normal (2FN) Denio Uma tabela encontra-se na segunda forma normal, quando, alm de estar na 1FN, no contm dependncias parciais. Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 46 / 104 Tabela na 2FN Exemplo Tab: Projeto_Empregado COD_PROJ COD_EMP INI DURAC LSC001 2146 01/11/91 24 LSC001 3145 02/10/91 24 LSC001 6126 03/10/92 18 LSC001 1214 04/10/92 18 LSC001 8191 01/11/92 12 PAG02 8191 01/05/93 12 PAG02 4112 04/01/91 24 PAG02 6126 01/11/92 12 Tab: Empregado COD_EMP NOME CAT SAL 2146 Joo A1 4 3145 Slvio A2 4 6126 Jos B1 9 1214 Carlos A2 4 8191 Mrio A1 4 4112 Joo A2 4 Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 47 / 104 Terceira Forma Normal (3FN) Denio Uma tabela encontra-se na terceira forma normal, quando, alm de estar na 2FN, no contm dependncias transitivas. Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 48 / 104 Tabela na 3FN Exemplo Tab: Empregado COD_EMP NOME CAT 2146 Joo A1 3145 Slvio A2 6126 Jos B1 1214 Carlos A2 8191 Mrio A1 4112 Joo A2 Tab: Categoria CAT SAL A1 4 A2 4 B1 9 Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 49 / 104 Quarta Forma Normal (4FN) Denio Uma tabela encontra-se na quarta forma normal, quando, alm de estar na 3FN, no contm dependncias multi-valoradas. Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 50 / 104 Incluindo uma Nova Entidade Exemplo Tab: Equipamento COD DESC EQ1 Projetor EQ2 Notebook EQ3 Roteador Tab: Projeto_Empregado_Equipamento COD_PROJ COD_EMP COD_EQUI PAG02 8191 EQ1 PAG02 4112 EQ1 PAG02 6126 EQ1 PAG02 8191 EQ2 PAG02 4112 EQ2 PAG02 6126 EQ2 PAG02 8191 EQ3 PAG02 4112 EQ3 PAG02 6126 EQ3 Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 51 / 104 Tabela na 4FN Exemplo Tab: Projeto_Equipamento COD_PROJ COD_EQUI PAG02 E1 PAG02 E2 PAG02 E3 Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 52 / 104 Ementa do Curso 1 Introduo 2 Abordagem Entidade-relacionamento 3 Abordagem Relacional 4 Normalizao 5 Liguagem Estruturada de Consulta SQL 6 Consultas Avanadas Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 53 / 104 SQL Adotada como padro para BDs relacionais; Implementada no projeto de pesquisa do System R da IBM em meados dos anos 70; Padronizada em 1986 e melhorada em 1989; SQL-2 ou SQL-92: Padro hoje em vigor; e SQL-3: Em fase de desenvolvimento. Vai estender o padro atual com conceitos de orientao a objeto e outros novos conceitos de BDs. Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 54 / 104 Comandos de SQL Comandos de denio de dados; e Comandos de manipulao dos dados. Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 55 / 104 Comandos de Denio de Dados Criao e excluso de banco de dados; Criao, alterao e excluso de tabelas; Especicao de restries; Criao de viso; Criao de procedimentos armazenados; e Criao de gatilhos. Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 56 / 104 Criando Banco de Dados Estrutura create database <nome do database > Exemplo create database sistema_academico Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 57 / 104 Excluindo Banco de Dados Estrutura drop database <nome do banco > Exemplo drop database sistema_academico Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 58 / 104 Tabelas Exemplo Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 59 / 104 Criando Tabela Estrutura create table <nome da tabela >( <nome do atributo 1> <tipo >, <nome do atributo 2> <tipo >) Exemplo create table tb_aluno( matricula int , nome varchar (50), sexo char) create table tb_disciplina( identificador int , descricao varchar (50), creditos int) create table tb_disciplina_cursada( matricula_aluno int , identificador_disciplina int , semestre int , ano int , nota float) Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 60 / 104 Alterando Tabela Estrutura alter table <nome da tabela > add <nome do atributo > <tipo > Exemplo alter table tb_aluno add cpf varchar (11) Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 61 / 104 Excluindo Tabela Estrutura drop table <nome da tabela > Exemplo drop table tb_aluno Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 62 / 104 Comandos de Manipulao de Dados Inserir registros em tabelas; Selecionando registros; Atualizar registros em tabelas; e Excluir registros em tabelas. Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 63 / 104 Inserindo Valores Estrutura insert into <nome da tabela > (nome do atributo 1, nome do atributo 2) values (valor 1,valor 2) Exemplo insert into tb_aluno (matricula , nome , sexo , cpf) values (1,Joo da Silva ,M,12345678 ) Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 64 / 104 Selecionando Registros Estrutura select <nome do atributo 1>, <nome do atributo 2> from <nome da tabela > Exemplo select matricula , nome from tb_aluno Caso necessite selecionar todos os atributos de uma nica vez, deve-se apenas utilizar o sbolo de asterisco () em substituio do(s) nome(s) da(s) coluna(s). Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 65 / 104 Clusula WHERE Estrutura select <nome do atributo 1>, <nome do atributo 2> from <nome da tabela > where <condio> Exemplo select matricula , nome from tb_aluno where matricula = 1 Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 66 / 104 Conectores Relacionais igual: =; maior: >; menor: <; maior igual: >=; menor igual: <=; diferente: <>; entre: between; e parte: like (Permitido o uso de mscara com % entre spas simples). Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 67 / 104 Conectores Lgicos e: and; ou: or; nulo: is null; e no nulo: is not null. Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 68 / 104 Atualizando Valores Estrutura update <nome da tabela > set <nome do atributo > = <valor > where <condies > Exemplo update tb_aluno set nome = Joo da Silva Filho where matricula = 1 Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 69 / 104 Excluindo Valores Estrutura delete from <nome da tabela > where <condies > Exemplo delete from tb_aluno where matricula = 1 Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 70 / 104 Especicando Restries de Integridade Declarativas: Domnio ou tipo de dados; Vazio; Padro; Checagem; Unicidade; Chave primria; e Referencial. Procedimental: Procedimentos armazenados ou funes; e Gatilhos (Banco de dados ativos). Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 71 / 104 Restrio de Vazio Estrutura alter table <nome da tabela > alter <nome do atributo > set not null Exemplo alter table tb_aluno alter nome set not null Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 72 / 104 Restrio de Padro Estrutura alter table <nome da tabela > alter <nome do atributo > set default <valor > Exemplo alter table tb_aluno alter sexo set default M Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 73 / 104 Restrio de Checagem Estrutura alter table <nome da tabela > add constraint <nome da restrio> check (<restrio>) Exemplo alter table tb_disciplina_cursada add constraint ck_tb_disciplina_cursada_nota check (nota >= 0 and nota <= 10) Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 74 / 104 Restrio de Unicidade Estrutura alter table <nome da tabela > add constraint <nome da restrio> unique (<nome do atributo >) Exemplo alter table tb_aluno add constraint u_tb_aluno_cpf unique (cpf) Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 75 / 104 Restrio de Chave Estrutura alter table <nome da tabela > add constraint <nome da restrio> primary key (nome do atributo) Exemplos alter table tb_aluno add constraint pk_tb_aluno_matricula primary key (matricula) alter table tb_disciplina add constraint pk_tb_disciplina_identificador primary key (identificador) alter table tb_disciplina_cursada add constraint pk_tb_disciplina_cursada_matricula_disciplina primary key (matricula_aluno , identificador_disciplina , semestre , ano) Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 76 / 104 Restrio de Referencial Estrutura alter table <nome da tabela > add constraint <nome da restrio> foreign key (<nome do atributo >) references <nome da tabela -referncia >(<nome do atributo -referncia >) Exemplos alter table tb_disciplina_cursada add constraint fk_tb_disciplina_cursada_matricula_aluno foreign key (matricula_aluno) references tb_aluno (matricula) alter table tb_disciplina_cursada add constraint fk_tb_disciplina_cursada_idenfificador_disciplina foreign key (identificador_disciplina) references tb_disciplina (identificador) Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 77 / 104 Criando Viso Estrutura create view <nome da viso> as <consulta sql > Exemplo create view vw_alunos as select matricula , nome from secretaria.tb_aluno Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 78 / 104 Criando Funo Estrutura create function <nome da funo>(<parmetros >) returns <tipo de retorno > as $$ <definio do comando >; $$ language <nome da linguagem > Exemplo create function fn_inserir_aluno ( matricula INT , nome VARCHAR (50), sexo CHAR , cpf VARCHAR (11) ) returns void as $$ insert into tb_aluno (matricula , nome , sexo , cpf) values ($1 ,$2,$3,$4); $$ language SQL Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 79 / 104 Criando Funo Exemplo create function fn_descricao_sexo(sexo CHAR) returns varchar (10) as $$ declare pSexo alias for $1; begin if (pSexo = M) then return MASCULINO ; else return FEMININO ; end if; end; $$ language PLPGSQL Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 80 / 104 Criando Gatilhos Estrutura create trigger <nome do gatilho > [BEFORE ,AFTER] [INSERT ,UPDATE ,DELETE] on <nome da tabela > for each row execute procedure <nome da funo>() Exemplos create table tb_log_alteracao_nota( codigo serial , data date , matricula_aluno int , identificador_disciplina int , nota_anterior float , nota_atual float , usuario varchar (20) ) Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 81 / 104 Criando Gatilhos Exemplos create function fn_log_alterar_nota () returns trigger as $$ begin insert into tb_log_alteracao_nota (data , matricula_aluno , identificador_disciplina , nota_anterior , nota_atual ,usuario) values (now(),OLD.matricula_aluno , OLD.identificador_disciplina , OLD.nota , NEW.nota ,user); return null; end; $$ language PLPGSQL create trigger tr_alterar_nota after update on tb_disciplina_cursada for each row execute procedure log_alterar_nota () Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 82 / 104 Ementa do Curso 1 Introduo 2 Abordagem Entidade-relacionamento 3 Abordagem Relacional 4 Normalizao 5 Liguagem Estruturada de Consulta SQL 6 Consultas Avanadas Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 83 / 104 Exemplo de um Banco de Dados Exemplos Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 84 / 104 Operao de Renomeao AS Denio A linguagem SQL permite a renomeao de relaes e atributos recorrendo clusula as. Exemplo select e.pnome as nome from empregado as e Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 85 / 104 Clusula GROUP BY Estrutura select <nome do atributo 1>, <nome do atributo 2> from <nome da tabela > where <condies > group by <nome do atributo > Funes de grupo: count(); min(); max(); sum(); ou avg(). Exemplo select e.sexo , count (*) from empregado as e group by e.sexo Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 86 / 104 Clusula HAVING Estrutura select <nome do atributo 1>, <nome do atributo 2> from <nome da tabela > where <condies > group by <nome do atributo > having <condies> Exemplo select e.dno , avg(e.salario) from empregado as e group by e.dno having avg(e.salario) < 55000 Importante Predicados da clusula WHERE so aplicados depois da formao dos grupos. Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 87 / 104 Clusula ORDER BY Estrutura select <nome do atributo 1>, <nome do atributo 2> from <nome da tabela > where <condies > order by <nome do atributo > <tipo de ordenao> Tipo de ordenao: Ascendente: asc; ou Descendente: desc. Exemplo select * from empregado as e order by e.pnome desc Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 88 / 104 Operaes de Conjunto Unio dos resultados de uma ou mais queries; Interseo entre os resultados de duas queries; e Subtrao entre os resultados de duas queries. Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 89 / 104 Operaes de Conjunto para Unio Estrutura <Primeira consulta > union <Segunda consulta > Exemplo select e.pnome , e.sexo from empregado as e union select d.nome_dependente , d.sexo from dependente as d Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 90 / 104 Operaes de Conjunto para Interseo Estrutura <Primeira consulta > intersect <Segunda consulta > Exemplo select e.pnome , e.sexo from empregado as e intersect select e.pnome , e.sexo from empregado as e where e.superssn is not null Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 91 / 104 Operaes de Conjunto para Subtrao Estrutura <Primeira consulta > except <Segunda consulta > Exemplo select e.pnome , e.sexo from empregado as e except select e.pnome , e.sexo from empregado as e where e.superssn is not null Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 92 / 104 Junes entre Tabelas Juno cruzada; Juno interna; e Juno externa: Esquerda; Direita; ou Completa. Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 93 / 104 Juno Cruzada Estrutura select <atributos > from <primeira tabela > cross join <segunda tabela > Exemplo select e1.pnome , e2.pnome from empregado as e1 cross join empregado as e2 Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 94 / 104 Juno Interna Estrutura select <atributos > from <primeira tabela > inner join <segunda tabela > on (<condio>) Exemplo select e1.pnome , e2.pnome from empregado as e1 inner join empregado as e2 on (e1.ssn = e2.superssn) Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 95 / 104 Juno Externa a Esquerda Estrutura select <atributos > from <primeira tabela > left outer join <segunda tabela > on (<condio>) Exemplo select e1.pnome , e2.pnome from empregado as e1 left outer join empregado as e2 on (e1.ssn = e2.superssn) Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 96 / 104 Juno Externa a Direita Estrutura select <atributos > from <primeira tabela > right outer join <segunda tabela > on (<condio>) Exemplo select e1.pnome , e2.pnome from empregado as e1 right outer join empregado as e2 on (e1.ssn = e2.superssn) Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 97 / 104 Juno Externa Completa Estrutura select <atributos > from <primeira tabela > inner join <segunda tabela > on (<condio>) Exemplo select e1.pnome , e2.pnome from empregado as e1 full outer join empregado as e2 on (e1.ssn = e2.superssn) Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 98 / 104 Subconsultas Na clusula SELECT; Na clusula FROM; ou Na clusula WHERE. Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 99 / 104 Subconsulta na Clusula Select Estrutura select <atributos >, (<subconsulta >) from <primeira tabela > Exemplo select e.pnome , (select count (*) from dependente as d where e.ssn = d.essn) as qt_dependente from empregado as e Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 100 / 104 Subconsulta na Clusula From Estrutura select <atributos > from (<subconsulta >) Exemplo select e.pnome , d.qt_dependentes from empregado as e inner join (select d.essn , count (*) as qt_dependentes from dependente as d group by d.essn ) as d on (e.ssn = d.essn) Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 101 / 104 Expresses em Subconsulta in; not in; exists; e not exists. Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 102 / 104 Subconsulta na Clusula Where Estrutura select <atributos > from <tabela > where (subconsulta) Exemplo select e.ssn , e.pnome from empregado as e where e.ssn in (select d.essn from dependente as d group by d.essn) Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 103 / 104 Subconsulta na Clusula Where Exemplo select e.ssn , e.pnome from empregado as e where exists (select d.essn from dependente as d where d.essn = e.ssn group by d.essn) Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 104 / 104