Você está na página 1de 38

softblue.com.

br

SQL Completo
Introdução a Bancos de Dados

Introdução ao curso de SQL

• Objetivos do curso
– Aprender a linguagem SQL
– Aprender a modelar, normalizar, criar e interagir com bancos de dados

• Público alvo
– Programadores e desenvolvedores de software
– Administradores de bancos de dados
– Professores e estudantes de bancos de dados

• Requisitos
– Conhecimentos básicos de programação

• Aptidões após o curso


– Modelar, normalizar e criar bancos de dados para suas aplicações
– Interagir com bancos de dados

Introdução ao curso de SQL

• Faz parte deste curso


– Ensinar a criar e modelar bancos de dados
– Ensinar a normalizar um banco de dados
– Ensinar a interagir com bancos de dados
– Linguagem SQL ANSI
– Avaliações vs. aulas práticas

• Não faz parte deste curso


– Ensinar integração do SQL com Java, PHP ou outras linguagens
– Ensinar a operar PostgreSQL, Oracle, SQL Server, Firebird ou outros

1
softblue.com.br

Introdução ao curso de SQL

• Quem é a Softblue
– Empresa on-line especializada em cursos de programação
– Atua desde 2003 com treinamentos

• Instrutor: André Milani


– Graduado em Ciência da Computação
– Pós-graduado em Business Intelligence
– Atua desde 2002 com desenvolvimento de aplicações web
– Autor dos seguintes livros da editora Novatec:
• MySQL – Guia do Programador
• PostgreSQL – Guia do Programador
• Construindo Aplicações Web com PHP e MySQL
• Programando para iPhone e iPad
– Atua desde 2003 com treinamentos
– Mais de 100.000 downloads na AppStore

O que são bancos de dados

• Mecanismos de armazenamento de dados


• Conjunto de informação com estrutura
regular
• Bancos de dados não relacionais
– Arquivos estruturados

• Bancos de dados relacionais


– Dados organizados em tabelas
– Tabelas podem se relacionar com outras tabelas
– Menor espaço de armazenamento
– Maior velocidade de acesso aos dados
– Padrão mundialmente utilizado

Bancos de dados relacionais

• Bancos de dados
Ferramentas que permitem o armazenamento e Banco de dados
manipulação de dados organizados em forma de
tabelas
Tabela PRODUTOS

• Tabelas PRODUTO
TV
PREÇO
1000

Forma de organização de dados formada por DVD Player 290

linhas e colunas Bluray Player 490

• Colunas Tabela CLIENTES


NOME IDADE ESTADO
Campos que formam um registro Fernando 25 PR

• Linhas
Guilherme 30 SP
Mateus 35 RJ

Registros ou tuplas

2
softblue.com.br

Bancos de dados relacionais

• Visões
Consultas SQL a dados das tabelas do banco sem armazená-los.

• Índices
Estruturas que gerenciam a ordenação de valores dos campos informados
para melhorar a performance de processamento destes campos.

Visões Tabelas Índices


Dados dinâmicos Dados armazenados Estruturas extras
NOME IDADE ESTADO ÍNDICE 2
NOME IDADE
Fernando 25 PR ÍNDICE 1 25
Fernando 25
Guilherme 30 SP Fernando 30
Mateus 35
Mateus 35 RJ Mateus

SGBDs

• SGBD
– Sistema Gerenciador de Banco de Dados
– DBMS: Database Management System
– SGBD não é um banco de dados, mas sim um complemento
– SGBD é um grupo de programas para interação com os dados

Sistema de Banco de Dados

Sistema
Banco de
Dados SGBD Sistema

Usuário

Introdução ao SQL

• SQL (Structured Query Language)


– Linguagem Estruturada de Consulta

• Formada pelo conjunto das linguagens:


– DDL (Data Definition Language): Linguagem de Definição de Dados
– DML (Data Manipulation Language): Linguagem de Manipulação de
Dados
– DQL (Data Query Language): Linguagem de Consulta de Dados
– DCL (Data Control Language): Linguagem de Controle de Dados
– DTL (Data Transaction Language): Linguagem de Transação de Dados

SQL

DDL DML DQL DCL DTL

3
softblue.com.br

DDL (Data Definition Language)

• Linguagem de Definição de Dados


• CREATE: Cria uma estrutura
• ALTER: Altera uma estrutura
• DROP: Exclui uma estrutura

SQL

DDL DML DQL DCL DTL

DML (Data Manipulation Language)

• Linguagem de Manipulação de Dados


• INSERT: Insere dados
• UPDATE: Altera dados
• DELETE: Exclui dados

SQL

DDL DML DQL DCL DTL

DQL (Data Query Language)

• Linguagem de Consulta de Dados


• SELECT: Retorna dados
• Ordenação de dados
• Agrupamento de dados
• Funções aritméticas
• Filtros de seleção

SQL

DDL DML DQL DCL DTL

4
softblue.com.br

DCL (Data Control Language)

• Linguagem de Controle de Dados


• GRANT: Habilita acesso a dados e
operações
• REVOKE: Revoga acesso a dados e
operações

SQL

DDL DML DQL DCL DTL

DTL (Data Transaction Language)

• Linguagem de Transação de Dados


• START TRANSACTION: Inicia a transação
• COMMIT: Concretiza a transação
• ROLLBACK: Anula a transação

SQL

DDL DML DQL DCL DTL

Principais bancos de dados

MySQL PostgreSQL Firebird Oracle SQL Server

SGBD Sim Sim Sim Sim Sim


ACID Sim Sim Sim Sim Sim
Licença Comercial Não Sim Sim Não Não
Oracle SQL Server
Licença Estudante Sim Sim Sim Express Express

5
softblue.com.br

SQL Completo
Normalização de Dados

Relacionamentos e chaves

