Banco de Dados

Um banco de dados SQL (Structured Query Language) é um sistema que armazena, organiza e gerencia dados em formato estruturado, usando tabelas com linhas e colunas. Ele permite que os dados sejam consultados, inseridos, atualizados e deletados por meio da linguagem SQL. É amplamente usado em aplicações web, sistemas corporativos e softwares em geral por sua confiabilidade e capacidade de lidar com grandes volumes de informação de forma eficiente.


O que é um Database ?

Um banco de dados é um sistema organizado para armazenar, gerenciar e recuperar dados eletrônicos de maneira eficiente. Ele consiste em tabelas, onde cada linha representa uma entrada e as colunas representam atributos. Bancos de dados são amplamente usados em diversas áreas para gerenciar grandes volumes de informações, facilitando a organização e recuperação de dados. Sistemas de gerenciamento de banco de dados (SGBD) são usados para facilitar a criação, manutenção e consulta desses bancos de dados.

Dados Estruturados e Não Estruturados

Em resumo, dados estruturados seguem uma organização definida, enquanto dados não estruturados carecem dessa organização predefinida e podem assumir diversas formas. Ambos os tipos de dados são importantes, e a capacidade de lidar com ambos é fundamental em muitas aplicações de análise e tomada de decisão.


Tipos de Dados Primitivos

Comandos Mysql

Em um SGBD nós utilizamos de comandos para manipular dados, como inserções, edições ou visualizações, a seguir você irá aprender alguns dos comandos para manipular um banco de dados com o MySql Workbench.

Criar um database

-- Forma completa
CREATE DATABASE IF NOT EXISTS nomedodatabase
DEFAULT CHARACTER SET utf8
DEFAULT COLLATE utf8_general_ci; 
 
-- Forma simplificada
CREATE DATABASE nomedodatabase; 
 

Criar uma tabela

-- Forma simplificada
CREATE TABLE nomedatabela (
	nome VARCHAR(30),
	idade TINYINT(3),
	sexo CHAR(1),
	peso FLOAT,
	nacionalidade VARCHAR(20),
);
 
-- Forma mais completa
CREATE TABLE nomedatabela (
	id INT NOT NULL auto_increment,
	nome VARCHAR(30) NOT NULL,
	sexo ENUM('M','F'),
	peso DECIMAL(5,2),
	altura DECIMAL(3,2),
	nacionalidade VARCHAR(20) DEFAULT 'Brasil',
	PRIMARY KEY(id)
) DEFAULT CHARSET = utf8; 

Deletar tabela ou database

-- Deleta o banco de dados
DROP DATABASE nomedodatabase; 
 
-- Deleta a tabela
DROP TABLE nomedatabela; 

Inserindo dados em uma tabela

-- Formato padrão
INSERT INTO nomedatabela
(id, nome, nascimento, sexo, peso, altura, nacionalidade)
VALUES
(DEFAULT, 'Thiago', '2003-01-04', 'M', '59.5', '1.70', 'Brasil'); 
-- A data precisa ser no formato YYYY-MM-DD
 
-- Forma simplificada porém os dados precisam estar na mesma sequência da tabela
INSERT INTO nomedatabela VALUES
(DEFAULT, 'Thiago', '2003-01-04', 'M', '59.5', '1.70', 'Brasil');
 
-- Inserindo mais de um dado por vez
INSERT INTO nomedatabela
(id, nome, nascimento, sexo, peso, altura, nacionalidade)
VALUES
(DEFAULT, 'Emanuelle', '2003-03-22', 'F', '62.3,' '1.62', 'Brasil'),
(DEFAULT, 'Andreza', '2004-04-11', 'F', '55.6', '1.59', 'Brasil'),
(DEFAULT, 'Thiago', '2003-01-04', 'M', '59.5', '1.70', 'Brasil');

Descrevendo dados

DESCRIBE nomedatabela;
 
-- Formato simplificado
DESC nomedatabela; 

Alterando campos tabela

