SlideShare une entreprise Scribd logo
1  sur  190
Télécharger pour lire hors ligne
TSI33A – Banco de Dados 1TSI33A – Banco de Dados 1
Prof. Me. Sidgley Camargo de Andrade
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
TSI33A – Banco de Dados 1TSI33A – Banco de Dados 1
DBMS - Database Management SystemDBMS - Database Management System
Prof. Me. Sidgley Camargo de Andrade
Semana 01
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.
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?
...... ......
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.
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.
TSI33A - Banco de Dados ITSI33A - Banco de Dados I 66//1313
Ambiente de SGBDAmbiente de SGBD
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.
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.
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/
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).
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.
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
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
TSI33A – Banco de Dados 1TSI33A – Banco de Dados 1
PostgreSQLPostgreSQL
Prof. Me. Sidgley Camargo de Andrade
Semana 02
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.
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.
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]
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 =#
TSI33A - Banco de Dados ITSI33A - Banco de Dados I 66//88
pgAdmin IIIpgAdmin III
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
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
TSI33A – Banco de Dados 1TSI33A – Banco de Dados 1
Relational ModelRelational Model
Prof. Me. Sidgley Camargo de Andrade
Semana 03
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.
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.
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)
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.
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.
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
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
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
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
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
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.
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.).
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?
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
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)
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
TSI33A – Banco de Dados 1TSI33A – Banco de Dados 1
ConsultasConsultas
Prof. Me. Sidgley Camargo de Andrade
Semana 04-2
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]
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.
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.
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.
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?
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.
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.
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;
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);
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;
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
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.
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..
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
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.
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
TSI33A – Banco de Dados 1TSI33A – Banco de Dados 1
JunçõesJunções
Prof. Me. Sidgley Camargo de Andrade
Semana 05
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]
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.
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?
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;
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.
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
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]))
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)
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(+)
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.
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.
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
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;
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
TSI33A – Banco de Dados 1TSI33A – Banco de Dados 1
Subcadeias de CaracteresSubcadeias de Caracteres
Prof. Me. Sidgley Camargo de Andrade
Semana 06-1
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]
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
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
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
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;
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';
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
TSI33A – Banco de Dados 1TSI33A – Banco de Dados 1
Funções AgregadasFunções Agregadas
Prof. Me. Sidgley Camargo de Andrade
Semana 06-2
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]
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
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.
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
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
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..
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;
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
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;
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
TSI33A – Banco de Dados 1TSI33A – Banco de Dados 1
SubconsultasSubconsultas
Prof. Me. Sidgley Camargo de Andrade
Semana 07-1
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]
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);
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');
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()
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);
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);
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
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
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]
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.
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;
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)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)
Aulas TSI33A - Banco de Dados I (TSI UTFPR-Toledo)

Contenu connexe

Tendances

Banco dados i prof ivan (acesse www.portalgsti.com.br)
Banco dados i prof ivan (acesse  www.portalgsti.com.br)Banco dados i prof ivan (acesse  www.portalgsti.com.br)
Banco dados i prof ivan (acesse www.portalgsti.com.br)Andre Sidou
 
Apresentação Final de Banco de Dados
Apresentação Final de Banco de DadosApresentação Final de Banco de Dados
Apresentação Final de Banco de Dadossamlobo
 
1º trabalho base dados
1º trabalho base dados1º trabalho base dados
1º trabalho base dadosessa
 
1.Introdução Banco de Dados
1.Introdução Banco de Dados1.Introdução Banco de Dados
1.Introdução Banco de Dadosvini_campos
 
Criação de uma base de dados para gestão de uma biblioteca
Criação de uma base de dados para gestão de uma bibliotecaCriação de uma base de dados para gestão de uma biblioteca
Criação de uma base de dados para gestão de uma bibliotecaDavid Canjamba 2D
 
Fundamentos de banco de dados 01 indrodução
Fundamentos de banco de dados   01 indroduçãoFundamentos de banco de dados   01 indrodução
Fundamentos de banco de dados 01 indroduçãoRafael Pinheiro
 
Matéria de apoio (Base de dados)
Matéria de apoio  (Base de dados)Matéria de apoio  (Base de dados)
Matéria de apoio (Base de dados)André Silva
 
Universidade federal do amazonas Banco de Dados - Apresentação final
Universidade federal do amazonas   Banco de Dados - Apresentação finalUniversidade federal do amazonas   Banco de Dados - Apresentação final
Universidade federal do amazonas Banco de Dados - Apresentação finalRenan Levy
 
Material Modelagem - Prof. Marcos Alexandruk
Material Modelagem - Prof. Marcos AlexandrukMaterial Modelagem - Prof. Marcos Alexandruk
Material Modelagem - Prof. Marcos AlexandrukHebert Alquimim
 