• Relacionamentos
Ligações entre tabelas

• Chave Primária (Primary Key, PK)


Coluna com valores únicos

• Chave Composta
Composição de duas ou mais colunas para gerar uma combinação única

• Chave Estrangeira (Foreign Key, FK)


Coluna que armazena a chave primária de outra tabela

NOME CPF ESTADO COMPROU CÓDIGO PRODUTO PREÇO


Fernando 111.111.111-11 PR 1 1 TV 1000
Guilherme 222.222.222-22 SP 3 2 DVD Player 290
Mateus 333.333.333-33 RJ 1 3 Bluray Player 490

Tipos de relacionamentos (1:1)

• Relacionamento 1 para 1 (1:1)


Para cada registro da primeira tabela existe no máximo um correspondente
na segunda tabela, e vice-versa.

Tabela PESSOAS Tabela HABILITACOES_MOTORISTA


NOME CPF ESTADO CPF HABILITACAO
Fernando 111.111.111-11 PR 111.111.111-11 001001001
Guilherme 222.222.222-22 SP 333.333.333-33 021021021
Mateus 333.333.333-33 RJ

1
softblue.com.br

Tipos de relacionamentos (1:*)

• Relacionamento 1 para muitos (1:*)


Para cada registro da primeira tabela pode existir um ou mais
correspondentes na segunda tabela, e para cada registro na segunda
tabela existe apenas um registro correspondente na primeira tabela.

Tabela PESSOAS Tabela VEICULOS


NOME CPF ESTADO CPF VEICULO PLACA
Fernando 111.111.111-11 PR 111.111.111-11 Carro SB-0001
Guilherme 222.222.222-22 SP 222.222.222-22 Carro SB-0002
Mateus 333.333.333-33 RJ 222.222.222-22 Carro SB-0003
222.222.222-22 Moto SB-0004

Tipos de relacionamentos (*:*)

• Relacionamento muitos para muitos (*:*)


Para cada registro da primeira tabela pode existir um ou mais
correspondentes na segunda tabela, e vice-versa.

Tabela PESSOAS Tabela PROFISSOES


NOME CPF ESTADO PROFISSAO
Fernando 111.111.111-11 PR Programador
Guilherme 222.222.222-22 SP Designer
Mateus 333.333.333-33 RJ Administrador de Bancos de Dados
Gerente de Projetos

Boas práticas no uso de chaves

• Quanto menor, melhor


• Transparente para o usuário
Tabela PESSOAS Tabela VEICULOS
NOME CPF ESTADO CPF VEICULO PLACA
Fernando 111.111.111-11 PR 111.111.111-11 Carro SB-0001
Guilherme 222.222.222-22 SP 222.222.222-22 Carro SB-0002
Mateus 333.333.333-33 RJ 222.222.222-22 Carro SB-0003
222.222.222-22 Moto SB-0004

Tabela PESSOAS Tabela VEICULOS

ID NOME CPF ESTADO PESSOA_ID VEICULO PLACA

1 Fernando 111.111.111-11 PR 1 Carro SB-0001

2 Guilherme 222.222.222-22 SP 2 Carro SB-0002

3 Mateus 333.333.333-33 RJ 2 Carro SB-0003


2 Moto SB-0004

2
softblue.com.br

Diagrama de modelo de dados

• Um dos padrões de modelagem de dados


• Relacionamento 1:1
• Relacionamento 1:*
• Relacionamento *:*

Tabela 1 Tabela 2
Campo 1 Campo 1
Campo 2 Campo 2
Campo 3 Campo 3
Campo 4 Campo 4

Anomalias dos dados

• Tabelas “fazem tudo” geram anomalias


• Anomalia de inserção
– Impede a inclusão de registros devido à falta de dados

• Anomalia de exclusão
– Impede a exclusão de registros devido ao relacionamento com outra tabela

• Anomalia de alteração
– Impede a alteração de registros devido ao relacionamento com outra
tabela

Tabela SOCIOS
SOCIOS Tabela SOCIOS_E_PLANOS Tabela PLANOS
PLANOS
ID NOME PLANO_DE_TV
PLANO_DE_TV_ID
ID NOME PLANO_DE_TVID
PLANO_DE_TV
VALOR
PLANO_DE_TV
VALOR VALOR
1 Fernando Esporte
1 1 Total
Fernando Esporte Total 1
Esporte119
Total
Esporte Total
119 119
2 Guilherme Cinema
2 2 Total
Guilherme Cinema Total 2
Cinema149
Total
Cinema Total
149 149
3 Mateus Cinema
2 3 Total
Mateus Cinema Total 149

Normalização de dados

• Evitar anomalias
• Facilitar a manutenção
• Maximizar a performance
• Manter a integridade dos dados
• Normalização de dados
– Criada em 1970
– 5 Formas Normais (FNs)
– Na prática a normalização é feita por intuição
– Resulta em um número maior de tabelas no banco
– Mais tabelas podem aumentar a manutenção e diminuir a performance
– Deve ser utilizado com bom senso

3
softblue.com.br

Primeira Forma Normal (1FN)

• Cada linha de tabela deve representar um registro


• Cada célula de tabela deve conter um único valor

Tabela “faz tudo”


Tabela LOCACOES
CLIENTE TELEFONE LOCACOES CODIGO PAGAMENTO SALDO
Fernando 1111-1111 Alien – Ficção L1 Cartão Débito 10,00
A Caverna – Suspense
Guilherme 1212-1212 O Predador – Ficção L2 Cartão Crédito 5,00
Alien – Ficção
Fernando 1313-1313 Dick Tracy – Policial L3 Dinheiro 0,00

