Skip to content

Instantly share code, notes, and snippets.

@matealves
Last active August 29, 2024 23:13
Show Gist options
  • Save matealves/27e2e71ceff918c2e3a02bad66650ca8 to your computer and use it in GitHub Desktop.
Save matealves/27e2e71ceff918c2e3a02bad66650ca8 to your computer and use it in GitHub Desktop.

Introdução

SQL (Structured Query Language) é uma linguagem de programação padrão utilizada para gerenciar e manipular bancos de dados relacionais, utilizando o conceito de tabelas para organizar dados em linhas e colunas. Com SQL, você pode realizar uma ampla variedade de operações em bancos de dados, como criar, ler, atualizar e excluir dados. É uma linguagem declarativa, o que significa que você descreve o que deseja fazer sem precisar especificar como fazer.

Os bancos de dados relacionais utilizam SQL para gerenciar dados estruturados. Alguns dos principais sistemas de gerenciamento de banco de dados (SGBD) relacionais incluem:

  • MySQL: Um dos SGBDs mais populares e amplamente usados, especialmente para aplicações web. É conhecido por sua robustez e facilidade de uso.

  • PostgreSQL: Um SGBD avançado com suporte a extensões e uma ampla gama de recursos. É conhecido por sua conformidade com padrões SQL e suporte a tipos de dados avançados.

  • Microsoft SQL Server: Um SGBD desenvolvido pela Microsoft, conhecido por sua integração com outras ferramentas e serviços da Microsoft e por seu suporte a ambientes empresariais.

  • Oracle Database: Um SGBD de nível empresarial com robustos recursos de segurança e escalabilidade. Amplamente utilizado em grandes empresas para aplicações críticas.

Algumas ferramentas e interfaces para trabalhar com SQL incluem phpMyAdmin para MySQL, pgAdmin para PostgreSQL, SQL Server Management Studio (SSMS) para Microsoft SQL Server, e DBeaver, que suporta diversos SGBDs, incluindo MySQL, PostgreSQL, SQL Server, e Oracle.

Tipos de Dados das Colunas

Os tipos de dados definem o tipo de valor que cada coluna em uma tabela pode armazenar. Eles podem variar de números inteiros a textos e datas.

Aqui estão os mais usados: *Existem outros tipos de dados mais específicos para determinado caso.

  • INT: Armazena números inteiros.

  • VARCHAR: Armazena cadeias de texto de comprimento variável. O comprimento máximo deve ser especificado.

  • TEXT: Armazena grandes quantidades de texto. Ideal para descrições longas ou textos maiores.

  • FLOAT: Armazena números de ponto flutuante com precisão simples. Usado para valores numéricos com casas decimais, como preços.

  • DOUBLE: Semelhante ao FLOAT, mas com precisão dupla. Usado para valores numéricos que exigem mais precisão.

  • DECIMAL: Armazena números decimais com precisão fixa. É usado para valores monetários ou outros dados que exigem um número fixo de casas decimais.

  • DATE: Armazena datas no formato YYYY-MM-DD.

  • DATETIME: Armazena datas e horas no formato YYYY-MM-DD HH:MM:SS.

  • TIMESTAMP: Similar ao DATETIME, mas é usado para rastrear alterações no tempo, geralmente associado ao horário UTC.

  • BOOLEAN (TINYINT(1)): Armazena valores booleanos (true/false). Internamente, é representado como TINYINT(1), onde 0 é false e 1 é true.

  • BLOB: Armazena grandes objetos binários, como imagens ou arquivos.

  • ENUM: Armazena valores que são escolhidos a partir de uma lista de valores predefinidos.

No exemplo a seguir, veja algumas colunas, com tipos de dados e restrições:

CREATE TABLE produtos (
    id INT PRIMARY KEY AUTO_INCREMENT,       -- 1
    nome VARCHAR(255) NOT NULL,              -- 'Mateus'
    descricao TEXT,                         -- 'Descrição detalhada do produto'
    preco DECIMAL(10, 2) NOT NULL,          -- 99.99
    data_lancamento DATE,                   -- '2024-08-23'
    em_estoque BOOLEAN DEFAULT 1,           -- 1 (true)
    categoria ENUM('Feminino', 'Masculino') NOT NULL  -- 'Masculino'
);

Restrições Opcionais

NOT NULL:

A restrição NOT NULL é usada para garantir que uma coluna não aceite valores nulos. Isso significa que ao inserir ou atualizar registros, essa coluna deve sempre ter um valor.

CREATE TABLE clientes (
    id INT,
    nome VARCHAR(100) NOT NULL  -- Nome obrigatório
);

AUTO_INCREMENT:

O atributo AUTO_INCREMENT é usado em colunas de chave primária para gerar automaticamente um número sequencial e único sempre que um novo registro é inserido. É comum em colunas de identificação (id).

CREATE TABLE pedidos (
    id INT PRIMARY KEY AUTO_INCREMENT,  -- ID gerado automaticamente
    descricao VARCHAR(255)
);

UNIQUE:

A restrição UNIQUE é usada para garantir que todos os valores em uma coluna ou conjunto de colunas sejam únicos. Isso significa que nenhum valor duplicado é permitido na coluna onde a restrição UNIQUE é aplicada. É útil, por exemplo, para garantir que não existam dois registros com o mesmo e-mail em uma tabela de usuários.

CREATE TABLE usuarios (
    id INT PRIMARY KEY AUTO_INCREMENT,
    email VARCHAR(100) UNIQUE NOT NULL -- Garante que o email seja único e obrigatório
);

CHECK:

A restrição CHECK é usada para definir uma condição que os valores de uma coluna devem satisfazer. Se um valor que não atende a essa condição for inserido, o banco de dados rejeitará a operação. Essa restrição é útil para garantir a integridade dos dados, por exemplo, assegurando que um valor numérico esteja dentro de um intervalo aceitável.

CREATE TABLE produtos (
    id INT PRIMARY KEY AUTO_INCREMENT,
    preco FLOAT CHECK (preco > 0) -- Garante que o preço seja sempre maior que 0
)

DEFAULT:

A cláusula DEFAULT define um valor padrão para uma coluna, caso nenhum valor seja especificado durante a inserção do registro. Isso é útil para garantir que a coluna sempre tenha um valor, mesmo se o usuário não fornecer um.

CREATE TABLE produtos (
    id INT,
    nome VARCHAR(100) NOT NULL,
    quantidade INT DEFAULT 0  -- Quantidade padrão é 0
);

PRIMARY KEY (CHAVE PRIMÁRIA):

A chave primária é um identificador único para cada registro em uma tabela. Ela garante que cada registro seja distinto e facilita a busca e relacionamento entre tabelas.

CREATE TABLE exemplo (
    id INT PRIMARY KEY,
    nome VARCHAR(100)
);

FOREIGN KEY (CHAVE ESTRANGEIRA):

A chave estrangeira é um campo que cria um vínculo entre duas tabelas. Ela referencia a chave primária de outra tabela, estabelecendo uma relação entre os dados.

CREATE TABLE pedidos (
    id INT PRIMARY KEY,
    cliente_id INT,
    FOREIGN KEY (cliente_id) REFERENCES clientes(id)
    ON DELETE SET NULL ON UPDATE CASCADE;
);

ON DELETE e ON UPDATE são cláusulas usadas em chaves estrangeiras para definir o comportamento de uma tabela filha quando um registro na tabela pai é excluído ou atualizado. Essas cláusulas ajudam a manter a integridade referencial entre tabelas, garantindo que os relacionamentos entre registros sejam gerenciados de forma consistente.

Resumo de alguns valores utilizados:
  • CASCADE: Propaga mudanças (exclusão ou atualização) para as tabelas referenciadas.
  • RESTRICT: Impede alterações na tabela pai se houver registros referenciando na tabela filha.
  • SET NULL: Define a coluna da chave estrangeira como NULL se o registro na tabela pai for excluído ou atualizado.
  • SET DEFAULT: Define a coluna da chave estrangeira para um valor padrão se o registro na tabela pai for excluído ou atualizado.

Escolher a ação correta depende do comportamento desejado para manter a integridade dos dados e a lógica de negócios do seu aplicativo.

ALTER TABLE pedidos
ADD CONSTRAINT fk_cliente
FOREIGN KEY (cliente_id)
REFERENCES clientes(id)
ON DELETE CASCADE
ON UPDATE CASCADE;

Comandos SQL

Principais comandos SQL:

  • CREATE TABLE: Cria novas tabelas no banco de dados.
  • INSERT INTO: Adiciona novos registros a uma tabela.
  • SELECT: Recupera dados de uma ou mais tabelas.
  • UPDATE: Modifica registros existentes em uma tabela.
  • DELETE: Remove registros de uma tabela.
  • ALTER TABLE: Modifica a estrutura de uma tabela existente.
  • DROP TABLE: Remove uma tabela do banco de dados.