Tendances (20)

Banco de dados
Banco de dadosBanco de dados
Banco de dados
 
Banco dados i prof ivan (acesse www.portalgsti.com.br)
Banco dados i prof ivan (acesse  www.portalgsti.com.br)Banco dados i prof ivan (acesse  www.portalgsti.com.br)
Banco dados i prof ivan (acesse www.portalgsti.com.br)
 
Banco de Dados
Banco de DadosBanco de Dados
Banco de Dados
 
Apresentação Final de Banco de Dados
Apresentação Final de Banco de DadosApresentação Final de Banco de Dados
Apresentação Final de Banco de Dados
 
1º trabalho base dados
1º trabalho base dados1º trabalho base dados
1º trabalho base dados
 
Banco de Dados - Conceitos Básicos
Banco de Dados - Conceitos BásicosBanco de Dados - Conceitos Básicos
Banco de Dados - Conceitos Básicos
 
Aula 3 banco de dados
Aula 3   banco de dadosAula 3   banco de dados
Aula 3 banco de dados
 
Introdução ao banco de dados
Introdução ao banco de dadosIntrodução ao banco de dados
Introdução ao banco de dados
 
1.Introdução Banco de Dados
1.Introdução Banco de Dados1.Introdução Banco de Dados
1.Introdução Banco de Dados
 
Criação de uma base de dados para gestão de uma biblioteca
Criação de uma base de dados para gestão de uma bibliotecaCriação de uma base de dados para gestão de uma biblioteca
Criação de uma base de dados para gestão de uma biblioteca
 
SGBD
SGBDSGBD
SGBD
 
Aula 1
Aula 1Aula 1
Aula 1
 
Aula 4 banco de dados
Aula 4   banco de dados Aula 4   banco de dados
Aula 4 banco de dados
 
Fundamentos de banco de dados 01 indrodução
Fundamentos de banco de dados   01 indroduçãoFundamentos de banco de dados   01 indrodução
Fundamentos de banco de dados 01 indrodução
 
SGBD Oracle
SGBD OracleSGBD Oracle
SGBD Oracle
 
Introdução BD
Introdução BDIntrodução BD
Introdução BD
 
Slide da aula 04
Slide da aula 04Slide da aula 04
Slide da aula 04
 
Matéria de apoio (Base de dados)
Matéria de apoio  (Base de dados)Matéria de apoio  (Base de dados)
Matéria de apoio (Base de dados)
 
Universidade federal do amazonas Banco de Dados - Apresentação final
Universidade federal do amazonas   Banco de Dados - Apresentação finalUniversidade federal do amazonas   Banco de Dados - Apresentação final
Universidade federal do amazonas Banco de Dados - Apresentação final
 
Material Modelagem - Prof. Marcos Alexandruk
Material Modelagem - Prof. Marcos AlexandrukMaterial Modelagem - Prof. Marcos Alexandruk
Material Modelagem - Prof. Marcos Alexandruk
 

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

Banco de Dados - Part01
Banco de Dados - Part01Banco de Dados - Part01
Banco de Dados - Part01Rangel Javier
 
Introdução a SGBDs
Introdução a SGBDsIntrodução a SGBDs
Introdução a SGBDsUFRN
 
Banco de Dados - Introdução - Projeto de Banco de Dados - DER
Banco de Dados - Introdução - Projeto de Banco de Dados - DERBanco de Dados - Introdução - Projeto de Banco de Dados - DER
Banco de Dados - Introdução - Projeto de Banco de Dados - DERRangel Javier
 
Aula 4 - Sistemas Gerenciadores de Banco de Dados
Aula 4 - Sistemas Gerenciadores de Banco de DadosAula 4 - Sistemas Gerenciadores de Banco de Dados
Aula 4 - Sistemas Gerenciadores de Banco de DadosVitor Hugo Melo Araújo
 
Diego araujo-introdução-a-banco-de-dados-livre-–-mysql
Diego araujo-introdução-a-banco-de-dados-livre-–-mysqlDiego araujo-introdução-a-banco-de-dados-livre-–-mysql
Diego araujo-introdução-a-banco-de-dados-livre-–-mysqlDiego Rivera Tavares
 
Diego araujo-introdução-a-banco-de-dados-livre-–-mysql
Diego araujo-introdução-a-banco-de-dados-livre-–-mysqlDiego araujo-introdução-a-banco-de-dados-livre-–-mysql
Diego araujo-introdução-a-banco-de-dados-livre-–-mysqlDiego Rivera Tavares
 