1FN
Tabela LOCACOES
CLIENTE TELEFONE LOCACOES CATEGORIA CODIGO PAGAMENTO SALDO
Fernando 1111-1111 Alien Ficção L1 Cartão Débito 10,00
Fernando 1111-1111 A Caverna Suspense L1 Cartão Débito 10,00
Guilherme 1212-1212 O Predador Ficção L2 Cartão Crédito 5,00
Guilherme 1212-1212 Alien Ficção L2 Cartão Crédito 5,00
Fernando 1313-1313 Dick Tracy Policial L3 Dinheiro 0,00

Segunda Forma Normal (2FN)

• Obrigatoriamente estar na 1FN


• Atributos não chave da tabela devem depender
de alguma das chaves da tabela
1FN Tabela LOCACOES
CLIENTE TELEFONE LOCACOES CATEGORIA CODIGO PAGAMENTO SALDO
Fernando 1111-1111 Alien Ficção L1 Cartão Débito 10,00
Fernando 1111-1111 A Caverna Suspense L1 Cartão Débito 10,00
Guilherme 1212-1212 O Predador Ficção L2 Cartão Crédito 5,00
Guilherme 1212-1212 Alien Ficção L2 Cartão Crédito 5,00
Fernando 1313-1313 Dick Tracy Policial L3 Dinheiro 0,00

2FN
Tabela DETALHES
CODIGO LOCACOES CATEGORIA
Tabela LOCACOES
L1 Alien Ficção
CODIGO PAGAMENTO SALDO CLIENTE TELEFONE
L1 A Caverna Suspense
L1 Cartão Débito 10,00 Fernando 1111-1111
L2 O Predador Ficção
L2 Cartão Crédito 5,00 Guilherme 1212-1212
L2 Alien Ficção
L3 Dinheiro 0,00 Fernando 1313-1313
L3 Dick Tracy Policial

Terceira Forma Normal (3FN)

• Obrigatoriamente estar na 2FN


• Atributos não chave da tabela depender
exclusivamente da chave primária da tabela
2FN Tabela DETALHES
Tabela LOCACOES CODIGO LOCACOES CATEGORIA
CODIGO PAGAMENTO SALDO CLIENTE TELEFONE L1 Alien Ficção
L1 Cartão Débito 10,00 Fernando 1111-1111 L1 A Caverna Suspense
L2 Cartão Crédito 5,00 Guilherme 1212-1212 L2 O Predador Ficção
L3 Dinheiro 0,00 Fernando 1313-1313 L2 Alien Ficção
L3 Dick Tracy Policial

3FN
Tabela DETALHES
Tabela CLIENTES Tabela LOCACOES CODIGO LOCACOES CATEGORIA
CLIENTE TELEFONE SALDO CODIGO PAGAMENTO CLIENTE TELEFONE L1 Alien Ficção
Fernando 1111-1111 10,00 L1 Cartão Débito Fernando 1111-1111 L1 A Caverna Suspense
Guilherme 1212-1212 5,00 L2 Cartão Crédito Guilherme 1212-1212 L2 O Predador Ficção
Fernando 1313-1313 0,00 L3 Dinheiro Fernando 1313-1313 L2 Alien Ficção
L3 Dick Tracy Policial

4
softblue.com.br

4FN e 5FN

• Separam em novas tabelas valores que ainda


estejam redundantes em uma mesma coluna

3FN Tabela DETALHES


Tabela CLIENTES Tabela LOCACOES CODIGO LOCACOES CATEGORIA
CLIENTE TELEFONE SALDO CODIGO PAGAMENTO CLIENTE TELEFONE L1 Alien Ficção
Fernando 1111-1111 10,00 L1 Cartão Débito Fernando 1111-1111 L1 A Caverna Suspense
Guilherme 1212-1212 5,00 L2 Cartão Crédito Guilherme 1212-1212 L2 O Predador Ficção
Fernando 1313-1313 0,00 L3 Dinheiro Fernando 1313-1313 L2 Alien Ficção
L3 Dick Tracy Policial

4FN e 5FN
Tabela CLIENTES Tabela LOCACOES Tabela FILMES Tabela DETALHES
CODIGO CLIENTE TELEFONE SALDO CODIGO CODIGO_ PAGAMENTO CODIGO FILME CATEGORIA CODIGO CODIGO_FILME
CLIENTE F1 Alien Ficção L1 F1
C1 Fernando 1111-1111 10,00
L1 C1 Cartão Débito F2 A Caverna Suspense L1 F2
C2 Guilherme 1212-1212 5,00
L2 C2 Cartão Crédito F3 O Predador Ficção L2 F3
C3 Fernando 1313-1313 0,00
L3 C3 Dinheiro F4 Dick Tracy Policial L2 F1
L3 F4

5
softblue.com.br

SQL Completo
Criando um Banco de Dados

SQL ANSI, ISO e outros

• SQL (Structured Query Language)


Linguagem declarativa, detalha a forma do resultado
Criado no início dos anos 70, em laboratórios da IBM
Novos dialetos surgiram, derivando e evoluindo o SQL

• Necessidade de padronização
American National Standards Institute (ANSI) em 1986
International Organization for Standardization (ISO) em 1987
Revisto pela primeira vez em 1992 originando o padrão SQL-92
Outras revisões:
• SQL:1999 incorporou características de expressões regulares, queries
recursivas e triggers
• SQL:2003 incorporou características de XML, sequências
• SQL:2008, SQL:2011
Bancos de dados criam e evoluem suas próprias derivações do SQL
Curso aborda SQL padrão, com menções a outras derivações

Tipos de dados