CREATE TABLE:

O comando CREATE TABLE é usado para criar uma nova tabela em um banco de dados. Ele define a estrutura da tabela, especificando as colunas, seus tipos de dados, e as restrições que serão aplicadas.

Resumo
  • nome_da_tabela: Nome da tabela que você está criando.
  • nome_da_coluna: Nome de cada coluna na tabela.
  • tipo_de_dado: O tipo de dado que cada coluna armazenará (como INT, VARCHAR, DATE, etc.).
  • restrições_opcionais: Restrições adicionais para as colunas, como PRIMARY KEY, NOT NULL, UNIQUE, DEFAULT, etc.
CREATE TABLE nome_da_tabela (
    nome_da_coluna1 tipo_de_dado restrições_opcionais,
    nome_da_coluna2 tipo_de_dado restrições_opcionais,
    ...
);
CREATE TABLE usuarios (
    id INT PRIMARY KEY AUTO_INCREMENT,      -- Chave primária com auto incremento
    nome VARCHAR(100) NOT NULL,             -- Nome obrigatório
    email VARCHAR(100) UNIQUE NOT NULL,     -- Email único e obrigatório
    idade INT DEFAULT 18,                   -- Idade com valor padrão
    saldo FLOAT CHECK (saldo >= 0),         -- Saldo com restrição de valor mínimo
    data_cadastro DATE DEFAULT CURRENT_DATE -- Data de cadastro com valor padrão
);

INSERT INTO

O comando INSERT em SQL é utilizado para adicionar novos registros a uma tabela existente em um banco de dados. Ele permite especificar quais valores serão inseridos nas colunas da tabela. O INSERT pode ser usado para inserir uma única linha ou várias linhas ao mesmo tempo.

A sintaxe básica do comando INSERT é:

INSERT INTO tabela (coluna1, coluna2, ...)
VALUES (valor1, valor2, ...);
Resumo
  • INSERT INTO: Especifica a tabela para inserção.
  • (coluna1, coluna2, ...): Lista as colunas onde os dados serão inseridos.
  • VALUES: Define os valores a serem inseridos.
  • (valor1, valor2, ...): Especifica os valores para cada coluna.
Componentes do Comando INSERT
  1. INSERT INTO

    • Descrição: Indica a tabela na qual você deseja inserir os dados.
    • Exemplo: INSERT INTO clientes
  2. (coluna1, coluna2, ...)

    • Descrição: Lista as colunas nas quais os valores serão inseridos. As colunas devem ser especificadas na mesma ordem em que os valores são fornecidos.
    • Exemplo: (nome, idade, email)
  3. VALUES

    • Descrição: Especifica os valores a serem inseridos nas colunas da tabela.
    • Exemplo: VALUES ('João', 25, '[email protected]')
  4. (valor1, valor2, ...)

    • Descrição: Os valores que serão inseridos nas colunas especificadas. Os valores devem corresponder à ordem e ao tipo de dados das colunas.
    • Exemplo: ('João', 25, '[email protected]')
Exemplos Práticos
  1. Inserir um Único Registro
INSERT INTO clientes (nome, idade, email)
VALUES ('Ana', 30, '[email protected]');
  1. Inserir Múltiplos Registros
INSERT INTO produtos (nome, preco, estoque)
VALUES
  ('Notebook', 1500, 10),
  ('Mouse', 25, 100),
  ('Teclado', 75, 50);
  1. Inserir Valores em Todas as Colunas Se você deseja inserir valores em todas as colunas da tabela e na ordem em que elas foram definidas, pode omitir a lista de colunas:
INSERT INTO clientes
VALUES ('Carlos', 40, '[email protected]');
  1. Inserir Dados com Valores Padrão Se a tabela tem colunas com valores padrão definidos, você pode omitir essas colunas ao inserir dados:
INSERT INTO pedidos (cliente_id, produto_id)
VALUES (1, 3);

Neste exemplo, as colunas não especificadas (por exemplo, data_pedido) usarão o valor padrão definido na tabela.

O comando INSERT é fundamental para adicionar dados ao banco de dados e é frequentemente usado em combinação com outros comandos SQL para gerenciar e manipular dados de forma eficaz.