Projeto de Banco de Dados - Capítulo 1
Projeto de Banco de Dados - Capítulo 1Projeto de Banco de Dados - Capítulo 1
Projeto de Banco de Dados - Capítulo 1Januário Neto
 
Apostila de Banco dados
Apostila de Banco dadosApostila de Banco dados
Apostila de Banco dadosFernando Palma
 
Sistema de Base de Dados1.ppt
Sistema de Base de Dados1.pptSistema de Base de Dados1.ppt
Sistema de Base de Dados1.ppthhuu6
 
Introdução à Banco de Dados
Introdução à Banco de DadosIntrodução à Banco de Dados
Introdução à Banco de DadosBruno Siqueira
 
Respostas exercício 1 bdi
Respostas exercício 1   bdiRespostas exercício 1   bdi
Respostas exercício 1 bdiPatty Muniz
 
aula01_Fundamentos de Banco de Dados.pptx.pdf
aula01_Fundamentos de Banco de Dados.pptx.pdfaula01_Fundamentos de Banco de Dados.pptx.pdf
aula01_Fundamentos de Banco de Dados.pptx.pdfssuser7a84f91
 
2019-2 - BD I - Aula 01 C - Introdução a Banco de Dados
2019-2 - BD I - Aula 01 C - Introdução a Banco de Dados2019-2 - BD I - Aula 01 C - Introdução a Banco de Dados
2019-2 - BD I - Aula 01 C - Introdução a Banco de DadosRodrigo Kiyoshi Saito
 

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

Banco aula 01
Banco aula 01Banco aula 01
Banco aula 01
 
Banco aula 01
Banco aula 01Banco aula 01
Banco aula 01
 
Banco de dados parte 01
Banco de dados parte 01Banco de dados parte 01
Banco de dados parte 01
 
Banco de Dados - Part01
Banco de Dados - Part01Banco de Dados - Part01
Banco de Dados - Part01
 
Introdução a SGBDs
Introdução a SGBDsIntrodução a SGBDs
Introdução a SGBDs
 
Ara7129 unidade-1-v1
Ara7129 unidade-1-v1Ara7129 unidade-1-v1
Ara7129 unidade-1-v1
 
Banco de Dados - Introdução - Projeto de Banco de Dados - DER
Banco de Dados - Introdução - Projeto de Banco de Dados - DERBanco de Dados - Introdução - Projeto de Banco de Dados - DER
Banco de Dados - Introdução - Projeto de Banco de Dados - DER
 
TA1 - Slides Acessibilidade.pdf
TA1 - Slides Acessibilidade.pdfTA1 - Slides Acessibilidade.pdf
TA1 - Slides Acessibilidade.pdf
 
Aula 4 - Sistemas Gerenciadores de Banco de Dados
Aula 4 - Sistemas Gerenciadores de Banco de DadosAula 4 - Sistemas Gerenciadores de Banco de Dados
Aula 4 - Sistemas Gerenciadores de Banco de Dados
 
Diego araujo-introdução-a-banco-de-dados-livre-–-mysql
Diego araujo-introdução-a-banco-de-dados-livre-–-mysqlDiego araujo-introdução-a-banco-de-dados-livre-–-mysql
Diego araujo-introdução-a-banco-de-dados-livre-–-mysql
 
Diego araujo-introdução-a-banco-de-dados-livre-–-mysql
Diego araujo-introdução-a-banco-de-dados-livre-–-mysqlDiego araujo-introdução-a-banco-de-dados-livre-–-mysql
Diego araujo-introdução-a-banco-de-dados-livre-–-mysql
 
Projeto de Banco de Dados - Capítulo 1
Projeto de Banco de Dados - Capítulo 1Projeto de Banco de Dados - Capítulo 1
Projeto de Banco de Dados - Capítulo 1
 
Apostila de Banco dados
Apostila de Banco dadosApostila de Banco dados
Apostila de Banco dados
 
Apostila de banco de dados da ucg
Apostila de banco de dados da ucgApostila de banco de dados da ucg
Apostila de banco de dados da ucg
 
Sistema de Base de Dados1.ppt
Sistema de Base de Dados1.pptSistema de Base de Dados1.ppt
Sistema de Base de Dados1.ppt
 
Introdução à Banco de Dados
Introdução à Banco de DadosIntrodução à Banco de Dados
Introdução à Banco de Dados
 
Respostas exercício 1 bdi
Respostas exercício 1   bdiRespostas exercício 1   bdi
Respostas exercício 1 bdi
 
aula01_Fundamentos de Banco de Dados.pptx.pdf
aula01_Fundamentos de Banco de Dados.pptx.pdfaula01_Fundamentos de Banco de Dados.pptx.pdf
aula01_Fundamentos de Banco de Dados.pptx.pdf
 