• Boleano e Numéricos
Name MySQL Postgre SQL Server Oracle Firebird Intervalo (MySQL) Bytes
BOOLEAN TINYINT SIM TINYINT ENUM SMALLINT 0 ou 1 (FALSE ou TRUE) 1 bit
-128 à 127
TINYINT SIM SMALLINT SIM NUMBER SMALLINT 1
0 à 255 se UNSIGNED
-32,768 à 32,767
SMALLINT SIM SIM SIM NUMBER SIM 2
0 à 65,535 se UNSIGNED
-2,147,483,648 à 2,147,483,647
INT SIM SIM SIM NUMBER SIM 4
0 à 4,294,967,295 se UNSIGNED
-9,223,372,036,854,775,808 à +9,223,372,036,854,775,807
BIGINT SIM SIM SIM NUMBER INT64 8
0 à 18,446,744,073,709,551,615 se UNSIGNED
-3.402823466E+38 à -1.17544351E-38
FLOAT SIM REAL SIM FLOAT SIM 4
1.175494351E-38 à 3.402823466E+38 se UNSIGNED
DOUBLE DOUBLE -1.7976931348623157E+308 à -2.2250738585072014E-308,
DOUBLE SIM FLOAT SIM 8
PRECISION PRECISION 2.2250738585072014E-308 à 1.7976931348623157E+308 se UNSIGNED
NUMERIC SIM SIM DECIMAL NUMBER SIM Mesmo intervalo de DOUBLE X+2

1
softblue.com.br

Tipos de dados

• String
Name MySQL Postgre SQL Server Oracle Firebird Bytes
CHAR SIM SIM SIM SIM SIM X
VARCHAR SIM SIM SIM SIM SIM X+1

• Date e hora
Name MySQL Postgre SQL Server Oracle Firebird Intervalo (MySQL) Bytes
DATE SIM SIM SIM SIM TIMESTAMP "1000-01-01" – "9999-12-31" (ano, mês, dia) 3
TIME SIM SIM SIM TIMESTAMP TIMESTAMP "-838:59:59" – "838:59:59" (horas, minutos, segundos) 3
DATETIME SIM TIMESTAMP SIM TIMESTAMP TIMESTAMP "1000-01-01 00:00:00" - "9999-12-31 23:59:59" 8
TIMESTAMP SIM SIM SIM SIM SIM 19700101000000 – 2037+ 4

• Listas customizadas
Name MySQL Postgre SQL Server Oracle Firebird
ENUM SIM SIM NÃO TEM SIM NÃO TEM

Outros tipos de dados

• BLOB
Permite o armazenamento de informações binárias, arquivos e imagens

• TEXT
Permite o armazenamento de grandes informações de strings

• Redes
Permite o armazenamento de endereços IP, MAC-ADDRESS e outros

• Monetários
Permite o armazenamento de valores monetários com formatação

• Geométricos
Permite o armazenamento de informações de formas geométricas

Atributos

• NULL / Not NULL


Permite ou não valores nulos

• Unsigned / Signed
Permite ou não números negativos

• Auto-increment
Sequências, contadores

• Zerofill
Preenche o valor numérico completando com zeros a esquerda

2
softblue.com.br

Boas práticas de armazenamento

• Espaço em disco
Quanto menor o tipo de dado, menos espaço ele ocupará

• Processamento e busca
Quanto menor o tipo de dado, mais rápido é o processamento

• Maus usos dos tipos de dados


Armazenar dados numéricos em colunas string
Armazenar dados numéricos em campos maiores que o necessário
Criar campos de string maiores do que o necessário

• Bom usos dos tipos de dados


Escolher o menor tipo de dados possível para armazenar suas informações
Pergunta: Qual o menor e maior valor que o campo poderá receber?

DDL (Data Definition Language)

• Linguagem de Definição de Dados


– CREATE: Cria uma estrutura
– ALTER: Altera uma estrutura
– DROP: Exclui uma estrutura
• Manuais dos bancos de dados
– Links dos manuais dos principais bancos de
dados estão disponíveis na seção Links do site
da Softblue

Criando um banco de dados

• Como funciona

Servidor Servidor

Bancos RH Estoque

Tabelas Pessoas Cargos Produtos

3
softblue.com.br

Criando um banco de dados

• CREATE DATABASE Nome


Nomes sem espaços e sem caracteres especiais
Os conjuntos mais utilizados são Latin1 e UTF-8
• ALTER DATABASE Nome Propriedade
• DROP DATABASE Nome
Exclusão é definitiva e irreversível

Criando uma tabela

• Como funciona

Tabela Campos Atributos

Not Null
CPF
Primary
Pessoas Key

NOME Not Null

Criando uma tabela

• CREATE TABLE Nome (Campos)


• Sintaxe de descrição de campo:
Nome TipoDeDado Atributos
• Atributos
Null, Zerofill, Unsigned, Auto-increment, Chave
• ALTER TABLE Nome Propriedade
• DROP TABLE Nome
Exclusão é definitiva e irreversível

4
softblue.com.br

Criando um índice

• O que são índices


• Como funciona
Índice CPF
CPF
111.111.111-11
222.222.222-22
Tabela PESSOAS 333.333.333-33
NOME CPF ESTADO
Mario 333.333.333-33 PR
Gustavo 111.111.111-11 SP
Índice NOME
Fabio 222.222.222-22 RJ
NOME
Fabio
Gustavo
Mario

Criando um índice

• CREATE INDEX Nome ON TabelaEColuna


• ALTER INDEX Nome Propriedade
• DROP INDEX Nome

Criando uma sequência

• O que são sequências


• CREATE SEQUENCE Nome
• ALTER SEQUENCE Nome Propriedade
• DROP SEQUENCE Nome
Exclusão é definitiva e irreversível

5
softblue.com.br

Aulas práticas e manuais on-line

Assista agora as aulas práticas, que


apresentam o uso dos comandos
abordados nesta aula teórica.

Manuais dos principais bancos de


dados estão disponíveis na seção
Links do curso de SQL.

Clique aqui para visualizar as aulas práticas disponíveis

6
softblue.com.br