Transações

Transações são um conjunto de operações SQL que são executadas como uma única unidade de trabalho. Elas garantem que um grupo de operações seja completado com sucesso antes de confirmar as mudanças no banco de dados. Se qualquer operação dentro da transação falhar, todas as operações podem ser revertidas, garantindo a integridade dos dados.

Por que usar Transações?
  1. Consistência dos Dados: Garante que o banco de dados esteja sempre em um estado consistente. Se uma parte de uma operação falhar, toda a operação pode ser desfeita.
  2. Controle de Conflitos: Em ambientes com alta concorrência, transações ajudam a controlar acessos simultâneos e evitar conflitos.
Como Usar Transações?

No MySQL, você pode usar as instruções START TRANSACTION, COMMIT e ROLLBACK para gerenciar transações.

  • START TRANSACTION: Inicia uma nova transação.
  • COMMIT: Salva todas as mudanças feitas durante a transação.
  • ROLLBACK: Desfaz todas as mudanças feitas durante a transação.

Exemplo de Uso de Transações

START TRANSACTION;

INSERT INTO clientes (nome, idade, email)
VALUES ('Laura', 28, '[email protected]');

INSERT INTO pedidos (cliente_id, produto_id)
VALUES (LAST_INSERT_ID(), 5);

-- Se ambos os comandos forem bem-sucedidos, confirme a transação.
COMMIT;

-- Se algo der errado, desfazer a transação.
-- ROLLBACK;
  • No Oracle, as transações começam automaticamente quando você executa uma instrução SQL que modifica dados, como INSERT, UPDATE, ou DELETE. Não há uma instrução explícita START TRANSACTION como em alguns outros sistemas de gerenciamento de banco de dados.

  • COMMIT e ROLLBACK tem as mesmas características.

SELECT

O comando SELECT é uma das instruções mais fundamentais e amplamente usadas em SQL para consultar e recuperar dados de uma ou mais tabelas em um banco de dados relacional. Ele permite especificar quais colunas você deseja recuperar, de quais tabelas, e aplicar várias condições e filtros para refinar os resultados.

A sintaxe básica do comando SELECT é:

SELECT coluna1, coluna2, ...
FROM tabela
WHERE condição
ORDER BY coluna
LIMIT número;
Resumo
  • SELECT: Especifica as colunas a serem retornadas.
  • FROM: Indica a tabela de onde os dados serão recuperados.
  • WHERE: Filtra registros com base em uma condição.
  • ORDER BY: Ordena os resultados.
  • LIMIT: Restringe o número de registros retornados.
  • GROUP BY: Agrupa registros com valores semelhantes.
  • HAVING: Filtra dados agrupados.
  • COUNT: Conta o número de registros(não nulos).
  • SUM: Soma todos os valores numéricos
  • AVG: Calcula a média aritmética.
  • AND: Operador 'E'.
  • OR: Operador 'OU'.
  • BETWEEN: Filtra registros que estão ENTRE 2 valores.
  • IN: Filtra registros com mais de um valor passado.
  • LIKE: Verifica se alguma coluna contém o valor parcial passado.
  • NOT LIKE: Verifica se alguma coluna NÃO contém o valor parcial passado.
  • JOIN:  Combinar linhas de duas ou mais tabelas.
