Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)

822 visualizações

Publicada em

Este material é uma introdução aos conceitos e recursos fundamentais necessários para projetar e manipular banco de dados relacionais, bem como desenvolver aplicações com sistemas de banco de dados relacionais.

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
822
No SlideShare
0
A partir de incorporações
0
Número de incorporações
4
Ações
Compartilhamentos
0
Downloads
34
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)

  1. 1. TSI33A – Banco de Dados 1TSI33A – Banco de Dados 1 Prof. Me. Sidgley Camargo de Andrade
  2. 2. AtençãoAtenção Este material é uma introdução aos conceitos e recursos fundamentais necessários paraEste material é uma introdução aos conceitos e recursos fundamentais necessários para projetar e manipular banco de dados relacionais, bem como desenvolver aplicaçõesprojetar e manipular banco de dados relacionais, bem como desenvolver aplicações com sistemas de banco de dados relacionais.com sistemas de banco de dados relacionais. Organização do material:Organização do material: Semana 01 Database Management System Semana 07 Subconsultas Operações de Conjunto Semana 02 PostgreSQL Semana 08 Data Manipulation Language Semana 03 Relational Model Semana 09 Data Definition Language Semana 04 Structured Query Language Consultas Semana 10 Visões e Visões Materializadas Semana 05 Junções Semana 11 PL/pgSQL Semana 06 Subcadeias de Caracteres Funções de Agregação Semana 12 Semana 13 Projeto de Banco de Dados
  3. 3. TSI33A – Banco de Dados 1TSI33A – Banco de Dados 1 DBMS - Database Management SystemDBMS - Database Management System Prof. Me. Sidgley Camargo de Andrade Semana 01
  4. 4. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 22//1313 1. Banco de dados1. Banco de dados ● Banco de dadosBanco de dados é uma coleção de dados relacionados referente à fatos conhecidos que podem ser registrados e possuem significado implícito. ● Um banco de dados é projetadoprojetado, construídoconstruído e populadopopulado com dados para uma finalidade específicafinalidade específica. Ele possui um grupo definido de usuários e algumas aplicações previamente concebidas. ● Um banco de dados tem alguma fonte da qual o dado é derivado,Um banco de dados tem alguma fonte da qual o dado é derivado, algum grau de interação com eventos no mundo real e um público quealgum grau de interação com eventos no mundo real e um público que está ativamente interessado em seu conteúdo.está ativamente interessado em seu conteúdo.
  5. 5. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 33//1313 Cenário CorporativoCenário Corporativo ● AplicaçõesAplicações ● Bases de DadosBases de Dados CorporativoCorporativo http://sistemas.utfpr.edu.br/ https://www.moodle.td.utfpr.edu.brhttp://www2.td.utfpr.edu.br/glpi AcadêmicoAcadêmico LDAPLDAP AtendimentoAtendimento MoodleMoodle ReflexãoReflexão Ambientes corporativos possuem diversos sistemas, cada um com sua respectiva baseAmbientes corporativos possuem diversos sistemas, cada um com sua respectiva base de dados. Algumas bases de dados são compartilhadas por dois ou mais sistemas, oude dados. Algumas bases de dados são compartilhadas por dois ou mais sistemas, ou um sistema faz uso de duas ou mais bases de dados. Também existem integraçõesum sistema faz uso de duas ou mais bases de dados. Também existem integrações entre sistemas e/ou bases de dados.entre sistemas e/ou bases de dados. Como gerenciar a documentação, o acesso, aComo gerenciar a documentação, o acesso, a segurança, a escalabilidade, a interoperabilidade, etc dessas bases de dados?segurança, a escalabilidade, a interoperabilidade, etc dessas bases de dados? ReflexãoReflexão Ambientes corporativos possuem diversos sistemas, cada um com sua respectiva baseAmbientes corporativos possuem diversos sistemas, cada um com sua respectiva base de dados. Algumas bases de dados são compartilhadas por dois ou mais sistemas, oude dados. Algumas bases de dados são compartilhadas por dois ou mais sistemas, ou um sistema faz uso de duas ou mais bases de dados. Também existem integraçõesum sistema faz uso de duas ou mais bases de dados. Também existem integrações entre sistemas e/ou bases de dados.entre sistemas e/ou bases de dados. Como gerenciar a documentação, o acesso, aComo gerenciar a documentação, o acesso, a segurança, a escalabilidade, a interoperabilidade, etc dessas bases de dados?segurança, a escalabilidade, a interoperabilidade, etc dessas bases de dados? ...... ......
  6. 6. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 44//1313 2. Por que2. Por que SistemasSistemas de Banco de Dados?de Banco de Dados? ● Natureza de autodescrição de um sistema de banco de dados (metadadosmetadados – dicionário de dados). ● Isolamento entre programas e dados, e abstração de dados. ● Suporte a múltiplas visões dos dados (diferentes visões do mesmo conjunto de dados). ● Compartilhamento de dados e processamento de transações multiusuário.
  7. 7. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 55//1313 3. O que é um Sistema de Banco de Dados3. O que é um Sistema de Banco de Dados ● Um Sistema Gerenciador de Banco de DadosSistema Gerenciador de Banco de Dados (SGBD) é uma coleção decoleção de programasprogramas que facilita a definiçãodefinição, o armazenamentoarmazenamento, a manipulaçãomanipulação e o compartilhamentocompartilhamento de bancos de dados entre diversas aplicações. ● Proporciona um ambiente convenienteconveniente e eficienteeficiente para o desenvolvimento de aplicações. – Estruturas de armazenamento – Mecanismos para manipulação – Segurança – Controle de acesso concorrente CorporativoCorporativo AcadêmicoAcadêmico LDAPLDAP AtendimentoAtendimento MoodleMoodle Sistema de Banco de Dados “X” Atenção!Atenção! Repositório de banco de dados comRepositório de banco de dados com recursos de manipulação e segurança.recursos de manipulação e segurança. Atenção!Atenção! Repositório de banco de dados comRepositório de banco de dados com recursos de manipulação e segurança.recursos de manipulação e segurança.
  8. 8. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 66//1313 Ambiente de SGBDAmbiente de SGBD
  9. 9. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 77//1313 Descrição dos MódulosDescrição dos Módulos ● Compilador da linguagem de descrição de dados:Compilador da linguagem de descrição de dados: processa as instruções da DDL a fim de identificar as descrições dos construtores de esquemas e armazenar a descrição de esquema no catálogo do sistema de banco de dados (dicionário de dados). ● Dicionário de dados:Dicionário de dados: armazena as definições dos esquemas das bases de dados. ● Pré-compilado da linguagem de manipulação de dados:Pré-compilado da linguagem de manipulação de dados: extrai os comandos de manipulação de dados dos programas escritos em uma linguagem de programação hospedeira. ● Arquivos de dados:Arquivos de dados: local de armazenamento em disco dos dados. ● Processador de consultas:Processador de consultas: manipula as consultas de alto nível que são realizadas interativamente. ● Gerenciador da base de dados:Gerenciador da base de dados: controla o acesso às informações do sistema de banco de dados que são armazenadas em disco. Atenção!Atenção! Existem outros conceitos e módulos, tais como, backup/resotre e tratamentoExistem outros conceitos e módulos, tais como, backup/resotre e tratamento de falhas.de falhas. Para detalhes consulte a documentação do sistema de banco dePara detalhes consulte a documentação do sistema de banco de dados em uso.dados em uso. Atenção!Atenção! Existem outros conceitos e módulos, tais como, backup/resotre e tratamentoExistem outros conceitos e módulos, tais como, backup/resotre e tratamento de falhas.de falhas. Para detalhes consulte a documentação do sistema de banco dePara detalhes consulte a documentação do sistema de banco de dados em uso.dados em uso.
  10. 10. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 88//1313 Principais SGBDsPrincipais SGBDs ProprietáriosProprietários Não-ProprietáriosNão-Proprietários Atenção!Atenção! Os principais sistemas de banco de dados relacionais também são híbridos -Os principais sistemas de banco de dados relacionais também são híbridos - além do modelo relacional também implementam outros modelos (XML, OO,além do modelo relacional também implementam outros modelos (XML, OO, GIS).GIS). Para detalhes consulte a documentação do sistema de banco de dadosPara detalhes consulte a documentação do sistema de banco de dados em uso.em uso. Atenção!Atenção! Os principais sistemas de banco de dados relacionais também são híbridos -Os principais sistemas de banco de dados relacionais também são híbridos - além do modelo relacional também implementam outros modelos (XML, OO,além do modelo relacional também implementam outros modelos (XML, OO, GIS).GIS). Para detalhes consulte a documentação do sistema de banco de dadosPara detalhes consulte a documentação do sistema de banco de dados em uso.em uso.
  11. 11. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 99//1313 4. Arquitetura de Comunicação4. Arquitetura de Comunicação ● Em sistemas de banco de dados é comum o modelo cliente/servidorcliente/servidor para conexão. ● A comunicação ocorre via modelo TCP/IPTCP/IP (Transmission ControlTransmission Control Protocol/Internet ProtocoProtocol/Internet Protocol) , podendo ser aplicado o protocolo SSLSSL (Secure Sockets LayerSecure Sockets Layer). Atenção!Atenção! Cada conexão gera um novo processo noCada conexão gera um novo processo no SGBD.SGBD. Atenção!Atenção! Cada conexão gera um novo processo noCada conexão gera um novo processo no SGBD.SGBD. Fonte: http://slideplayer.com.br/slide/1878089/
  12. 12. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 1010//1313 Formas de ConexãoFormas de Conexão ● Uma vez instalado o sistema de banco de dados, e criada uma base de dados, é possível acessá-la por: – Via terminal ou prompt através do programa interativo do sistema de banco de dados (e.g. psqlpsql do PostgreSQL, mysqlmysql do MySQL Community Server, sqlplussqlplus do Oracle Database). – Via ferramenta administrativa disponível pelo fornecedor do sistema de banco de dados ou por terceiros (e.g. pgAdminpgAdmin do PostgreSQL, MySQL WorkbenchMySQL Workbench do MySQL Community Server, SQL DeveloperSQL Developer do Oracle Database). – Via aplicações personalizadas desenvolvidas internamente pelas empresas (e.g. CBDSCBDS – Central de banco de Dados Sênior, programaprograma SIGACFGSIGACFG da TOVTS).
  13. 13. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 1111//1313 Ferramentas Administrativas (Ferramentas Administrativas (frontendfrontend)) ● A manutenção de bases de dados nos sistemas de banco de dados são, normalmente, realizadas por meio de aplicações clienteaplicações cliente ou ferramentas administrativasferramentas administrativas. Atenção!Atenção! Cada sistema de banco de dados possui suas próprias ferramentas administrativasCada sistema de banco de dados possui suas próprias ferramentas administrativas ((frontendfrontend), e.g., PgAdminIII para o PostgreSQL, MySQL Workbench para o MySQL), e.g., PgAdminIII para o PostgreSQL, MySQL Workbench para o MySQL Community Server e o SQL Developer para o Oracle Database.Community Server e o SQL Developer para o Oracle Database. Atenção!Atenção! Cada sistema de banco de dados possui suas próprias ferramentas administrativasCada sistema de banco de dados possui suas próprias ferramentas administrativas ((frontendfrontend), e.g., PgAdminIII para o PostgreSQL, MySQL Workbench para o MySQL), e.g., PgAdminIII para o PostgreSQL, MySQL Workbench para o MySQL Community Server e o SQL Developer para o Oracle Database.Community Server e o SQL Developer para o Oracle Database.
  14. 14. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 1212//1313 5. Critérios de Seleção dos SGBDs5. Critérios de Seleção dos SGBDs ● Modelo de dadosModelo de dados (relacional, OO, XML, híbridohíbrido) ● Número de usuários suportadosNúmero de usuários suportados (multiusuário e quantidade de conexões) ● Número de locaisNúmero de locais (bases distribuídas) ● Custo de licençaCusto de licença ● Propósito de usoPropósito de uso (geral ou específico) ● Maturidade e quantidade de recursos/funcionalidadesMaturidade e quantidade de recursos/funcionalidades (indexação, auditoria, etc.) ReflexãoReflexão Quais os critérios que definem um bom sistema de banco de dados?Quais os critérios que definem um bom sistema de banco de dados? Por que preferir um em relação à outro?Por que preferir um em relação à outro? ReflexãoReflexão Quais os critérios que definem um bom sistema de banco de dados?Quais os critérios que definem um bom sistema de banco de dados? Por que preferir um em relação à outro?Por que preferir um em relação à outro? Atenção!Atenção! O portal Wikipedia possui um link com a correlação entre diferentes sistemas deO portal Wikipedia possui um link com a correlação entre diferentes sistemas de banco de dados relacionais.banco de dados relacionais. http://en.wikipedia.org/wiki/Comparison_of_relational_database_management_sy stems Atenção!Atenção! O portal Wikipedia possui um link com a correlação entre diferentes sistemas deO portal Wikipedia possui um link com a correlação entre diferentes sistemas de banco de dados relacionais.banco de dados relacionais. http://en.wikipedia.org/wiki/Comparison_of_relational_database_management_sy stems
  15. 15. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 1313//1313 CréditosCréditos ● MaterialMaterial – ELMASRI, Ramez; NAVATHE, Shamkant B. Sistemas de banco de dados. 6 ed. São Paulo: Pearson Addison Wesley, 2011. Capítulo 1. Banco de dados e usuários de banco de dados Capítulo 2. Conceitos e arquitetura do sistema de banco de dados Capítulo 13. Introdução às técnicas de programação SQL
  16. 16. TSI33A – Banco de Dados 1TSI33A – Banco de Dados 1 PostgreSQLPostgreSQL Prof. Me. Sidgley Camargo de Andrade Semana 02
  17. 17. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 22//88 1. PostgreSQL1. PostgreSQL ● PostgreSQL é um Sistema de Banco de Dados Objeto-RelacionalSistema de Banco de Dados Objeto-Relacional (SGBDORSGBDOR) opensourceopensource devenvolvido pelo Departamento de Computação da Universidade da California. – Apesar de ser objeto-relacional será tratado na disciplina TSI33ATSI33A somente o modelo relacionalmodelo relacional. Atenção!Atenção! Conheça a história do PostgreSQL: Prefácio 2. A Brief History of→ →Conheça a história do PostgreSQL: Prefácio 2. A Brief History of→ → PostgreSQL (manual de referência)PostgreSQL (manual de referência) Atenção!Atenção! Conheça a história do PostgreSQL: Prefácio 2. A Brief History of→ →Conheça a história do PostgreSQL: Prefácio 2. A Brief History of→ → PostgreSQL (manual de referência)PostgreSQL (manual de referência) SGBD objeto-relacionalSGBD objeto-relacional suporta conceitos da orientação a objetos diretamente no esquema do banco de dados e na linguagem de consulta.
  18. 18. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 33//88 2. Instalação e Acesso2. Instalação e Acesso ● Acesse o material específico para instalação e configuração do SGBD PostgreSQL ou acesse http://hocuspokus.net/2008/05/install-postgresql-on-ubuntu-804/. http://postgresql.tosystems.net/tutorials/instalando-postgresql-no-ubun tu-12-04/ ● PassosPassos Instalar o pacote do PostgreSQL (.deb.deb ou .msi.msi) – Alterar a senha dos usuários (Sistema OperacionaSistema Operacional e PostgreSQLPostgreSQL) – Configurar acesso de outros hosts (pg_hda.confpg_hda.conf e postgresql.confpostgresql.conf) Cuidado!Cuidado! Usuários do PostgreSQL são separados das contas de usuários do Sistema OperacionalUsuários do PostgreSQL são separados das contas de usuários do Sistema Operacional (S.O.). Ao conectar o sistema de banco de dados é necessário informar o usuário do(S.O.). Ao conectar o sistema de banco de dados é necessário informar o usuário do PostgreSQL. Se este usuário não for informado, por default, será o mesmo do S.O.PostgreSQL. Se este usuário não for informado, por default, será o mesmo do S.O. Cuidado!Cuidado! Usuários do PostgreSQL são separados das contas de usuários do Sistema OperacionalUsuários do PostgreSQL são separados das contas de usuários do Sistema Operacional (S.O.). Ao conectar o sistema de banco de dados é necessário informar o usuário do(S.O.). Ao conectar o sistema de banco de dados é necessário informar o usuário do PostgreSQL. Se este usuário não for informado, por default, será o mesmo do S.O.PostgreSQL. Se este usuário não for informado, por default, será o mesmo do S.O.
  19. 19. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 44//88 Terminal CommandsTerminal Commands (utilitários) ● Criar uma base de dados ● Remover uma base de dados ● Acessar uma base de dados #createdb [connection-option] [option] [dbname [description]]#createdb [connection-option] [option] [dbname [description]]Sintaxe #createdb createdb -p 5432 -h localhost -U postgres -e hr#createdb createdb -p 5432 -h localhost -U postgres -e hr #dropdb [connection-option...] [option...] dbname#dropdb [connection-option...] [option...] dbnameSintaxe #dropdb -h localhost -U postgres -e hr#dropdb -h localhost -U postgres -e hr #psql [option] [dbname [username]]#psql [option] [dbname [username]]Sintaxe #psql -h localhost -p 5432 -U postgres -d hr#psql -h localhost -p 5432 -U postgres -d hr Documentação:Documentação: ##man [createbd | dropdb | psql]man [createbd | dropdb | psql]Documentação:Documentação: ##man [createbd | dropdb | psql]man [createbd | dropdb | psql]
  20. 20. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 55//88 psqlpsql ● UtilitárioUtilitário de linha de comando que permite aos usuários do sistema de banco de dados gerenciar base de dados e usuários, bem como executar interativamente sentenças SQLSQL. Documentação:Documentação: ##man psqlman psql ouou http://www.postgresql.org/docs/9.4/static/app-psql.htmlhttp://www.postgresql.org/docs/9.4/static/app-psql.html Documentação:Documentação: ##man psqlman psql ouou http://www.postgresql.org/docs/9.4/static/app-psql.htmlhttp://www.postgresql.org/docs/9.4/static/app-psql.html =>help (lista as possibilidades de ajuda) Type: copyright for distribution terms h for help with SQL commands ? for help with psql commands g or terminate with semicolon to execute query q to quit =>? (lista os comandos do psql) ... =>q (sair do psql) =>help (lista as possibilidades de ajuda) Type: copyright for distribution terms h for help with SQL commands ? for help with psql commands g or terminate with semicolon to execute query q to quit =>? (lista os comandos do psql) ... =>q (sair do psql) #psql -h localhost -p 5432 -U postgres -d hr#psql -h localhost -p 5432 -U postgres -d hr O prompt do superusuário é o =#
  21. 21. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 66//88 pgAdmin IIIpgAdmin III
  22. 22. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 77//88 3. Catálogo3. Catálogo pg_pg_ ● Cada banco de dados possui um pg_catalogpg_catalog schema que contém todos os objetos (tabelas, campos, funções, etc.) do banco de dados. ● SQL-SQL-7701:01: Listagem das tabelas que foram criadas no esquema de dados HR. SCHEMANAME TABLENAME TABLEOWNER -------------------------------------- hr regions postgres hr departments postgres hr employees postgres hr jobs postgres hr job_history postgres hr countries postgres hr locations postgres SELECT SCHEMANAME, TABLENAME, TABLEOWNER FROM pg_tables WHERE SCHEMANAME LIKE 'hr'; SELECT SCHEMANAME, TABLENAME, TABLEOWNER FROM pg_tables WHERE SCHEMANAME LIKE 'hr'; Atenção!Atenção! Sobre o catálogo do PostgreSQL: Chapter 48. System Catalogs→Sobre o catálogo do PostgreSQL: Chapter 48. System Catalogs→ (manual de referência).(manual de referência). pg_tables; pg_users; pg_views; etcpg_tables; pg_users; pg_views; etc Atenção!Atenção! Sobre o catálogo do PostgreSQL: Chapter 48. System Catalogs→Sobre o catálogo do PostgreSQL: Chapter 48. System Catalogs→ (manual de referência).(manual de referência). pg_tables; pg_users; pg_views; etcpg_tables; pg_users; pg_views; etc
  23. 23. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 88//88 CréditosCréditos ● MaterialMaterial – PostgreSQL Global Development Group. PostgreSQL 9.4.0 Documentation, 2014. Disponível em: http://www.postgresql.org/docs/9.4/static/ Preface. A Brief History of PostgreSQL Chapter 1. Getting Started Chapter 48. System Catalogs – PgAdmin III 1.20.0 Documentation. Disponível em: http://www.pgadmin.org/docs/1.20/index.html Introduction Using pgAdmin III
  24. 24. TSI33A – Banco de Dados 1TSI33A – Banco de Dados 1 Relational ModelRelational Model Prof. Me. Sidgley Camargo de Andrade Semana 03
  25. 25. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 22//1010 1. Modelo1. Modelo ● Um modelo é uma representação que descreve as características de funcionamento e comportamento de partes do mundo real. Normalmente um modelo possui níveis de abstraçãoníveis de abstração de sua representação, variando conforme a perspectivaperspectiva e necessidadenecessidade. Atenção!Atenção! Alguns modelos também poussuem linguagens associadas a eles. No caso doAlguns modelos também poussuem linguagens associadas a eles. No caso do modelo relacional as linguagens formais são a Álgebra e o Cálculo Relacionalmodelo relacional as linguagens formais são a Álgebra e o Cálculo Relacional e a implementação destas a linguagen SQL.e a implementação destas a linguagen SQL. Atenção!Atenção! Alguns modelos também poussuem linguagens associadas a eles. No caso doAlguns modelos também poussuem linguagens associadas a eles. No caso do modelo relacional as linguagens formais são a Álgebra e o Cálculo Relacionalmodelo relacional as linguagens formais são a Álgebra e o Cálculo Relacional e a implementação destas a linguagen SQL.e a implementação destas a linguagen SQL.
  26. 26. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 33//1010 Por que utilizar modelos?Por que utilizar modelos? ● Um percentual significativo de sistemas legadossistemas legados foram desenvolvidos desde a década de 60. Alguns fazem uso de sistemas de banco de dados e outros utilizam sistemas de arquivo. ● Entretanto, há situações que exigem a documentação da base de dados: manutençõesmanutenções rotineirasrotineiras; transmissão detransmissão de conhecimentoconhecimento sobre asobre a base de dadosbase de dados; treinamentotreinamento de novos colaboradoresde novos colaboradores; e migraçãomigração dede plataformas de banco de dadosplataformas de banco de dados. Cuidado!Cuidado! Muitos desses sitemas não possuem a base de dadosMuitos desses sitemas não possuem a base de dados documentada, seja um modelo conceitual ou outra formadocumentada, seja um modelo conceitual ou outra forma de documentação.de documentação. Cuidado!Cuidado! Muitos desses sitemas não possuem a base de dadosMuitos desses sitemas não possuem a base de dados documentada, seja um modelo conceitual ou outra formadocumentada, seja um modelo conceitual ou outra forma de documentação.de documentação. Sistemas de valor crítico para o negócio em produção nas empresas e que resistem significativamente à modificação e à evolução.
  27. 27. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 44//1010 2. Modelo Relacional2. Modelo Relacional ● Abordagem baseada no princípio de que as informações em uma base de dados podem ser consideradas como relações matemáticas representadas de maneina uniforme através de ttabelas bidimensionaisabelas bidimensionais. ● Uma relaçãorelação no modelo relacional (MR) é composta por uma coleção não ordenada de tuplastuplas. Cada tupla é composta por uma lista de valores que correspondem aos valores dos atributosatributos da relação. – Uma tabelatabela é chamada de relação, uma linhalinha ou registroregistro de tupla e a colunacoluna de atributo. – Os atributos possuem um domínio de valoresdomínio de valores (tipo de dados); valores que eles podem assumir. SOCIAL_S | FIRST_NAME | LAST_NAME | EMAIL ------------------------------------------------------------------- 033... | Steven | King | sking@utfpr.edu.br 031... | Neena | Kochhar | nkochhar@utfpr.edu.br 021... | Lex | De Haan | ldehaan@utfpr.edu.br 149... | Alexander | Hunold | Esquema RelacionalEsquema Relacional R: EMPLOYEE(SOCIAL_S: INT, FIRST_NAME: STRING, LAST_NAME: STRING, EMAIL: STRING)
  28. 28. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 55//1010 Regras de IntegridadeRegras de Integridade ● Os sistemas de banco de dados possuem mecanismos para garantir a integridade e consistência dos dados nas operações de inclusãoinclusão, consultaconsulta, alteraçãoalteração e exclusãoexclusão; pode-se associar às operações CRUDCRUD. – Integridade de domínio:Integridade de domínio: intervalo, condições ou valores que atributos podem assumir (SQL → CHECK SALARY >= 0) – Integridade de mandatório ou vazio:Integridade de mandatório ou vazio: obrigatoriedade ou opcionalidade de um atributo assumir valor (SQL → [NOT] NULL). – Integridade de chave:Integridade de chave: garantia de unicidade das tuplas (SQL → PRIMARY KEY; UNIQUE KEY) – Integridade referencial:Integridade referencial: garantia de valores válidos entre relações (SQL → FOREIGN KEY). – Semântica:Semântica: regras de negócio definidas no sistema de banco de dados (SQL → ASSERTION, TRIGGER, FUNCTION, PROCEDURE) Atenção!Atenção! Restrições de integridade são regras de consistência de dados garantidasRestrições de integridade são regras de consistência de dados garantidas de forma implícita ou explícita pelo sistema de banco de dados.de forma implícita ou explícita pelo sistema de banco de dados. Atenção!Atenção! Restrições de integridade são regras de consistência de dados garantidasRestrições de integridade são regras de consistência de dados garantidas de forma implícita ou explícita pelo sistema de banco de dados.de forma implícita ou explícita pelo sistema de banco de dados.
  29. 29. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 66//1010 3. Human Resources – Descrição do Domínio do Negócio3. Human Resources – Descrição do Domínio do Negócio Na base de dados HRHR cada colaboradorcolaborador tem uma identificação, um e-mail, o código do seu cargo, o código do seu departamento, um salário e o código do seu gerente. Alguns colaboradores ganham uma comissão além do seu salário. A base de dados também controla informações sobre os departamentosdepartamentos e cargoscargos da empresa. Cada cargo tem um identificador, um título e o piso e teto salarial. Cada departamento tem um identificador, um nome, o código do gerente e uma localizaçãolocalização. Cada departamento está associada a um único local. Cada localização tem um endereço, um CEP, uma cidade, um estado e o código do país. Alguns colaborares trabalham por um longo período na empresa e já ocuparam diferentes cargos. Quando um colaborador muda de cargo a empresa registra o seu históricohistórico, armazenando a data de início e fim do cargo, o identificador do cargo e o identificador do departamento de lotação. Por se tratar de uma empresa multinacional existem diversas filiais. Desta forma, os departamentos estão distribuídos em diversos paísespaíses. Cada país possui um identificador, um nome e o identificador da região. A região refere-se ao continente do país, portanto, as instalações da empresa são distribuídas em regiõesregiões. Cada região possui um identificador e um nome.
  30. 30. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 77//1010 Human Resources – Modelo RelacionalHuman Resources – Modelo Relacional REGIONS REGION_ID | REGION_NAME ---------------------------------- 1 | Europe 2 | Americas 3 | Asia 4 | Middle East and Africa COUNTRIES COUNTRY_ID | COUNTRY_NAME | REGION_ID ------------------------------------- AU | Australia | 3 BR | Brazil | 2 CN | China | 3 DE | Germany | 1 IT | Italy | 1 JP | Japan | 3 LOCATIONS LOCATION_ID | STREET_ADDRESS | CITY | COUNTRY_ID -------------------------------------------------------------- 1000 | 1297 Via Cola di Rie | Roma | IT 1200 | 2017 Shinjuku-ku | Tokyo | JP 2000 | 40-5-12 Laogianggen | Beijing | CN 2200 | 12-98 Victoria Street | Sydney | AU 2700 | Schwanthalerstr. 7031 | Munich | DE 2800 | Rua Frei Caneca 1360 | Sao Paulo | BR DEPARTMENTS DEPARTMENT_ID | DEPARTMENT_NAME | MANAGER_ID | LOCATION_ID ---------------------------------------------------------- 10 | Administration | 200 | 2700 40 | Human Resource | 203 | 1000 60 | IT | 103 | 1200 80 | Sales | 145 | 2800 210 | IT Support | | 2200 JOB_HISTORY EMPLOYEE_ID | START_DATE | END_DATE |JOB_ID | DEPARTMENT_ID --------------------------------------------------------------- 120 | 2001-01-31 | 2006-07-24 | IT_PROG | 60 101 | 2004-02-17 | 2007-12-19 | HR_REP | 20 JOBS JOB_ID | JOB_TITLE | MIN_SALARY | MAX_SALARY ------------+---------------------------------+------ AD_PRES | President | 20080.00 | 40000.00 AD_VP | Administration | 15000.00 | 30000.00 SA_MAN | Sales Manager | 10000.00 | 20080.00 IT_PROG | Programmer | 4000.00 | 10000.00 HR_REP | HR Representative | 4000.00 | 9000.00 IT_ANA | Analyst | 4000.00 | 15000.00 EMPLOYEES EMPLOYEE_ID | FIRST_NAME | JOB_ID | DEPARTMENT_ID -------------------------------------------------- 100 | Steven | AD_PRES | 10 101 | Neena | AD_VP | 10 103 | Alexander | IT_PROG | 60 104 | Bruce | IT_PROG | 60 111 | Ismael | SA_MAN | 80 114 | Den | HR_REP | 40 120 | Matthew | IT_ANA | 210
  31. 31. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 88//1010 Human Resources – Modelo LógicoHuman Resources – Modelo Lógico (independente de SGBD) LegendaLegenda # Identificador único * Mandatório o Opcional SQL Developer Data ModelerSQL Developer Data Modeler
  32. 32. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 99//1010 Human Resources – Modelo FísicoHuman Resources – Modelo Físico (dependente de SGBD) LegendaLegenda P Primary Key F Foreign Key U Unique Key * Not Null LegendaLegenda P Primary Key F Foreign Key U Unique Key * Not Null Considera as linguagens do sistema de banco. SQL Developer Data ModelerSQL Developer Data Modeler
  33. 33. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 1010//1010 CréditosCréditos ● MaterialMaterial – ELMASRI, Ramez; NAVATHE, Shamkant B. Sistemas de banco de dados. 6 ed. São Paulo: Pearson Addison Wesley, 2011. Capítulo 3. O modelo de dados relacional e as restrições em banco de dados relacional ● Modelo de dadosModelo de dados – http://www.oracle.com/technetwork/developer-tools/datamodeler/ sample-models-scripts-224531.html
  34. 34. TSI33A – Banco de Dados 1TSI33A – Banco de Dados 1 SQL – Structured Query LanguageSQL – Structured Query Language Prof. Me. Sidgley Camargo de Andrade Semana 04-1
  35. 35. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 22//77 1. Por que utilizar a SQL?1. Por que utilizar a SQL? ● A SQL pode ser considerada um dos principais motivos para o sucesso dos sistemas de banco de dados relacionais. ● Por ser um padrão para os sistemas de banco de dados relacionaispadrão para os sistemas de banco de dados relacionais, os desenvolvedores ficam menos preocupados com a migração de suas aplicações e compatibilidade entre diferentes sistemas. ● Na prática existem diferenças entre os diversos pacotes de sistemas deexistem diferenças entre os diversos pacotes de sistemas de banco de dados relacionaisbanco de dados relacionais, contudo, todostodos implementam o core SQLcore SQL. Atenção!Atenção! É recomendado usar apenas os recursos que fazem parte do padrãoÉ recomendado usar apenas os recursos que fazem parte do padrão SQL. Assim, a coversão entre diferentes sistemas de banco de dados seSQL. Assim, a coversão entre diferentes sistemas de banco de dados se torna bastante simplificada.torna bastante simplificada. Atenção!Atenção! É recomendado usar apenas os recursos que fazem parte do padrãoÉ recomendado usar apenas os recursos que fazem parte do padrão SQL. Assim, a coversão entre diferentes sistemas de banco de dados seSQL. Assim, a coversão entre diferentes sistemas de banco de dados se torna bastante simplificada.torna bastante simplificada.
  36. 36. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 33//77 Organização da SQLOrganização da SQL ● SQL é uma linguagem padrãolinguagem padrão e abrangente que incorpora instruções para manipulação da estrutura e dos dados. – Definição:Definição: DDL (Data Descrition Language)DDL (Data Descrition Language) – Manipulação:Manipulação: DMLDML (Data Modeling Language)(Data Modeling Language) – Controle:Controle: DCL (Data Control Language)DCL (Data Control Language) – ConsultasConsultas ● Também possui regras para embutir instruções SQL em linguagem de programação de uso geral (C, Java, Phyton, etc.).
  37. 37. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 44//77 Padrões SQLPadrões SQL ● SQL-86 ● SQL-89 ● SQL-92 ● SQL:1999 ● SQL:2003 ● SQL:2006 ● SQL:2008 ReflexãoReflexão Considerando a evolução das aplicações corporativas, qual o impactoConsiderando a evolução das aplicações corporativas, qual o impacto do padrão utilizado pelo sistemas de banco de dados?do padrão utilizado pelo sistemas de banco de dados? ReflexãoReflexão Considerando a evolução das aplicações corporativas, qual o impactoConsiderando a evolução das aplicações corporativas, qual o impacto do padrão utilizado pelo sistemas de banco de dados?do padrão utilizado pelo sistemas de banco de dados?
  38. 38. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 55//77 2. Core e Extensões2. Core e Extensões ● Um grande marco da evolução da SQL foi a divisão em núcleonúcleo (core) e extensõesextensões especializadas – fato que contribuiu para as particularidades dos fornecedores de sistemas de banco de dados relacionais (PotgresSQL, MySQL Server, Oracle Database, DB2, etc.). – CoreCore: conjunto de instruções implementado por todostodos os fornecedores de SGBD. – ExtensãoExtensão: módulos adicionais ou recursos específicos de cada fornecedor de SGBD (garante a exclusividade do sistema nogarante a exclusividade do sistema no mercadomercado). Atenção!Atenção! A documentação dos sistemas de banco de dados listam asA documentação dos sistemas de banco de dados listam as funcionalidades SQL suportadas. Por exemplo, nos endereços abaixo sãofuncionalidades SQL suportadas. Por exemplo, nos endereços abaixo são listadas as funcionalidas SQL (core e extensão) do PostgreSQLlistadas as funcionalidas SQL (core e extensão) do PostgreSQL http://www.postgresql.org/docs/9.4/static/features-sql-standard.html http://www.postgresql.org/docs/9.4/static/sql-commands.html Atenção!Atenção! A documentação dos sistemas de banco de dados listam asA documentação dos sistemas de banco de dados listam as funcionalidades SQL suportadas. Por exemplo, nos endereços abaixo sãofuncionalidades SQL suportadas. Por exemplo, nos endereços abaixo são listadas as funcionalidas SQL (core e extensão) do PostgreSQLlistadas as funcionalidas SQL (core e extensão) do PostgreSQL http://www.postgresql.org/docs/9.4/static/features-sql-standard.html http://www.postgresql.org/docs/9.4/static/sql-commands.html
  39. 39. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 66//77 3. Especificações (3. Especificações (SQL atualmente)) ● ISO/IEC 9075-1 Framework (SQL/Framework) ● ISO/IEC 9075-2 Foundation (SQL/Foundation) ● ISO/IEC 9075-3 Call Level Interface (SQL/CLI) ● ISO/IEC 9075-4 Persistent Stored Modules (SQL/PSM) ● ISO/IEC 9075-9 Management of External Data (SQL/MED) ● ISO/IEC 9075-10 Object Language Bindings (SQL/OLB) ● ISO/IEC 9075-11 Information and Definition Schemas (SQL/Schemata) ● ISO/IEC 9075-13 Routines and Types using the Java Language (SQL/JRT) ● ISO/IEC 9075-14 XML-related specifications (SQL/XML)
  40. 40. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 77//77 CréditosCréditos ● MaterialMaterial – ELMASRI, Ramez; NAVATHE, Shamkant B. Sistemas de banco de dados. 6 ed. São Paulo: Pearson Addison Wesley, 2011. Capítulo 4. SQL básica – PostgreSQL Global Development Group. PostgreSQL 9.4.0 Documentation, 2014. Disponível em: http://www.postgresql.org/docs/9.4/static/ VI. References – ISO (International Organization for Standardization) http://www.iso.org/iso/home/store/catalogue_ics.htm
  41. 41. TSI33A – Banco de Dados 1TSI33A – Banco de Dados 1 ConsultasConsultas Prof. Me. Sidgley Camargo de Andrade Semana 04-2
  42. 42. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 22//1717 CuidadoCuidado O objetivo desta aula é apresentar o core SQL. As práticasO objetivo desta aula é apresentar o core SQL. As práticas deste material foram desenvolvidas no SGBD PostgreSQL 9.4,deste material foram desenvolvidas no SGBD PostgreSQL 9.4, utilizando o GNU-Linux distro Ubuntu 14.04.1 LTS.utilizando o GNU-Linux distro Ubuntu 14.04.1 LTS. Documentação (online): http://www.postgresql.org/docs/9.4/static/index.html [en] Wiki: https://wiki.postgresql.org/wiki/Main_Page [en]
  43. 43. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 33//1717 1. O que são consultas1. O que são consultas ● Uma banco de dadosbanco de dados é um repositório de informações que necessita de instruções específicas para o armazenamento e recuperação das informações. A SQL possui instruções básicas para recuperar informações de um banco de dados. Instrução SQLInstrução SQL InformaçõesInformações Resquisição Resposta Atenção!Atenção! Sistemas de banco de dados relacionais possuem umSistemas de banco de dados relacionais possuem um otimizadorotimizador estratégicoestratégico para selecionar o melhor caminho para recuperação dos dados.para selecionar o melhor caminho para recuperação dos dados. Atenção!Atenção! Sistemas de banco de dados relacionais possuem umSistemas de banco de dados relacionais possuem um otimizadorotimizador estratégicoestratégico para selecionar o melhor caminho para recuperação dos dados.para selecionar o melhor caminho para recuperação dos dados.
  44. 44. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 44//1717 Sintaxe BásicaSintaxe Básica SELECT [ALL|DISTINCT] { * | {coluna(s), expressão(ões), função(ões), subconsulta(s)}} FROM tabela(s), visão(ões) [WHERE condição(ões)] [GROUP BY {coluna(s), expressão(ões), posição(ões)}] [HAVING condição(ões)] [ORDER BY {coluna(s), expressão(ões), posição(ões)} [ASC|DESC]]; [ ] : cláusulas opcionais, contudo, essenciais em grande parte das consultas. { } : representa o conjunto de opções que a cláusula admite. SELECT [ALL|DISTINCT] { * | {coluna(s), expressão(ões), função(ões), subconsulta(s)}} FROM tabela(s), visão(ões) [WHERE condição(ões)] [GROUP BY {coluna(s), expressão(ões), posição(ões)}] [HAVING condição(ões)] [ORDER BY {coluna(s), expressão(ões), posição(ões)} [ASC|DESC]]; [ ] : cláusulas opcionais, contudo, essenciais em grande parte das consultas. { } : representa o conjunto de opções que a cláusula admite. Cuidado!Cuidado! A sintaxe avançada de consultas pode mudar conforme o sistema de banco deA sintaxe avançada de consultas pode mudar conforme o sistema de banco de dados. Para detalhesdados. Para detalhes consulte a documentação do sistema de banco de dadosconsulte a documentação do sistema de banco de dados utilizado.utilizado. Cuidado!Cuidado! A sintaxe avançada de consultas pode mudar conforme o sistema de banco deA sintaxe avançada de consultas pode mudar conforme o sistema de banco de dados. Para detalhesdados. Para detalhes consulte a documentação do sistema de banco de dadosconsulte a documentação do sistema de banco de dados utilizado.utilizado.
  45. 45. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 55//1717 Descrição das CláusulasDescrição das Cláusulas SELECTSELECT Cláusula de projeção. Projeta o valor dos campos, o resultado das funções, as subconsultas e expressões. Distinct elimina registros duplicados da consulta. FROMFROM Cláusula para especificar a(s) tabela(s) e visão(ões) de origem dos registros. WHEREWHERE Cláusula para especificar a operação de seleção (“filtro”) dos registros, ou seja, condição(ões) cujos registros devem satisfazer para serem projetados. Operadores: {AND, OR, [NOT] IN, [NOT] EXISTS, BETWEEN, =, <>, …, SQL} GROUP BYGROUP BY Cláusula de agrupamento de registros. Projeta os registros em grupos específicos. Normalmente aplicada quando as funções agregadasfunções agregadas são utilizadas nas consultas. Os atributos da cláusula SELECT que não estão sendo utilizados nas funções agregadas precisam aparecer na lista GROUP BY. HAVINGHAVING Cláusula para especificar a seleção em agrupamento de dados, ou seja, condições que o agrupamento deve satisfazer para ser projetado. Operadores: {AND, OR, [NOT] IN, [NOT] EXISTS, BETWEEN, =, <>, …, SQL} ORDER BYORDER BY Cláusula utilizada para ordenar os registros projetados em uma ordem específica.
  46. 46. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 66//1717 Exemplos de ConsultasExemplos de Consultas ● SQL-SQL-660101:: Projetar todos os dados da tabela COUNTRIES ● SQL-SQL-6602:02: Projetar somente o nome dos países da tabela COUNTRIES ● SQL-SQL-6603:03: Projetar uma única vez (distintamente) os salários existentes na tabela EMPLOYEES SELECT * FROM COUNTRIES; SELECT * FROM COUNTRIES; SELECT COUNTRY_NAME FROM COUNTRIES; SELECT COUNTRY_NAME FROM COUNTRIES; SELECT DISTINCT SALARY FROM EMPLOYEES; SELECT DISTINCT SALARY FROM EMPLOYEES; ReflexãoReflexão Por que a consultaPor que a consulta SELECT DISTINCT REGION_ID, COUNTRY_NAME FROM COUNTRIES; não retorna distintamente o código das regiões?não retorna distintamente o código das regiões? ReflexãoReflexão Por que a consultaPor que a consulta SELECT DISTINCT REGION_ID, COUNTRY_NAME FROM COUNTRIES; não retorna distintamente o código das regiões?não retorna distintamente o código das regiões?
  47. 47. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 77//1717 Exemplos de ConsultasExemplos de Consultas (projeção de expressões e funções) ● SQL-SQL-770101:: Projetar para cada colaborador o salário atual e a prospecção de 5% de aumentoprospecção de 5% de aumento ● SQL-SQL-7702:02: Projetar em um único campo (NAME) o primeiro e último nome dos colaboradores SQL-SQL-7703:03: Projetar no nome dos colaboradores e o tempo de serviço no cargo atual SELECT FIRST_NAME, SALARY, SALARY+(SALARY*0.05) AS NEW_SALARY FROM EMPLOYEES; SELECT FIRST_NAME, SALARY, SALARY+(SALARY*0.05) AS NEW_SALARY FROM EMPLOYEES; SELECT FIRST_NAME || ' ' || LAST_NAME AS NAME FROM EMPLOYEES; SELECT FIRST_NAME || ' ' || LAST_NAME AS NAME FROM EMPLOYEES; SELECT FIRST_NAME, AGE(NOW(),HIRE_DATE) AS LENGTH_SERVICE FROM EMPLOYEES; SELECT FIRST_NAME, AGE(NOW(),HIRE_DATE) AS LENGTH_SERVICE FROM EMPLOYEES; Alias (apelido) para projeção da coluna.
  48. 48. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 88//1717 2. Cláusula2. Cláusula WHEREWHERE ● A cláusula WHEREWHERE permite selecionar um conjunto de registros para projeção. ● A seleçãoseleção é realizada através de operadores lógicoslógicos, relacionaisrelacionais e aritméticosaritméticos (entre outros operadores). Os operadores aritméticos também podem ser utilizados na cláusula SELECTSELECT. – Lógicos:Lógicos: AND, OR, NOT, [NOT] EXISTS – Relacionais:Relacionais: =, <> ou !=, >, <, >=, <=, BETWEEN – Aritméticos:Aritméticos: +, -, *, /, %, ^ – Conjuntos:Conjuntos: [NOT] IN (equivalentes: ANY, SOME), ALL – Nulos:Nulos: IS [NOT] Atenção!Atenção! Existem outros operadores que são implementados pelos sistemas deExistem outros operadores que são implementados pelos sistemas de banco de dados (banco de dados ([NOT][NOT] LIKELIKE,, ILIKEILIKE,, SIMILAR TOSIMILAR TO,, @@,, etcetc).). ParaPara detalhes consulte a documentação do sistema de banco de dados utilizado.detalhes consulte a documentação do sistema de banco de dados utilizado. Atenção!Atenção! Existem outros operadores que são implementados pelos sistemas deExistem outros operadores que são implementados pelos sistemas de banco de dados (banco de dados ([NOT][NOT] LIKELIKE,, ILIKEILIKE,, SIMILAR TOSIMILAR TO,, @@,, etcetc).). ParaPara detalhes consulte a documentação do sistema de banco de dados utilizado.detalhes consulte a documentação do sistema de banco de dados utilizado.
  49. 49. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 99//1717 Exemplos de ConsultasExemplos de Consultas (operadores relacionais e lógicos) ● SQL-SQL-990101:: Identificar os colaboradores que recebem salário superior a U$ 20.000 ● SQL-SQL-9902:02: Identificar os colaboradores que recebem salário entre U$ 3.000 e U$ 4.000 SELECT FIRST_NAME || ' ' || LAST_NAME AS NAME, JOB_ID FROM EMPLOYEES WHERE SALARY > 20000; SELECT FIRST_NAME || ' ' || LAST_NAME AS NAME, JOB_ID FROM EMPLOYEES WHERE SALARY > 20000; SELECT FIRST_NAME || ' ' || LAST_NAME AS NAME, JOB_ID FROM EMPLOYEES WHERE (SALARY >= 3000) AND (SALARY <= 4000); SELECT FIRST_NAME || ' ' || LAST_NAME AS NAME, JOB_ID FROM EMPLOYEES WHERE (SALARY >= 3000) AND (SALARY <= 4000); OUOU (por meio do operador BETWEENBETWEEN) SELECT FIRST_NAME || ' ' || LAST_NAME AS NAME, JOB_ID FROM EMPLOYEES WHERE SALARY BETWEEN 3000 AND 4000; OUOU (por meio do operador BETWEENBETWEEN) SELECT FIRST_NAME || ' ' || LAST_NAME AS NAME, JOB_ID FROM EMPLOYEES WHERE SALARY BETWEEN 3000 AND 4000;
  50. 50. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 1010//1717 Exemplos de ConsultasExemplos de Consultas (operadores relacionais e conjuntos) ● SQL-SQL-101001:01: Projetar o nome dos colaboradores que recebem comissão dentro do conjunto de valores {0.15, 0.20, 0.25} ● SQL-SQL-101002:02: Quais os colaboradores que recebem comissão e que a comissão seja diferente de 0.20 e 0.25 SELECT FIRST_NAME || ' ' || LAST_NAME AS NAME, COMMISSION_PCT FROM EMPLOYEES WHERE COMMISSION_PCT IN (0.15,0.20,0.25); SELECT FIRST_NAME || ' ' || LAST_NAME AS NAME, COMMISSION_PCT FROM EMPLOYEES WHERE COMMISSION_PCT IN (0.15,0.20,0.25); OUOU SELECT FIRST_NAME || ' ' || LAST_NAME AS NAME, COMMISSION_PCT FROM EMPLOYEES WHERE COMMISSION_PCT IS NOT NULL AND COMMISSION_PCT <> 0.20 AND COMMISSION_PCT <> 0.25; OUOU SELECT FIRST_NAME || ' ' || LAST_NAME AS NAME, COMMISSION_PCT FROM EMPLOYEES WHERE COMMISSION_PCT IS NOT NULL AND COMMISSION_PCT <> 0.20 AND COMMISSION_PCT <> 0.25; SELECT FIRST_NAME || ' ' || LAST_NAME AS NAME, COMMISSION_PCT FROM EMPLOYEES WHERE COMMISSION_PCT IS NOT NULL AND COMMISSION_PCT NOT IN (0.20,0.25); SELECT FIRST_NAME || ' ' || LAST_NAME AS NAME, COMMISSION_PCT FROM EMPLOYEES WHERE COMMISSION_PCT IS NOT NULL AND COMMISSION_PCT NOT IN (0.20,0.25);
  51. 51. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 1111//1717 Exemplos de ConsultasExemplos de Consultas (nulos) ● SQL-SQL-11110101:: Recuperar os nomes de todos os colaboradores que nãonão possuem supervisores ● SQL-SQL-11110202:: Projetar o nome dos colaboradores que nãonão possuem gerente SELECT FIRST_NAME FROM EMPLOYEES WHERE MANAGER_ID IS NULL; SELECT FIRST_NAME FROM EMPLOYEES WHERE MANAGER_ID IS NULL; SELECT FIRST_NAME || ' ' || LAST_NAME AS NAME, COMMISSION_PCT FROM EMPLOYEES WHERE COMMISSION_PCT IS NULL; SELECT FIRST_NAME || ' ' || LAST_NAME AS NAME, COMMISSION_PCT FROM EMPLOYEES WHERE COMMISSION_PCT IS NULL;
  52. 52. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 1212//1717 3. Projeção Condicional:3. Projeção Condicional: CASE ● SQL-SQL-121201:01: Projetar o percentual de comissão dos colaboradores. Para os colaboradores sem comissão exiba 'S/CS/C' SELECT FIRST_NAME || ' ' || LAST_NAME AS NAME, CASE WHEN COMMISSION_PCT IS NULL THEN 'S/C' WHEN COMMISSION_PCT >= 0.0 THEN (COMMISSION_PCT || '%') ELSE 'INVÁLIA' END AS "(%)" FROM EMPLOYEES; SELECT FIRST_NAME || ' ' || LAST_NAME AS NAME, CASE WHEN COMMISSION_PCT IS NULL THEN 'S/C' WHEN COMMISSION_PCT >= 0.0 THEN (COMMISSION_PCT || '%') ELSE 'INVÁLIA' END AS "(%)" FROM EMPLOYEES; CASE WHEN condição_1 THEN resultado_1 [WHEN condição_N THEN resultado_N] [ELSE resultado alternativo] END AS alias CASE WHEN condição_1 THEN resultado_1 [WHEN condição_N THEN resultado_N] [ELSE resultado alternativo] END AS alias OUOU CASE expressão WHEN valor_1 THEN resultado_N [WHEN valor_N THEN resultado_N] [ELSE resultado alternativo] END AS alias OUOU CASE expressão WHEN valor_1 THEN resultado_N [WHEN valor_N THEN resultado_N] [ELSE resultado alternativo] END AS alias Sintaxe Sintaxe
  53. 53. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 1313//1717 Projeção Condicional:Projeção Condicional: COALESCE ● SQL-SQL-131301:01: Projetar o percentual de comissão dos colaboradores. Para os colaboradores sem comissão exiba '0.00.0' SELECT FIRST_NAME || ' ' || LAST_NAME AS NAME, COALESCE(COMMISSION_PCT,0.0) AS "(%)" FROM EMPLOYEES; SELECT FIRST_NAME || ' ' || LAST_NAME AS NAME, COALESCE(COMMISSION_PCT,0.0) AS "(%)" FROM EMPLOYEES; COALESCE(valor [, ...])COALESCE(valor [, ...])Sintaxe Atenção!Atenção! A funçãoA função COALESCECOALESCE retorna o primeiro de seus argumentos que não forretorna o primeiro de seus argumentos que não for nulo. Só retorna nulo quando todos os seus argumentos são nulos.nulo. Só retorna nulo quando todos os seus argumentos são nulos. Geralmente é útil para substituir o valor padrão quando este é o valor nulo.Geralmente é útil para substituir o valor padrão quando este é o valor nulo. Atenção!Atenção! A funçãoA função COALESCECOALESCE retorna o primeiro de seus argumentos que não forretorna o primeiro de seus argumentos que não for nulo. Só retorna nulo quando todos os seus argumentos são nulos.nulo. Só retorna nulo quando todos os seus argumentos são nulos. Geralmente é útil para substituir o valor padrão quando este é o valor nulo.Geralmente é útil para substituir o valor padrão quando este é o valor nulo.
  54. 54. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 1414//1717 Projeção Condicional:Projeção Condicional: NULLIF ● SQL-SQL-141401:01: Projetar valor nulo para os colaboradores que recebem U$ 24000.00, caso contrário exibir o próprio salário. SELECT FIRST_NAME || ' ' || LAST_NAME AS NAME, NULLIF(SALARY,'24000.000') AS "(U$)" FROM EMPLOYEES; SELECT FIRST_NAME || ' ' || LAST_NAME AS NAME, NULLIF(SALARY,'24000.000') AS "(U$)" FROM EMPLOYEES; NULLIF(valor_1, valor_2)NULLIF(valor_1, valor_2)Sintaxe Atenção!Atenção! A funçãoA função NULLIFNULLIF retorna o valor nulo se, e somente se,retorna o valor nulo se, e somente se, valor_1valor_1 ee valor_2valor_2 forem iguais. Caso contrário, retornaforem iguais. Caso contrário, retorna valor_1valor_1. Pode ser. Pode ser utilizada para realizar a operação inversa doutilizada para realizar a operação inversa do COALESCECOALESCE.. Atenção!Atenção! A funçãoA função NULLIFNULLIF retorna o valor nulo se, e somente se,retorna o valor nulo se, e somente se, valor_1valor_1 ee valor_2valor_2 forem iguais. Caso contrário, retornaforem iguais. Caso contrário, retorna valor_1valor_1. Pode ser. Pode ser utilizada para realizar a operação inversa doutilizada para realizar a operação inversa do COALESCECOALESCE..
  55. 55. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 1515//1717 4. Cláusula4. Cláusula ORDER BYORDER BY ● A cláusula ORDER BYORDER BY permite ordenar os registros da consulta pelos valores de um ou mais campos, especificando os campos ou suas respectivas posições da cláusula SELECTSELECT. ● Cada campo pode ser ordenado de forma crescente (ASCASC) ou decrescente (DESCDESC). ORDER BY [campo_1|posição_1] [ASC|DESC], [campo_2|posição_2] [ASC|DESC], [campo_N|posição_N] [ASC|DESC][,] ORDER BY [campo_1|posição_1] [ASC|DESC], [campo_2|posição_2] [ASC|DESC], [campo_N|posição_N] [ASC|DESC][,] Sintaxe
  56. 56. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 1616//1717 Exemplos de ConsultasExemplos de Consultas (cláusula ORDER BY) ● .SQL-SQL-16160101:: Projete o piso e teto salarial dos cargos da empresa. Ordene os registros de forma decrescente pelo teto salarial. ● .SQL-SQL-16160202:: Liste o nome completo dos colaboradores que não possuem comissão. Ordene os registros pelo sobrenome e nome. SELECT JOB_TITLE, MIN_SALARY, MAX_SALARY FROM JOBS ORDER BY 3 DESC; SELECT JOB_TITLE, MIN_SALARY, MAX_SALARY FROM JOBS ORDER BY 3 DESC; OUOU ORDER BY MAX_SALARY DESC; SELECT LAST_NAME || ', ' || FIRST_NAME FROM EMPLOYEES WHERE COMMISSION_PCT IS NULL OR COMMISSION_PCT = 0.0 ORDER BY LAST_NAME, FIRST_NAME SELECT LAST_NAME || ', ' || FIRST_NAME FROM EMPLOYEES WHERE COMMISSION_PCT IS NULL OR COMMISSION_PCT = 0.0 ORDER BY LAST_NAME, FIRST_NAME Atenção!Atenção! Ao suprimir os especificadoresAo suprimir os especificadores ASCASC ee DESCDESC, o sistema de banco de dados, o sistema de banco de dados definedefine ASCASC como padrão.como padrão. Atenção!Atenção! Ao suprimir os especificadoresAo suprimir os especificadores ASCASC ee DESCDESC, o sistema de banco de dados, o sistema de banco de dados definedefine ASCASC como padrão.como padrão.
  57. 57. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 1717//1717 CréditosCréditos ● MaterialMaterial – ELMASRI, Ramez; NAVATHE, Shamkant B. Sistemas de banco de dados. 6 ed. São Paulo: Pearson Addison Wesley, 2011. Capítulo 4. SQL básica ● Base de DadosBase de Dados – http://www.oracle.com/technetwork/developer-tools/datamodeler/ sample-models-scripts-224531.html
  58. 58. TSI33A – Banco de Dados 1TSI33A – Banco de Dados 1 JunçõesJunções Prof. Me. Sidgley Camargo de Andrade Semana 05
  59. 59. TSI33A - Banco de Dados I 22//1515 CuidadoCuidado O objetivo desta aula é apresentar o core SQL. As práticasO objetivo desta aula é apresentar o core SQL. As práticas deste material foram desenvolvidas no SGBD PostgreSQL 9.4,deste material foram desenvolvidas no SGBD PostgreSQL 9.4, utilizando o GNU-Linux distro Ubuntu 14.04.1 LTS.utilizando o GNU-Linux distro Ubuntu 14.04.1 LTS. Documentação (online): http://www.postgresql.org/docs/9.4/static/index.html [en] Wiki: https://wiki.postgresql.org/wiki/Main_Page [en]
  60. 60. TSI33A - Banco de Dados I 3/15 1. O que são Junções1. O que são Junções ● Uma junção é uma consulta que combina linhasconsulta que combina linhas (registros) de duas ou mais tabelas, visões, visões materializadas ou outro recurso do sistema de banco de dados (e.g. snapshotssnapshots do Oracle Database). Atenção!Atenção! Junções correspondem à operação deJunções correspondem à operação de produto cartesianoproduto cartesiano entreentre conjuntos, ou seja, a combinação entre os elementos de cada conjunto.conjuntos, ou seja, a combinação entre os elementos de cada conjunto. Atenção!Atenção! Junções correspondem à operação deJunções correspondem à operação de produto cartesianoproduto cartesiano entreentre conjuntos, ou seja, a combinação entre os elementos de cada conjunto.conjuntos, ou seja, a combinação entre os elementos de cada conjunto.
  61. 61. TSI33A - Banco de Dados I 4/15 2. Produto Cartesiano (2. Produto Cartesiano (,,OUOU CROSS JOINCROSS JOIN)) REGIONS REGION_ID REGION_NAME ------------------------ 1 Europe 2 Americas 3 Asia COUNTRIES COUNTRY_ID COUNTRY_NAME REGION_ID ----------------------------------------- AR Argentin 2 AU Australia 3 BE Belgium 1 BR Brazil 2 COUNTRIES X REGIONS REGION_ID CONTRY_NAME REGION_ID REGION_ID REGION_NAME -------------------------------------------------------------- AR Argentin 2 1 Europe AU Australia 3 2 Americas BE Belgium 1 3 Asia BR Brazil 2 1 Europe AR Argentin 2 2 Americas AU Australia 3 3 Asia BE Belgium 1 1 Europe BR Brazil 2 2 Americas AR Argentin 2 3 Asia AU Australia 3 1 Europe BE Belgium 1 2 Americas BR Brazil 2 3 Asia OUOU SELECT * FROM COUNTRIES CROSS JOIN REGIONS; OUOU SELECT * FROM COUNTRIES CROSS JOIN REGIONS; → → → → → → → → SELECT * FROM COUNTRIES, REGIONS; SELECT * FROM COUNTRIES, REGIONS; 12 registros resultantes 8 registros inconsistentes 4 registros consistentes Por que?Por que?
  62. 62. TSI33A - Banco de Dados I 5/15 Considerações do Produto CartesianoConsiderações do Produto Cartesiano Atenção!Atenção! Se existir duas ou mais tabelas com o mesmo nome de atributo, entãoSe existir duas ou mais tabelas com o mesmo nome de atributo, então deve-se especificar odeve-se especificar o aliase ou oou o nome da tabela nos campos.nos campos. Atenção!Atenção! Se existir duas ou mais tabelas com o mesmo nome de atributo, entãoSe existir duas ou mais tabelas com o mesmo nome de atributo, então deve-se especificar odeve-se especificar o aliase ou oou o nome da tabela nos campos.nos campos. COUNTRIES (C) X REGIONS (R) C.CONTRY_NAME C.REGION_ID R.REGION_ID R.REGION_NAME ---------------------------------------------------------- Argentin 2 1 Europe Australia 3 2 Americas Belgium 1 3 Asia Brazil 2 1 Europe Argentin 2 2 Americas Australia 3 3 Asia Belgium 1 1 Europe Brazil 2 2 Americas Argentin 2 3 Asia Australia 3 1 Europe Belgium 1 2 Americas Brazil 2 3 Asia SELECT C.COUNTRY_NAME, C.REGION_IDC.REGION_ID, R.REGION_IDR.REGION_ID, R.REGION_NAME FROM COUNTRIES C CROSS JOIN REGIONS R; SELECT C.COUNTRY_NAME, C.REGION_IDC.REGION_ID, R.REGION_IDR.REGION_ID, R.REGION_NAME FROM COUNTRIES C CROSS JOIN REGIONS R;
  63. 63. TSI33A - Banco de Dados I 6/15 CROSS JOINCROSS JOIN com seleção de registros COUNTRIES X REGIONS REGION_ID CONTRY_NAME REGION_ID REGION_ID REGION_NAME -------------------------------------------------------------- AR Argentin 2 1 Europe AU Australia 3 2 Americas BE Belgium 1 3 Asia BR Brazil 2 1 Europe AR Argentin 2 2 Americas AU Australia 3 3 Asia BE Belgium 1 1 Europe BR Brazil 2 2 Americas AR Argentin 2 3 Asia AU Australia 3 1 Europe BE Belgium 1 2 Americas BR Brazil 2 3 Asia OUOU SELECT * FROM COUNTRIES C CROSS JOIN REGIONS R WHERE C.REGION_ID = R.REGION_ID; OUOU SELECT * FROM COUNTRIES C CROSS JOIN REGIONS R WHERE C.REGION_ID = R.REGION_ID; SELECT * FROM COUNTRIES C, REGIONS R WHERE C.REGION_ID = R.REGION_ID; SELECT * FROM COUNTRIES C, REGIONS R WHERE C.REGION_ID = R.REGION_ID; 4 registros resultantes 0 registros inconsistentes 4 registros consistentes Atenção!Atenção! Na operação de produto cartesiano, normalmente, as chaves devem ser comparadasNa operação de produto cartesiano, normalmente, as chaves devem ser comparadas para evitar duplicidade e inconsistência de registros, salvo se for o objetivo da consulta.para evitar duplicidade e inconsistência de registros, salvo se for o objetivo da consulta. Atenção!Atenção! Na operação de produto cartesiano, normalmente, as chaves devem ser comparadasNa operação de produto cartesiano, normalmente, as chaves devem ser comparadas para evitar duplicidade e inconsistência de registros, salvo se for o objetivo da consulta.para evitar duplicidade e inconsistência de registros, salvo se for o objetivo da consulta.
  64. 64. TSI33A - Banco de Dados I 7/15 3. Junção Interna (3. Junção Interna (INNER JOININNER JOIN)) ● Elimina registros sem valor de campo correspondente nas tabelas envolvidas na operação. Atenção!Atenção! CROSS JOINCROSS JOIN ++ WHEREWHERE equivale aequivale a INNER JOININNER JOIN Atenção!Atenção! CROSS JOINCROSS JOIN ++ WHEREWHERE equivale aequivale a INNER JOININNER JOIN SELECT C.COUNTRY_NAME, R.REGION_NAME FROM COUNTRIES C INNER JOIN REGIONS R ON R.REGION_ID = C.REGION_ID; SELECT C.COUNTRY_NAME, R.REGION_NAME FROM COUNTRIES C INNER JOIN REGIONS R ON R.REGION_ID = C.REGION_ID; ReflexãoReflexão Por que é preferível utilizarPor que é preferível utilizar INNER JOININNER JOIN ao invésao invés dede CROSS JOINCROSS JOIN ++ WHEREWHERE?? ReflexãoReflexão Por que é preferível utilizarPor que é preferível utilizar INNER JOININNER JOIN ao invésao invés dede CROSS JOINCROSS JOIN ++ WHEREWHERE?? COUNTRIES |X| REGIONS CONTRY_NAME REGION_NAME ------------------------ Argentin Americas Australia Asia Belgium Europe Brazil Americas INNER JOIN tabela ON comparação camposINNER JOIN tabela ON comparação camposSintaxe
  65. 65. TSI33A - Banco de Dados I 8/15 4. Junção Natural (4. Junção Natural (NATURAL JOINNATURAL JOIN)) ● Operação de EQUIJOINEQUIJOIN implícita para cada par de campos com opar de campos com o mesmo nomemesmo nome nas tabelas envolvidas. Cuidado!Cuidado! SELECT * FROM COUNTRIES NATURAL JOIN REGIONS; SELECT * FROM COUNTRIES NATURAL JOIN REGIONS; COUNTRIES X REGIONS REGION_ID CONTRY_NAME REGION_ID REGION_ID REGION_NAME -------------------------------------------------------------- AR Argentin 2 2 Americas AU Australia 3 3 Asia BE Belgium 1 1 Europe BR Brazil 2 2 Americas As colunas CONTRIES.REGION_IDCONTRIES.REGION_ID e REGIONS.REGION_IDREGIONS.REGION_ID são comparadas de forma implícita. Atenção!Atenção! Se os nomes dos campos de junção não forem os mesmos nas tabelas base, éSe os nomes dos campos de junção não forem os mesmos nas tabelas base, é possível renomear os atributos de modo que eles combinem (possível renomear os atributos de modo que eles combinem ( AS [aliase]AS [aliase])) Atenção!Atenção! Se os nomes dos campos de junção não forem os mesmos nas tabelas base, éSe os nomes dos campos de junção não forem os mesmos nas tabelas base, é possível renomear os atributos de modo que eles combinem (possível renomear os atributos de modo que eles combinem ( AS [aliase]AS [aliase]))
  66. 66. TSI33A - Banco de Dados I 9/15 Exemplos de consultas (Exemplos de consultas (INNER JION e NATURAL JOIN)) ● SQL-SQL-990101:: Recupere o nome completo e o cargo dos colaboradores ● SQL-SQL-990202:: Recupere o nome completo, o cargo e o departamento dos colaboradores ● SQL-SQL-990303:: Recupere o nome os colaboradores e dos seus gerentes SELECT CONCAT(E.FIRST_NAME,' ',E.LAST_NAME) AS NAME, J.JOB_TITLE FROM EMPLOYEES E INNER JOIN JOBS J ON J.JOB_ID = E.JOB_ID; SELECT CONCAT(E.FIRST_NAME,' ',E.LAST_NAME) AS NAME, J.JOB_TITLE FROM EMPLOYEES E INNER JOIN JOBS J ON J.JOB_ID = E.JOB_ID; SELECT CONCAT(E.FIRST_NAME,' ',E.LAST_NAME) AS NAME, J.JOB_TITLE, D.DEPARTMENT_NAME FROM EMPLOYEES E NATURAL JOIN JOBS J INNER JOIN DEPARTMENTS D ON D.DEPARTMENT_ID = E.DEPARTMENT_ID; SELECT CONCAT(E.FIRST_NAME,' ',E.LAST_NAME) AS NAME, J.JOB_TITLE, D.DEPARTMENT_NAME FROM EMPLOYEES E NATURAL JOIN JOBS J INNER JOIN DEPARTMENTS D ON D.DEPARTMENT_ID = E.DEPARTMENT_ID; SELECT E.FIRST_NAME, G.FIRST_NAME FROM EMPLOYEES E INNER JOIN EMPLOYEES G ON G.EMPLOYEE_ID = E.MANAGER_ID; SELECT E.FIRST_NAME, G.FIRST_NAME FROM EMPLOYEES E INNER JOIN EMPLOYEES G ON G.EMPLOYEE_ID = E.MANAGER_ID; (comparação implícita → J.JOB_ID = E.JOB_ID)
  67. 67. TSI33A - Banco de Dados I 10/15 5. Junção Externa à Esquerda (5. Junção Externa à Esquerda (LEFT JOINLEFT JOIN)) ● Elimina registros sem valor de campo correspondente nas tabelas da direitadireita do operador de junção (considera todos da esquerda). ● Para os registros da tabela da esquerda do operador sem valor correspondente na tabela da direita, é definido valor NULL. SELECT C.COUNTRY_NAME, R.REGION_NAME FROM COUNTRIES C LEFT JOIN REGIONS R ON R.REGION_ID = C.REGION_ID; SELECT C.COUNTRY_NAME, R.REGION_NAME FROM COUNTRIES C LEFT JOIN REGIONS R ON R.REGION_ID = C.REGION_ID; ReflexãoReflexão Considere queConsidere que ChileChile foi cadastrado sem informar ofoi cadastrado sem informar o código da região. Considere também que existe umacódigo da região. Considere também que existe uma região (região (Nova RegiãoNova Região) cadastrada que não possui países) cadastrada que não possui países vinculados.vinculados. ReflexãoReflexão Considere queConsidere que ChileChile foi cadastrado sem informar ofoi cadastrado sem informar o código da região. Considere também que existe umacódigo da região. Considere também que existe uma região (região (Nova RegiãoNova Região) cadastrada que não possui países) cadastrada que não possui países vinculados.vinculados. COUNTRIES |X| REGIONS CONTRY_NAME REGION_NAME ------------------------ Argentin Americas Australia Asia Belgium Europe Brazil Americas Chile NULL LEFT JOIN tabela ON comparação camposLEFT JOIN tabela ON comparação campos Sintaxe OUOU WHERE campo tabela esquerda = campo tabela direita(+) OUOU WHERE campo tabela esquerda = campo tabela direita(+)
  68. 68. TSI33A - Banco de Dados I 11/15 6. Junção Externa à Direita (6. Junção Externa à Direita (RIGHT JOINRIGHT JOIN)) ● Elimina registros sem valor de campo correspondente nas tabelas da esquerdaesquerda do operador de junção (considera todos da direita). ● Para os registros da tabela da direita do operador sem valor correspondente na tabela da esquerda, é definido valor NULL. SELECT C.COUNTRY_NAME, R.REGION_NAME FROM COUNTRIES C RIGHT JOIN REGIONS R ON R.REGION_ID = C.REGION_ID; SELECT C.COUNTRY_NAME, R.REGION_NAME FROM COUNTRIES C RIGHT JOIN REGIONS R ON R.REGION_ID = C.REGION_ID; COUNTRIES |X| REGIONS CONTRY_NAME REGION_NAME ------------------------ Argentin Americas Australia Asia Belgium Europe Brazil Americas NULL Nova Região LEFT JOIN tabela ON comparação camposLEFT JOIN tabela ON comparação campos Sintaxe OUOU WHERE campo tabela esquerda(+) = campo tabela direita OUOU WHERE campo tabela esquerda(+) = campo tabela direita ReflexãoReflexão Considere queConsidere que ChileChile foi cadastrado sem informar ofoi cadastrado sem informar o código da região. Considere também que existe umacódigo da região. Considere também que existe uma região (região (Nova RegiãoNova Região) cadastrada que não possui países) cadastrada que não possui países vinculados.vinculados. ReflexãoReflexão Considere queConsidere que ChileChile foi cadastrado sem informar ofoi cadastrado sem informar o código da região. Considere também que existe umacódigo da região. Considere também que existe uma região (região (Nova RegiãoNova Região) cadastrada que não possui países) cadastrada que não possui países vinculados.vinculados.
  69. 69. TSI33A - Banco de Dados I 12/15 7. Junção Externa Total (7. Junção Externa Total (FULL JOINFULL JOIN)) ● Considera todos os registros, mesmo não havendo correpondência entre as tabelas (combinação LEFT JOINLEFT JOIN e RIGHT JOINRIGHT JOIN). ● Para os registros sem correspondência em uma ou outra tabela é definido valor NULL. SELECT C.COUNTRY_NAME, R.REGION_NAME FROM COUNTRIES C FULL JOIN REGIONS R ON R.REGION_ID = C.REGION_ID; SELECT C.COUNTRY_NAME, R.REGION_NAME FROM COUNTRIES C FULL JOIN REGIONS R ON R.REGION_ID = C.REGION_ID; COUNTRIES |X| REGIONS CONTRY_NAME REGION_NAME ------------------------ Argentin Americas Australia Asia Belgium Europe Brazil Americas Chile NULL NULL Nova Região FULL JOIN tabela ON comparação camposFULL JOIN tabela ON comparação camposSintaxe ReflexãoReflexão Considere queConsidere que ChileChile foi cadastrado sem informar ofoi cadastrado sem informar o código da região. Considere também que existe umacódigo da região. Considere também que existe uma região (região (Nova RegiãoNova Região) cadastrada que não possui países) cadastrada que não possui países vinculados.vinculados. ReflexãoReflexão Considere queConsidere que ChileChile foi cadastrado sem informar ofoi cadastrado sem informar o código da região. Considere também que existe umacódigo da região. Considere também que existe uma região (região (Nova RegiãoNova Região) cadastrada que não possui países) cadastrada que não possui países vinculados.vinculados.
  70. 70. TSI33A - Banco de Dados I 13/15 Exemplos de consultas (Exemplos de consultas ([LEFT|RIGHT|FULL] JOIN)) ● SQL-SQL-13130101:: Recupere o nome de todostodos os colaboradores e, caso exista, dos seus gerentes ● SQL-SQL-13130202:: Projete o nome dos colaboradores, o salário e os valores de piso e teto salarial dos seus respectivos cargos, desde que o salário seja inferior ao piso ou superior ao teto SELECT E.FIRST_NAME, G.FIRST_NAME FROM EMPLOYEES E LEFT JOIN EMPLOYEES G ON G.EMPLOYEE_ID = E.MANAGER_ID; SELECT E.FIRST_NAME, G.FIRST_NAME FROM EMPLOYEES E LEFT JOIN EMPLOYEES G ON G.EMPLOYEE_ID = E.MANAGER_ID; SELECT E.FIRST_NAME, E.SALARY, J.MIN_SALARY, J.MAX_SALARY FROM EMPLOYEES E LEFT JOIN JOBS J ON J.JOB_ID = E.JOB_ID WHERE E.SALARY < J.MIN_SALARY OR E.SALARY > J.MAX_SALARY; SELECT E.FIRST_NAME, E.SALARY, J.MIN_SALARY, J.MAX_SALARY FROM EMPLOYEES E LEFT JOIN JOBS J ON J.JOB_ID = E.JOB_ID WHERE E.SALARY < J.MIN_SALARY OR E.SALARY > J.MAX_SALARY; pode ser INNER JOIN também
  71. 71. TSI33A - Banco de Dados I 14/15 Exemplos de consultas (Exemplos de consultas ([LEFT|RIGHT|FULL] JOIN)) ● SQL-SQL-14140101:: Recuperar a localização, o país e, se possível, o nome do gerente dos departamentos ● SQL-SQL-14140202:: Liste o nome, o cargo atual e, se existir, os cargos anteriores dos colaboradores – ordenar em ordem alfabética SELECT D.DEPARTMENT_NAME, CONCAT(G.FIRST_NAME,' ',G.LAST_NAME) AS MANAGER, L.STREET_ADDRESS, L.CITY, L.STATE_PROVINCE, L.POSTAL_CODE, C.COUNTRY_NAME FROM DEPARTMENTS D INNER JOIN LOCATIONS L ON L.LOCATION_ID = D.LOCATION_ID INNER JOIN COUNTRIES C ON C.COUNTRY_ID = L.COUNTRY_ID LEFT JOIN HR.EMPLOYEES G ON G.EMPLOYEE_ID = D.MANAGER_ID SELECT D.DEPARTMENT_NAME, CONCAT(G.FIRST_NAME,' ',G.LAST_NAME) AS MANAGER, L.STREET_ADDRESS, L.CITY, L.STATE_PROVINCE, L.POSTAL_CODE, C.COUNTRY_NAME FROM DEPARTMENTS D INNER JOIN LOCATIONS L ON L.LOCATION_ID = D.LOCATION_ID INNER JOIN COUNTRIES C ON C.COUNTRY_ID = L.COUNTRY_ID LEFT JOIN HR.EMPLOYEES G ON G.EMPLOYEE_ID = D.MANAGER_ID O que acontece se trocarmos por INNER JOININNER JOIN? SELECT CONCAT(E.FIRST_NAME,' ',E.LAST_NAME) AS NAME, JB.JOB_TITLE, JH.JOB_TITLE FROM JOB_HISTORY H RIGHT JOIN EMPLOYEES E ON E.EMPLOYEE_ID = H.EMPLOYEE_ID INNER JOIN JOBS JB ON JB.JOB_ID = E.JOB_ID LEFT JOIN JOBS JH ON JH.JOB_ID = H.JOB_ID ORDER BY 1; SELECT CONCAT(E.FIRST_NAME,' ',E.LAST_NAME) AS NAME, JB.JOB_TITLE, JH.JOB_TITLE FROM JOB_HISTORY H RIGHT JOIN EMPLOYEES E ON E.EMPLOYEE_ID = H.EMPLOYEE_ID INNER JOIN JOBS JB ON JB.JOB_ID = E.JOB_ID LEFT JOIN JOBS JH ON JH.JOB_ID = H.JOB_ID ORDER BY 1;
  72. 72. TSI33A - Banco de Dados I 15/15 CréditosCréditos ● MaterialMaterial – ELMASRI, Ramez; NAVATHE, Shamkant B. Sistemas de banco de dados. 6 ed. São Paulo: Pearson Addison Wesley, 2011. Capítulo 5. Mais SQL: Consultas complexas, triggers, views e modificação de esquema. ● Modelo de DadosModelo de Dados – http://www.oracle.com/technetwork/developer-tools/datamodeler/ sample-models-scripts-224531.html
  73. 73. TSI33A – Banco de Dados 1TSI33A – Banco de Dados 1 Subcadeias de CaracteresSubcadeias de Caracteres Prof. Me. Sidgley Camargo de Andrade Semana 06-1
  74. 74. TSI33A - Banco de Dados I 22//88 CuidadoCuidado O objetivo desta aula é apresentar o core SQL. As práticasO objetivo desta aula é apresentar o core SQL. As práticas deste material foram desenvolvidas no SGBD PostgreSQL 9.4,deste material foram desenvolvidas no SGBD PostgreSQL 9.4, utilizando o GNU-Linux distro Ubuntu 14.04.1 LTS.utilizando o GNU-Linux distro Ubuntu 14.04.1 LTS. Documentação (online): http://www.postgresql.org/docs/9.4/static/index.html [en] Wiki: https://wiki.postgresql.org/wiki/Main_Page [en]
  75. 75. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 33//88 1. Operador1. Operador [NOT[NOT]] LIKELIKE ● O operador LIKELIKE permite aplicar condições de comparação apenas sobre partes de uma cadeia de caracteres. ● Cadeias parciais são especificadas usando dois caracteres reservados (WildcardsWildcards): – % substitui um número qualquer de caracteres – _ substitui um único caractere. ● SQL-SQL-3301:01: Recuperar o nome dos departamentos que possuem a palavra Sales SELECT DEPARTMENT_ID, DEPARTMENT_NAME FROM DEPARTMENTS WHERE DEPARTMENT_NAME LIKE '%Sales%'; SELECT DEPARTMENT_ID, DEPARTMENT_NAME FROM DEPARTMENTS WHERE DEPARTMENT_NAME LIKE '%Sales%'; [campo_1|str_1] LIKE [campo_2|str_2] [ESCAPE '_' | '%'] [campo_1|str_1] NOT LIKE [campo_2|str_2] [ESCAPE '_' | '%'] [campo_1|str_1] LIKE [campo_2|str_2] [ESCAPE '_' | '%'] [campo_1|str_1] NOT LIKE [campo_2|str_2] [ESCAPE '_' | '%'] Sintaxe 'abc' LIKE 'abc' true 'abc' LIKE 'a%' true 'abc' LIKE '_b_' true 'abc' LIKE 'c' false
  76. 76. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 44//88 2. Operador2. Operador SIMILAR TOSIMILAR TO ● O operador SIMILAR TOSIMILAR TO permite aplicar expressões regulares na comparação entre conjunto de caracteres. ● CaracteresCaracteres usados na expressão regular: ● Os wildcardswildcards %% e __ também podem ser utilizados no SIMILAR TOSIMILAR TO. [campo_1|str_1] SIMILAR TO [campo_2|str_2] [ESCAPE character] [campo_1|str_1] NOT SIMILAR TO [campo_2|str_2] [ESCAPE character] [campo_1|str_1] SIMILAR TO [campo_2|str_2] [ESCAPE character] [campo_1|str_1] NOT SIMILAR TO [campo_2|str_2] [ESCAPE character] Sintaxe | representa o ou exclusivo * representa a repetição dos itens anteriores (zero ou n vezes) + representa a repetição dos itens anteriores (uma ou n vezes) ? indica a repetição do item zero ou um tempo anterior. {m} representa a repetição dos itens anteriores (m vezes) {m,} representa a repetição dos itens anteriores (m ou n vezes) {m,n} representa a repetição dos itens anteriores (pelo menos m, e não mais de n vezes) () utilizado para agrupar os itens [] representa um conjunto de símbolos
  77. 77. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 55//88 SIMILAR TOSIMILAR TO (expressões regulares) 'abc' SIMILAR TO 'abc' true 'abc' SIMILAR TO 'a' false 'abc' SIMILAR TO '%(b|d)%' true 'abc' SIMILAR TO '(b|c)%' false 'Birne' SIMILAR TO 'B_rne' true 'Birne' SIMILAR TO 'B_ne' false 'Birne' SIMILAR TO 'B%ne' true 'Birne' SIMILAR TO 'Bir%ne%' true 'Birne' SIMILAR TO 'Birr%ne' false 'Citroen' SIMILAR TO 'Cit[arju]oen' true 'Citroen' SIMILAR TO 'Ci[tr]oen' false 'Citroen' SIMILAR TO 'Ci[tr][tr]oen' true 'Kiwi' SIMILAR TO 'Ki{2}wi' false 'Kiwi' SIMILAR TO 'K[ipw]{2}i' true 'Kiwi' SIMILAR TO 'K[ipw]{2}' false 'Kiwi' SIMILAR TO 'K[ipw]{3}' true 'Limone' SIMILAR TO 'Li{2,}mone' false 'Limone' SIMILAR TO 'Li{1,}mone' true 'Limone' SIMILAR TO 'Li[nezom]{2,}' true Atenção!Atenção! Consulte outros exemplos no endereçoConsulte outros exemplos no endereço http://www.firebirdsql.org/refdocs/langrefupd25-similar-to.html Atenção!Atenção! Consulte outros exemplos no endereçoConsulte outros exemplos no endereço http://www.firebirdsql.org/refdocs/langrefupd25-similar-to.html
  78. 78. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 66//88 3. Funções de Conjunto de Caracteres3. Funções de Conjunto de Caracteres char_length(string)char_length(string) : número de caracteres da string → char_length('TSI')char_length('TSI') -- 3 [lower|upper](string)[lower|upper](string) : converte a string para minúscula ou maiúscula → upper('tsi33a');upper('tsi33a'); -- TSI33A position(substring in string)position(substring in string) : localiza uma substring específica → position('33' in 'TSI33A')position('33' in 'TSI33A') -- 4 substring(string [from int] [for int]) : extrair uma substring → substring('TSI33A' from 4 for 3)substring('TSI33A' from 4 for 3) –- 33A trim(both [characters] from string) : remove um conjunto de caracteres → trim(both '3' from 'TSI33A')trim(both '3' from 'TSI33A') -- TSIA Atenção!Atenção! Consulte outras funções no endereçoConsulte outras funções no endereço http://www.postgresql.org/docs/9.1/static/functions-string.html Atenção!Atenção! Consulte outras funções no endereçoConsulte outras funções no endereço http://www.postgresql.org/docs/9.1/static/functions-string.html Atenção!Atenção! As funções podem ser utilizadas na cláusulaAs funções podem ser utilizadas na cláusula SELECTSELECT ou na cláuslaou na cláusla WHEREWHERE →→ SELECT FIRST_NAME, char_length(FIRST_NAME) FROM EMPLOYEES;SELECT FIRST_NAME, char_length(FIRST_NAME) FROM EMPLOYEES; Atenção!Atenção! As funções podem ser utilizadas na cláusulaAs funções podem ser utilizadas na cláusula SELECTSELECT ou na cláuslaou na cláusla WHEREWHERE →→ SELECT FIRST_NAME, char_length(FIRST_NAME) FROM EMPLOYEES;SELECT FIRST_NAME, char_length(FIRST_NAME) FROM EMPLOYEES;
  79. 79. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 77//88 Exemplos de ConsultasExemplos de Consultas ● SQL-SQL-7701:01: Projetar o novo e-mail dos colaboradores a partir da sintaxe: sobrenomesobrenome + 1º letra do nome1º letra do nome + @utfpr.edu.br@utfpr.edu.br) ● SQL-SQL-7702:02: Projetar a localização dos escritórios que possuem o número do local com o dígito 8 ou 7 ● SQL-SQL-7703:03: Recupere o nome dos colaboradores que terminam com 'a''a' SELECT concat(lower(LAST_NAME), lower(substring(FIRST_NAME from 1 for 1)), '@utfpr.edu.br' ) AS NEW_EMAIL FROM EMPLOYEES; SELECT concat(lower(LAST_NAME), lower(substring(FIRST_NAME from 1 for 1)), '@utfpr.edu.br' ) AS NEW_EMAIL FROM EMPLOYEES; SELECT * FROM LOCATIONS WHERE STREET_ADDRESS SIMILAR TO '%(8|7)%'; SELECT * FROM LOCATIONS WHERE STREET_ADDRESS SIMILAR TO '%(8|7)%'; SELECT CONCAT(FIRST_NAME,' ',LAST_NAME) FROM EMPLOYEES WHERE CONCAT(FIRST_NAME,' ',LAST_NAME) SLIKE '%a'; SELECT CONCAT(FIRST_NAME,' ',LAST_NAME) FROM EMPLOYEES WHERE CONCAT(FIRST_NAME,' ',LAST_NAME) SLIKE '%a';
  80. 80. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 88//88 CréditosCréditos ● MaterialMaterial – ELMASRI, Ramez; NAVATHE, Shamkant B. Sistemas de banco de dados. 6 ed. São Paulo: Pearson Addison Wesley, 2011. Capítulo 4. SQL básica ● Modelo de DadosModelo de Dados – http://www.oracle.com/technetwork/developer-tools/datamodeler/ sample-models-scripts-224531.html
  81. 81. TSI33A – Banco de Dados 1TSI33A – Banco de Dados 1 Funções AgregadasFunções Agregadas Prof. Me. Sidgley Camargo de Andrade Semana 06-2
  82. 82. TSI33A - Banco de Dados I 22//1111 CuidadoCuidado O objetivo desta aula é apresentar o core SQL. As práticasO objetivo desta aula é apresentar o core SQL. As práticas deste material foram desenvolvidas no SGBD PostgreSQL 9.4,deste material foram desenvolvidas no SGBD PostgreSQL 9.4, utilizando o GNU-Linux distro Ubuntu 14.04.1 LTS.utilizando o GNU-Linux distro Ubuntu 14.04.1 LTS. Documentação (online): http://www.postgresql.org/docs/9.4/static/index.html [en] Wiki: https://wiki.postgresql.org/wiki/Main_Page [en]
  83. 83. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 33//1111 1. O que são Funções Agregadas1. O que são Funções Agregadas ● Funções de agregaçãoFunções de agregação são usadas para resumir informações de vários registros em uma síntese de registrosíntese de registro único (agrupamento de dados). SQL-SQL-3301:01: Recuperar a quantidade e média salarial dos colaboradores SELECT COUNT(EMPLOYEE_ID) AS COUNT_EMPLOYEES , AVG(SALARY) AS AVG_SALARY FROM EMPLOYEES SELECT COUNT(EMPLOYEE_ID) AS COUNT_EMPLOYEES , AVG(SALARY) AS AVG_SALARY FROM EMPLOYEES EMPLOYEES EMPLOYEE_ID | FIRST_NAME | JOB_ID | SALARY --------------------------------------------------- 100 | Steven | AD_PRES | 25200.00 101 | Neena | AD_VP | 19550.00 103 | Alexander | IT_PROG | 10800.00 104 | Bruce | IT_PROG | 7200.00 111 | Ismael | SA_MAN | 9240.00 114 | Den | HR_REP | 12650.00 120 | Matthew | IT_ANA | 9600.00 COUNT_EMPLOYEES | AVG_SALARY_ID ------------------------------------ 7 | 13462.857142857143
  84. 84. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 44//1111 Funções de AgregaçãoFunções de Agregação ● São funções de agregação: COUNTCOUNT, SUMSUM, MAXMAX, MINMIN e AVGAVG. ● A função COUNT retorna o número de registros ou valores, conforme especificado em uma consulta. ● As funções SUMSUM, MAXMAX, MINMIN e AVGAVG podem ser aplicadas a um conjunto ou multiconjunto de valores numéricos e retornam, respectivamente, – SUMSUM a soma dos valores→ – MAXMAX o valor máximo do conjunto de valores→ – MINMIN o valor mínimo do conjunto de valores→ – AVGAVG a média dos valores→ ● Podem ser usadas na cláusula SELECTSELECT ou em uma cláusula HAVINGHAVING. Aplicados também em conjuntos de caractres e data/hora.
  85. 85. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 55//1111 Exemplos de consultasExemplos de consultas (funções de agregação) SQL-SQL-5501:01: Recuperar a somasoma dos salários de todos os colaborares, o salário máximomáximo, o salário mínimomínimo e a médiamédia dos salários SQL-SQL-5502:02: Recuperar o número total de colaboradores que possuem o cargo IT_PROG SQL-SQL-5503:03: Recuperar a quantidade de salários distintos do cargo IT_PROG SELECT SUM(SALARY) AS SUM_SALARY, MAX(SALARY) AS MAX_SALARY, MIN(SALARY) AS MIN_SALARY, AVG(SALARY) AS AVG_SALARY FROM EMPLOYEES; SELECT SUM(SALARY) AS SUM_SALARY, MAX(SALARY) AS MAX_SALARY, MIN(SALARY) AS MIN_SALARY, AVG(SALARY) AS AVG_SALARY FROM EMPLOYEES; SELECT COUNT(E.EMPLOYEE_ID) AS COUNT_IT_PROG FROM EMPLOYEES E WHERE E.JOB_ID = 'IT_PROG'; SELECT COUNT(E.EMPLOYEE_ID) AS COUNT_IT_PROG FROM EMPLOYEES E WHERE E.JOB_ID = 'IT_PROG'; SELECT COUNT(DISTINCT E.SALARY) AS COUNT_IT_PROG FROM EMPLOYEES E WHERE E.JOB_ID = 'IT_PROG'; SELECT COUNT(DISTINCT E.SALARY) AS COUNT_IT_PROG FROM EMPLOYEES E WHERE E.JOB_ID = 'IT_PROG'; ouou COUNT(*) Result 5→ Result 4→ Result → 833550.40; 25200.00; 2772.00; 7790.1906542056074766
  86. 86. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 66//1111 2. Cláusula2. Cláusula GROUP BYGROUP BY ● Em muitos casos é necessário aplicar as funções de agregação a subgrupossubgrupos de registros, na qual os subgrupos são baseados em alguns valores. ● SQL-SQL-6601:01: Recuperar o salário médio dos colaboradores em cada cargocada cargo ● O resultado é particionadoparticionado em subconjuntossubconjuntos (ou grupos) de registros não sobrepostosnão sobrepostos. Cada grupo (partição) consistirá nos registros que possuem o mesmo valor de algum(ns) campo(s) – campos decampos de agrupamentoagrupamento. SELECT JOB_ID, AVG(SALARY) AS AVG_SALARY_JOB FROM EMPLOYEES GROUP BY JOB_ID; SELECT JOB_ID, AVG(SALARY) AS AVG_SALARY_JOB FROM EMPLOYEES GROUP BY JOB_ID; JOB_ID | SALARY ------------------ AD_PRES | 25200.00 AD_VP | 19550.00 IT_PROG | 18000.00 SA_MAN | 9240.00 HR_REP | 12650.00 IT_ANA | 9600.00 103 | Alexander | IT_PROG | 10800.00 104 | Bruce | IT_PROG | 7200.00
  87. 87. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 77//1111 Considerações do AgrupamentoConsiderações do Agrupamento ● Se houver NULLsNULLs no campo de agrupamento, então um grupo separado é criado. ● SQL-SQL-7701:01: Recuperar a quantidadequantidade de colaboradores para cada percentualpercentual de comissãode comissão ● SQL-SQL-7701:01: Recuperar o salário médio dos colaboradores em cada cargo. Exibir o códigocódigo e o nomenome do cargo SELECT E.COMMISSION_PCT, COUNT(E.COMMISSION_PCT) AS COUNT_COMM_PCT FROM EMPLOYEES E GROUP BY E.COMMISSION_PCT; SELECT E.COMMISSION_PCT, COUNT(E.COMMISSION_PCT) AS COUNT_COMM_PCT FROM EMPLOYEES E GROUP BY E.COMMISSION_PCT; SELECT E.JOB_ID, J.JOB_TITLE, AVG(E.SALARY) AS AVG_SALARY_JOB FROM EMPLOYEES E, JOBS J WHERE E.JOB_ID = J.JOB_ID GROUP BY E.JOB_ID, J.JOB_TITLE; SELECT E.JOB_ID, J.JOB_TITLE, AVG(E.SALARY) AS AVG_SALARY_JOB FROM EMPLOYEES E, JOBS J WHERE E.JOB_ID = J.JOB_ID GROUP BY E.JOB_ID, J.JOB_TITLE; Atenção!Atenção! Em regra, os campos da cláusulaEm regra, os campos da cláusula SELECTSELECT que não possuem a aplicação deque não possuem a aplicação de função de agregação devem,função de agregação devem, obrigatoriamenteobrigatoriamente, aparecer na cláusula, aparecer na cláusula GROUPGROUP BYBY.. Atenção!Atenção! Em regra, os campos da cláusulaEm regra, os campos da cláusula SELECTSELECT que não possuem a aplicação deque não possuem a aplicação de função de agregação devem,função de agregação devem, obrigatoriamenteobrigatoriamente, aparecer na cláusula, aparecer na cláusula GROUPGROUP BYBY..
  88. 88. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 88//1111 Exemplos de consultasExemplos de consultas (cláusula GROUP BY) ● SQL-SQL-8801:01: Recuperar a média salarial para cada cargo ● SQL-SQL-8802:02: Recupere a quantidade de cargos anteriores da colaboradora Neena Kochhar SELECT J.JOB_TITLE, ROUND(AVG(E.SALARY),2) AS AVG_SALARY_JOB FROM EMPLOYEES E INNER JOIN JOBS J ON J.JOB_ID = E.JOB_ID GROUP BY J.JOB_TITLE; SELECT J.JOB_TITLE, ROUND(AVG(E.SALARY),2) AS AVG_SALARY_JOB FROM EMPLOYEES E INNER JOIN JOBS J ON J.JOB_ID = E.JOB_ID GROUP BY J.JOB_TITLE; SELECT CONCAT(E.FIRST_NAME,' ',E.LAST_NAME) AS NAME, COUNT(JH.EMPLOYEE_ID) FROM JOB_HISTORY JH INNER JOIN EMPLOYEES E ON E.EMPLOYEE_ID = JH.EMPLOYEE_ID WHERE UPPER(E.FIRST_NAME) = 'NEENA' AND UPPER(E.LAST_NAME) = 'KOCHHAR' GROUP BY 1; SELECT CONCAT(E.FIRST_NAME,' ',E.LAST_NAME) AS NAME, COUNT(JH.EMPLOYEE_ID) FROM JOB_HISTORY JH INNER JOIN EMPLOYEES E ON E.EMPLOYEE_ID = JH.EMPLOYEE_ID WHERE UPPER(E.FIRST_NAME) = 'NEENA' AND UPPER(E.LAST_NAME) = 'KOCHHAR' GROUP BY 1;
  89. 89. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 99//1111 3. Cláusula3. Cláusula HAVINGHAVING ● Em alguns casos é necessário recuperar os valores dessas funções somente para grupos que satisfazem certas condiçõesgrupos que satisfazem certas condições. (i.e. uma seleçãoseleção – WHEREWHERE – para grupos ou subgrupos. ● A cláusula HAVINGHAVING pemite selecionar grupo ou subgrupos de informações que satisfaçam uma determinada condição. ● SQL-SQL-9901:01: Recuperar o código de cada cargo em que existam mais deem que existam mais de doisdois colaboradores Atenção!Atenção! Os mesmos operadores da cláusulaOs mesmos operadores da cláusula WHEREWHERE podem ser aplicados na cláusulapodem ser aplicados na cláusula HAVINGHAVING.. Atenção!Atenção! Os mesmos operadores da cláusulaOs mesmos operadores da cláusula WHEREWHERE podem ser aplicados na cláusulapodem ser aplicados na cláusula HAVINGHAVING.. SELECT E.JOB_ID, COUNT(E.EMPLOYEE_ID) AS COUNT_EMP_JOB FROM EMPLOYEES E GROUP BY E.JOB_ID HAVING COUNT(E.EMPLOYEE_ID) > 2 SELECT E.JOB_ID, COUNT(E.EMPLOYEE_ID) AS COUNT_EMP_JOB FROM EMPLOYEES E GROUP BY E.JOB_ID HAVING COUNT(E.EMPLOYEE_ID) > 2
  90. 90. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 1010//1111 Exemplos de consultasExemplos de consultas (cláusula HAVING) ● SQL-SQL-101001:01: Recuperar a média salarial de cada departamento com mais de cinco colaboradores SELECT D.DEPARTMENT_NAME, AVG(E.SALARY) FROM EMPLOYEES E INNER JOIN DEPARTMENTS D ON D.DEPARTMENT_ID = E.DEPARTMENT_ID GROUP BY D.DEPARTMENT_NAME HAVING COUNT(E.EMPLOYEE_ID) > 5; SELECT D.DEPARTMENT_NAME, AVG(E.SALARY) FROM EMPLOYEES E INNER JOIN DEPARTMENTS D ON D.DEPARTMENT_ID = E.DEPARTMENT_ID GROUP BY D.DEPARTMENT_NAME HAVING COUNT(E.EMPLOYEE_ID) > 5;
  91. 91. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 1111//1111 CréditosCréditos ● MaterialMaterial – ELMASRI, Ramez; NAVATHE, Shamkant B. Sistemas de banco de dados. 6 ed. São Paulo: Pearson Addison Wesley, 2011. Capítulo 5. Mais SQL: Consultas complexas, triggers, views e modificação de esquema. ● Modelo de DadosModelo de Dados – http://www.oracle.com/technetwork/developer-tools/datamodeler/ sample-models-scripts-224531.html
  92. 92. TSI33A – Banco de Dados 1TSI33A – Banco de Dados 1 SubconsultasSubconsultas Prof. Me. Sidgley Camargo de Andrade Semana 07-1
  93. 93. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 22//88 CuidadoCuidado O objetivo desta aula é apresentar o core SQL. As práticasO objetivo desta aula é apresentar o core SQL. As práticas deste material foram desenvolvidas no SGBD PostgreSQL 9.4,deste material foram desenvolvidas no SGBD PostgreSQL 9.4, utilizando o GNU-Linux distro Ubuntu 14.04.1 LTS.utilizando o GNU-Linux distro Ubuntu 14.04.1 LTS. Documentação (online): http://www.postgresql.org/docs/9.4/static/index.html [en] Wiki: https://wiki.postgresql.org/wiki/Main_Page [en]
  94. 94. TSI33A - Banco de Dados I 3/8 1. Por que Subconsultas?1. Por que Subconsultas? ● Algumas consultas precisam que os valores existentes no banco de dados sejam buscados e depois usados em uma condição de seleção de registros. ● Essas consultas podem ser formuladas convenientemente usando consultas aninhadasconsultas aninhadas. ● SQL-SQL-3301:01: Projete o nome dos colaboradores que não possuemnão possuem históricohistórico Atenção!Atenção! Subconsultas podem ser usadas nas instruçãoSubconsultas podem ser usadas nas instrução SELECTSELECT,, CREATECREATE,, INSERTINSERT,, UPDATEUPDATE ee DELETEDELETE, ou em outra subconsulta., ou em outra subconsulta. Atenção!Atenção! Subconsultas podem ser usadas nas instruçãoSubconsultas podem ser usadas nas instrução SELECTSELECT,, CREATECREATE,, INSERTINSERT,, UPDATEUPDATE ee DELETEDELETE, ou em outra subconsulta., ou em outra subconsulta. Consultas aninhadas são blocos SELECT-FROM-WHERESELECT-FROM-WHERE dentro da cláusula WHEREWHERE de outra consulta. Essa outra consulta é denominada de consulta externaconsulta externa. SELECT CONCAT(E.FIRST_NAME,' ',E.LAST_NAME) AS NAME FROM EMPLOYEES E WHERE E.EMPLOYEE_ID NOT IN (SELECT DISTINCT J.EMPLOYEE_ID FROM JOB_HISTORY J); SELECT CONCAT(E.FIRST_NAME,' ',E.LAST_NAME) AS NAME FROM EMPLOYEES E WHERE E.EMPLOYEE_ID NOT IN (SELECT DISTINCT J.EMPLOYEE_ID FROM JOB_HISTORY J);
  95. 95. TSI33A - Banco de Dados I 4/8 Exemplos subconsultasExemplos subconsultas (cláusula(cláusula SELECTSELECT ee WHEREWHERE)) ● SQL-SQL-4401:01: Recupere os colaboradores que ganham mais do que a média dos salários de todos os colaboradores ● SQL-SQL-4402:02: Recupere o nome dos colaboradores que trabalham com a colaboradora Neena SELECT E1.FIRST_NAME || ' ' || E1.LAST_NAME, E1.SALARY, (SELECT ROUND(AVG(E2.SALARY),2) FROM EMPLOYEES E2) AVG_SALARY FROM EMPLOYEES E1 WHERE E1.SALARY > (SELECT AVG(E2.SALARY) FROM EMPLOYEES E2) GROUP BY 1,2; SELECT E1.FIRST_NAME || ' ' || E1.LAST_NAME, E1.SALARY, (SELECT ROUND(AVG(E2.SALARY),2) FROM EMPLOYEES E2) AVG_SALARY FROM EMPLOYEES E1 WHERE E1.SALARY > (SELECT AVG(E2.SALARY) FROM EMPLOYEES E2) GROUP BY 1,2; SELECT CONCAT(E1.FIRST_NAME,' ',E1.LAST_NAME) FROM EMPLOYEES E1 WHERE E1.DEPARTMENT_ID = (SELECT E.DEPARTMENT_ID FROM EMPLOYEES E WHERE E.FIRST_NAME = 'Neena'); SELECT CONCAT(E1.FIRST_NAME,' ',E1.LAST_NAME) FROM EMPLOYEES E1 WHERE E1.DEPARTMENT_ID = (SELECT E.DEPARTMENT_ID FROM EMPLOYEES E WHERE E.FIRST_NAME = 'Neena');
  96. 96. TSI33A - Banco de Dados I 5/8 2. Operadores2. Operadores ANYANY,, SOMESOME ee ALLALL ● Os operadores >, >=, <, <= e <> podem ser combinados com os operadores ANYANY, SOMESOME, e ALLALL. – ANYANY/SOMESOME é verdadeiro se existir algumexistir algum registro da subconsulta que satisfaça a condição – ALLALL é verdadeiro se todosse todos os registros da subconsulta satisfazerem a condição ● SQL-SQL-5501:01: Recupere o nome dos colaboradores cujo salário é maior do que o salário de todostodos os colaboradores do departamento 60 (IT) SELECT E1.FIRST_NAME || ' ' || E1.LAST_NAME FROM EMPLOYEES E1 WHERE E1.SALARY >ALL (SELECT E2.SALARY FROM EMPLOYEES E2 WHERE E2.DEPARTMENT_ID=60); SELECT E1.FIRST_NAME || ' ' || E1.LAST_NAME FROM EMPLOYEES E1 WHERE E1.SALARY >ALL (SELECT E2.SALARY FROM EMPLOYEES E2 WHERE E2.DEPARTMENT_ID=60); OUOU (por meio de funções agregadas) SELECT E1.FIRST_NAME || ' ' || E1.LAST_NAME FROM EMPLOYEES E1 WHERE E1.SALARY > (SELECT MAX(E2.SALARY) FROM EMPLOYEES E2 WHERE E2.DEPARTMENT_ID=60); OUOU (por meio de funções agregadas) SELECT E1.FIRST_NAME || ' ' || E1.LAST_NAME FROM EMPLOYEES E1 WHERE E1.SALARY > (SELECT MAX(E2.SALARY) FROM EMPLOYEES E2 WHERE E2.DEPARTMENT_ID=60); Uso da função de agregação MAX()
  97. 97. TSI33A - Banco de Dados I 6/8 3. Operadores3. Operadores [NOT] IN[NOT] IN ee [NOT] EXISTS[NOT] EXISTS ● Outros dois operadores utilizados em subconsultas são o [NOT] IN[NOT] IN e o [NOT] EXISTS[NOT] EXISTS. – [NOT][NOT] ININ é verdadeiro se os registros da consultas estão no conjuntoestão no conjunto da subconsulta. – [NOT][NOT] EXISTSEXISTS é verdadeiro se os registros da consultas existemexistem na subconsulta. ● SQL-SQL-6601:01: Recuperar os departamentos que não possuem colaboradores alocados SELECT D.DEPARTMENT_ID, D.DEPARTMENT_NAME FROM DEPARTMENTS D WHERE NOT EXISTS (SELECT E.DEPARTMENT_ID FROM EMPLOYEES E WHERE E.DEPARTMENT_ID = D.DEPARTMENT_ID); SELECT D.DEPARTMENT_ID, D.DEPARTMENT_NAME FROM DEPARTMENTS D WHERE NOT EXISTS (SELECT E.DEPARTMENT_ID FROM EMPLOYEES E WHERE E.DEPARTMENT_ID = D.DEPARTMENT_ID);
  98. 98. TSI33A - Banco de Dados I 7/8 Exemplos de SubconsultasExemplos de Subconsultas ((ANYANY ee SOMESOME ee ININ)) ● SQL-SQL-7701:01: Recupere o nome dos colaboradores que possuem histórico de cargos SELECT FIRST_NAME FROM EMPLOYEES WHERE EMPLOYEE_ID IN (SELECT DISTINCT EMPLOYEE_ID FROM JOB_HISTORY); SELECT FIRST_NAME FROM EMPLOYEES WHERE EMPLOYEE_ID IN (SELECT DISTINCT EMPLOYEE_ID FROM JOB_HISTORY); OUOU SELECT FIRST_NAME FROM EMPLOYEES WHERE EMPLOYEE_ID =ANY (SELECT DISTINCT EMPLOYEE_ID FROM JOB_HISTORY); OUOU SELECT FIRST_NAME FROM EMPLOYEES WHERE EMPLOYEE_ID =ANY (SELECT DISTINCT EMPLOYEE_ID FROM JOB_HISTORY); OUOU SELECT FIRST_NAME FROM EMPLOYEES WHERE EMPLOYEE_ID =SOME (SELECT DISTINCT EMPLOYEE_ID FROM JOB_HISTORY); OUOU SELECT FIRST_NAME FROM EMPLOYEES WHERE EMPLOYEE_ID =SOME (SELECT DISTINCT EMPLOYEE_ID FROM JOB_HISTORY);
  99. 99. TSI33A - Banco de Dados I 8/8 CréditosCréditos ● MaterialMaterial – ELMASRI, Ramez; NAVATHE, Shamkant B. Sistemas de banco de dados. 6 ed. São Paulo: Pearson Addison Wesley, 2011. Capítulo 5. Mais SQL: Consultas complexas, triggers, views e modificações de esquema ● Modelo de DadosModelo de Dados – http://www.oracle.com/technetwork/developer-tools/datamodeler/ sample-models-scripts-224531.html
  100. 100. TSI33A – Banco de Dados 1TSI33A – Banco de Dados 1 Operações de ConjuntosOperações de Conjuntos Prof. Me. Sidgley Camargo de Andrade Semana 07-2
  101. 101. TSI33A - Banco de Dados I 22//88 CuidadoCuidado O objetivo desta aula é apresentar o core SQL. As práticasO objetivo desta aula é apresentar o core SQL. As práticas deste material foram desenvolvidas no SGBD PostgreSQL 9.4,deste material foram desenvolvidas no SGBD PostgreSQL 9.4, utilizando o GNU-Linux distro Ubuntu 14.04.1 LTS.utilizando o GNU-Linux distro Ubuntu 14.04.1 LTS. Documentação (online): http://www.postgresql.org/docs/9.4/static/index.html [en] Wiki: https://wiki.postgresql.org/wiki/Main_Page [en]
  102. 102. TSI33A - Banco de Dados I 3/8 1. Operações de Conjuntos1. Operações de Conjuntos ● O resultado de uma consulta é definido como uma relaçãorelação matemáticamatemática que corresponde a um conjunto de elementos (registros). ● A SQL incorporou diretamente algumas das operações deoperações de conjuntoconjunto da teoria de conjuntos da matemática. – UniãoUnião ([ALL] UNION[ALL] UNION) – DiferençaDiferença (EXCEPTEXCEPT ou MINUSMINUS) – IntersecçãoIntersecção (INTERSECTIONINTERSECTION) Atenção!Atenção! Essas operações se aplicam apenas a relações (resultado de consultas)Essas operações se aplicam apenas a relações (resultado de consultas) compatíveis, que tenham o mesmo número de campos e que as respectivascompatíveis, que tenham o mesmo número de campos e que as respectivas posições sejam do mesmo tipo de dados.posições sejam do mesmo tipo de dados. Atenção!Atenção! Essas operações se aplicam apenas a relações (resultado de consultas)Essas operações se aplicam apenas a relações (resultado de consultas) compatíveis, que tenham o mesmo número de campos e que as respectivascompatíveis, que tenham o mesmo número de campos e que as respectivas posições sejam do mesmo tipo de dados.posições sejam do mesmo tipo de dados.
  103. 103. TSI33A - Banco de Dados I 4/8 2. Operação2. Operação UNIONUNION ● A operação UNIONUNION une registros de duas ou mais consultas. ● SQL-SQL-4401:01: Recupere o nome dos colaboradores que não possuemnão possuem históricohistórico e dos que possuem pelo menos dois históricospelo menos dois históricos SQL_1 UNION [ALL] SQL_2; SQL_1 UNION [ALL] SQL_2; Sintaxe Atenção!Atenção! A operaçãoA operação UNIONUNION remove a projeção dos registrosremove a projeção dos registros duplicados. A cláusuladuplicados. A cláusula ALLALL exibe os registros duplicados.exibe os registros duplicados. Atenção!Atenção! A operaçãoA operação UNIONUNION remove a projeção dos registrosremove a projeção dos registros duplicados. A cláusuladuplicados. A cláusula ALLALL exibe os registros duplicados.exibe os registros duplicados. SELECT E.FIRST_NAME FROM EMPLOYEES E WHERE NOT EXISTS (SELECT * FROM JOB_HISTORY J WHERE J.EMPLOYEE_ID = E.EMPLOYEE_ID) UNION SELECT E.FIRST_NAME FROM EMPLOYEES E INNER JOIN JOB_HISTORY J ON J.EMPLOYEE_ID = E.EMPLOYEE_ID GROUP BY E.FIRST_NAME HAVING COUNT(J.EMPLOYEE_ID) >= 2; SELECT E.FIRST_NAME FROM EMPLOYEES E WHERE NOT EXISTS (SELECT * FROM JOB_HISTORY J WHERE J.EMPLOYEE_ID = E.EMPLOYEE_ID) UNION SELECT E.FIRST_NAME FROM EMPLOYEES E INNER JOIN JOB_HISTORY J ON J.EMPLOYEE_ID = E.EMPLOYEE_ID GROUP BY E.FIRST_NAME HAVING COUNT(J.EMPLOYEE_ID) >= 2;
  104. 104. TSI33A - Banco de Dados I 5/8 3. Operação [3. Operação [EXCEPT|MINUSEXCEPT|MINUS]] ● A operação [EXCEPT|MINUS][EXCEPT|MINUS] recupera registros que estão na primeira consulta eliminando os registros encontrados na segunda consulta. ● SQL-SQL-5501:01: Recupere o nome dos colaboradores que não possuemnão possuem históricohistórico SQL_1 EXCEPT SQL_2; SQL_1 EXCEPT SQL_2; Sintaxe SELECT E.FIRST_NAME FROM EMPLOYEES E EXCEPT SELECT E.FIRST_NAME FROM EMPLOYEES E INNER JOIN HR.JOB_HISTORY J ON J.EMPLOYEE_ID = E.EMPLOYEE_ID; SELECT E.FIRST_NAME FROM EMPLOYEES E EXCEPT SELECT E.FIRST_NAME FROM EMPLOYEES E INNER JOIN HR.JOB_HISTORY J ON J.EMPLOYEE_ID = E.EMPLOYEE_ID; Cuidado!Cuidado! (SQL_1(SQL_1 EXCEPTEXCEPT SQL_2) != (SQL_2SQL_2) != (SQL_2 EXCEPTEXCEPT SQL_2)SQL_2) Cuidado!Cuidado! (SQL_1(SQL_1 EXCEPTEXCEPT SQL_2) != (SQL_2SQL_2) != (SQL_2 EXCEPTEXCEPT SQL_2)SQL_2)
  105. 105. TSI33A - Banco de Dados I 6/8 4. Operação [4. Operação [INTERSECTIONINTERSECTION]] ● A operação INTERSECTIONINTERSECTION recupera registros comuns entre as consultas. ● SQL-SQL-6601:01: Recupere o nome dos colaboradores que possuem históricopossuem histórico SQL_1 INTERSECTION SQL_2; SQL_1 INTERSECTION SQL_2; Sintaxe SELECT E.FIRST_NAME FROM EMPLOYEES E INTERSECTION SELECT DISTINCT E.FIRST_NAME FROM EMPLOYEES E INNER JOIN HR.JOB_HISTORY J ON J.EMPLOYEE_ID = E.EMPLOYEE_ID; SELECT E.FIRST_NAME FROM EMPLOYEES E INTERSECTION SELECT DISTINCT E.FIRST_NAME FROM EMPLOYEES E INNER JOIN HR.JOB_HISTORY J ON J.EMPLOYEE_ID = E.EMPLOYEE_ID; Atenção!Atenção! A intersecção é equivalente a seguinte asA intersecção é equivalente a seguinte as operações de diferença:operações de diferença: SQL_1 – (SQL_1 - SQL_2)SQL_1 – (SQL_1 - SQL_2) AtenÀW|

×