-- Adiciona a coluna no final da tabela
ALTER TABLE nomedatabela
ADD COLUMN nomedacoluna INT; 
 
-- Formato simplificado
ALTER TABLE nomedatabela
ADD nomedacoluna INT; 
 
-- Adiciona a coluna no início da tabela
ALTER TABLE nomedatabela
ADD COLUMN nomedacoluna INT FIRST; 
 
-- Adiciona a coluna após a coluna informada
ALTER TABLE nomedatabela
ADD COLUMN nomedacoluna INT AFTER nomedeoutracoluna;
 
/* O modify reescreve toda a coluna ou seja, se você não passar todas as contraints, 
ele irá deleta-las. (modify não muda o nome da coluna)
*/ 
ALTER TABLE nomedatabela
MODIFY COLUMN nomedacoluna VARCHAR(20) NOT NULL DEFAULT '';
 
-- Reescreve toda a coluna assim como o modify porém da a permissão de alterar o nome
ALTER TABLE nomedatabela
CHANGE COLUMN nomedacolunaatual nomedanovacoluna VARCHAR(20);
-- Esse comando é específico do MySQL. Em bancos como PostgreSQL ou SQL Server, o comando seria diferente.
 
-- Altera o nome da tabela
ALTER TABLE nomedatabela
CHANGE TO novonome;

Alterando dados da tabela

-- Altera os dados da tabela onde a chave primária é igual a 1
UPDATE nomedatabela
SET nomedocampo = 'Thiago', nomedocampo2 = '2003-01-04'
WHERE chaveprimaria = '1';
 
-- Deleta o registro de chave primária 1
DELETE FROM nomedatabela
WHERE chaveprimaria = '1';
 
-- Deleta todos os dados de uma tabela porém mantém sua estrutura
TRUNCATE TABLE nomedatabela;

Utilizando o select

--Seleciona todos os campos da tabela
SELECT * FROM nomedatabela; 
 
--Order by ordena pelo parâmetro passado, nesse caso, ordena pelo nome em ordem ascendente A-Z, 1-2 
SELECT * FROM nomedatabela ORDER BY nome; 
 
--Order by ordena pelo parâmetro passado nesse caso, ordena pelo nome em ordem descentente Z-A, 2-1
SELECT * FROM nomedatabela ORDER BY nome DESC; 
 
--Seleciona tudo que atenda a condição no where
SELECT * FROM nomedatabela WHERE id = '13'; 
SELECT * FROM nomedatabela WHERE ano >= '2016' AND carga > '40';
SELECT * FROM nomedatabela WHERE ano >= '2016' OR carga > '40';
/* Pode receber diversos operadores lógicos, os mais comuns são: =, !=, <, >, <=, >=, 
porém também existem o and, or e o in.
*/
 
-- O like procura por algo que inclua o que passano no parâmetro
SELECT * FROM nomedatabela WHERE nome LIKE 'silva';
 
--O notlike é o contrário do like, procura por registros que não incluam o que foi passado por parâmetro
SELECT * FROM nomedatabela WHERE nome NOT LIKE 'silva';
 
/* Existem 2 "coringas" para usar no select com o like, o "%" e o "_"
O "%" significa que pode ou não ter algo antes ou depois da palavra, seu uso depende da
sua localização, como nos exemplos:
*/
 
--Irá buscar por tudo que termine com "silva"
SELECT * FROM nomedatabela WHERE nome LIKE '%silva';
 
--Irá buscar por tudo que começe com "silva"
SELECT * FROM nomedatabela WHERE nome LIKE 'silva%';
 
--Irá buscar por tudo que inclua "silva" em qualquer lugar
SELECT * FROM nomedatabela WHERE nome LIKE '%silva%';
 
-- Procura o que estiver entre as duas condições
SELECT nome, ano FROM nomedatabela WHERE ano BETWEEN 2020 AND 2024;
 
-- Seleciona tudo porém mostra somente 1 vez as linhas duplicadas
SELECT DISTINCT nacionalidade FROM nomedatabela;
 