Componentes do Comando SELECT
  1. SELECT

    • Descrição: Especifica quais colunas devem ser retornadas na consulta. Pode ser uma lista de colunas ou um asterisco (*) para selecionar todas as colunas.
    • Exemplo: SELECT nome, idade FROM pessoas;
    • Exemplo com todas as colunas: SELECT * FROM pessoas;
  2. FROM

    • Descrição: Indica a tabela de onde os dados serão recuperados.
    • Exemplo: FROM pessoas;
  3. WHERE

    • Descrição: Define uma condição para filtrar os registros retornados. Apenas os registros que atendem à condição serão incluídos no resultado.
    • Exemplo: WHERE idade > 18;
    • Exemplo completo: SELECT nome FROM pessoas WHERE idade > 18;
  4. ORDER BY

    • Descrição: Especifica a ordem dos resultados. Pode ordenar por uma ou mais colunas e em ordem crescente (ASC, padrão) ou decrescente (DESC).
    • Exemplo: ORDER BY idade DESC;
    • Exemplo completo: SELECT nome, idade FROM pessoas ORDER BY idade DESC;
  5. LIMIT

    • Descrição: Restringe o número de registros retornados pela consulta. É útil para paginar resultados ou obter um subconjunto específico de dados.
    • Exemplo: LIMIT 5;
    • Exemplo completo: SELECT * FROM pessoas LIMIT 5;
  6. GROUP BY

    • Descrição: Agrupa os registros que têm valores idênticos em colunas especificadas. Frequentemente usado em combinação com funções de agregação (como COUNT, SUM, AVG).
    • Exemplo: GROUP BY departamento;
    • Exemplo completo: SELECT departamento, COUNT(*) FROM empregados GROUP BY departamento;
  7. HAVING

    • Descrição: Filtra os resultados agregados pelo GROUP BY. Semelhante ao WHERE, mas aplicável a grupos de dados.
    • Exemplo: HAVING COUNT(*) > 10;
    • Exemplo completo: SELECT departamento, COUNT(*) FROM empregados GROUP BY departamento HAVING COUNT(*) > 10;
  8. COUNT

    • Descrição: Conta o número de registros(não nulos) em uma coluna ou tabela.
    • Exemplo: SELECT COUNT(*) FROM tabela; conta o número total de registros na tabela.
  9. SUM

    • Descrição: Soma todos os valores numéricos em uma coluna especificada.
    • Exemplo: SELECT SUM(preco) FROM produtos; soma todos os valores na coluna preco.
  10. AVG

    • Descrição: Calcula a média aritmética dos valores numéricos na coluna especificada.
    • Exemplo: SELECT AVG(salario) FROM empregados; calcula a média dos valores na coluna salario.
  11. AND

    • Descrição: Permite verificar se múltiplas condições são verdadeiras para filtrar registros.
    • Exemplo: SELECT * FROM produtos WHERE preco >= 50 AND preco <= 100; exibe produtos que custam entre 50 e 100 reais.
  12. OR

    • Descrição: Permite verificar se ao menos uma das múltiplas condições, é verdadeira para filtrar registros.
    • Exemplo: SELECT * FROM clientes WHERE novo = true OR pontos >= 100; exibe novos clientes e clientes com mais de 100 pontos para participar de uma promoção.
  13. BETWEEN

    • Descrição: Permite filtrar registros que estão ENTRE 2 valores.
    • Exemplo: SELECT * FROM produtos WHERE preco BETWEEN 50 AND 100 exibe produtos que custam entre 50 e 100 reais.
  14. IN

    • Descrição: Permite filtrar registros com mais de um valor passado.
    • Exemplo: SELECT * FROM produtos WHERE id_fornecedor IN (2, 5, 6) exibe produtos dos fornecedores 2, 5 e 6.
  15. LIKE

    • Descrição: Verifica se alguma coluna contém o valor parcial passado.
    • Exemplo: SELECT * FROM clientes WHERE nome LIKE '%a'; exibe clientes que começam com a letra 'A'.
  16. NOT LIKE

    • Descrição: Verifica se alguma coluna NÃO contém o valor parcial passado.
    • Exemplo: SELECT * FROM clientes WHERE nome NOT LIKE '%g%'; exibe clientes que NÃO tenham a letra 'G'.
  17. JOIN

    • Descrição: Combinar linhas de duas ou mais tabelas, com base em uma coluna relacionada entre elas.
    • Exemplo: SELECT * FROM produtos WHERE id_fornecedor IN (2, 5, 6) exibe produtos dos fornecedores 2, 5 e 6.
Exemplos Práticos
  1. Selecionar Colunas Específicas
SELECT nome, salario FROM empregados;
  1. Selecionar Todos os Registros
SELECT * FROM produtos;
  1. Filtrar Resultados
SELECT nome FROM clientes WHERE idade < 30;
  1. Ordenar Resultados
-- Se tiver pessoas com a mesma idade, ordena esses pelo nome
SELECT nome, idade FROM pessoas ORDER BY idade DESC, nome ASC;
  1. Limitar o Número de Registros
SELECT nome FROM pessoas LIMIT 5;

-- exibir 5 itens a partir do 10º (página 3)
SELECT nome FROM pessoas LIMIT 10,5;
  1. Agrupar e Agregar Dados
SELECT departamento, COUNT(*) FROM empregados GROUP BY departamento;
  1. Filtrar Resultados Agregados
SELECT departamento, AVG(salario) AS media_salario
FROM empregados 
GROUP BY departamento
HAVING AVG(salario) > 5000;
  1. Filtrar produtos que custam entre 50 e 100 reais
