- Criar banco de dados:
CREATE DATABASE Banco;
- Deletar banco de dados:
DROP DATABASE Banco;
O comando SELECT permite recuperar os dados de um objeto do banco de dados, como uma tabela, view. O Comando Distinct quando passado, retorna apenas dados únicos
- Selecionar todas as colunas de uma tabela:
SELECT * FROM Pessoas;
- Selecionar uma ou mais colunas de uma tabela:
SELECT Nome, Idade FROM Pesoas;
- Select com Distinc, (Selecionar dados únicos, omitindo os outros):
SELECT DISTINCT Nome FROM Pessoas;
A cláusula Where permite ao comando SQL passar condições de filtragem.
-
= : Igual
-
>, <, >=, <= : Maior, Menor, Maior ou Igual, Menor ou Igual
-
<>: Diferente
-
AND: Operador Lógico E
-
OR: Operador Lógico OU
-
Selecionar dados com condições:
SELECT * FROM Pessoas WHERE Nome = 'Ednan' AND Sobrenome = 'Dias';
SELECT * FROM Produto WHERE Escala = '1:18' OR Escala = '1:10';
SELECT * FROM Produto WHERE Preço <= 50;
SELECT * FROM Produto WHERE Preço >= 25 AND Preço <= 50;
SELECT * FROM Produto WHERE Escala <> '1:10';
SELECT * FROM Produto WHERE Peso >= 500 AND Peso <= 700;
A função Count() retorna o número de registros em uma tabela.
- Selecionar contagem de todos os dados:
SELECT COUNT(*) FROM Pesoas;
- Selecionar contagem de algo especifíco:
SELECT COUNT(Nome) FROM Pessoas;
- Selecionar contagem de algo único:
SELECT COUNT(DISTINCT Nome) FROM Pessoas;
O Comando Limit, limita a filtragem dos dados.
- Selecionar dados com um limite:
SELECT * FROM Pessoas LIMIT 10;
O comando Order By, determina a ordem de apresentação do resultado de uma pesquisa de forma ascendente ou descendente.
- ASC: CRESCENTE, DESC: DECRESCENTE
SELECT * FROM Pessoas ORDER BY Nome ASC;
SELECT * FROM Pessoas ORDER BY Nome ASC, Sobrenome DESC;
SELECT Nome, Sobrenome FROM Pessoas ORDER BY Nome DESC LIMIT 10;
Esse operador é usado quando precisamos recuperar as linhas de uma tabela cujo valor de um campo encontra-se em um intervalo especificado.
Quando passado o valor NOT, ele faz inverso do que ele faria, ou seja, se vc quisesse que ele retornasse valores que são maiores que 50, com o NOT, ele pegaria os que NÂO são maiores que 50.
- Encontrar valores que estão entre tais valores:
SELECT * FROM Produto WHERE Preço BETWEEN 1000 AND 1500;
- Encontrar valores que não estão entre tais valores (Usar o NOT):
SELECT * FROM Produto WHERE Preço NOT BETWEEN 1000 AND 1500;
SELECT Data FROM Produto WHERE Data BETWEEN '2000/01/01' AND '2003/12/31' ORDER BY Data ASC;
O operador IN é utilizado quando desejamos consultar uma tabela, filtrando o valor de um de seus campos a partir de uma lista e possibilidades.
SELECT * FROM Pessoas WHERE ID IN (2,7,13);
O operador LIKE é utilizado para buscar por uma determinada string dentro de um campo com valores textuais.
- Like '%to': Procurar algo que no final, termine com to
- Like 'to%': Procurar algo que no inicio, comece com to
- Like '%to%': Procurar algo que no meio, contenha to
- Like '%to_': Com o Underline, só irá aparecer um caractere depos de to
SELECT * FROM Pessoas WHERE Nome LIKE '%essa%';
Usados geralmente para valores númericos.
- Sum: Soma Min: Valor Mínimo, Max: Valor Máximo, Avg: Média
SELECT SUM(Total) AS "Contagem" FROM Produto LIMIT 10;
SELECT MIN(Total) AS "Contagem" FROM Produto LIMIT 10;
SELECT MAX(Total) AS "Contagem" FROM Produto LIMIT 10;
SELECT AVG(Total) AS "Contagem" FROM Produto LIMIT 10;
A cláusula GROUP BY agrupa linhas baseado em semelhanças entre elas.
SELECT Cor, COUNT(Cor) AS "Contagem"
FROM Produto GROUP BY Cor;
SELECT Nome, COUNT(Nome) AS "Contagem"
FROM "Pessoas" GROUP BY Nome;
SELECT Cor, AVG(Preço) AS "Contagem"
FROM Produto WHERE Cor = 'Cinza' GROUP BY Color;
A cláusula WHERE é utilizada no "modo de linha" para filtrar linhas (restrição horizontal). A cláusula HAVING tem funções semelhantes no "modo de grupo": serve para filtrar grupos quando o query possui um GROUP BY.
SELECT Nome, COUNT(Nome) AS 'Quantidade'
FROM Pessoas GROUP BY Nome HAVING COUNT(Nome) > 10;
SELECT ProdutoID, SUM(Total) AS 'Total'
FROM Produtos GROUP BY ProdutoID
HAVING SUM(Total) BETWEEN 162000 AND 500000;
Serve para renomear colunas, geralmente sem nomes definidos.
SELECT SUM(Preço) AS "Preço Médio" FROM Produtos LIMIT 10;
-
A cláusula INNER JOIN permite usar um operador de comparação para comparar os valores de colunas provenientes de tabelas associadas.
-
Inner Join, Outer Join, Self-Join
SELECT S.ProdutoID, S.NumeroCarreira, P.Nome FROM Vendas as S INNER JOIN Produto as P on S.ProdutoID = P.ProdutoID;
SELECT P.Preço, P.Nome, PS.Nome as 'Nome Subcategoria' FROM Produtos as P INNER JOIN ProdutoSubcategoria AS PS ON P.ProdutoSubcategoriaID = PS.ProdutoSubcategoriaID;
SELECT E.Endereço, E.Cidade, ES.Nome FROM Endereço AS E INNER JOIN Estado AS ES ON E.EstadoID = ES.EstadoID;
- Inner Join: retorna apenas os resultados que correspondem (existem) tanto na tabela A como na tabela B
- Full Outer Join: retorna um conjunto de todos os registros correspondentes na tabela A e tabela B quando são iguais. E além disso se não houver valores correspondentes, ele simplesmente irá preencher esse lado com 'Null'
- Left Outer Join: retorna um conjunto de todos os registros da tabela A, e além disso, os registros correspondentes (quando disponíveis) na tabela B. Se não houver registros correspondentes ele simplemente vai preencher com 'Null'
SELECT * FROM Contato AS C
LEFT JOIN ContatoCartao AS CC
ON C.ContatoID = CC.ContadoID
WHERE CC.ContadoID IS NULL;
- O operador Union combina dois ou mais resultados de um select em um resultado apenas.
SELECT ProdutoID, Nome, Numero
FROM Produto WHERE Nome LIKE '%Chain%'
UNION
SELECT ProdutoID, Nome, Numero
FROM Produto WHERE Nome LIKE '%Decal%';
-
Manipular datas
-
Selecionar mês:
SELECT VendaID, MONTH(Data) FROM OrdemDeVendas;
- Selecionar nome do mês:
SELECT VendaID, MONTHNAME(Data) FROM OrdemDeVendas;
- Selecionar dia:
SELECT VendaID, DAY(Data) FROM OrdemDeVendas;
- Selecionar nome do dia:
SELECT VendaID, DAYNAME(Data) FROM OrdemDeVendas;
- Selecionar ano:
SELECT VendaID, YEAR(Data) FROM OrdemDeVendas;
- Exemplo (extrair média de vendas de cada dia):
SELECT AVG(Total) AS Média, DAY(Data) AS Mês
FROM OrdemDeVendas
GROUP BY DAY(Data)
ORDER BY Mês ASC;
-
Manipular string
-
Concatenar strings:
SELECT CONCAT(Nome,' ',Sobrenome) AS Nome
FROM Pessoas;
- Deixar tudo em maiusculo:
SELECT UPPER(Nome) FROM Pessoas;
- Deixar tudo em minusculo:
SELECT LOWER(Nome) FROM Pessoas;
- Contar caracteres:
SELECT LENGTH(Nome) FROM Pessoas;
- Substring, selecionar partes:
SELECT Nome, SUBSTR(Nome,1,3) FROM Pessoas;
SELECT Nome, SUBSTR(Coluna, Índice inicial, Pegar quantas casas depois do índice inicial)
FROM Tabela;
- Replace, substituir:
SELECT NumeroProduto, REPLACE(NumeroProduto,'-','#') FROM Pessoas;
SELECT REPLACE(Coluna,'Caractere que vai ser substituído','Caractere que vai substituir')
FROM Tabela;
- Soma:
SELECT Preço + Total AS Soma FROM Vendas;
- Subtração:
SELECT Preço - Total AS Soma FROM Vendas;
- Divisão:
SELECT Preço / Total AS Soma FROM Vendas;
- Multiplicação:
SELECT Preço * Total AS Soma FROM Vendas;
- Arredondamento:
SELECT ROUND(Total,2) FROM Vendas;
SELECT ROUND(Coluna,Casas depois da vírgula)
FROM Tabela;
- Raíz Quadrada:
SELECT SQRT(Total) FROM Vendas;
-
Dois selects em apenas um select
-
Para fazer o subselect coloque o segundo select em parentêses ()
SELECT * FROM Produto
WHERE Preço > (SELECT AVG(Preço) FROM Produto);
SELECT Nome FROM Pessoas
WHERE PessoaID IN (SELECT
PessoaID FROM Funcionários WHERE Função = 'Design Engineer');
- Selecionar dados com um condição na MESMA tabela
SELECT A.Nome, A.Endereço, B.Nome, B.Endereço FROM
Pessoas A, Pessoas B WHERE A.Endereço = B.Endereço;
- Boleanos
- Caracteres
- Números
- Temporais
Por padrão ele é iniciado como nulo, e pode receber tanto 1 como 0. Tinyint, boolean, bit
Tamanho fixo - char // permite inserir até uma quantidade fixa de caracteres e sempre ocupa todo o espaço reservado. tamanhos variáveis - varchar ou nvarchar // permite inserir até uma quantidade que for definida, porém só usa o espaço que for preenchido.
Valores exatos
- 1. TINYINT - não tem parte valor fracionados (ex: 1.43, 24.23)
- 2. SMALLINT - mesma coisa, porém limite maior
- 3. INT - mesma coisa, porém limite maior
- 4. BIGINT - mesma coisa, porém limite maior
- 5. NUMERIC ou DECIMAL - valores exatos, porém permite ter parte fracionados, que também pode ser especificado a precisão e escala (escala é o número de digitos na parte fracional) -ex: NUMERIC(5,2)
Valores Aproximados
- 1. REAL - tem precisão aproximada de até 15 dígitos
- 2. FLOAT - mesmo conceito de REAL
- 1. DATE - armazena data no formato aaaa/mm/dd
- 2. DATETIME - armazena data e horas no formato aaaa/mm/dd:hh:mm:ss
- 3. DATETIME2 - armazena data e horas com adição de milisegundos no formato aaaa/mm/dd:hh:mm:ssssssss
- 4. SMALLDATETIME - data e hora respeitando o limite entre '1900-01-01:00:00:00' até '2079-06-06:23:59:59'.
- 5. TIME - horas,minutos, segundos e milisegundos respeitando o limite de '00:00:00.000000' até '23:59:59.999999'
- 6. DATETIMEOFFSET - permite armazenat informações de data e horas incluindo o fuso horário
Principais tipos de restrições que podem ser aplicadas NOT NULL: Não permite nulos UNIQUE: Força que todos os valores em uma coluna sejam diferentes PRIMARY KEY: Uma junção de NOT NULL e UNIQUE FOREIGN KEY: Identifica únicamente uma linha em outra tabela CHECK: Força uma condição específica em uma coluna DEFAULT: Força um valor padrão quando nenhum valor é passado AUTO_INCREMENT: A cada valor adicionado, o valor do campo primário é adicionado +1 automaticamente
CREATE TABLE Canal (
CanalID INT PRIMARY KEY AUTO_INCREMENT,
Nome VARCHAR(150) NOT NULL,
ContagemInscritos INT DEFAULT 0,
DataCriacao DATETIME NOT NULL
);
CREATE TABLE Video (
VideoID INT PRIMARY KEY AUTO_INCREMENT,
Nome VARCHAR(150) NOT NULL,
Vizualizacoes INT DEFAULT 0,
Likes INT DEFAULT 0,
Deslikes INT DEFAULT 0,
Duracao INT NOT NULL,
CanalID INT,
FOREIGN KEY (CanalID) REFERENCES Canal(CanalID)
);
- Copiar dados de uma tabela para uma nova:
INSERT INTO Pessoas2 (Nome) SELECT Nome FROM Pessoas;
INSERT INTO Pessoas(Nome,Idade) VALUES ('Danilo',13);
INSERT INTO Casa(Nome,Endereco,PessoaID) VALUES ('Casa do Ednan', 'Rua do Maranhão', 13);
UPDATE Pessoas SET Nome = 'Nan' WHERE PessoaID = 1; WHERE CasaID = 1;
UPDATE Casa SET Endereco = 'Rua Miguel Ruiz, 437' WHERE CasaID = 1;
- Sempre usar o where, pois se não muito dados poderão ser excluídos!
DELETE FROM Pessoas WHERE nome = 'Vera';
- Exemplos de o que pode ser feito:
- Add, remover ou alterar uma coluna
- Setar valores padrões para uma coluna
- Add ou Remover restrições de colunas
- Renomear uma tabela
Adicionar campo:
ALTER TABLE Youtube ADD Ativo BIT;
Mudar campo:
ALTER TABLE Youtube MODIFY COLUMN Categoria VARCHAR(300) NOT NULL;
Renomear coluna:
ALTER TABLE Youtube CHANGE nome nomeDoCanal varchar(150) UNIQUE;
Renomear tabela:
RENAME TABLE youtube TO Canal;
(Deletar tabela)
DROP TABLE Pessoas;
(Remove todos os dados, mas mantém a tabela e sua arquitetura.)
TRUNCATE TABLE Pessoas;
(Checar Condições)
CREATE TABLE Voto (
ID INT PRIMARY KEY AUTO_INCREMENT,
Nome VARCHAR(100),
Idade INT CHECK (Idade >= 18);
);
(Não pode ser nulo)
CREATE TABLE Voto (
ID INT PRIMARY KEY AUTO_INCREMENT,
Nome VARCHAR(100) NOT NULL,
Idade INT NOT NULL;
);
(Campo Único, não pode ser repetido.)
CREATE TABLE Voto (
ID INT PRIMARY KEY AUTO_INCREMENT,
Nome VARCHAR(100) UNIQUE,
Idade INT NOT NULL;
);
(São tipo uma tabela, só que você seleciona apenas as colunas que vc quer de outra tabela.)
CREATE VIEW Cidadaos AS SELECT Nome, Sobrenome FROM
Pessoas WHERE Título = 'Mr.';