-- Retorna a quantidade de items encontrados
SELECT COUNT(*) FROM nomedatabela;
 
--Retorna o maior valor encontrado
SELECT MAX(totalaulas) FROM cursos WHERE ano = '2016';
 
--Retorna o menor valor encontrado
SELECT nome, MIN(totalaulas) FROM cursos WHERE ano = '2016';
 
--Retorna a soma dos valores
SELECT SUM(totalaulas) FROM cursos;
 
--Retorna a média dos valores
SELECT AVG(totalaulas) FROM cursos;

Relacionamentos, entidades e chaves

Relacionamentos

Um relacionamento de tabelas é uma conexão estabelecida entre duas ou mais tabelas em um banco de dados relacional. Esses relacionamentos permitem que os dados sejam vinculados e consultados de forma eficiente, permitindo uma melhor organização e estruturação dos dados.

Existem diferentes tipos de relacionamentos de tabelas, como o relacionamento 1 para 1 e o relacionamento 1 para muitos. No relacionamento 1 para 1, cada registro em uma tabela está associado a apenas um registro correspondente na outra tabela, já no relacionamento 1 para muitos, um registro em uma tabela pode estar associado a vários registros correspondentes em outra tabela, mas cada registro na segunda tabela está associado a apenas um registro na primeira tabela.

Esses relacionamentos são estabelecidos usando chaves primárias e chaves estrangeiras. A chave primária é um atributo único em uma tabela que identifica exclusivamente cada registro. A chave estrangeira é um atributo em uma tabela que faz referência à chave primária de outra tabela. Essas chaves são usadas para conectar os dados entre as tabelas, permitindo consultas complexas que combinam informações de várias tabelas.

Os relacionamentos de tabelas são fundamentais para a modelagem de dados em um banco de dados relacional, pois permitem a representação de vínculos entre os dados e a obtenção de informações mais completas e precisas por meio de consultas.

Entidades

Um conceito fundamental em SQL é o de entidades. Em um contexto de bancos de dados, uma entidade representa uma tabela, que é uma coleção de registros relacionados. Cada registro em uma tabela representa uma entrada individual de dados. As entidades são usadas para organizar e armazenar dados de maneira estruturada e eficiente.

No SQL, as entidades são criadas usando o comando CREATE TABLE, onde são definidos os nomes das colunas e os tipos de dados que cada coluna pode armazenar. As entidades também podem ser modificadas usando o comando ALTER TABLE, que permite adicionar, modificar ou excluir colunas de uma tabela existente.

As entidades são a base para a criação e manipulação de dados em um banco de dados SQL, permitindo a organização, recuperação e análise eficiente dos dados armazenados.


Atributos SQL

No SQL os atributos são basicamente as colunas de uma tabela. Cada atributo corresponde a um tipo de dado específico, como texto, número, data, entre outros. Os atributos definem a estrutura da tabela e determinam quais tipos de valores podem ser armazenados em cada coluna.

Os atributos têm propriedades, como restrições de integridade e valores padrão. As restrições de integridade garantem que os dados inseridos nas colunas estejam dentro de limites específicos, como valores mínimos e máximos. Os valores padrão especificam um valor predefinido que será inserido automaticamente em uma coluna se nenhum valor for fornecido durante a inserção de dados.

Os atributos desempenham um papel fundamental na definição da estrutura e organização dos dados em um banco de dados SQL. Eles fornecem informações sobre os tipos de dados que podem ser armazenados, as restrições aplicadas a esses dados e os relacionamentos entre as tabelas.


Chaves primárias e estrangeiras

Os atributos podem ter chaves primárias e estrangeiras. A chave primária identifica exclusivamente cada registro em uma tabela e garante a integridade dos dados. As chaves estrangeiras estabelecem relacionamentos entre tabelas, permitindo que os dados sejam conectados e consultados de maneira eficiente.

