Escolar Documentos
Profissional Documentos
Cultura Documentos
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.
R esumo I
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
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
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
Relacional:
Não Relacional:
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 Classes
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
Relacionamento Binário:
Chamado também de grau 2 - Uma entidade se relaciona com outra entidade. É o tipo mais comum de relacionamento.
Relacionamento Ternário:
Chamado também de grau 3 - Três entidades estão relacionadas por um mesmo relacionamento.
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.
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
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:
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.
Criar um modelo
Criar tabelas
Criar campos
Exportar o diagrama
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:
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.
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;
GRANT - Usado para autorizar um usuário a executar ou setar operações no banco de dados;
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)
* 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.
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
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;
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
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
6.8 Operadores
6.8.1 Bitwise
Operator Description
& Bitwise AND
| Bitwise OR
∧ Bitwise exclusive OR
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
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
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
6.8.5 Aritméticos
Operator Description
+ Add
− Subtract
* Multiply
/ Divide
% Modulo
6.9.2 Numéricos
6.9.4 Variáveis
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.
5. Reinicie a máquina.
if cursor . rowcount == 1:
print (f’O produto { nome } foi inserido com sucesso .’)
else:
print (’Nao foi possivel inserir o produto .’)
desconectar (conn)
if cursor . rowcount == 1:
print (f’O produto { nome } foi atualizado com sucesso .’)
else:
print (’Erro ao atualizar o produto .’)
desconectar (conn)
if cursor . rowcount == 1:
print (’Produto excluido com sucesso .’)
else:
print (’Erro ao excluir produto .’)
desconectar (conn)