SELECT * FROM produtos WHERE preco >= 50 AND preco <= 100;
  1. Filtrar carros preto ou vermelho
SELECT * FROM carros WHERE cor = 'preto' OR cor = 'vermelho';
  1. Filtrar produtos que custam entre 150 e 300 reais ou do fornecedor 1485
SELECT * FROM produtos
WHERE (preco >= 150 AND preco <= 300) OR id_fornecedor = 1485;
  1. Filtrar produtos que custam entre 150 e 300 reais
SELECT * FROM produtos
WHERE preco BETWEEN 150 AND 300;
  1. Filtrar produtos dos fornecedores 1 e 6
SELECT * FROM produtos
WHERE id_fornecedor IN (1, 6);
  1. Filtrar clientes que comecem, terminem ou contenha determinado valor
-- Busca por qualquer valor que comece com "Jo":
SELECT * FROM clientes
WHERE nome LIKE 'Jo%';

-- Busca por qualquer valor que termine com "da":
SELECT * FROM clientes
WHERE nome LIKE '%da';

-- Busca por qualquer valor que tenha "an" no meio:
SELECT * FROM clientes
WHERE nome LIKE '%an%';

-- Busca por valores com exatamente 3 caracteres, começando com "A":
SELECT * FROM clientes
WHERE nome LIKE 'A__';

-- Busca por qualquer valor que NÃO tenha a letra "A":
SELECT * FROM clientes
WHERE nome NOT LIKE '%a%';
  1. Buscar dados de outras tabelas utilizando Subquery (ruim de performance)
-- Busca o nome do fornecedor em outra tabela pelo id_fornecedor
SELECT id, nome,
(SELECT fornecedores.nome FROM fornecedores WHERE fornecedores.id = produtos.id_fornecedor) AS nome_fornecedor
FROM produtos;

-- Também é possível usar Subquery no WHERE
SELECT * FROM produtos
WHERE (SELECT fornecedores.name FROM fornecedores WHERE fornecedores.id = products.id_fornecedor) = 'Microsoft';
  1. Combinar linhas de duas ou mais tabelas, com base em uma coluna relacionada entre elas, utilizando JOIN
-- Busca o nome do fornecedor em outra tabela pelo id_fornecedor
SELECT produtos.id, produtos.name, produtos.price, produtos.stock, fornecedores.name AS fornecedor
FROM products
LEFT JOIN fornecedores ON
fornecedores.id = produtos.id_supplier

-- Outra opção para exibir todas as colunas da tabela 'produtos'
SELECT produtos.*, fornecedores.name AS fornecedor
FROM...
  • LEFT JOIN: Retorna TODOS os registros da TabelaAapenas os registros que coincidirem com a cláusula ON do JOIN na TabelaB (ou campos nulos para os campos sem correspondência) *Mais utilizado!;

  • RIGHT JOIN: Retorna TODOS os registros da TabelaBapenas os registros que coincidirem com a cláusula ON do JOIN na TabelaA (ou campos nulos para os campos sem correspondência);

  • INNER JOIN: Só vai retornar o registro se ele tiver uma relação entre a tabela TabelaA e a TabelaB na cláusula ON do JOIN, ou seja, se houverem mais registros em uma tabela do que na outra ou registros sem relações entre as chaves das duas tabelas, esses não serão exibidos.

  • FULL OUTER JOIN: retorna TODOS os registros de ambas as tabelas.

  • CROSS JOIN: Basicamente é o produto cartesiano entre as duas tabelas. Para cada linha de TabelaA, são retornadas todas as linhas de TabelaB. É mais fácil entender o CROSS JOIN como um "JOIN sem cláusula ON", ou seja, todas as combinações de linhas de A e B são devolvidas. Inclusive, se você fizer um CROSS JOIN com cláusula ON, ele "vira" um mero INNER JOIN.

SELECT TabelaA.*, TabelaB.* FROM TabelaA CROSS JOIN TabelaB 

-- Ou ainda:
SELECT TabelaA.*, TabelaB.* FROM TabelaA, TabelaB 

O comando SELECT é a base para a maioria das operações de consulta de dados em SQL e pode ser combinado com outras cláusulas para criar consultas complexas e eficientes.

UPDATE