SQL Completo
Manipulando Dados

DML e DQL

• Linguagem de Manipulação de Dados


– INSERT: Insere dados
– UPDATE: Altera dados
– DELETE: Exclui dados
• Linguagem de Consulta de Dados
– SELECT: Retorna dados
– Ordenação de dados
– Agrupamento de dados
– Filtros de seleção
– Funções aritméticas

Gerenciando dados

• INSERT INTO Tabela VALUES (Valores)


INSERT INTO PESSOAS VALUES (‘Andre’, ‘111.111.111-11’)
INSERT INTO PESSOAS (NOME, CPF) VALUES (‘Andre’, ‘111.111.111-11’)

• SELECT Campos FROM Tabela


SELECT * FROM PESSOAS
SELECT NOME FROM PESSOAS

• UPDATE Tabela SET Campo = Valor


UPDATE PESSOAS SET NOME = ‘Andre Milani’

• DELETE FROM Tabela


DELETE FROM PESSOAS

1
softblue.com.br

Filtros de seleção

• Registros selecionados (WHERE)


• Operadores relacionais
– Igual (=), Diferente (!=)
– Maior (>), Maior ou igual (>=)
– Menor (<), Menor ou igual (<=)
– Nulo (IS NULL), ou não-nulo (IS NOT NULL)
– Entre intervalo (BETWEEN)
– Valor parcial (LIKE)

• Operadores lógicos
– AND
– OR
– NOT

Consultando dados com filtros

• SELECT Campos FROM Tabela WHERE Condição


SELECT * FROM PESSOAS WHERE CPF = ‘111.111.111-11’
SELECT NOME FROM PESSOAS WHERE IDADE > 20

• UPDATE Tabela SET Campo = Valor WHERE Condição


UPDATE PESSOAS SET NOME = ‘Fabio’ WHERE CPF = ‘222.222.222-22’
UPDATE PESSOAS SET IDADE = 25 WHERE NOME = ‘Mario’

• DELETE FROM Tabela WHERE Condição


DELETE FROM PESSOAS WHERE CPF = ‘222.222.222-22’
DELETE FROM PESSOAS WHERE NOME = ‘Mario’

Atributos especiais

• Apelido de tabela
SELECT Campos FROM Tabela Apelido ...
SELECT TABELA_UM.NOME FROM PESSOAS TABELA_UM

• Apelido de campos (AS)


SELECT Campo AS Apelido FROM ...
SELECT NOME AS PRIMEIRO_NOME FROM PESSOAS

• Unindo seleções (UNION [ALL])


SELECT ... UNION SELECT ...
SELECT * FROM PESSOAS UNION SELECT * FROM CARGOS

2
softblue.com.br

Aulas práticas e manuais on-line

Assista agora as aulas práticas, que


apresentam o uso dos comandos
abordados nesta aula teórica.

Manuais dos principais bancos de


dados estão disponíveis na seção
Links do curso de SQL.

Clique aqui para visualizar as aulas práticas disponíveis

3
softblue.com.br

SQL Completo
Relacionamentos e Visões

Relacionamentos no SQL

• Informações relacionadas entre si


• Em geral entre diferentes tabelas
• Geralmente possuem campos em comum
• Parâmetro JOIN e suas variações
• SELECT ... FROM T1 JOIN T2 ON T1.FK = T2.PK
• SELECT ... FROM T1 JOIN T2 USING Chave
• Compatibilidade com bancos de dados

Inner join

• Join padrão
• Produto cartesiano entre as tabelas
• Combina todas as linhas da primeira tabela
com todas as linhas da segunda, que
satisfaçam as condições das chaves

1
softblue.com.br

Inner join

• SELECT * FROM PESSOAS JOIN VEICULOS


ON PESSOAS.CPF = VEICULOS.CPF
Tabela PESSOAS Tabela VEICULOS
NOME CPF ESTADO CPF VEICULO PLACA
Fernando 111.111.111-11 PR 111.111.111-11 Carro SB-0001
Guilherme 222.222.222-22 SP NULL Carro SB-0002

Tabela RESULTADO
NOME CPF ESTADO CPF VEICULO PLACA
Fernando 111.111.111-11 PR 111.111.111-11 Carro SB-0001

Equi join

• Similar ao Inner join


• Chaves de mesmo nome entre as tabelas
• SELECT * FROM PESSOAS JOIN VEICULOS
USING (CPF)
Tabela PESSOAS Tabela VEICULOS

NOME CPF ESTADO CPF VEICULO PLACA

Fernando 111.111.111-11 PR 111.111.111-11 Carro SB-0001

Guilherme 222.222.222-22 SP NULL Carro SB-0002

Tabela RESULTADO
NOME CPF ESTADO VEICULO PLACA
Fernando 111.111.111-11 PR Carro SB-0001

Non equi join

• Relacionamento sem um campo em comum


• SELECT P.NOME, P.SALARIO, S.FAIXA FROM
PESSOAS P INNER JOIN SALARIOS S ON
P.SALARIO BETWEEN S.INICIO AND S.FIM
Tabela PESSOAS Tabela SALARIOS
NOME CPF ESTADO SALARIO FAIXA INICIO FIM
Fernando 111.111.111-11 PR 1500 Analista Júnior 1000 2000
Guilherme 222.222.222-22 SP 2500 Analista Pleno 2001 3000

Tabela RESULTADO
NOME SALARIO FAIXA
Fernando 1500 Analista Júnior
Guilherme 2500 Analista Pleno

2
softblue.com.br

Outer join, Left join, Left outer join

• Linhas que não satisfazem a condição de união