As tabelas podem ter relacionamentos uns com os outros por meio de chaves estrangeiras, que são colunas que fazem referência a uma chave primária em outra tabela. Esses relacionamentos permitem a criação de consultas complexas que combinam dados de várias tabelas. Os relacionamentos entre entidades são fundamentais para modelar e representar a estrutura e os vínculos dos dados em um banco de dados relacional.


Relacionamento 1 para 1

Um relacionamento 1 para 1 ocorre quando uma entidade está diretamente relacionada a apenas uma outra entidade. Isso significa que cada registro de uma entidade está associado a apenas um registro da outra entidade. Em outras palavras, para cada registro em uma tabela, há um único registro correspondente na tabela relacionada. Esse tipo de relacionamento é útil quando há uma dependência direta entre as entidades e é necessário garantir que cada registro tenha uma correspondência única no relacionamento.

Relacionamento 1 para N

Um relacionamento 1 para n, ou um relacionamento um para muitos, ocorre quando uma entidade está diretamente relacionada a várias instâncias de outra entidade. Nesse tipo de relacionamento, um registro em uma tabela pode estar associado a vários registros correspondentes em outra tabela, mas cada registro na segunda tabela está associado a apenas um registro na primeira tabela. Esse tipo de relacionamento é comumente utilizado para representar situações em que um único objeto ou entidade está relacionado a várias instâncias de outra entidade. Por exemplo, um cliente pode ter várias ordens de compra, mas cada ordem de compra está vinculada a apenas um cliente. Esse tipo de relacionamento é fundamental para modelar e representar a estrutura dos dados em bancos de dados relacionais.

Relacionamento N para N

Um relacionamento N para N, ou um relacionamento muitos para muitos, ocorre quando uma entidade está diretamente relacionada a várias instâncias de outra entidade e vice-versa. Nesse tipo de relacionamento, vários registros em uma tabela podem estar associados a vários registros correspondentes em outra tabela. Esse tipo de relacionamento é comumente utilizado para representar situações em que várias entidades estão interligadas de forma complexa. Por exemplo, em um sistema de gerenciamento de estudantes e disciplinas, vários estudantes podem se inscrever em várias disciplinas, e cada disciplina pode ter vários estudantes matriculados. Para modelar esse relacionamento, é necessário criar uma tabela intermediária que registre as associações entre as entidades, armazenando os identificadores das entidades relacionadas. Esse tipo de relacionamento é fundamental para representar a estrutura dos dados em bancos de dados relacionais e permite consultas e análises avançadas envolvendo múltiplas entidades interligadas.


Usando chaves estrangeiras e Joins

Chaves estrangeiras

Para cadastrar uma chave estrangeira em uma tabela, primeiro precisamos identificar a relação como diz acima, 1 para 1, 1 para N ou então N para N , feito isso seguimos as seguintes regras:

No relacionamento 1 para 1, colocamos a chave estrangeira na outra entidade, como no exemplo abaixo:

Exemplo de relacionamento 1 para 1


No relacionamento 1 para N, colocamos a chave estrangeira sempre no lado N, como no exemplo:

Exemplo de relacionamento 1 para N

O relacionamento N para N é um pouco mais complexo, precisamos criar outra entidade entre as duas que estamos relacionando e liga-las, como no exemplo abaixo:

Exemplo de relacionamento N pra N


Na prática, ligamos tabelas com chaves estrangeiras dessa maneira:

Feito isso o campo já estará configurado como uma chave estrangeira!

Utilizando o Join

O inner join e o outer join são operações comuns usadas para combinar dados de várias tabelas em consultas SQL.

💡 Tanto no INNER JOIN como no OUTER JOIN, as palavras INNER e OUTER são opcionais, porém no OUTER JOIN, precisa-se referenciar a direção, left, right ou full.

A utilização dessas operações de junção permite combinar dados de várias tabelas em consultas SQL, fornecendo informações mais completas e precisas para análise e tomada de decisão.

Command Palette

Search for a command to run...