# *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)