---
# System prepended metadata

title: '*Session one:* Playlist Linguagem **SQL**'

---

# *Session one:* Playlist Linguagem **SQL**
## Kalel Rodrigues



# DDL
### º show databases;    

 Para listar os bancos de dados disponiveis
-> Para executar essa linha de comando utilizamos: ctrl + enter

### º use (nome do banco de dados);     
-> Selecionar o Banco de dados que desejarmos

### º show tables;     
-> Mostrar as tabelas disponiveis nesse banco de dados

### º desc (nome da tabela);     

-> Descrever as configurações de cada tabela
![](https://i.imgur.com/j046iwF.png)

> `obs: uma coluna na desc de uma tabela, marcada como uma chave primaria: "não pode ser repetido, o valor dos campos não podem ser repetidos" e se tiver um: auto_increment, ele é um valor gerado, altomaticamente pelo proprio banco de dados.`

### º create database (nome do banco de dados);     
-> Criar um banco de dados

### º create table (nome da tabela) (informar o nome de cada coluna);     
-> exemplo: 

create table filme (
**id**  int  primary key  auto_increment,
**nome** varchar(100) *`> até 100 caracteres`*,
**estreia** datetime *`> data e hora`*,
**genero** varchar(100),
**disponivel** bool,
**avaliacao** decimal (15, 2) >*`podendo ter até 15 digitos, e o decimal 2`*
);

### º drop table(nome da tabela);     
-> Apagar a tabela

# ABREVIAÇÕES

º tb_ -> Tabela
º nm_ -> Nome
º ds_ -> Descrição
º vl_ -> Valor
º bt_ -> Bit(Booleano)
º dt_ -> Data

### º not null     
-> Colocar not null do lado do tipo do item, faz ele nao receber valores vazios

### º unique     
-> Colocar unique do lado do tipo do item, ou do not null, faz ele nao receber valores iguais
exemplo: não poderiamos ter 2 filmes com o nome: Avangers

### º alter table (nome da tabela)     
-> Este comando permite modificarmos a tabela, sem precisar recriala
-> Para adicionarmos um novo atributo á tabela, utilizamos: **add**
-> E para remover, utilizamos: **drop**

# DML
### º insert into (informar a tabela a qual vamos inserir o registro)(campos separados por virgulas, dentro do parenteses e um do lado do outro)     

### º values     
-> Os campos do tipo texto, serão utilizados, os apóstrofos:**''**
-> Os campos do tipo numero, **não** serão utilizados os apóstrofos
-> As casas decimais, serão utilizados o caractér: **.** não a virgula a qual estamos acostumados no portugues
-> Os campos booleanos, serão representados pelas palavras: **True** e **False**
-> Os campos de data, serão utilizados apóstrofos, igual o tipo texto, mas deve seguir o seguinte padrão: **'Ano-Mês-Dia'** - **'2022-04-21'** 

-> A palavra **Values**, fica sempre alinhada a palavra **Into**, ou nas **aberturas dos parenteses**

## **EXEMPLOS**
![](https://i.imgur.com/CTTDnuE.png)

### como os valores: disponivel e data, foram permitidos á terem valores nulos, podemos não inserir nada a eles, como mostrado no exemplo abaixo.     
![](https://i.imgur.com/Hti1Aco.png)
> `obs: não podemos trocar as ordens na hora de inserir registros, nem podemos alterar os nomes dos campos.`

### º SELECT * FROM (nome da tabela)     
-> Utilizamos este comando para alterar um registro ne uma tabela
![](https://i.imgur.com/maaJH7F.png)
-> Podemos Substituir o *, pelas colunas que queremos mostrar, como no exemplo acima.

## INFORMAÇÕES UTEIS SOBRE TABELAS

- Cada Linha de uma tabela, chamamos de registro.
- Cada coluna de uma tabela, chamamos de campo.
- Cada valor que vincula uma linha a uma coluna, chamamos de célula.

### º UPDATE (nome da tabela) SET (oque queremos alterar) WHERE (qual chave primaria queremos alterar)     
![](https://i.imgur.com/DhGTyq8.png)

### º DELETE FROM (nome da tabela) WHERE (id dentro da tabela) = (numero do id)
-> Apagar um registro de uma tabela
![](https://i.imgur.com/d8Xx9js.png)

### º SELECT * FROM (nome da tabela) ORDER BY (campo da tabela) (tipo de ordem)
-> Ordenar os registros
-> Campos vazios vem primeiro, e depois os com registros
-> exemplos de tipos de ordens: 
- desc = decrescente
- asc = crescente, ou não colocamos nada( padrão )

### º SELECT (campo da tabela) as '' (nome da tabela)     
-> Nome temporario do campo da tabela
![](https://i.imgur.com/8MRxMBQ.png)

### º SELECT * FROM (nome da tabela) WHERE (campo da tabela) = ''
-> Seleciona um valor para aparecer na tabela
[![](https://i.imgur.com/28HOU85.png)

-> Podemos trocar o *, por nomes de campos individuais que queremos visualizar 
![](https://i.imgur.com/HCqID9B.png)

- <>  operador **DIFERENTE**
- =   operador **IGUAL**

-> Podemos fazer com que mais de um filtro seja acrescentado em nosso select, utilizando AND e OR
![](https://i.imgur.com/OAUojsF.png)
- :+1: 
![](https://i.imgur.com/pOBAjl0.png)

- Podemos utilizar o comando BEETWEN no lugar de = ou <>, para pegarmos valores dentro de 2 valores
![](https://i.imgur.com/9I8YINa.png)

- O operador LIKE faz com que possamos fazer buscas parciais
![](https://i.imgur.com/qsn89fW.png)
-> Utilizando o comando '(letra)%', faz com que todos os registros que começam com a letra... sejam buscados
-> Podemos pegar os registros que terminam com outras letrar utilizando o comando : '%(letra)'
-> E podemos pegar todos os que possuem uma letra, utilizando: '%(letra)%'
![](https://i.imgur.com/35Gy752.png)

# Funções Built in

## Campos do Tipo **TEXT**
### `Funções Upper e Lower` 

![](https://i.imgur.com/c4m65Y8.png)
- **Upper** deixa todos os caracteres em maiusculo.
- e **Lower** deixa todos os caracteres em minusculo.

### `Função Lenght`

![](https://i.imgur.com/zyfJm4D.png)
- Mostra quantas caracteres tem um texto.

### `Função Replace`

![](https://i.imgur.com/hLoJ4CD.png)
- Substitui um caracter, por outro.

### `Funções Left e Right`
![](https://i.imgur.com/ROSjFjW.png)
- **Left** pega todos os caracteres da esquerda pra direita.
- **Right** pega todos os caracteres da direita pra esquerda.

### `Função Substring`
![](https://i.imgur.com/wV3QKDO.png)
- Recorta um texto, recebendo 2 valores, o comeco e quantos irão ser recortados.
### `Função rpad e lpad`
![](https://i.imgur.com/r9VNdVL.png)
- similares a **right e left**, a **rpad** recebe dois valores,o primeiro pega apenas os primeiros caracteres e se n tiver a quantidade informada, ele preenche com o caracter informado no segundo valor.
- a funcao **lpad** é a mesma logica, só que pega os ultimos caracteres.

### `Função instr`
![](https://i.imgur.com/1I4waiv.png)
- Pega a posição da primeira letra informada no comando.

## Campos do Tipo **NUMBER**
### `Funções ceiling e floor`
![](https://i.imgur.com/BwmpbPQ.png)
- São funções de **arredondamento**.
- **ceiling** arredonda pra cima.
- **floor** arredonda pra baixo.
### `Funções round e truncate`
![](https://i.imgur.com/JNh1UwC.png)
- São funções de **arredondamento**.
- **Round** arredonda de 0.5 pra cima.
- **Truncate** mantem o valor sem decimais.
### `Funções abs e sign`
![](https://i.imgur.com/eaeoPsF.png)
- **abs** sempre mantém o valor positivo.
- **sign** verifica se ele é um numero **positivo**, **negativo** ou **0**: podendo ser, **1** = positivo, **-1** = negativo, **0** = 0.

### `Funções pow e sqrt`
![](https://i.imgur.com/Q4fxiqc.png)
- **pow** recebe 2 valores, fazendo a conta de potencia.
- **sqrt** recebe 1 valor, fazendo a conta de raiz quadrada.

### `Funções mod e rand()`
![](https://i.imgur.com/c21micC.png)
- A função **mod** irá pegar o primeiro valor e dividir pelo segundo, e pegar o seu resto(em js, são chamados de %, ou módulo).
- A função **rand**, cria um valor aleatorio.

## Campos do Tipo **DATE AND TIME**
### `Funções date, year, month e day`
![](https://i.imgur.com/FNZbOGZ.png)
- A função **date** extrai apenas a parte da data, de um campo data e hora.
- **year** o ano.
- **month** o mês.
- **day** o dia.
### `Funções time, hour, minute e second`
![](https://i.imgur.com/hYnF11W.png)
- A função **time** extrai apenas a parte do horario, de um campo data e hora.
- **hour** as horas.
- **minute** os minutos.
- **second** os segundos.
### `Funções dayofweak e dayofyear`
![](https://i.imgur.com/Tbf0C6K.png)
- A função **dayofweak**, informa o dia da semana (baseado que a semana comeca no 1 = domingo e acaba no 7 = sabado).
- Já a função **dayofyear**, informa o dia do ano.
### `Funções date_add e datediff`
![](https://i.imgur.com/j2yyMbM.png)
- A função **date_add**, adiciona dias, meses e anos ao campo, e tambem subitrai.
- A função **datediff**, verifica a diferenca em dias de uma data á outra.
### `Funções now(), sysdate(), current_date() e current_time()`
![](https://i.imgur.com/0j6X6mR.png)
- As funções **now() e sysdate()**, retornam a hora completa e o dia completo do momento atual do sistema.
- Já a **current_date()**, retorna somente o dia do momento atual do sistema.
- Já a **current_time()**, retorna somente a hora do momento atual do sistema.
### `Função date_format(2 parametros)`
![](https://i.imgur.com/9I3MRGX.png)
- O **primeiro** parametro é a data e hora que será formatada.
- Já o **segundo** é a formatação que será aplicada.
- **%d**, significa a parte do dia que será formatada.**%m**, significa a parte do mês. **%y**, significa o ano com 2 digitos. o **Y%** trás os 4 digitos do ano.
- Podendo junta-los para formar uma data mais legivel, como no exemplo abaixo.
![](https://i.imgur.com/b9hwAi6.png)

## Campos do Tipo **AVANÇADAS**
### `Função concat()`
![](https://i.imgur.com/N6yyXeJ.png)
- Recebe 2 valores, e irá junta-los.
- Para colocar um espaço entre elas, utilizamos ' ', veja no exemplo abaixo.
![](https://i.imgur.com/EsuROjP.png)
### `Função ifnull()`
![](https://i.imgur.com/jMY2ofT.png)
- Ele verifica se um campo é nulo, e passa um valor que voce atribuir.
### `Função case`
![](https://i.imgur.com/NTmUoFq.png)
- Retorna um valor baseado em **testes**.
![](https://i.imgur.com/qOEZqZn.png)
- Podendo ter quantos testes quiser.
### `Função convert e cast`
![](https://i.imgur.com/0yKlYOS.png)
- O comando **convert**, converte um tipo de campo, para outro.
- O **cast** funciona de maneira similar.

# UNION, SUBQUERY E VIEW

## Fazer 2 Selects se unirem.
Vejamos que na tabela de filmes, temos esse banco de dados.
![](https://i.imgur.com/UvBnyb8.png)
E na tabela de series, temos esses.
![](https://i.imgur.com/GdRqs0Z.png)


- Para unir os 2 selects, utilizamos: **union** entre os selects escolhidos
![](https://i.imgur.com/2tlknno.png)

> `obs: temos que colocar a mesma quantidade de campos, nos 2 selects, senão ocorrerá um erro na união deles.`
![](https://i.imgur.com/kGJYfla.png)

## Fazer as tabelas terem 1 where.
- Para fazermos a uniao, ser uma tabela só, teremos que colocalos dentro de **um select** só, como no exemplo abaixo.
![](https://i.imgur.com/bE53xFs.png)
- Para fazermos aparecer apenas os que tem letra A, teremos que fazer igual o exemplo abaixo.
![](https://i.imgur.com/dC0Kv85.png)
## Fazermos a tabela criada ficar menos poluida.
- Para Fazermos a tabela unica criada a cima, ficar menos poluida, usamos o conceito de **view**, veja no exemplo abaixo.
![](https://i.imgur.com/I9mXOSJ.png)
- Fazendo assim, podemos dar um select, apenas na view, e nao no comando poluido que estava quando criamos a unica tabela.

# Chave Estrangeira 
- Para fazer o relacionamento entre 2 tabelas utilizamos a Chave Estrangeira, como mostrado no exemplo abaixo.

![](https://i.imgur.com/yLuCw4R.png)

- Para adicionarmos algo a uma tabela que possue uma chave estrangeira, utilizamos o mesmo comando **INSERT INTO**, como no exemplo abaixo.

![](https://i.imgur.com/IiHBVwi.png)

- Caso inserirmos um personagem em um campo de tabela errado, podemos facilmente arruma isso, utilizando o exemplo abaixo.

![](https://i.imgur.com/CChM4lC.png)

- Caso inserirmos um personagem errado e quisermos deleta-lo, podemos facilmente fazer isso, utilizando o exemplo abaixo.

![](https://i.imgur.com/Pd3pU1L.png)

- Para fazermos em **um unico select**, retornar as informações da tabela de personagem e na tabela de filme, ja que as tabelas estão relacionadas, podemos realizar essa tarefa utilizando o exemplo abaixo.
- O comando **JOIN** é uma abreviação a o comando **INNER JOIN**.

![](https://i.imgur.com/VA2BtR2.png)

- Para fazermos com que mostre apenas o nome do personagem e do filme, fazemos igual o exemplo abaixo.

![](https://i.imgur.com/GNv36jO.png)

- Para definirmos qual tabela esta vindo a informação, fazemos igual no exemplo abaixo.

![](https://i.imgur.com/HGxHJEb.png)

- O Comando Inner Join, retorna apenas os registros que estão **relacionados** as 2 tabelas, como no exemplo abaixo, onde Lu e In não tem nenhum registro, então eles nao apareceram no select do inner join.

![](https://i.imgur.com/nvq3ZX4.png)

- Para corrigirmos isso, podemos invez de colocar Inner Join, utilizamos **Left Join**, fazendo com que os campos que não tem personagem, fiquem nulos.

![](https://i.imgur.com/AQLNV7v.png)

- O comando Cross Join, ignora as ligações e junta todos os campos com todos os campos, como no exemplo abaixo.

![](https://i.imgur.com/vmOxF5J.png)