• Left: Linhas da primeira tabela cujo campo de
condição não satisfaçam a união de tabelas
• SELECT * FROM PESSOAS LEFT JOIN VEICULOS ON
PESSOAS.CPF = VEICULOS.CPF
Tabela PESSOAS Tabela VEICULOS
NOME CPF ESTADO CPF VEICULO PLACA
Fernando 111.111.111-11 PR 111.111.111-11 Carro SB-0001
Guilherme 222.222.222-22 SP NULL Carro SB-0002

Tabela RESULTADO
NOME CPF ESTADO CPF VEICULO PLACA
Fernando 111.111.111-11 PR 111.111.111-11 Carro SB-0001
Guilherme 222.222.222-22 SP NULL NULL NULL

Right join, Right outer join

• Similar ao Left join


• Right: Linhas da segunda tabela cujo campo de
condição não satisfaçam a união de tabelas
• SELECT * FROM PESSOAS RIGHT JOIN VEICULOS
ON PESSOAS.CPF = VEICULOS.CPF
Tabela PESSOAS Tabela VEICULOS
NOME CPF ESTADO CPF VEICULO PLACA
Fernando 111.111.111-11 PR 111.111.111-11 Carro SB-0001
Guilherme 222.222.222-22 SP NULL Carro SB-0002

Tabela RESULTADO
NOME CPF ESTADO CPF VEICULO PLACA
Fernando 111.111.111-11 PR 111.111.111-11 Carro SB-0001
NULL NULL NULL NULL Carro SB-0002

Full outer join

• Combinação de Left join e Right join


• Linhas da primeira e segunda tabela cujos
campos de condição não satisfaçam a união
de tabelas

3
softblue.com.br

Full outer join

• SELECT * FROM PESSOAS FULL JOIN


VEICULOS ON PESSOAS.CPF =
VEICULOS.CPF
Tabela PESSOAS Tabela VEICULOS
NOME CPF ESTADO CPF VEICULO PLACA
Fernando 111.111.111-11 PR 111.111.111-11 Carro SB-0001
Guilherme 222.222.222-22 SP NULL Carro SB-0002

Tabela RESULTADO
NOME CPF ESTADO CPF VEICULO PLACA
Fernando 111.111.111-11 PR 111.111.111-11 Carro SB-0001
Guilherme 222.222.222-22 SP NULL NULL NULL
NULL NULL NULL NULL Carro SB-0002

Self join

• União da tabela com ela mesma


• SELECT A.NOME, B.NOME AS
INDICADO_POR FROM PESSOAS A JOIN
PESSOAS B ON A.INDICADO = B.CPF
Tabela PESSOAS
NOME CPF ESTADO INDICADO
Fernando 111.111.111-11 PR NULL
Guilherme 222.222.222-22 SP 111.111.111-11

Tabela RESULTADO
NOME INDICADO_POR
Guilherme Fernando

Visões

• Relação que não faz parte do modelo lógico


• Acessível ao usuário como uma relação
virtual
• Otimização de espaço em disco
• Centralização de código
• Facilidade de manutenção de expressões
SQL
Tabela PESSOAS
Visão A NOME CPF ESTADO SALARIO
Fernando 111.111.111-11 PR 1500 Visão B
Guilherme 222.222.222-22 SP 2500
Fábio 333.333.333-33 SP 2700

4
softblue.com.br

Criando uma visão

• CREATE VIEW Nome AS ExpressãoSQL


• ALTER VIEW Nome Propriedade
Exclusão e nova criação (substituição)
• DROP VIEW Nome
Apenas a estrutura da visão é removido
Os dados permanecem intactos em suas respectivas
tabelas

Aulas práticas e manuais on-line

Assista agora as aulas práticas, que


apresentam o uso dos comandos
abordados nesta aula teórica.

Manuais dos principais bancos de


dados estão disponíveis na seção
Links do curso de SQL.

Clique aqui para visualizar as aulas práticas disponíveis

5
softblue.com.br

SQL Completo
Funções Especiais e Subqueries

Funções de agregação

• Funções de agregação
– COUNT: Contagem de registros de uma consulta
– SUM: Soma de valores
– AVG: Média de valores
– MAX: Valor máximo retornado pela consulta
– MIN: Valor mínimo retornado pela consulta

COUNT

• Contagem de registros de uma consulta


SELECT COUNT(*) FROM FUNCIONARIOS
6

Tabela FUNCIONARIOS
NOME SALARIO DEPARTAMENTO
Fernando 1250 Recursos Humanos
Guilherme 1550 Jurídico
Mário 1400 Recursos Humanos
Paulo 1230 TI
Haroldo 1330 Marketing
Ricardo 1850 TI

1
softblue.com.br

SUM

• Soma de valores
SELECT SUM(SALARIO) FROM FUNCIONARIOS
8610

Tabela FUNCIONARIOS
NOME SALARIO DEPARTAMENTO
Fernando 1250 Recursos Humanos
Guilherme 1550 Jurídico
Mário 1400 Recursos Humanos
Paulo 1230 TI
Haroldo 1330 Marketing
Ricardo 1850 TI

AVG

• Média de valores
SELECT AVG(SALARIO) FROM FUNCIONARIOS
1435

Tabela FUNCIONARIOS
NOME SALARIO DEPARTAMENTO
Fernando 1250 Recursos Humanos
Guilherme 1550 Jurídico
Mário 1400 Recursos Humanos
Paulo 1230 TI
Haroldo 1330 Marketing
Ricardo 1850 TI

MAX

• Valor máximo da consulta


SELECT MAX(SALARIO) FROM FUNCIONARIOS
1850

Tabela FUNCIONARIOS
NOME SALARIO DEPARTAMENTO
Fernando 1250 Recursos Humanos
Guilherme 1550 Jurídico
Mário 1400 Recursos Humanos
Paulo 1230 TI
Haroldo 1330 Marketing
Ricardo 1850 TI

2
softblue.com.br

MIN

• Valor mínimo da consulta


