Você está na página 1de 30

Gaga’s Codex - SQL

Gabriel Cardoso
28 de janeiro de 2022
Gabriel Cardoso Gaga’s Codex - SQL I

Resumo
O objetivo deste arquivo é registrar comandos, códigos e informações relevantes relacionadas a SQL e também ao uso
profissional de bancos de dados.

Gabriel Cardoso Gaga’s Codex - SQL Página I


Sumário

R esumo I

1 INTRODUÇÃO A BANCO DE DADOS 1


1.1 Dado e Informação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Banco de Dados Relacional x Não Relacional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

2 MODELAGEM DE DADOS 1
2.1 Diagramas UML - Unified Modeling Language (Linguagem de Modelagem Unificada . . . . . . . . . . . . . . 1
2.1.1 Diagrama de classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
2.1.2 Diagrama de entidade de relacionamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
2.2 Modelo Lógico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2.3 Conceitos essenciais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2.3.1 Endtidade (Tabela) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2.3.2 Atributo (Campos) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2.3.3 Relações . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2.3.4 Tipos de Relacionamentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2.3.4.1 Relacionamento Binário Um-para-Um (1:1) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.3.4.2 Relacionamento Binário Um-para-Muitos (1:n) . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.3.4.3 Relacionamento Binário Muitos-para-Muitos (n:m) . . . . . . . . . . . . . . . . . . . . . . . . 4
2.3.5 Outros Conceitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.3.5.1 Cardinalidade (Mı́nima) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.3.5.2 Formas de Representação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.4 Normalização de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.4.1 Primeira Forma Normal - 1FN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.4.2 Segunda Forma Normal - 2FN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.4.3 Terceira Forma Normal - 3FN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.4.4 Outras Formas Normais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

3 INSTALAÇÃO E CONFIGURAÇÃO DO MySQL WORKBENCH 6

4 MER - MODELO ENTIDADE RELACIONAMENTO 6

5 LINGUAGEM SQL 7
5.1 DQL - Data Query Language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
5.2 DML - Data Manipulation Language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
5.3 DDL - Data Definition Language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
5.4 DCL - Data Control Language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
5.5 DTL - Data Transaction Language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

6 FUNÇÕES IMPORTANTES EM SQL 9


6.1 Consultas em Múltiplas Tabelas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
6.2 Funções de Junção de Tabelas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
6.2.1 Junção de produto cartesiano . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
6.2.2 Junção Interna (Inner Join) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
6.2.3 Junção Externa (Outer Join) Left Outer Join . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
6.2.4 Junção Externa (Outer Join) Right Outer Join . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
6.2.5 Junção Externa (Outer Join) Full Outer Join . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
6.2.6 Junção Cruzada (Cross Join) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
6.2.7 Auto Junção (Self Join) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
6.2.8 Junção Baseada em Comparador (Equi−Join) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
6.2.9 Junção Natutal (Natural Join) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
6.2.10 Função Externa (Outer Join) Full Outer Join . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
6.2.11 Junção Cruzada (Cross Join) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
6.3 Funções de Agregação (Numéricas) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
6.4 Agrupamento e Ordenação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
6.4.1 GROUP BY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
6.4.2 ORDER BY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
6.5 Funções de Data e Hora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
6.6 Sub Consultas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
6.7 Funções Avançadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
6.8 Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
6.8.1 Bitwise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
6.8.2 Comparação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
6.8.3 Compostos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
6.8.4 Lógicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
6.8.5 Aritméticos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
6.9 Tipos de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
6.9.1 String . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
6.9.2 Numéricos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
6.9.3 Data e Hora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
6.9.4 Variáveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

7 EXEMPLOS DE SENTENÇAS EM SQL 18

8 SQLITE 21
8.1 Instalação do SQLite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
8.2 Validação da Instalação do SQLite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
8.3 Instalação DB Browser SQLite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
8.4 Validação da Instalação do DB Browser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

9 SQLITE COM PYTHON 22


Lista de Figuras
1 Grau de Relacionamento Unário . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2 Grau de Relacionamento Binário . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
3 Grau de Relacionamento Ternário . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
4 Relacionamento Binário Um-para-Um . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
5 Relacionamento Binário Um-para-Muitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
6 Relacionamento Binário Muitos-para-Muitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
7 Cardinalidade (Mı́nima) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
8 Formas de Representação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
9 Formas de Representação - Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
10 Subdivisões SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
11 DML - Data Manipulation Language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
12 DDL - Data Definition Language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
13 DCL - Data Control Language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
14 DTL - Data Transaction Language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Lista de Tabelas
1 Funções Numéricas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2 Funções Data e Hora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3 Funções Avançadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
4 Operadores Bitwise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
5 Operadores Comparativos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
6 Operadores Compostos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
7 Operadores Lógicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
8 Operadores Aritméticos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
9 Tipos de dados - Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
10 Tipos de dados - Numéricos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
11 Tipos de dados - Data e Hora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
12 Tipos de dados - Variáveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
13 Exemplos de sentenças SQL Parte 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
14 Exemplos de sentenças SQL Parte 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
15 Exemplos de sentenças SQL Parte 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Gabriel Cardoso Gaga’s Codex - SQL 1

1 INTRODUÇÃO A BANCO DE DADOS


1.1 Dado e Informação
Dado: Elemento bruto geralmente proveniente de uma entrada do usuário ou de outros sistemas.

Informação: Elemento processado construı́do de dados.

1.2 Banco de Dados Relacional x Não Relacional

Relacional:

ˆ São bancos SQL;


ˆ Pontos Fortes: Oferecem validação, Verificação e garantia de integridade de dados.
ˆ Pontos Fracos: Dificuldade em escalabilidade e adapatar, dificuldade de particionar dados.
ˆ Principais bancos de dados relacionais: Oracle, SQL Server, MySQL, PstgreSQL, Teradata, DB2, SQLite, Firebird,
ACCESS, HyperSQL...

Não Relacional:

ˆ São Bancos não SQL (NoSQL − > Not Only SQL);


ˆ Pontos Fortes: Maior desempenho, melhor escalabilidade.
ˆ Principais bancos de dados não relacionais: Firebase, Hbase, MongoDB, CouchDB, Redis, Cassandra, RavenDB,
Membase, Riak, Oracle Coherence, ApacheSolr...

2 MODELAGEM DE DADOS
Os modelos de banco de dados são usados para descrever, mais detalhadamente, a estrutura de um banco de dados.
Eles servem então como parte importante da documentação dos sistemas que auxiliam não somente os desenvolvedores que
estão trabalhando no projeto mas também servem como documentação que pode ser entregue ao cliente que contratou o
serviço de desenvolvimento. Atenção: Um modelo de dados não informa quais dados estão armazenados em um banco de
dados, mas sim apenas quais e que tipos de dados contém. Estes modelos são baseados em três nı́veis: Conceitual, Lógico e
Fı́sico.
Modelo Conceitual: Este é o modelo de mais alto nı́vel, ou seja, que está mais próximo dos usuários. O nı́vel conceitual
é desenvolvido com alto nı́vel de abstração, a partir dos requisitos do sistema, extraı́dos na fase de levantamento de requisitos
pelos analista de sistemas. Esse modelo pode ser elaborado de forma textual ou por meio de dois diagramas:

Diagrama de Entidade e Relacionamento

Diagrama de Classes

2.1 Diagramas UML - Unified Modeling Language (Linguagem de Modelagem Unificada


2.1.1 Diagrama de classes
Diagrama de classes funciona somente para linguagens com orientação a objetos.

2.1.2 Diagrama de entidade de relacionamento


Diagrama de entidade de relacionamento é melhor, pois serve para linguagens orientadas ou não a objetos.

Gabriel Cardoso Gaga’s Codex - SQL Página 1


Gabriel Cardoso Gaga’s Codex - SQL 2

2.2 Modelo Lógico


Este modelo descreve como os dados serão armazenados no banco de dados e também seus relacionamentos. Neste
modelo ainda pode ser definida a tecnologia que será utilizada para armazenagem dos dados: Bancos de Dados Relacionais
ou Bancos de Dados Não Relacionais

2.3 Conceitos essenciais


2.3.1 Endtidade (Tabela)
Entidade é o objeto ou evento do mundo real sobre o qual desejamos manter registros em um banco de dados.
Exemplos: Aluno, Carro, Produto, Vendedor, Venda, etc.

2.3.2 Atributo (Campos)


Atributo: Propriedade ou caracterı́stica que descreve uma entidade. São as colunas (campos) das tabelas que irão
armazenar os dados.
Atributo Chave, chave primária, primary key ou pk, é um campo que deve possuir valor único (sem repetição) em
todo o conjunto de dados da entidade. Este atributo é usado para identificar unicamente um registro da tabela.

2.3.3 Relações
Relacionamentos:

Geralmente as entidades nunca estão sozinhas. Normalmente estão associadas com outras entidades. Reconhecer e
registrar os relacionamentos entre entidades fornece uma descrição muito mais rica do modelo. Um relacionamento pode
acontecer entre uma, duas ou várias entidades. No exemplo abaixo, temos um relacionamento entre a entidade Produto e
Tipo de Produto. Isso indica que um produto tem um tipo.

Chave Estrangeira:

Também conhecido como foreign key ou fk, é um atributo presente em uma entidade que indica um relacionamento e
representa a chave primária de uma outra entidade. No exemplo abaixo, a entidade Produto teria um atributo que seria a
representação de uma outra entidade nela. Neste caso a outra entidade é Tipo de Produto.

Grau de Relacionamento:

Indica a quantidade de entidades ligadas a um relacionamento. Os principais graus de relacionamento são: Unário,
Binário e Ternário

2.3.4 Tipos de Relacionamentos


Relacionamento Unário:

Chamado também de grau 1 - Uma entidade se relaciona com ela mesma.

Figura 1: Grau de Relacionamento Unário

Relacionamento Binário:

Chamado também de grau 2 - Uma entidade se relaciona com outra entidade. É o tipo mais comum de relacionamento.

Gabriel Cardoso Gaga’s Codex - SQL Página 2


Gabriel Cardoso Gaga’s Codex - SQL 3

Figura 2: Grau de Relacionamento Binário

Relacionamento Ternário:

Chamado também de grau 3 - Três entidades estão relacionadas por um mesmo relacionamento.

Figura 3: Grau de Relacionamento Ternário

Conforme estudamos, os mais comuns são o Unário, Binário e Ternário, mas não estão limitados a estes. Dependendo
da complexidade do projeto podemos ter relacionamentos com grau quaternário, grau 5 e etc. Não há limitação para os
graus de relacionamento.

2.3.4.1 Relacionamento Binário Um-para-Um (1:1)


Indica que uma ocorrência da entidade A pode se relacionar exclusivamente com uma ocorrência da entidade B e vice
versa.
Exemplo: Um vendedor ocupa um único escritório e um escritório pode ser ocupado por um único vendedor. Note
que colocamos a numeração em cada uma das pontas para indicar a cardinalidade do relacionamento. OBS: Em inglês esse
relacionamento é chamado de One-to-One

Figura 4: Relacionamento Binário Um-para-Um

2.3.4.2 Relacionamento Binário Um-para-Muitos (1:n)


Indica que uma ocorrência da entidade A pode se relacionar com várias ocorrências da entidade B, porém o inverso
não é permitido.
Exemplo: Um vendedor atende muitos clientes, porém cada cliente é atendido por apenas um vendedor especı́fico.
Note que colocamos a numeração em cada uma das pontas para indicar a cardinalidade do relacionamento.
OBS: Em inglês esse relacionamento é chamado de One-to-Many

Gabriel Cardoso Gaga’s Codex - SQL Página 3


Gabriel Cardoso Gaga’s Codex - SQL 4

Figura 5: Relacionamento Binário Um-para-Muitos

2.3.4.3 Relacionamento Binário Muitos-para-Muitos (n:m)


Indica que uma ocorrência da entidade A pode se relacionar com várias ocorrências da entidade B e vice versa.
Exemplo: Um vendedor atende muitos clientes, e um cliente pode ser atendido por diversos vendedores.
Na prática, o relacionamento n:m é dividido em duas relações 1:n e uma nova entidade é criada para representar o
relacionamento.

Figura 6: Relacionamento Binário Muitos-para-Muitos

Note que colocamos a numeração em cada uma das pontas para indicar a cardinalidade do relacionamento.
OBS: Em inglês esse relacionamento é chamado de Many-to-Many

2.3.5 Outros Conceitos


2.3.5.1 Cardinalidade (Mı́nima)
Define a quantidade mı́nima de ocorrências de uma entidade que precisa estar associada a outra entidade (em caráter
obrigatório). São consideradas como cardinalidades mı́nimas: 0 e 1. São presentadas por: 0..1, 1..1, 0..n, 1..n, 0..*, 1..*, etc...
Exemplo:
- Um vendedor ocupa um único escritório, porém é obrigatório que ele tenha um escritório. (Lê-se no mı́nimo Um, no
máximo Um).
- Um escritório pode ser ocupado por um único vendedor, porém pode ser que a sala esteja vazia, ainda sem vendedor.
(Lê-se no mı́nimo Zero, no máximo Um). Zero ou 1 vendedor irão ocupar o escritório que por sua vez comporta no mı́nimo
1 e máximo 1 vendedor.

Figura 7: Cardinalidade (Mı́nima)

2.3.5.2 Formas de Representação


Podemos encontrar uma variedade grande de representações gráficas para o Modelo Entidade Relacionamento: Os
mais comuns são o Clássico e o Pé de Galinha.

Gabriel Cardoso Gaga’s Codex - SQL Página 4


Gabriel Cardoso Gaga’s Codex - SQL 5

Figura 8: Formas de Representação

Ambas as formas estão representando a mesma coisa utilizando estilos diferentes: Um vendedor poderá atender 1 ou
vários clientes, que por sua vez será atendido no mı́nimo por 1 e no máximo por 1 vendedor.
Ferramenta indicada para modelagem: MySQL Workbench. Em resumo é possı́vel levar em consideração o diagrama
abaixo:

Figura 9: Formas de Representação - Resumo

2.4 Normalização de dados


Chamamos de normalização de dados o processo formal e passo a passo que examina o documento descritivo gerado
pelos analistas de sistemas durante a análise de requisitos em busca de definir as entidades, atributos, relacionamentos, chaves
primárias e chaves estrangeiras do banco de dados a ser modelado.
Este processo é realizado utilizando regras bem estabelecidas conhecidas como Formas Normais definidas por Edgar
Frank Codd em seu artigo. Um dos objetivos principais da normalização é evitar ou pelo menos amenizar anomalias e
inconsistências que podem ocorrer durante a inclusão, exclusão, alteração e consulta de registros em um banco de dados. Um
banco de dados normalizado dentro dos padrões reduz o trabalho de manutenção e ajuda a evitar o desperdı́cio do espaço
de armazenamento, dentre outros benefı́cios.

2.4.1 Primeira Forma Normal - 1FN


O processo de normalização aplica uma série de regras sobre as tabelas de um banco de dados para verificar se estas
estão corretamente projetadas. Embora existam cinco formas normais (ou regras de normalização), na prática usamos um
conjunto de três Formas Normais, ou seja, um banco de dados é considerado normalizado se nele foram aplicadas as regras
destas três formas normais.
Uma entidade estará na primeira forma normal (1FN) se todos os campos forem atômicos (simples) e não multivalorados
(com múltiplos valores).
Quais os problemas de uma tabela não normalizada com a 1FN? São vários. A primeira forma normal tenta resolver
um dos maiores problemas de bancos de dados que é a repetição (redundância de dados) e a desorganização deles.
Imagine um campo telefone que permita a entrada de mais de um valor (dois números de telefones) por exemplo.
Como farı́amos uma busca em um dos valores apenas? Mesma coisa em um campo endereço onde as partes não estivessem
desmembradas, da seguinte forma:

Gabriel Cardoso Gaga’s Codex - SQL Página 5


Gabriel Cardoso Gaga’s Codex - SQL 6

Rua das Oliveiras, 256, Parque Novo Mundo, São Paulo, SP.

Como seria possı́vel fazer uma busca de todos os clientes que morassem no Parque Novo Mundo? Ou na cidade de
São Paulo? Ou no estado de SP?
Toda tabela precisa obrigatoriamente ser normalizada com a 1FN? Não. A normalização é um processo corretivo que
deve ser aplicado em casos especı́ficos onde o problema for identificado. Tudo irá depender de como a análise dos dados foi
feita.
De inı́cio você terá muita dificuldade em aplicar as regras de normalização e somente o tempo e o acúmulo de experiência
farão esse processo ser natural para você. Um analista experiente aplica a normalização de dados por padrão, pois ele olha
para uma tabela e já ’sente’ que tem algo errado ali e aplica a correção para tal.

2.4.2 Segunda Forma Normal - 2FN


Uma entidade estará na 2FN se ela já se encontrar na 1FN e todos os atributos não chave forem totalmente dependentes
da chave primária.
Conforme vimos tanto com a 1FN quanto agora com a 2FN, quando aplicamos a normalização de dados é comum
gerar novas tabelas a fim de satisfazer as formas normais que estão sendo aplicadas. Mais uma vez gostaria de deixar claro
que a normalização de dados, apesar das regras serem simples, causa grande dificuldade nos iniciantes da área. Então tenha
paciência pois com o tempo irá ganhar experiência e tudo ficará mais fácil.

2.4.3 Terceira Forma Normal - 3FN


Uma tabela estará na 3FN se ela estiver na 2FN e se nenhuma coluna não-chave depender de outra coluna não-chave.
Após aplicar as 3 Formas Normais temos o nosso Modelo de Entidade e Relacionamento (Modelo Conceitual) completo.

2.4.4 Outras Formas Normais


Vimos que um modelo de dados é considerado normalizado se estiver sido aplicado as 3 Formas Normais. Porém,
dependendo da complexidade do projeto, apesar de raro, é possı́vem que seja necessário aplicar a 4FN ou 5FN. Novamente,
é muito raro necessitar realizar essa aplicação da 4FN e 5FN, então, apesar de estarmos estudando elas aqui, não se importe
tanto no momento. Uma entidade estará na 4FN se estiver na 3FN e na tabela não conter múltiplas entradas multivaloradas
(valores repetidos em diferentes colunas), ou seja, a presença de uma ou mais linhas em uma tabela implica na presença de
uma ou mais outras linhas na mesma tabela.

3 INSTALAÇÃO E CONFIGURAÇÃO DO MySQL WORKBENCH


O My SQL serve para fazer somente a modelagem do BD, e não é o servidor do BD.

1. Acessar o site https://www.mysql.com/products/workbench/

2. Baixar na sessão de Downloads


3. Duplo clique e segue com instalação

4 MER - MODELO ENTIDADE RELACIONAMENTO


No software é possı́vel:

ˆ Criar um modelo

ˆ Criar tabelas

ˆ Criar campos

ˆ Selecionar os tipo de dados para os atributos

ˆ Definir chave primária

ˆ Definir chave estrangeira

ˆ Exportar o diagrama

Gabriel Cardoso Gaga’s Codex - SQL Página 6


Gabriel Cardoso Gaga’s Codex - SQL 7

Padronizações Importantes:
ˆ Tabelas sempre em letras minusculas
ˆ Marcar campos sempre NN, não nulos.
ˆ Chaves estrangeiras sempre começam com ”fk ”

5 LINGUAGEM SQL
A linguagem SQL se subdivide em grupos:

Figura 10: Subdivisões SQL

Cada subgrupo SQL possui comandos próprios de execução e ao executar estes comandos sempre temos como resultado
duas coisas:
1. O resultado da execução do comando;
2. Uma mensagem de execução que pode ser de sucesso ou de erro;
OBS: Apesar de não obrigatório, costumamos a escrever os comandos SQL todos em letra maiúscula, o que ajuda a
entender melhor nosso código já que o que for referente aos comandos SQL estarão destacados em maiúsculo e o que for
referente aos nossos dados/tabelas e etc estarão em minúsculo.

5.1 DQL - Data Query Language


No grupo DQL nós temos apenas 1 comando SQL: SELECT
Este comando é utilizado para realizar consultas no banco de dados. Embora tenha apenas um comando, a DQL é a
parte da SQL mais utilizada. O comando SELECT premite ao usuário espeficicar uma consulta (query) como uma descrição
do resultado esperado. Este comando é composto de várias cláusulas e opções, possibilitando eleborar consultas das mais
simples às mais complexas.

5.2 DML - Data Manipulation Language


No subgrupo DML nós temos 3 comandos SQL: INSERT, UPDATE e DELETE. Este subgrupo da linguagem SQL é
utilizado para realizar inclusões, alterações e exclusões de dados presentes em registros do banco de dados.

Figura 11: DML - Data Manipulation Language

ˆ INSERT - Usado para inserir um registro a uma tabela existente;


ˆ UPDATE - Usado para alterar valores de dados em um ou mais registros de uma tabela;
ˆ DELETE - Usado para remover registros de uma tabela;

Gabriel Cardoso Gaga’s Codex - SQL Página 7


Gabriel Cardoso Gaga’s Codex - SQL 8

5.3 DDL - Data Definition Language


No subgrupo DDL nós temos 3 comandos SQL: CREATE, ALTER e DROP. Este subgrupo da linguagem SQL é
utilizado para criar, alterar e excluir bancos de dados, tabelas, e elementos associados como ı́ndice e visão.

Figura 12: DDL - Data Definition Language

ˆ CREATE - Usado para criar um banco de dados, tabela e outros objetos em um banco de dados;

ˆ ALTER - Usado para alterar a estrutura de tabelas ou outro objeto em um banco de dados;

ˆ DROP - Usado para apagar bancos de dados, tabelas e outros objetos;

5.4 DCL - Data Control Language


No subgrupo DCL nós temos 2 comandos SQL: GRANT e REVOKE. Este subgrupo da linguagem SQL é utilizado
para controlar os aspectos de autorização de dados e licenças de usuários para controlar quem tem acesso para manipular
dados dentro do banco de dados.

Figura 13: DCL - Data Control Language

ˆ GRANT - Usado para autorizar um usuário a executar ou setar operações no banco de dados;

ˆ REVOKE - Usado para remover ou restringir a capacidade de um usuário de executar operações;

5.5 DTL - Data Transaction Language


No subgrupo DTL nós temos 3 comandos SQL: BEGIN, COMMIT e ROLLBACK.

Gabriel Cardoso Gaga’s Codex - SQL Página 8


Gabriel Cardoso Gaga’s Codex - SQL 9

Figura 14: DTL - Data Transaction Language

ˆ BEGIN (ou START TRANSACTION*) - Usado para marcar o começo de uma transação que pode ser completada ou
não.
ˆ COMMIT - Finaliza uma transação.

ˆ ROLLBACK - Faz com que as mudanças nos dados existentes deste o último COMMIT sejam descartadas. (Depende
do dialeto SQL)

6 FUNÇÕES IMPORTANTES EM SQL


6.1 Consultas em Múltiplas Tabelas
SELECT p.codigo AS Código, p.descricao AS Descrição, p.preco AS Preço, tp.Descrição AS Tipo
FROM produtos AS p, tipos produto AS tp
WHERE p.codigo tipo produto = tp.codigo;

6.2 Funções de Junção de Tabelas


6.2.1 Junção de produto cartesiano
SELECT c.id, c.nome, c.data nascimento, c.telefone, p.cargo
FROM clientes AS c, profissoes AS p
WHERE c.id profissao = p.id;

6.2.2 Junção Interna (Inner Join)


SELECT c.id, c.nome, c.data nascimento, c.telefone, p.cargo
FROM clientes AS c INNER JOIN profissoes AS p
ON c.id profissao = p.id;

6.2.3 Junção Externa (Outer Join) Left Outer Join


SELECT * FROM clientes
LEFT OUTER JOIN profissoes
ON clientes.id profissao = profissoes.id;

6.2.4 Junção Externa (Outer Join) Right Outer Join


SELECT * FROM clientes
RIGHT OUTER JOIN profissoes
ON clientes.id profissao = profissoes.id;

Gabriel Cardoso Gaga’s Codex - SQL Página 9


Gabriel Cardoso Gaga’s Codex - SQL 10

6.2.5 Junção Externa (Outer Join) Full Outer Join


SELECT * FROM clientes
FULL OUTER JOIN profissoes
ON clientes.id profissao = profissoes.id;

SELECT * FROM clientes


LEFT OUTER JOIN profissoes
ON clientes.id profissao = profissoes.id
UNION
SELECT * FROM clientes
RIGHT OUTER JOIN profissoes
ON clientes.id profissao = profissoes.id;

6.2.6 Junção Cruzada (Cross Join)


SELECT c.id, c.nome, c.data nascimento, c.telefone, p.cargo
FROM clientes AS c
CROSS JOIN profissoes AS p;

6.2.7 Auto Junção (Self Join)


SELECT a.nome AS Consumidor1, b.nome AS Consumidor2, a.cidade
FROM consumidor AS a
INNER JOIN consumidor AS b
ON a.id <> b.id
AND a.cidade = b.cidade;

6.2.8 Junção Baseada em Comparador (Equi−Join)


SELECT *
FROM clientes JOIN profissoes
ON clientes.id profissao = profissoes.id;

6.2.9 Junção Natutal (Natural Join)


SELECT *
FROM clientes NATURAL JOIN profissoes;

* O único campo comum entre as duas tabelas é o campo ’id’. Desta forma, veja que o resultado está errado, já que
João Pereira e Mário Pirez tem a mesma profissão... Esta junção só ’funciona’ bem se os campos chaves (onde acontece os
relacionamentos) tiverem o mesmo nome em ambas as tabelas.

6.2.10 Função Externa (Outer Join) Full Outer Join


SELECT * FROM clientes
LEFT OUTER JOIN profissoes
ON clientes.id profissao = profissoes.id
UNION
SELECT * FROM clientes
RIGHT OUTER JOIN profissoes
ON clientes.id profissao = profissoes.id;

6.2.11 Junção Cruzada (Cross Join)


SELECT c.id, c.nome, c.data nascimento, c.telefone, p.cargo
FROM clientes AS c
CROSS JOIN profissoes AS p;

Gabriel Cardoso Gaga’s Codex - SQL Página 10


Gabriel Cardoso Gaga’s Codex - SQL 11

6.3 Funções de Agregação (Numéricas)

Function Description
ABS Returns the absolute value of a number
ACOS Returns the arc cosine of a number
ASIN Returns the arc sine of a number
ATAN Returns the arc tangent of one or two numbers
ATAN2 Returns the arc tangent of two numbers
AVG Returns the average value of an expression
CEIL Returns the smallest integer value that is ¿= to a number
CEILING Returns the smallest integer value that is ¿= to a number
COS Returns the cosine of a number
COT Returns the cotangent of a number
COUNT Returns the number of records returned by a select query
DEGREES Converts a value in radians to degrees
DIV Used for integer division
EXP Returns e raised to the power of a specified number
FLOOR Returns the largest integer value that is ¡= to a number
GREATEST Returns the greatest value of the list of arguments
LEAST Returns the smallest value of the list of arguments
LN Returns the natural logarithm of a number
LOG Returns the natural logarithm of a number, or the logarithm of a number to a specified base
LOG10 Returns the natural logarithm of a number to base 10
LOG2 Returns the natural logarithm of a number to base 2
MAX Returns the maximum value in a set of values
MIN Returns the minimum value in a set of values
MOD Returns the remainder of a number divided by another number
PI Returns the value of PI
POW Returns the value of a number raised to the power of another number
POWER Returns the value of a number raised to the power of another number
RADIANS Converts a degree value into radians
RAND Returns a random number
ROUND Rounds a number to a specified number of decimal places
SIGN Returns the sign of a number
SIN Returns the sine of a number
SUM Calculates the sum of a set of values
TAN Returns the tangent of a number
TRUNCATE Truncates a number to the specified number of decimal places

Tabela 1: Funções Numéricas

6.4 Agrupamento e Ordenação


6.4.1 GROUP BY
SELECT t.nome AS Tipo, SUM(p.quantidade) AS ’Quantidade em Estoque’ FROM tipos AS t, produtos AS
p
WHERE t.id = p.id tipo GROUP BY t.nome;

Gabriel Cardoso Gaga’s Codex - SQL Página 11


Gabriel Cardoso Gaga’s Codex - SQL 12

SELECT f.nome AS Fabricante, SUM(p.quantidade) AS ’Quantidade em Estoque’ FROM fabricantes AS


f,
produtos AS p WHERE f.id = p.id fabricante GROUP BY f.nome;

6.4.2 ORDER BY
SELECT id, nome, id tipo, id fabricante, quantidade FROM produtos ORDER BY id ASC;
SELECT id, nome, id tipo, id fabricante, quantidade FROM produtos ORDER BY id DESC;
SELECT id, nome, id tipo, id fabricante, quantidade FROM produtos ORDER BY quantidade DESC;

6.5 Funções de Data e Hora

Function Description
ADDDATE Adds a time/date interval to a date and then returns the date
ADDTIME Adds a time interval to a time/datetime and then returns the time/datetime
CURDATE Returns the current date
CURRENT DATE Returns the current date
CURRENT TIME Returns the current time
CURRENT TIMESTAMP Returns the current date and time
CURTIME Returns the current time
DATE Extracts the date part from a datetime expression
DATEDIFF Returns the number of days between two date values
DATE ADD Adds a time/date interval to a date and then returns the date
DATE FORMAT Formats a date
DATE SUB Subtracts a time/date interval from a date and then returns the date
DAY Returns the day of the month for a given date
DAYNAME Returns the weekday name for a given date
DAYOFMONTH Returns the day of the month for a given date
DAYOFWEEK Returns the weekday index for a given date
DAYOFYEAR Returns the day of the year for a given date
EXTRACT Extracts a part from a given date
FROM DAYS Returns a date from a numeric datevalue
HOUR Returns the hour part for a given date
LAST DAY Extracts the last day of the month for a given date
LOCALTIME Returns the current date and time
LOCALTIMESTAMP Returns the current date and time
MAKEDATE Creates and returns a date based on a year and a number of days value
MAKETIME Creates and returns a time based on an hour, minute, and second value
MICROSECOND Returns the microsecond part of a time/datetime
MINUTE Returns the minute part of a time/datetime
MONTH Returns the month part for a given date
MONTHNAME Returns the name of the month for a given date
NOW Returns the current date and time
PERIOD ADD Adds a specified number of months to a period
PERIOD DIFF Returns the difference between two periods

Tabela 2: Funções Data e Hora

Gabriel Cardoso Gaga’s Codex - SQL Página 12


Gabriel Cardoso Gaga’s Codex - SQL 13

6.6 Sub Consultas


SELECT nome, sobrenome
FROM funcionarios
WHERE id escritorio IN (SELECT id FROM escritorios WHERE pais = ’Brasil’);
SELECT f.nome, f.sobrenome, e.pais, p.salario
FROM pagamentos AS p, funcionarios AS f, escritorios AS e
WHERE f.id escritorio = e.id
AND f.id = p.id funcionario
AND salario = (SELECT MAX(salario) FROM pagamentos);

6.7 Funções Avançadas

Function Description
BIN Returns a binary representation of a number
BINARY Converts a value to a binary string
CASE Goes through conditions and return a value when the first condition is met
CAST Converts a value (of any type) into a specified datatype
COALESCE Returns the first non-null value in a list
CONNECTION ID Returns the unique connection ID for the current connection
CONV Converts a number from one numeric base system to another
CONVERT Converts a value into the specified datatype or character set
CURRENT USER Returns the user name and host name for the MySQL account that the server used to authenticate the cur
DATABASE Returns the name of the current database
IF Returns a value if a condition is TRUE, or another value if a condition is FALSE
IFNULL Return a specified value if the expression is NULL, otherwise return the expression
ISNULL Returns 1 or 0 depending on whether an expression is NULL
LAST INSERT ID Returns the AUTO INCREMENT id of the last row that has been inserted or updated in a table
NULLIF Compares two expressions and returns NULL if they are equal. Otherwise, the first expression is returned
SESSION USER Returns the current MySQL user name and host name
SYSTEM USER Returns the current MySQL user name and host name
USER Returns the current MySQL user name and host name
VERSION Returns the current version of the MySQL database

Tabela 3: Funções Avançadas

6.8 Operadores
6.8.1 Bitwise

Operator Description
& Bitwise AND
| Bitwise OR
∧ Bitwise exclusive OR

Tabela 4: Operadores Bitwise

Gabriel Cardoso Gaga’s Codex - SQL Página 13


Gabriel Cardoso Gaga’s Codex - SQL 14

6.8.2 Comparação

Operator Description
= Equal to
> Greater than
< Less than
>= Greater than or equal to
<= Less than or equal to
<> Not equal to

Tabela 5: Operadores Comparativos

6.8.3 Compostos

Operator Description
+= Add equals
−= Subtract equals
∗= Multiply equals
/= Divide equals
%= Modulo equals
&= Bitwise AND equals
∧− = Bitwise exclusive equals
|∗ = Bitwise OR equals

Tabela 6: Operadores Compostos

6.8.4 Lógicos

Operator Description
ALL TRUE if all of the subquery values meet the
condition
AND TRUE if all the conditions separated by AND is
TRUE
ANY TRUE if any of the subquery values meet the
condition
BETWEEN TRUE if the operand is within the range of
comparisons
EXISTS TRUE if the subquery returns one or more
records
IN TRUE if the operand is equal to one of a list of
expressions
LIKE TRUE if the operand matches a pattern
NOT Displays a record if the condition(s) is NOT
TRUE
OR TRUE if any of the conditions separated by OR
is TRUE
SOME TRUE if any of the subquery values meet the
condition

Tabela 7: Operadores Lógicos

Gabriel Cardoso Gaga’s Codex - SQL Página 14


Gabriel Cardoso Gaga’s Codex - SQL 15

6.8.5 Aritméticos

Operator Description
+ Add
− Subtract
* Multiply
/ Divide
% Modulo

Tabela 8: Operadores Aritméticos

6.9 Tipos de Dados


6.9.1 String

Data type Description


CHAR(size) A FIXED length string (can contain letters, numbers, and special charac-
ters). The size parameter specifies the column length in characters - can
be from 0 to 255. Default is 1
VARCHAR(size) A VARIABLE length string (can contain letters, numbers, and special
characters). The size parameter specifies the maximum column length in
characters - can be from 0 to 65535
BINARY(size) Equal to CHAR(), but stores binary byte strings. The size parameter
specifies the column length in bytes. Default is 1
VARBINARY(size) Equal to VARCHAR(), but stores binary byte strings. The size parameter
specifies the maximum column length in bytes.
TINYBLOB For BLOBs (Binary Large OBjects). Max length: 255 bytes
TINYTEXT Holds a string with a maximum length of 255 characters
TEXT(size) Holds a string with a maximum length of 65,535 bytes
BLOB(size) For BLOBs (Binary Large OBjects). Holds up to 65,535 bytes of data
MEDIUMTEXT Holds a string with a maximum length of 16,777,215 characters
MEDIUMBLOB For BLOBs (Binary Large OBjects). Holds up to 16,777,215 bytes of data
LONGTEXT Holds a string with a maximum length of 4,294,967,295 characters
LONGBLOB For BLOBs (Binary Large OBjects). Holds up to 4,294,967,295 bytes of
data
ENUM(val1, val2, val3, ...) A string object that can have only one value, chosen from a list of possible
values. You can list up to 65535 values in an ENUM list. If a value is
inserted that is not in the list, a blank value will be inserted. The values
are sorted in the order you en
SET(val1, val2, val3, ...) A string object that can have 0 or more values, chosen from a list of
possible values. You can list up to 64 values in a SET list

Tabela 9: Tipos de dados - Strings

Gabriel Cardoso Gaga’s Codex - SQL Página 15


Gabriel Cardoso Gaga’s Codex - SQL 16

6.9.2 Numéricos

Data type Description


BIT(size) A bit-value type. The number of bits per value is specified in size. The size
parameter can hold a value from 1 to 64. The default value for size is 1.
TINYINT(size) A very small integer. Signed range is from -128 to 127. Unsigned range is from
0 to 255. The size parameter specifies the maximum display width (which is
255)
BOOL Zero is considered as false, nonzero values are considered as true.
BOOLEAN Equal to BOOL
SMALLINT(size) A small integer. Signed range is from -32768 to 32767. Unsigned range is from
0 to 65535. The size parameter specifies the maximum display width (which
is 255)
MEDIUMINT(size) A medium integer. Signed range is from -8388608 to 8388607. Unsigned range
is from 0 to 16777215. The size parameter specifies the maximum display
width (which is 255)
INT(size) A medium integer. Signed range is from -2147483648 to 2147483647. Unsigned
range is from 0 to 4294967295. The size parameter specifies the maximum
display width (which is 255)
INTEGER(size) Equal to INT(size)
BIGINT(size) A large integer. Signed range is from -9223372036854775808 to
9223372036854775807. Unsigned range is from 0 to 18446744073709551615.
The size parameter specifies the maximum display width (which is 255)
FLOAT(size, d) A floating point number. The total number of digits is specified in size. The
number of digits after the decimal point is specified in the d parameter. This
syntax is deprecated in MySQL 8.0.17, and it will be removed in future MySQL
versions
FLOAT(p) A floating point number. MySQL uses the p value to determine whether to
use FLOAT or DOUBLE for the resulting data type. If p is from 0 to 24, the
data type becomes FLOAT(). If p is from 25 to 53, the data type becomes
DOUBLE()
DOUBLE(size, d) A normal-size floating point number. The total number of digits is specified
in size. The number of digits after the decimal point is specified in the d
parameter
DECIMAL(size, d) An exact fixed-point number. The total number of digits is specified in size.
The number of digits after the decimal point is specified in the d parameter.
The maximum number for size is 65. The maximum number for d is 30. The
default value for size is 10
DEC(size, d) Equal to DECIMAL(size,d)

Tabela 10: Tipos de dados - Numéricos

Gabriel Cardoso Gaga’s Codex - SQL Página 16


Gabriel Cardoso Gaga’s Codex - SQL 17

6.9.3 Data e Hora

Data type Description


DATE A date. Format: YYYY-MM-DD. The supported range is from ’1000-01-01’
to ’9999-12-31’
DATETIME(fsp) A date and time combination. Format: YYYY-MM-DD hh:mm:ss. The sup-
ported range is from ’1000-01-01 00:00:00’ to ’9999-12-31 23:59:59’. Adding
DEFAULT and ON UPDATE in the column definition to get automatic initi-
alization and updating to the current date an
TIMESTAMP(fsp) A timestamp. TIMESTAMP values are stored as the number of seconds
since the Unix epoch (’1970-01-01 00:00:00’ UTC). Format: YYYY-MM-DD
hh:mm:ss. The supported range is from ’1970-01-01 00:00:01’ UTC to ’2038-
01-09 03:14:07’ UTC. Automatic initialization a
TIME(fsp) A time. Format: hh:mm:ss. The supported range is from ’-838:59:59’ to
’838:59:59’
YEAR A year in four-digit format. Values allowed in four-digit format: 1901 to 2155,
and 0000.

Tabela 11: Tipos de dados - Data e Hora

6.9.4 Variáveis

Data type Description


char(n) Fixed width character
string
varchar(n) Variable width character
string
varchar(max) Variable width character
string
text Variable width character
string
nchar Fixed width Unicode
string
nvarchar Variable width Unicode
string
nvarchar(max) Variable width Unicode
string
ntext Variable width Unicode
string
binary(n) Fixed width binary string
varbinary Variable width binary
string
varbinary(max)Variable width binary
string
image Variable width binary
string

Tabela 12: Tipos de dados - Variáveis

Gabriel Cardoso Gaga’s Codex - SQL Página 17


Gabriel Cardoso Gaga’s Codex - SQL 18

7 EXEMPLOS DE SENTENÇAS EM SQL

SQL Statement Syntax


AND / OR SELECT column name(s)
FROM table name
WHERE condition
AND—OR condition
ALTER TABLE ALTER TABLE table name
ADD column name datatype
or
ALTER TABLE table name
DROP COLUMN column name
AS (alias) SELECT column name AS column alias
FROM table name
or
SELECT column name
FROM table name AS table alias
BETWEEN SELECT column name(s)
FROM table name
WHERE column name
BETWEEN value1 AND value2
CREATE DATABASE CREATE DATABASE database name
CREATE TABLE CREATE TABLE table name
(
column name1 data type,
column name2 data type,
column name3 data type,
...
)
CREATE INDEX CREATE INDEX index name
ON table name (column name)
or
CREATE UNIQUE INDEX index name
ON table name (column name)
CREATE VIEW CREATE VIEW view name AS
SELECT column name(s)
FROM table name
WHERE condition
DELETE DELETE FROM table name
WHERE some column=some value
or
DELETE FROM table name
(Note: Deletes the entire table!!)

DELETE * FROM table name


(Note: Deletes the entire table!!)

Tabela 13: Exemplos de sentenças SQL Parte 1

Gabriel Cardoso Gaga’s Codex - SQL Página 18


Gabriel Cardoso Gaga’s Codex - SQL 19

SQL Statement Syntax


DROP DATABASE DROP DATABASE database name
DROP INDEX DROP INDEX table name.index name (SQL Server)
DROP INDEX index name ON table name (MS Access)
DROP INDEX index name (DB2/Oracle)
ALTER TABLE table name
DROP INDEX index name (MySQL)
DROP TABLE DROP TABLE table name
EXISTS IF EXISTS (SELECT * FROM table name WHERE id = ?)
BEGIN
–do what needs to be done if exists
END
ELSE
BEGIN
–do what needs to be done if not
END
GROUP BY SELECT column name, aggregate function(column name)
FROM table name
WHERE column name operator value
GROUP BY column name
HAVING SELECT column name, aggregate function(column name)
FROM table name
WHERE column name operator value
GROUP BY column name
HAVING aggregate function(column name) operator value
IN SELECT column name(s)
FROM table name
WHERE column name
IN (value1,value2,..)
INSERT INTO INSERT INTO table name
VALUES (value1, value2, value3,....)
or
INSERT INTO table name
(column1, column2, column3,...)
VALUES (value1, value2, value3,....)
INNER JOIN SELECT column name(s)
FROM table name1
INNER JOIN table name2
ON table name1.column name=table name2.column name

Tabela 14: Exemplos de sentenças SQL Parte 2

Gabriel Cardoso Gaga’s Codex - SQL Página 19


Gabriel Cardoso Gaga’s Codex - SQL 20

SQL Statement Syntax


LEFT JOIN SELECT column name(s)
FROM table name1
LEFT JOIN table name2
ON table name1.column name=table name2.column name
RIGHT JOIN SELECT column name(s)
FROM table name1
RIGHT JOIN table name2
ON table name1.column name=table name2.column name
FULL JOIN SELECT column name(s)
FROM table name1
FULL JOIN table name2
ON table name1.column name=table name2.column name
LIKE SELECT column name(s)
FROM table name
WHERE column name LIKE pattern
ORDER BY SELECT column name(s)
FROM table name
ORDER BY column name [ASC—DESC]
SELECT SELECT column name(s)
FROM table name
SELECT * SELECT *
FROM table name
SELECT DISTINCT SELECT DISTINCT column name(s)
FROM table name
SELECT INTO SELECT *
INTO new table name [IN externaldatabase]
FROM old table name
or
SELECT column name(s)
INTO new table name [IN externaldatabase]
FROM old table name
SELECT TOP SELECT TOP number—percent column name(s)
FROM table name
TRUNCATE TABLE TRUNCATE TABLE table name
UNION SELECT column name(s) FROM table name1
UNION
SELECT column name(s) FROM table name2
UNION ALL SELECT column name(s) FROM table name1
UNION ALL
SELECT column name(s) FROM table name2
UPDATE UPDATE table name
SET column1=value, column2=value,...
WHERE some column=some value
WHERE SELECT column name(s)
FROM table name
WHERE column name operator value

Tabela 15: Exemplos de sentenças SQL Parte 3

Gabriel Cardoso Gaga’s Codex - SQL Página 20


Gabriel Cardoso Gaga’s Codex - SQL 21

8 SQLITE
8.1 Instalação do SQLite
1. Baixar o SQLite:
(a) Link: https://sqlite.org/download.html
(b) Seção: Downloads
(c) Seção: Precompiled Binaries for Windows
(d) Arquivo: sqlite-dll-win64-x64-3370200.zip(890.05 KiB)
(e) Arquivo: sqlite-tools-win32-x86-3370200.zip(1.84 MiB)
2. Descompactar os arquivos do SQLite .Zip para pastas.
3. Renomear a Pasta descompatada do arquivo sqlite-dll-win64-x64-3370200 para ”SQLite”.

4. Mover os arquivos da pasta descompatada sqlite-tools-win32-x86-3370200 e colar na pasta recém nomeada de ”SQLite”.
5. Mover a pasta ”SQLite”para o diretório ”C:/Users/gabriel/Apps”
6. No painel de controle do Windows acesse: Sistema > Configurações avançadas do sistema > Aba ”Avançado”>
Variáveis de ambiente

7. Na janela aberta, Lista de variáveis do sistema clique em ”Path”e em seguida no botão ”Editar”.
8. Na nova janela clique em Novo.
9. Cole o caminho do SQLite: ”C:/Users/gabriel/Apps”
10. Pressione ”Ok”em todas as janelas abertas anteriormente.

11. Feche o Painel de controle.

8.2 Validação da Instalação do SQLite


1. Abra o terminal do windows (cmd)
2. Digite o comando: sqlite3 –version
3. Se o comando rodar sem erro e houver retorno da versão, deu certo. Caso não ocorra o esperado, retorne desde o inicio.

8.3 Instalação DB Browser SQLite


1. Baixar também uma ferramenta de visualização para o BD SQLite:
(a) Link: sqlitebrowser.org/
(b) Seção: Downloads
(c) Arquivo: DB Browser for SQLite - Standard installer for 64-bit Windows
2. Executar o instalador baixado.
3. Não há opção especı́fica, caso queira alterar algo como adicionar atalhos, tudo bem.
4. SQLCipher servirá para criptografar o banco caso necessário.

5. Reinicie a máquina.

8.4 Validação da Instalação do DB Browser


1. Abra o menu iniciar e veja se aparece a opção para abrir o DB Browser. Caso não apareça digite o nome para procurar.
Se ainda assim não aparecer reinstale o programa. Lembre-se de instalar em modo aministrador do Windows.
2. Execute o programa.
3. Se abrir normalmente estará instalado corretamente.

Gabriel Cardoso Gaga’s Codex - SQL Página 21


Gabriel Cardoso Gaga’s Codex - SQL 22

9 SQLITE COM PYTHON


Nesta seção serão exemplificados alguns comandos em Python para criação e utilização de um banco de dados SQLite.
import sqlite3

def conectar ():


”””
Funcao para conectar ao servidor
”””
conn = sqlite3 . connect (’psqlite3 .geek ’)
conn. execute ( ” ” ” CREATE TABLE I F NOT EXISTS p r o d u t o s (
i d INTEGER PRIMARY KEY AUTOINCREMENT ,
n o m e TEXT NOT NULL ,
p r e c o REAL NOT NULL ,
e s t o q u e INTEGER NOT NULL ) ; ” ” ”
)
return conn

def conectar ():


”””
Funcao para conectar ao servidor
”””
conn = sqlite3 . connect (’psqlite3 .geek ’)
conn. execute ( ” ” ” CREATE TABLE I F NOT EXISTS p r o d u t o s (
i d INTEGER PRIMARY KEY AUTOINCREMENT ,
n o m e TEXT NOT NULL ,
p r e c o REAL NOT NULL ,
e s t o q u e INTEGER NOT NULL ) ; ” ” ”
)
return conn

def desconectar (conn ):


”””
Funcao para desconectar do servidor .
”””
conn. close ()

def listar ():


”””
Funcao para listar os produtos
”””
conn = conectar ()
cursor = conn. cursor ()
cursor . execute (’SELECT * FROM produtos ’)
produtos = cursor . fetchall ()

if len( produtos ) > 0:


print (’Listando produtos ... ’)
print (’====================’)
for produto in produtos :
print (f’ID: { produto [0] } ’)
print (f’Produto : { produto [1] } ’)
print (f’Preco: { produto [2] } ’)
print (f’Estoque : { produto [3] } ’)
print (’=================’)
else:
print (’Nao existem produtos cadastrados .’)
desconectar (conn)

Gabriel Cardoso Gaga’s Codex - SQL Página 22


Gabriel Cardoso Gaga’s Codex - SQL 23

def inserir ():


”””
Funcao para inserir um p r o d u t o
”””
conn = conectar ()
cursor = conn. cursor ()
nome = input (’Informe o nome do produto : ’)
preco = float ( input (’Informe o preco do produto : ’))
estoque = int( input (’Informe a quantidade em estoque : ’))
cursor . execute (f" INSERT INTO produtos (nome , preco , estoque ) VALUES ( ’ { nome
conn. commit ()

if cursor . rowcount == 1:
print (f’O produto { nome } foi inserido com sucesso .’)
else:
print (’Nao foi possivel inserir o produto .’)
desconectar (conn)

def atualizar ():


”””
Funcao para atualizar um p r o d u t o
”””
conn = conectar ()
cursor = conn. cursor ()
codigo = int( input (’Informe o codigo do produto : ’))
nome = input (’Informe o nome do produto : ’)
preco = float ( input (’Informe o preco do produto : ’))
estoque = int( input (’Informe a quantidade em estoque : ’))
cursor . execute (f" UPDATE produtos SET nome = ’ { nome } ’ , preco = { preco } , estoque
conn. commit ()

if cursor . rowcount == 1:
print (f’O produto { nome } foi atualizado com sucesso .’)
else:
print (’Erro ao atualizar o produto .’)
desconectar (conn)

def deletar ():


”””
Funcao para deletar um p r o d u t o
”””
conn = conectar ()
cursor = conn. cursor ()
codigo = int( input (’Informe o codigo do produto : ’))
cursor . execute (f" DELETE FROM produtos WHERE id = { codigo } ")
conn. commit ()

if cursor . rowcount == 1:
print (’Produto excluido com sucesso .’)
else:
print (’Erro ao excluir produto .’)
desconectar (conn)

def menu ():


”””

Gabriel Cardoso Gaga’s Codex - SQL Página 23


Gabriel Cardoso Gaga’s Codex - SQL 24

Funcao para gerar o menu inicial


”””
print (’========= Gerenciamento de Produtos ============== ’)
print (’Selecione uma opcao: ’)
print (’1 = Listar produtos .’)
print (’2 = Inserir produtos .’)
print (’3 = Atualizar produto .’)
print (’4 = Deletar produto .’)
opcao = int( input ())
if opcao in [1, 2, 3, 4]:
if opcao == 1:
listar ()
elif opcao == 2:
inserir ()
elif opcao == 3:
atualizar ()
elif opcao == 4:
deletar ()
else:
print (’Opcao invalida ’)
else:
print(’Opcao invalida ’)

Gabriel Cardoso Gaga’s Codex - SQL Página 24

Você também pode gostar