Artc 1249307788 43
Artc 1249307788 43Artc 1249307788 43
Artc 1249307788 43
 
2019-2 - BD I - Aula 01 C - Introdução a Banco de Dados
2019-2 - BD I - Aula 01 C - Introdução a Banco de Dados2019-2 - BD I - Aula 01 C - Introdução a Banco de Dados
2019-2 - BD I - Aula 01 C - Introdução a Banco de Dados
 

Plus de Federal University of Technology - Paraná/Brazil (UTFPR)

Plus de Federal University of Technology - Paraná/Brazil (UTFPR) (7)

Situational awareness in social media: lessons learned using information entr...
Situational awareness in social media: lessons learned using information entr...Situational awareness in social media: lessons learned using information entr...
Situational awareness in social media: lessons learned using information entr...
 
Does keyword noise change over space and time? A case study of flood- and rai...
Does keyword noise change over space and time? A case study of flood- and rai...Does keyword noise change over space and time? A case study of flood- and rai...
Does keyword noise change over space and time? A case study of flood- and rai...
 
Mining rainfall spatio-temporal patterns in Twitter: a temporal approach
Mining rainfall spatio-temporal patterns in Twitter: a temporal approachMining rainfall spatio-temporal patterns in Twitter: a temporal approach
Mining rainfall spatio-temporal patterns in Twitter: a temporal approach
 
An Introduction to Metric Learning for Clustering
An Introduction to Metric Learning for ClusteringAn Introduction to Metric Learning for Clustering
An Introduction to Metric Learning for Clustering
 
An introduction to automated analysis of feature models through propositional...
An introduction to automated analysis of feature models through propositional...An introduction to automated analysis of feature models through propositional...
An introduction to automated analysis of feature models through propositional...
 
pSets TSI32B - Estrutura, Pesquisa e Ordenação de Dados (TSI UTFPR-Toledo)
pSets TSI32B - Estrutura, Pesquisa e Ordenação de Dados (TSI UTFPR-Toledo)pSets TSI32B - Estrutura, Pesquisa e Ordenação de Dados (TSI UTFPR-Toledo)
pSets TSI32B - Estrutura, Pesquisa e Ordenação de Dados (TSI UTFPR-Toledo)
 
Aulas TSI32B - Estrutura, Pesquisa e Ordenação de Dados (TSI UTFPR-Toledo)
Aulas TSI32B - Estrutura, Pesquisa e Ordenação de Dados (TSI UTFPR-Toledo)Aulas TSI32B - Estrutura, Pesquisa e Ordenação de Dados (TSI UTFPR-Toledo)
Aulas TSI32B - Estrutura, Pesquisa e Ordenação de Dados (TSI UTFPR-Toledo)
 

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

  • 1. TSI33A – Banco de Dados 1TSI33A – Banco de Dados 1 Prof. Me. Sidgley Camargo de Andrade
  • 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. 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. 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. 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. 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. 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. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 66//1313 Ambiente de SGBDAmbiente de SGBD
  • 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. 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. 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. 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. 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. 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. 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. TSI33A – Banco de Dados 1TSI33A – Banco de Dados 1 PostgreSQLPostgreSQL Prof. Me. Sidgley Camargo de Andrade Semana 02
  • 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. 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. 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. 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. TSI33A - Banco de Dados ITSI33A - Banco de Dados I 66//88 pgAdmin IIIpgAdmin III
  • 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. 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. TSI33A – Banco de Dados 1TSI33A – Banco de Dados 1 Relational ModelRelational Model Prof. Me. Sidgley Camargo de Andrade Semana 03
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. TSI33A – Banco de Dados 1TSI33A – Banco de Dados 1 ConsultasConsultas Prof. Me. Sidgley Camargo de Andrade Semana 04-2
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. TSI33A – Banco de Dados 1TSI33A – Banco de Dados 1 JunçõesJunções Prof. Me. Sidgley Camargo de Andrade Semana 05
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. TSI33A – Banco de Dados 1TSI33A – Banco de Dados 1 Subcadeias de CaracteresSubcadeias de Caracteres Prof. Me. Sidgley Camargo de Andrade Semana 06-1
  • 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. 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. 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. 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. 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. 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. 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. TSI33A – Banco de Dados 1TSI33A – Banco de Dados 1 Funções AgregadasFunções Agregadas Prof. Me. Sidgley Camargo de Andrade Semana 06-2
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. TSI33A – Banco de Dados 1TSI33A – Banco de Dados 1 SubconsultasSubconsultas Prof. Me. Sidgley Camargo de Andrade Semana 07-1
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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)