SELECT MIN(SALARIO) FROM FUNCIONARIOS
1230

Tabela FUNCIONARIOS
NOME SALARIO DEPARTAMENTO
Fernando 1250 Recursos Humanos
Guilherme 1550 Jurídico
Mário 1400 Recursos Humanos
Paulo 1230 TI
Haroldo 1330 Marketing
Ricardo 1850 TI

Integrando com WHERE

• SELECT Comando FROM Tabela WHERE


Condição
• SELECT SUM(SALARIO) FROM FUNCIONARIOS
WHERE DEPARTAMENTO = ‘Recursos
Humanos’
2650 Tabela FUNCIONARIOS
NOME SALARIO DEPARTAMENTO
Fernando 1250 Recursos Humanos
Guilherme 1550 Jurídico
Mário 1400 Recursos Humanos
Paulo 1230 TI
Haroldo 1330 Marketing
Ricardo 1850 TI

Funções de paginação

• Funções de paginação
– DISTINCT: Seleciona os valores únicos, sem repetição
– ORDER BY: Ordena o resultado baseado nas colunas informadas
– LIMIT: Limita o número de resultados retornados
– OFFSET: Indica quantos registros devem ser avançados

• Combinações são permitidas

3
softblue.com.br

DISTINCT

• Seleciona os valores únicos, sem repetição


SELECT DISTINCT(DEPARTAMENTO) FROM FUNCIONARIOS

Tabela FUNCIONARIOS Resultado


NOME SALARIO DEPARTAMENTO DEPARTAMENTO
Fernando 1250 Recursos Humanos Recursos Humanos
Guilherme 1550 Jurídico Jurídico
Mário 1400 Recursos Humanos TI
Paulo 1230 TI Marketing
Haroldo 1330 Marketing
Ricardo 1850 TI

ORDER BY

• Ordena o resultado (ASC, DESC)


SELECT * FROM FUNCIONARIOS ORDER BY SALARIO

Tabela FUNCIONARIOS Resultado


NOME SALARIO DEPARTAMENTO NOME SALARIO DEPARTAMENTO
Fernando 1250 Recursos Humanos Paulo 1230 TI
Guilherme 1550 Jurídico Fernando 1250 Recursos Humanos
Mário 1400 Recursos Humanos Haroldo 1330 Marketing
Paulo 1230 TI Mário 1400 Recursos Humanos
Haroldo 1330 Marketing Guilherme 1550 Jurídico
Ricardo 1850 TI Ricardo 1850 TI

LIMIT

• Limita o número de registros retornados


SELECT * FROM FUNCIONARIOS LIMIT 2

Tabela FUNCIONARIOS Resultado


NOME SALARIO DEPARTAMENTO NOME SALARIO DEPARTAMENTO
Fernando 1250 Recursos Humanos Fernando 1250 Recursos Humanos
Guilherme 1550 Jurídico Guilherme 1550 Jurídico
Mário 1400 Recursos Humanos
Paulo 1230 TI
Haroldo 1330 Marketing
Ricardo 1850 TI

4
softblue.com.br

OFFSET

• Avança (pula) registros do resultado


SELECT * FROM FUNCIONARIOS OFFSET 2

Tabela FUNCIONARIOS Resultado


NOME SALARIO DEPARTAMENTO NOME SALARIO DEPARTAMENTO
Fernando 1250 Recursos Humanos Mário 1400 Recursos Humanos
Guilherme 1550 Jurídico Paulo 1230 TI
Mário 1400 Recursos Humanos Haroldo 1330 Marketing
Paulo 1230 TI Ricardo 1850 TI
Haroldo 1330 Marketing
Ricardo 1850 TI

Funções de agrupamento

• Funções de agrupamento
– GROUP BY: Agrupamento de registros por categoria
– HAVING: Seleção de agrupamento

GROUP BY

• Agrupamento de registros para operações


SELECT DEPARTAMENTO, AVG(SALARIO) FROM
FUNCIONARIOS GROUP BY DEPARTAMENTO

Tabela FUNCIONARIOS Resultado


NOME SALARIO DEPARTAMENTO NOME SALARIO
Fernando 1250 Recursos Humanos Jurídico 1550
Guilherme 1550 Jurídico Marketing 1330
Mário 1400 Recursos Humanos Recursos Humanos 1325
Paulo 1230 TI TI 1540
Haroldo 1330 Marketing
Ricardo 1850 TI

5
softblue.com.br

HAVING

• Filtro de seleção para agrupamento


SELECT DEPARTAMENTO, AVG(SALARIO) FROM
FUNCIONARIOS GROUP BY DEPARTAMENTO HAVING
AVG(SALARIO) > 1500

Tabela FUNCIONARIOS Resultado


NOME SALARIO DEPARTAMENTO NOME SALARIO
Fernando 1250 Recursos Humanos Jurídico 1550
Guilherme 1550 Jurídico TI 1540
Mário 1400 Recursos Humanos
Paulo 1230 TI
Haroldo 1330 Marketing
Ricardo 1850 TI

Subqueries

• Realização de consultas com filtro de


seleção baseado em uma lista ou outra
seleção
• IN / NOT IN
SELECT NOME FROM FUNCIONARIOS WHERE
DEPARTAMENTO IN ('Marketing', 'TI')
Tabela FUNCIONARIOS Resultado
NOME SALARIO DEPARTAMENTO NOME
Fernando 1250 Recursos Humanos Paulo
Guilherme 1550 Jurídico Haroldo
Mário 1400 Recursos Humanos Ricardo
Paulo 1230 TI
Haroldo 1330 Marketing
Ricardo 1850 TI

Subqueries

SELECT NOME FROM FUNCIONARIOS WHERE