O comando UPDATE em SQL é usado para modificar dados existentes em uma tabela. Aqui está um exemplo básico que demonstra como usar o UPDATE para alterar valores em uma tabela.

A sintaxe básica do comando SELECT é:

UPDATE tabela
SET coluna1 = valor1, coluna2 = valor2, ...
WHERE condição;
Resumo
  • UPDATE: Modifica os dados existentes em uma tabela.
  • SET: Define novos valores para uma ou mais colunas.
  • WHERE: Filtra os registros a serem atualizados. Sem WHERE, todos os registros são atualizados.
Componentes da Sintaxe
  • UPDATE tabela: Especifica a tabela que você deseja atualizar.
  • SET coluna1 = valor1, coluna2 = valor2, ...: Define os novos valores para uma ou mais colunas.
  • WHERE condição: Filtra os registros que devem ser atualizados. Sem a cláusula WHERE, todos os registros na tabela serão atualizados.
Exemplo de Uso do UPDATE

Suponha que você tenha uma tabela chamada clientes com as seguintes colunas: id, nome, idade, e email. Se você deseja atualizar o e-mail de um cliente específico, você pode usar o UPDATE da seguinte forma:

-- Atualiza o e-mail do cliente com id 5
UPDATE clientes
SET email = '[email protected]'
WHERE id = 5;
Explicação:
  • UPDATE clientes: Indica que a tabela clientes será atualizada.
  • SET email = '[email protected]': Define o novo valor do e-mail para o cliente.
  • WHERE id = 5: Especifica que somente o cliente com id igual a 5 deve ser atualizado.
Exemplo com Múltiplas Colunas

Se você quiser atualizar mais de uma coluna, você pode fazer isso na mesma instrução UPDATE:

-- Atualiza o nome e a idade do cliente com id 3
UPDATE clientes
SET nome = 'Carlos Silva', idade = 30
WHERE id = 3;
Explicação:
  • SET nome = 'Carlos Silva', idade = 30: Define os novos valores para as colunas nome e idade.
  • WHERE id = 3: Filtra para garantir que somente o cliente com id igual a 3 seja atualizado.
Atualizando Todos os Registros

Se você omitir a cláusula WHERE, todos os registros da tabela serão atualizados:

-- Atualiza o e-mail de todos os clientes
UPDATE clientes
SET email = '[email protected]';
Explicação:
  • SET email = '[email protected]': Define o mesmo valor para a coluna email de todos os registros.
  • Sem WHERE: Todos os registros na tabela clientes serão atualizados.

O comando UPDATE é essencial para manter os dados em uma base de dados atualizados e precisos.

DELETE

O comando DELETE em SQL é usado para remover registros de uma tabela. Aqui está um exemplo básico de como usar o DELETE para excluir registros.

A sintaxe básica do comando DELETE é:

DELETE FROM tabela
WHERE condição;
Resumo
  • DELETE: Remove registros de uma tabela.
  • WHERE: Filtra os registros a serem excluídos. Sem WHERE, todos os registros serão excluídos.
Componentes da Sintaxe
  • DELETE FROM tabela: Especifica a tabela da qual os registros serão excluídos.
  • WHERE condição: Filtra os registros que devem ser excluídos. Sem a cláusula WHERE, todos os registros na tabela serão excluídos.
Exemplo de uso do DELETE

Suponha que você tenha uma tabela chamada clientes com as colunas id, nome, idade, e email. Se você deseja excluir um cliente específico, pode usar o DELETE da seguinte forma:

-- Exclui o cliente com id 5
DELETE FROM clientes
WHERE id = 5;
Explicação:
  • DELETE FROM clientes: Indica que a tabela clientes será alvo da operação de exclusão.
  • WHERE id = 5: Especifica que apenas o registro com id igual a 5 deve ser excluído.
Exemplo com Condição Múltipla

Se você quiser excluir registros com base em mais de uma condição, pode fazer isso na mesma instrução DELETE:

-- Exclui clientes com idade maior que 60 e que tenham o email '[email protected]'
DELETE FROM clientes
WHERE idade > 60 AND email = '[email protected]';
Explicação:
  • WHERE idade > 60 AND email = '[email protected]': Especifica que somente os registros que atendem a ambas as condições serão excluídos.
Excluir Todos os Registros

Se você omitir a cláusula WHERE, todos os registros da tabela serão excluídos:

-- Exclui todos os registros da tabela clientes
DELETE FROM clientes;
Explicação:
  • Sem WHERE: Todos os registros na tabela clientes serão excluídos.
