Você está na página 1de 161

SQL DO BÁSICO AO

AVANÇADO!!!
SELECT
Comando universal do SQL que pode ser utilizado independente do
Banco de dados que você estiver trabalhando, SELECT. A ideia básica do
SELECT é que você selecione uma coluna ou mais ou todas de uma
tabela:
SELECT
É possível também que você faça uma consulta e que ela retorne todas
as colunas do banco de dados e não apenas uma ou outra:
DISTINCT
Esse comando é usado quando você quer omitir os dados duplicados
de uma tabela, ou seja, você quer que retorne apenas os dados únicos
da tabela.
WHERE
Esse comando é usado quando você quer que os dados retornados
cumpram uma condição. E ele vem sempre acompanhado de um
operador lógico.
WHERE
Operadores lógicos:

Obs.: para fazer comentários no SQL você usa dois tipos de comando o “ - - “ e o “ /* “.
DESAFIO
Desafio 1:
DESAFIO
Desafio 2:
DESAFIO
Desafio 3:

Primeiro, comando para localizar o usuário:

Com isso a gente conseguiu retornar o Business Entity ID, que é uma chave única para cada usuário.
DESAFIO
Desafio 3:
E com o ID já conhecido usamos o SELECT FROM para achar o e-mail do usuário
COUNT
Basicamente retorna o número de linhas que bate com a condição que
foi definida, ou seja:

Conseguimos trabalhar em conjunto com a função DISTINCT, para que você retorne a contagem especifica de
uma coluna, e não inclua os valores NULL (Nulos)
DESAFIO
Desafio 1:
DESAFIO
Desafio 2:
DESAFIO
Desafio 3:
TOP
Basicamente ele vai filtrar/ limitar, a quantidade de dados que é
retornado de um comando SELECT.
ORDER BY
Basicamente irá permitir que ordene os resultados por alguma coluna
em ordem crescente ou decrescente:

asc = crescente
desc = decrescente
ORDER BY
• asc (ou crescente)

• Desc (ou decrescente)


ORDER BY
Podemos também ordenar levando em consideração mais de uma
coluna:
ORDER BY
Existe a possibilidade de ordenar usando uma coluna que não existe no
SELECT

Nesse caso usei a ordenação pelo MiddleName


Porem no meu SELECT eu apenas mostrei o primeiro
E o último nome.
DESAFIO
Desafio 1:
DESAFIO
Desafio 2:
BETWEEN
Between (entre) é usado para encontrar valor entre um valor mínimo e
valor máximo.
BETWEEN
Vejamos na prática:
BETWEEN
Outro exemplo considerando uma margem que não esteja dentro de
1000 a 1500, nesse caso combinamos com o NOT:
BETWEEN
É possível que tenhamos que fazer com datas:
IN
Para verificar se um valor corresponde com qualquer valor passado na
lista de valores.

O operador IN é usado juntamente com o WHERE


IN
Nesse caso o SELECT dentro do IN, é chamado de Sub-Select ou Sub-
Query, então basicamente ao em vez de comparar valores exatos ele
vai comparar contra o resultado que for retornado da pesquisa.
IN
Na prática:
IN
Também podemos usar nesse caso o NOT para retornar todos os
registros exceto os informados:
IN
Poderíamos usar nesse caso com varias condições operando com o OR
mas para uma maior agilidade matemos o modelo anterior com o IN:
LIKE
Para acharmos uma determinada informação onde tenhamos apenas
um fragmento da mensagem usamos o LIKE para esse tipo de situação:
LIKE
Na Pratica:
LIKE
Na Pratica:
LIKE
Podemos combinar as buscas com o _ (underline) porem esse _ só irá
substituir 1 character apenas:
LIKE
Lembrando que o LIKE não é chase sensitive, ou seja você pode mesclar
com letras maiúsculas e minúsculas que será entendido da mesma
maneira:
DESAFIO FUNDAMENTOS SQL
DESAFIO FUNDAMENTOS SQL
DESAFIO FUNDAMENTOS SQL
DESAFIO FUNDAMENTOS SQL
DESAFIO FUNDAMENTOS SQL
DESAFIO FUNDAMENTOS SQL
MIN MAX SUM AVG
Funções de agregações MIN MAX SUM AVG, elas agregam ou
combinam dados de uma tabela em um resultado apenas.
MIN MAX SUM AVG
Para colocar um nome na coluna usamos o comando “as” e o nome
entre aspas (“ ”)
MIN MAX SUM AVG
Na pratica:
GROUP BY
Divide o resultado da sua pesquisa em grupos. Por exemplo:

Sintaxe:
GROUP BY
Na pratica:
GROUP BY
Exemplo:
GROUP BY
Exemplo 2:
GROUP BY
Exemplo 3:
DESAFIO
Desafio 1:
DESAFIO
Desafio 2:
DESAFIO
Desafio 3:
DESAFIO
Desafio 4:
HAVING
Basicamente é muito usado em junção com o GROUP BY para filtrar
resultados de um agrupamento, ou seja, ele é uma forma mais simples
de um WHERE para dados agrupados.

Sintaxe:
HAVING
Qual a grande diferença entre WHERE e HAVING, é que o GROUP BY é
aplicado depois que os dados já foram agrupados, enquanto o WHERE
é aplicado antes dos dados serem agrupados.

Ex.:
HAVING
Na pratica:
HAVING
Observação: Se você chegar a usar o HAVING antes do GROUP BY
ocorrerá um erro de sintaxe, porque o HAVING só pode ser usado
depois que os dados estão agrupados, o que não ocorre com a função
WHERE;
HAVING
Exemplo:
HAVING
Exemplo 2:
HAVING
Desafio 1:
HAVING
Desafio 2:
AS
Basicamente serve para dar um nome especifico para uma coluna, ou
um SELECT que você criou ou até mesmo para uma agregação.
AS
Exemplo:
DESAFIO
Desafios:
DESAFIO
Desafios:
DESAFIO
Desafios:
INNER JOIN
Existem três tipos de “JOIN”, são eles:

INNER JOIN
OUTER JOIN
SELF-JOIN
INNER JOIN
Abaixo temos 2 tabelas, a “Cliente” e a “Endereço”. Vamos dizer que
queremos trazer a informação que não existe na tabela Cliente. Na
tabela “Cliente” não temos a informação do endereço, apenas a
informação do “EnderecoId”, essa informação se encontra na tabela
“Endereço” de fato, nesse caso o que temos que fazer é um JOIN, ou
seja juntar uma informação na outra:
INNER JOIN
Então nesse caso como eu ligaria/join essa informação?

O resultado que teríamos referente a esse problema, seria:


nte
i e
Cl
ID do
e
t e de
il en om a da
C N Ru Ci
INNER JOIN
Na Pratica:

Podemos observar que a informação que


temos em comum, é o BusinessEntityID
INNER JOIN
Na Pratica:

Agora iremos fazer a junção de informação baseada na coluna que temos em comum que é a
BusinessEntityID para trazer todos os dados solicitados:

Obs.: Caso exista colunas com nomes


iguais, obrigatoriamente tem que colocar
um “Apelido” nela. Para que não dê erro
na hora de selecionar.
INNER JOIN
Na Pratica:
INNER JOIN
Na Pratica:
INNER JOIN
Na Pratica:
NESSE CASO VAMOS JUNTAR AS TABELAS/INFORMAÇÕES TUDO EM APENAS UM
TABELA SEM CONTER NENHUM TIPO DE FILTRO, APENAS QUERO TODAS AS
INFORMAÇÕES JUNTAS. USANDO A INFORMAÇÃO EM COMUM “ADRESSID”
INNER JOIN
Na Pratica:
NESSE CASO VAMOS JUNTAR AS TABELAS/INFORMAÇÕES TUDO EM APENAS UM
TABELA SEM CONTER NENHUM TIPO DE FILTRO, APENAS QUERO TODAS AS
INFORMAÇÕES JUNTAS. USANDO A INFORMAÇÃO EM COMUM “ADRESSID”
DESAFIO
Desafio 1:
DESAFIO
Desafio 2:
TIPOS DE JOIN
Diagrama do
“JOIN” no SQL:
TIPOS DE JOIN
Na pratica:
TIPOS DE JOIN

Para esse INNER JOIN retornará


sempre a intercessão ou seja o
que existe nas 2 tabelas;
TIPOS DE JOIN O mais completo dos “JOINS”:
TIPOS DE JOIN
OUTER JOIN
Para o LEFT OUTER JOIN, mais usado/abreviado como LEFT JOIN pela
comunidade.

Na pratica, nesse exemplo, quero descobrir quais pessoas tem cartão


de crédito registrado.
Nesse caso do uso do
INNER JOIN posso estar
OUTER JOIN caindo em uma
armadilha, pois, posso ter
excluído algumas linhas
quando fiz a pesquisa.
Na pratica:

Com o “INNER JOIN”


temos ao total 19118
linhas retornadas na
consulta.
OUTER JOIN
Na pratica:

Com o “LEFT JOIN” temos


ao total 19972 linhas
retornadas na consulta,
diferente do comando
anterior.
OUTER JOIN
Nesse caso o que o LEFT JOIN nos mostra que podemos ter pessoas que
não estão com o cartão de crédito registrado.

E essa é a parte onde o LEFT JOIN vai te ajudar ele vai incluir os
resultados mesmo onde não estão presente as informações na segunda
tabela, que nesse caso é a “Sales.PersonCreditCard”.

O LEFT JOIN é interessante para que você extraia essa informação das
tabelas que não tenha dados preenchidos dentro dela.
OUTER JOIN
Levando isso em consideração, como poderia retirar essa informação,
das 854 pessoas que não tem dados cadastrados?
UNION
O operador UNION combina dois ou mais resultados em um único
resultado apenas.
Sintaxe:

Ao usar o comando UNION ele irá remover os dados duplicados, a não


ser que seja usado o “UNION ALL”:
UNION
Iremos usar o UNION normalmente em tabelas não normalizadas ou
seja, com algum tipo de inconsistência.
UNION
Incluindo o UNION:
UNION
Outro exemplo:
UNION
Outro exemplo:
UNION
Desafio:
Pegar qualquer tabela no Banco de dados e usar o UNION para juntar
os dados
DATEPART
Função que permite extrair diversos tipos de informação de uma data
especifica.
DATEPART
Desafio:
Encontrar qualquer outra tabela no banco de dados que contenha data
e extrair mês e ano dessa coluna usando o DATEPART.
MANIPULAÇÃO DE STRING
STRING, são uma combinação de caracteres, que pode ser
considerado, uma palavra. As funções escalares a seguir
executam uma operação em um valor de entrada de cadeia de
caracteres e retornam uma cadeia de caracteres ou valor
numérico:
MANIPULAÇÃO DE STRING
CONCAT – Concatenar/ juntar as palavras:

Obs.: Para colocar o espaço entre as


palavras, inclui um argumento entre as
duas informações que eu quero ‘ ‘ .
MANIPULAÇÃO DE STRING
UPPER – Deixar tudo maiúsculo:
MANIPULAÇÃO DE STRING
LOWER - Deixar tudo minúsculo
MANIPULAÇÃO DE STRING
LEN – Contar quantos caracteres tem a palavra
MANIPULAÇÃO DE STRING
SUBSTRING – Serve para extrair um pedaço de dentro de um STRING
Sintaxe: SUBSTRING(coluna1 , a partir de qual letra, quantas letras quero extrair)
ou seja, nesse caso de SUBSTRING(FirstName,1,3)
o nome Syed, irá começar a extrair a partir do S
e retirar as 3 primeiras letras S Y E.
MANIPULAÇÃO DE STRING
REPLACE – Substituiu alguma coisa por outra coisa.

O que será substituído


O que substituirá
MANIPULAÇÃO DE STRING
Desafio: Usar todos os comando ensinados em alguma tabela.
FUNÇÕES MATEMÁTICAS
Basicamente podemos fazer todas as operações comuns que
conhecemos:
FUNÇÕES MATEMÁTICAS
Exemplo:
FUNÇÕES MATEMÁTICAS
Exemplo:
FUNÇÕES MATEMÁTICAS
Exemplo:
FUNÇÕES MATEMÁTICAS
ROUND – Serve para arredondamento, nesse exemplo abaixo, dentro
do parênteses o “2” é significa a precisão decimal que ele irá fazer o
arredondamento.
FUNÇÕES MATEMÁTICAS
Raiz quadrada – Sintaxe com o SQRT
SUBQUERY (SUBSELECT)
É simplesmente um SELECT dentro de outro SELECT.

Nesse caso eu teria que dividir o comando em duas partes, se não fosse usar o SUBSELECT.

Teria que guardar esse valor, para ai sim,


eu responder a pergunta acima
SUBQUERY (SUBSELECT)
Agora usando o SUBSELECT:
SUBQUERY (SUBSELECT)
Na pratica:
SUBQUERY (SUBSELECT)
Podemos utilizar também o JOIN para responder o problema anterior:
SUBQUERY (SUBSELECT)
Desafio:
SUBQUERY (SUBSELECT)
Desafio (Agora usando outro modo):
SELF JOIN
Basicamente é uma forma de agrupar dados ou ordenar dados dentro
da mesma tabela, então se não cair em nenhum dos JOINS estudados
anteriormente, iremos usar este.

Obs.: Só iremos conseguir montar o SELF JOIN combinado com o AS, ou


seja dando um “apelido” para tabela, iremos conseguir utilizar.

Sintaxe:
SELF JOIN
Na pratica:
SELF JOIN
Na pratica:
SELF JOIN
Desafio:
TIPOS DE DADOS
Temos principalmente 4 tipos:

• Boleanos
• Caractere
• Números
• Temporais
TIPOS DE DADOS
1 – Boleanos
Por padrão ele é inicializado como nulo (NULL), e pode receber tanto 1 ou
0.
Para representar valores boleanos no SQL server usa-se o tipo BIT

2 – Caracteres
Utilizamos o tipo CHAR, ele te permite inserir até uma quantidade fixa de
caracteres, porem ele sempre ocupa todo o espaço reservado, o que
significa isso, se você definiu que seu CHAR vai ter 50, mesmo tendo usado
somente 10, ele sempre vai ocupar 50 espaços na memória.
TIPOS DE DADOS
Outro exemplo é o tamanho variável:
Varchar ou nvarchar – porque ele permite inserir até uma quantidade
que foi definida porem ele só vai usar o espação que for preenchido,
por exemplo se você definiu que o valor máximo que ele aceitar é 50,
mas só usou 10, ele vai ocupar apenas os 10 espaços na memória e os
40 que restaram estarão desocupados
TIPOS DE DADOS
3 – Números - Valores exatos:
• TINYINT – não tem valor fracionados (ex: 1.43, 24.23) somente 1,123123, 324234, 313123,
etc... Ele sempre será um valor inteiro;
• SMALLINT – Mesma coisa porem um limite maior;
• INT – mesma coisa porem com um limite maior;
• BIGINT – mesma coisa porem com um limite maior;
• NUMERIC ou DECIMAL – Valores exatos, porem permite ter parte fracionados, que também
podem ser especificados a precisão e escala (escala é o número de dígitos na parte
fracional)

Ex.: NUMERIC (5,2) = 113,44 (5 dígitos ao total sendo que após a virgula uma precisão de 2
dígitos nesse caso o 44)
TIPOS DE DADOS
Números - Valores aproximados:
• REAL – Tem precisão aproximada de até 15 dígitos;
• FLOAT – Mesmo conceito do REAL;
TIPOS DE DADOS
4 – Temporais:
• DATE – Vai sempre armazenar data no formato de aaaa/mm/dd;
• DATETIME – armazena data e hora no formato de aaaa/mm/dd:hh:mm:ss;
• DATETIME2 – armazena data e hora com a adição de milissegundos no formato
aaaa/mm/dd:hh:mm:sssssss;
• SMALLDATETIME – armazena data e hora respeitando o limite entre ‘1900-01-
01:00:00:00’ até ‘2079-06-06:23:59:59’;
• TIME – vai armazenar apenas horas, minutos, segundos e milissegundos
respeitando o limite de ‘00:00:00.0000000’ até ‘23:59:59:9999999’;
• DATETIMEOFFSET – permite armazenar informações de data e horas incluindo o
fuso horário;
CHAVE PRIMARIA E SECUNDARIA

Exemplo:
CHAVE PRIMARIA E SECUNDARIA
CHAVE PRIMARIA E SECUNDARIA
Exemplo:
CHAVE PRIMARIA E SECUNDARIA
Exemplo prático:
CREATE TABLE
Sintaxe:

Principais restrições que podem ser aplicas:


CREATE TABLE
Schema:
CREATE TABLE
Criando:
CREATE TABLE
Criando:
CREATE TABLE
Desafio:
CREATE TABLE
Desafio:
CREATE TABLE
Desafio:
INSERT INTO
Pode ser usado quando você já tem uma tabela e quer inserir dados
nela, ou quando você quer criar uma nova tabela usando os comandos
do INSERT INTO

Sintaxe
INSERT INTO
Caso queira inserir varias linhas, mantem-se o mesmo padrão:

Ou a terceira opção, é quando você vai querer inserir informações de


uma outra tabela dentro de uma tabela existente:
INSERT INTO
Na prática:

Primeiro criamos uma tabela chamada Aula


INSERT INTO
Na prática:

Depois mostramos a mesma com o SELECT *


INSERT INTO
Na prática:

Agora vamos inserir dados na tabela criada Aula:


INSERT INTO
Para inserir varias linhas na tabela:
INSERT INTO
É possível também que você copie os dados de uma outra tabela e
insira na tabela já existente. Para copiar uma tabela já existente
podemos usar a sintaxe abaixo:
INSERT INTO
Desafio:
INSERT INTO
Desafio:
INSERT INTO
Desafio:
INSERT INTO
Desafio:
UPDATE
Basicamente o UPDATE vai servir para que atualize linhas do banco de
dados, onde eu já inseri e quero alterar tanto 1 linha ou todas de uma vez:

Sintaxe

Caso não queria ser aplicado o UPDATE a todas as linhas do banco de


dados, você precisa colocar um WHERE, ou se não você vai alterar todos
os dados do Banco.
UPDATE
Antes do comando:

Após o comando:
UPDATE
Antes do comando:

Após o comando:
UPDATE
Desafio:
UPDATE
Curiosidade:

Sempre lembrar de colocar o WHERE para atualizar a informação


apenas que você queira.
DELETE TABLE
Apaga linhas do banco de dados. Para isso precisamos colocar uma
condição porque se não iremos apagar tudo que tem no nosso banco
de dados.

Sintaxe:
DELETE TABLE
Na Prática:
Antes do comando:

Depois do comando:
ALTER TABLE
Sintaxe:

Principais ações que podem ser feitas com o Alter Table:


ALTER TABLE
Primeiro criamos uma nova tabela:

Depois incluímos uma nova coluna


ALTER TABLE
Agora vamos alterar o limite de caracteres de uma coluna:

Para alterar nomes de coluna, existe um procedimento especifico do


SQL, onde não iremos nesse caso usar o ALTER TABLE

EXEC sp_RENAME 'nomeTabela.nomeColunaAtual', 'nomeColunaNova', 'COLUMN’


ALTER TABLE
Alterando nome da coluna
Antes do comando:

Depois do Comando:
ALTER TABLE
Alterando nome da tabela
Antes do comando:

Depois do Comando:
ALTER TABLE
Desafio:
ALTER TABLE
Desafio:

Você também pode gostar