DEPARTAMENTO IN (SELECT DEPARTAMENTO FROM
FUNCIONARIOS GROUP BY DEPARTAMENTO HAVING
AVG(SALARIO) > 1500)

Tabela FUNCIONARIOS Resultado Query In Resultado Final


NOME SALARIO DEPARTAMENTO NOME SALARIO NOME
Fernando 1250 Recursos Humanos Jurídico 1550 Guilherme
Guilherme 1550 Jurídico TI 1540 Paulo
Mário 1400 Recursos Humanos Ricardo
Paulo 1230 TI
Haroldo 1330 Marketing
Ricardo 1850 TI

6
softblue.com.br

Aulas práticas e manuais on-line

Assista agora as aulas práticas, que


apresentam o uso dos comandos
abordados nesta aula teórica.

Manuais dos principais bancos de


dados estão disponíveis na seção
Links do curso de SQL.

Clique aqui para visualizar as aulas práticas disponíveis

7
softblue.com.br

SQL Completo
Controle de Acesso

DCL - Controle de acesso

• Forma de garantir que somente pessoas


autorizadas possam realizar ações com os
dados
• Níveis de acesso
– Banco de dados
– Tabelas
– Colunas
– Registros

• Níveis de ações
– Gerenciar estruturas
– Gerenciar dados
– Ler dados

Como funciona

Possui
acesso ao
servidor? Possui
acesso ao
banco? Possui
acesso a
tabela?
Possui
acesso a
coluna? Possui
acesso ao
registro? Possui
acesso a
operação?

Tentativa de acesso Dado


Usuário

1
softblue.com.br

Data Control Language

• Linguagem de Controle de Dados


– CREATE USER Nome: Cria um usuário
– DROP USER Nome: Exclui um usuário
– GRANT: Habilita acessos
– REVOKE: Revoga acessos

Gerenciando acessos

• Habilitando acesso
GRANT Ação ON Estrutura TO Usuário
• Revogando acesso
REVOKE Ação ON Estrutura FROM Usuário
• Ações
ALL, SELECT, INSERT, UPDATE, DELETE

• Estruturas
TABLE, VIEW, SEQUENCE

Aulas práticas e manuais on-line

Assista agora as aulas práticas, que


apresentam o uso dos comandos
abordados nesta aula teórica.

Manuais dos principais bancos de


dados estão disponíveis na seção
Links do curso de SQL.

Clique aqui para visualizar as aulas práticas disponíveis

2
softblue.com.br

SQL Completo
Transações (ACID)

Transações

• Conjunto de operações
• ACID
– Atomicidade
– Consistência
– Isolamento
– Durabilidade

Atomicidade Consistência Isolamento Durabilidade

Exemplo

• Transferência bancária de cliente A para B


Verifica se há saldo suficiente na conta do cliente A
Retira da conta do cliente A o valor da transferência
Deposita na conta do cliente B o valor da transferência

R$ 500

Conta Cliente A Conta Cliente B

R$ 100,00
600,00 R$ 620,00
120,00

1
softblue.com.br

Exemplo

Transação 1: Transferir 500 Transação 2: Transferir 100


Verifica se há saldo suficiente Verifica se há saldo suficiente
na conta do cliente A: 600 na conta do cliente A: 600

Retira da conta do cliente A Retira da conta do cliente A


o valor da transferência o valor da transferência

Deposita na conta do cliente B Deposita na conta do cliente C


o valor da transferência
o valor da transferência

R$ 500 R$ 100

Conta Cliente
R$
R$100,00
600,00
500

Data Transaction Language

• Linguagem de Transação de Dados


– START TRANSACTION: Inicia a transação
– COMMIT: Concretiza a transação
– ROLLBACK: Anula a transação

Aulas práticas e manuais on-line

Assista agora as aulas práticas, que


apresentam o uso dos comandos
abordados nesta aula teórica.

Manuais dos principais bancos de


dados estão disponíveis na seção
Links do curso de SQL.

Clique aqui para visualizar as aulas práticas disponíveis

2
softblue.com.br

SQL Completo
Stored Procedures e Triggers

Stored Procedures

• Blocos de código SQL armazenados no


banco
• Vantagens
– Centralização
– Segurança
– Performance / velocidade
– Suporte a transações

Centralização Segurança Performance Transações

Exemplo de Stored Procedure

• Limpeza de registros vencidos


Verifica em uma tabela de pedidos quais foram abertos a mais de uma
semana e ainda não foram confirmados, excluindo-os do sistema

Loja 1 BANCO DE DADOS


Sistema Web
SQL Tabelas

Stored Procedures
Loja 2
SQL
Sistema Desktop
SQL

1
softblue.com.br

Gerenciando Stored Procedures

• Criando uma Stored Procedure:

CREATE PROCEDURE Nome

• Invocando uma Stored Procedure:

CALL Nome
EXECUTE Nome

• Excluindo uma Stored Procedure:

DROP PROCEDURE Nome

Triggers (Gatilhos)

• Eventos que disparam códigos SQL


• Vantagens
– As mesmas das Stored Procedures
– Execução de código SQL baseado em eventos

• Tipos
– BEFORE INSERT
– BEFORE UPDATE
– BEFORE DELETE
– AFTER INSERT
– AFTER UPDATE
– AFTER DELETE
– TEMPORAIS

Exemplo de Triggers

• Limpeza de registros vencidos


O mesmo exemplo apresentado para Stored Procedures, agora com
Início automático baseado em algum evento de trigger

Loja 1 BANCO DE DADOS


Sistema Web
Tabelas

Triggers Stored Procedures


Loja 2
Sistema Desktop

2
softblue.com.br

Gerenciando Triggers

• Criando um Trigger:

CREATE TRIGGER Nome Tipo ON tabela

• Excluindo uma Trigger:

DROP TRIGGER Nome

Agradecimentos

Você também pode gostar