IMPORTANTE: Usar DELETE com cuidado
  • Atenção: Sempre tenha cuidado ao usar o DELETE, especialmente sem a cláusula WHERE, pois isso removerá todos os dados da tabela, o que pode ser irreversível, a menos que você tenha um backup ou transações em uso.

O comando DELETE é uma ferramenta poderosa para gerenciar e limpar os dados em uma base de dados, mas deve ser usado com cautela para evitar a remoção acidental de informações importantes.

ALTER TABLE

O comando ALTER TABLE em SQL é utilizado para modificar a estrutura de uma tabela existente, permitindo adicionar, modificar, ou remover colunas, bem como aplicar ou remover restrições. Aqui está um exemplo de como usar ALTER TABLE para realizar algumas operações comuns.

A sintaxe básica do comando ALTER TABLE é:

ALTER TABLE nome_da_tabela
    [operação específica];
Operações Comuns com ALTER TABLE
  1. Adicionar uma Coluna
  2. Modificar uma Coluna
  3. Remover uma Coluna
  4. Adicionar uma Restrição
  5. Remover uma Restrição
Resumo das Operações
  • ADD: Usado para adicionar uma nova coluna ou uma nova restrição.
  • MODIFY: Usado para modificar a definição de uma coluna existente.
  • DROP COLUMN: Usado para remover uma coluna.
  • ADD CONSTRAINT: Usado para adicionar uma restrição, como UNIQUE ou FOREIGN KEY.
  • DROP INDEX: Usado para remover uma restrição UNIQUE (em alguns SGBDs, o comando pode variar).
Exemplos Práticos
1. Adicionar uma Coluna

Vamos adicionar uma nova coluna chamada data_nascimento do tipo DATE à tabela clientes.

ALTER TABLE clientes
ADD data_nascimento DATE;
2. Modificar uma Coluna

Agora, vamos modificar a coluna nome para que ela aceite até 150 caracteres em vez de 100.

ALTER TABLE clientes
MODIFY nome VARCHAR(150);
3. Remover uma Coluna

Se você quiser remover a coluna data_nascimento que acabamos de adicionar, pode usar o seguinte comando:

ALTER TABLE clientes
DROP COLUMN data_nascimento;
4. Adicionar uma Restrição UNIQUE

Vamos adicionar uma restrição UNIQUE à coluna email para garantir que todos os valores nesta coluna sejam únicos.

ALTER TABLE clientes
ADD CONSTRAINT name_constraint UNIQUE (email);
5. Remover uma Restrição UNIQUE

Se precisar remover a restrição UNIQUE do email, você usaria:

ALTER TABLE clientes
DROP CONSTRAINT name_constraint;

DROP TABLE

O comando DROP TABLE em SQL é usado para excluir uma tabela existente de um banco de dados, incluindo todos os dados armazenados nela e a estrutura da tabela. Após executar o comando DROP TABLE, a tabela e todos os seus registros serão permanentemente removidos.

A sintaxe básica do comando DROP TABLE é:

DROP TABLE nome_da_tabela;
Exemplo de Uso do DROP TABLE

Suponha que você tenha uma tabela chamada clientes que você não precisa mais. Para remover essa tabela, você utilizaria o seguinte comando:

DROP TABLE clientes;
Explicação:
  • DROP TABLE: Indica que você deseja excluir uma tabela do banco de dados.
  • clientes: Nome da tabela que será removida.
Cuidado ao Usar DROP TABLE
  • Permanência: O comando DROP TABLE é permanente e não pode ser desfeito. Todos os dados na tabela serão perdidos.
  • Relacionamentos: Se a tabela estiver envolvida em relações de chave estrangeira (FK), a exclusão pode falhar ou impactar outras tabelas, dependendo das regras de integridade referencial definidas (como CASCADE ou RESTRICT).
Exemplo com Várias Tabelas

Você também pode excluir múltiplas tabelas ao mesmo tempo:

DROP TABLE clientes, pedidos, produtos;

Neste exemplo, as tabelas clientes, pedidos, e produtos serão todas excluídas do banco de dados.

O comando DROP TABLE é uma ferramenta poderosa que deve ser usada com cautela, pois exclui permanentemente a tabela e todos os dados nela contidos. Antes de executar, é sempre uma boa ideia garantir que a tabela e seus dados não sejam mais necessários.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment