SQL é a nona linguagem de programação mais utilizada no mundo e a base de todo o banco de dado relacional Não importa se você é front ou back um dia você vai ter que lidar com SQL mas se você for backend com certeza você vai ter que dar mais atenção a SQL porque você vai ter que estruturar bancos de dados inteiros no pro teu código baseado no SQL e hoje até o final desse vídeo você vai entender o básico do SQL para aprender brincar um pouco ali sozinho já que eu literalmente vou desenhar para você
naquele quadro ali atrás o que for mais complexo e para fazer facilitar o teu entendimento dessa aula antes eu preciso te falar o que é o SQL SQL é uma linguagem declarativa que funciona com comandos como se fosse quando você digita um comando no cmd e precisa dar enter no SQL você vai ter que digitar o comando e executar ele tudo no SQL são linhas e colunas como se fosse um Excel gigantesco você vai criar tabelas com as colunas que você quer e cada linha vai ser um registro as as tabelas também podem ter relações
entre si como um usuário que pode ter vários endereços a gente vai ver isso um pouco pouco mais pra frente existem também variações do SQL como o tsql e o psql o tsql é utilizado pelo SQL server e o psql é utilizado pela Oracle mas nada mais são do que extensões do núcleo do SQL se você sabe SQL você com certeza vai se virar nos nesses sqls variados que tem por aí pra gente começar eu vou utilizar o sqlite mesmo no navegador e eu não quero que você faça nada junto comigo você precisa primeiro entender
o conceito e depois você faz juntos se for necessário você volta aqui nesse vídeo e vai pausando em cada conceito Agora eu quero que você só Preste atenção no que a gente vai fazer aqui com o meu navegador aberto n sk Lite a gente pode começar a escrever nossos comandos SQL SQL é um SQL muito mais leve do que o SQ o MySQL Workbench uma SQL workb você vai ter que instalar na tua máquina fazer toda a autenticação várias coisas skite é um arquivo que fica salvo com a extensão PDB consegue salvar teus dados então
pra gente aprender ele é extremamente bom Dando o exemplo que eu já dei no tópico passado nós vamos duas tabelas uma de pessoa e uma de enderece então para criar a primeira tabela a gente vai digitar aqui o comando na skite Create table o nome da tabela aí nós vamos colocar o nome da coluna o tipo de dado da coluna eu vou te explicar tudo isso aqui mais paraa frente o que ela faz e os opcionais na verdade dela essa aqui vai ser uma chave primária que vai se auto incrementar e não vai ser Nuda
a segunda coluna que a gente vai definir é uma coluna chamada nome Essa vai ter um varchar de 255 eu vou te explicar cada opcional daqui a pouco mas essa é a estrutura básica de um Create table o Create table você não precisa decorar você não precisa decorar nenhuma eh estrutura do SQL você pode simplesmente escrever no Google SQL e o nome do comando e você vai conseguir ver lá o Create table primeiramente o primeiro comando que vem depois do do Create table é o nome da tabela você pode pode definir qualquer nome pessoa endereço
qualquer coisa depois vem entre parênteses o nome da coluna e o tipo de dado dessa coluna tipo de dado é exatamente o que a gente vê no código int string aqui só vai ter alguns nomes diferentes o int é integer string é varchar e a string tem quantidade de posições máximas para ele e aí depois você vai colocar os opcionais da tabela que no caso da nossa é o primary Key Auto incremente e not nul tem vários opcionais mas depois eu vou te explicar exatamente que a cada um desses o nome e aí depois de
definindo A primeira coluna você coloca uma vírgula e define as outras colunas que você quer sempre seguido por vírgula e na mesma estrutura nome da coluna tipo de dado E se o dado for um texto tem que ter posições máximas no caso do nome nós colocamos 25 posições ou seja o nome vai poder ter só no máximo 255 caracteres incluindo os espaços se alguém tentar colocar um nome com 260 caracteres vai estourar um erro o banco não vai deixar salvar nossa segunda tabela vai ser a tabela de endereços a gente vai colocar aqui Create table
endereços sem assento sem nada e definir as colunas dela igualzinha a de cima eu vou deixar ela pequena pro nosso exemplo então eu vou copiar o ID aqui que vai ser exatamente a mesma coisa e o que ela vai ter diferente que ela vai o ela não vai ter nome ela vai ter a cidade com o varchar 255 também e aqui vem a sacada do SQL a gente vai ter uma coluna chamada Person ID que também vai ser o inteiro e ela não pode pode ser nuta E aí aqui embaixo a gente vai definir que
essa coluna chamada Person ID é uma chave estrangeira eu já vou te explicar o que é isso a gente só precisa terminar de criar essa tabela a eu vou lá no quadro te mostrar o que exatamente o que é isso a gente vai definir que ela é uma chave estrangeira vou colocar Qual a coluna que ela se refere a chave estranjeira e qual a tabela que ela vai referenciar ou seja qual a tabela que ela vai apontar que essa chave pertence que seria pessoa aid explicando agora cada opcional que a gente usou aqui o primeiro
é o primary Key que a gente tá falando paraa tabela que esse registro ele é uma chave primária ele nunca vai se repetir para nenhum sabe o teu CPF o teu CPF pro governo é a chave primária porque ele não se repete para ninguém com base nele o governo consegue buscar todos os seus dados é exatamente isso que uma chave primária é a parte do ao increment significa que a cada registro você não precisa mandar o ID se é um inteiro ele vai incrementar em um ou seja se o Primeiro Registro a primeira linha é
um a segunda vai ser dois você não precisa nem mandar isso pro SQL ele vai fazer automaticamente 1 2 3 até 1 bilhão e lá vai a bolinha que é o máximo do int que eu vou deixar aí na tela para você ver e a opção not nul é exatamente que o nome dela diz ela não pode ser nula se você tentar mandar essa coluna como nula ela não vai funcionar mas no caso aqui como ela é ao increment você não precisa nem mandar ela que ela já vai ser incrementada o not nu é só
uma Uma contenção para que isso não aconteça a chave estrangeira que vem a sacada da SQL significa que essa chave a coluna Person ID referencia a um ID da tabela de pessoa ou seja a tabela de pessoa não tiver o ID um e você tentar inserir na tabela de endereço uma pessoa com id1 o SQL não vai deixar e vai estourar um erro porque para ter um endereço precisa ter uma pessoa se você não entendeu eu vou te explicar lá no quatro Aqui nós temos nossas duas tabelas com registros fictícios e a tabela a tabela
de endereço aponta para uma pessoa O que aconteceria se a gente tentasse colocar mais um registro aqui apontando pra pessoa da id4 ele ia é impossível não existe uma pessoa da id4 é por isso que a gente fala que isso é uma tabela estrangeira que referencia a tabela de pessoa porque esse valor aqui precisa ser um valor válido na tabela de pessoa na coluna selecionada que é a coluna ID tem que ser um valor válido aqui então Quatro não seria válido não tem como se inserir esse valor mas por que que a gente criou duas
duas tabelas sendo que a gente poderia supostamente poderia fazer isso em uma só colocar aqui na tabela de pessoa a cidade dela colocaria eh a tibaia Londrina São Paulo pensa comigo em um site como Mercado Livre Você pode ter quantos endereços vários até acho que até uns 10 15 não tem problema nenhum você colocar lá mas se isso fosse uma tabela só a cada endereço que você inserisse a cada cidade você ia ser duplicado na tabela de pessoa O João tem dois endereços aqui o teria o id1 João id2 João um apontando para tibá e
um para Londrina mas isso tá errado porque isso é a mesma pessoa o João é a mesma pessoa como que vai criar o João com ids diferentes sendo que se refere à mesma pessoa então por isso que a gente separa porque uma pessoa pode ter vários endereços isso já entra nas relações do SQL porque uma pessoa pode ter vários endereços mas um endereço aqui uma linha de endereço pode ter quantas pessoas uma só porque ela só pode apontar pro ID de uma de uma pessoa então essa aqui aponta esse endereço aponta paraa pessoa de id1
esse endereço aponta pro pessoa da id1 esse endereço aponta pra pessoa de id2 então um Ere muitos endereços só podem ter uma pessoa isso é a relação que a gente chama de um para n um para muitos porque uma pessoa pode ter muitos endereços você precisa sempre mapear essas relações no SQL porque elas são importantes para quando você quando a gente vê o último comando é o join Você vai precisar juntar todas as colunas seja 10 C colunas Você vai precisar elas precisam estar relacionadas para você conseguir trazer elas juntas agora eu limpei o quadro
aqui para você conseguir enxergar melhor além da relação um para n existe a relação n para n que seria muitos para muitos qual seria o exemplo de uma relação de muitos para muitos uma relação entre aluno e matérias a gente tem aqui o aluno um o aluno dois o aluno TR e nós temos Vamos ter duas matérias português e matemática Essas são as duas matérias o aluno um ele pode ter matemática e pode ter português correto feito o aluno dois pode ter matemática e português também e o aluno três pode ter matemática e português o
que acontece nisso aqui se você parar para analisar do lado da matéria uma matéria também pode ter muitos alunos tô apagando aqui para vocês verem a matéria de matemática pode ter o aluno três pode ter o aluno dois pode ter pode ter o aluno um isso seria uma relação de muitos para muitos porque muitos podem ter muitos uma matéria de matemática pode ter 30 alunos e os 30 e os 30 alunos dessa turma podem ter tanta a matéria de matemática quanto a matéria de Português Isso é uma relação de muito para muitos um exemplo de
relação de um para um seria uma pessoa e uma carteira de motorista aqui tá a pessoa o bonequinho com uma carteira de motorista essa pessoa só pode ter uma carteira de motorista e uma carteira de motorista só pode pertencer a uma pessoa isso é uma relação de um para um não existe como uma pessoa ter duas carteiras de motorista e não tem como uma carteira de motorista pertencer as duas pessoas é uma relação impossível isso são as relações no SQL agora é só a gente executar esses dois comandos que as tabelas vão V ser criados
você pode ver que eu marco aqui o que eu quero dou um Run ele deu sucesso Marco o segundo executo ele deu sucesso então agora a gente já tá pronto para trabalhar com essas duas tabelas e a gente o primeiro comando que a gente precisa ver é o insert into o insert into é extremamente simples e serve só para inserir dados na tua tabela exatamente como eu coloquei aqui embaixo a estrutura dele sempre vai ser essa inserte into o nome da tabela quais colunas você vai inserir os dados e você vai colocar o valor o
aqui eu coloquei aqui na tabela pessoa eu vou inserir uma pessoa com com a coluna nome com o valor de João e na coluna de endereços que nem eu expliquei a relação lá no no quadro eu vou inserir um endereço de Londrina que referencia o João que pertence ao João então a gente pode rodar aqui também ele rodou tranquilo e a gente roda esse outro também ele já tá ali agora que a gente já viu o insert a gente precisa ir pro select porque a gente quer ver se isso foi inserido mesmo né então então
a gente a estrutura do select é extremamente simples também a gente pode escrever select colocar um asterisco o asterisco significa que a gente quer todas as colunas se você quisesse a coluna por exemplo name da da tabela de pessoa você colocaria aqui name mas a gente quer todas as colunas pra gente ver tudo que foi inserido Então você coloca no select asteristico from from da onde né E você coloca o nome da tabela select Everything from pessoa aí você vai executar aqui esse comando você já vai ver aqui bonitinho ID um nome João significa que
inseriu agora a gente vai fazer a mesma coisa pros endereços vamos ver se el inserir os endereços que apontam pro João aí a gente roda beleza id o id do endereço é um o nome a cidade do endereço é Londrina e a pessoa que se referencia esse endereço é a pessoa um ou seja o juão pra gente ter ver mais do select o select ele pode filtrar os valores da tabela com o r mas mas eu preciso ter mais valores na mais registros na tabela de pessoa então vou criar mais alguns registros aqui pra gente
ver daqui a pouco agora que eu inseri outros valores aqui você pode ver que eu inseri o João o José e o Igor e coloquei três endereços o usuário da id2 que é o José não tem nenhum endereço pra gente ver mais paraa frente como que isso vai funcionar mas o João e o Igor O João tem dois endereços e o Igor tem um endereço só agora no select a gente pode filtrar essas alguns valores se a gente der um select com asterisco aqui a gente vai selecionar todas as colunas o ID 1 2 e
3 João José e Igor mas se eu quiser filtrar uma pessoa eu coloco r e eu coloco qual por qual coluna que eu quero filtrar eu quero filtrar pelo nome aonde o nome é igual a Igor então se eu D esse se eu fizer esse select de novo executar esse select ele vai me retornar só o aid três aqui você pode colocar várias coisas nesse filtro você pode colocar o ang War que é exatamente o if lá que tem os dois e comercial Ou as duas pipes que ele realment que ele vai funcionar da mesma
forma por exemplo se eu colocar aqui onde o nome Igor ou o nome for igual a João ele vai retornar os dois porque os dois satisfazem a condição ou o nome é Igor ou o nome é João os dois satisfazem a condição ele retorna os dois se eu colocar de alguma forma isso aqui end onde o nome é Igor e o nome é João não vai ter como isso retornar porque não existe aonde o nome seja Igor e o nome seja João se eu colocasse aqui por exemplo se eu para selecionar o nome onde o
nome é Igor e o ID é igual a TR aí satisfaria as duas condições aonde o nome é Igor e o ID é três Então você satisfez as duas condições do Digamos um if assim do da tabela verdade e ele retorna aqui pro nosso pro nosso código é dessa forma que você filtra né existem vários jeitos de filtrar e Existem várias vários opcionais pro select Como agrupar valores filtrar valores contar valores existem diversas coisas mas como é uma aula básica eu não quero que fique nada amante para você eu vou mostrar só essa parte da
filtragem mesmo agora no último comando que a gente vai ver a gente vai ver os joins os três principais joins que existem é left join right join e o Inner join Existe algum outros como full wter e o join o join normal mas esses eu pelo menos nunca utilizei eu sempre utilizo left right Winner Então nós vamos ver como funciona esse comando join nada nada mais faz do que ele literalmente faz um Joint da tabela ele tenta mesclar as tabelas baseado numa condição que você vai definir no código estão vendo aqui a gente vai a
gente quer selecionar as pessoas e eu quero que junto com essa pessoa traga o endereço dela é desse jeito que você consegue ver a tabela completa você pode fazer o join de cinco tabelas pessoa endereço é setor da da classe aluno Onde ela trabalha você consegue juntar tudo através do join então para fazer o join a gente vai dar um select um asterisco aqui de pessoa a gente vai selecionar pessoa e a gente quer trazer os endereços aí nós vamos definir o tipo do join left join significa que você tem que pensar na tua cabeça
que a tabela que tá no select é da esquerda e a tabela que você vai pedir para vir junto é a tabela da direita assim que funciona o left right e o winer o winer é tudo junto left é a tabela da esquerda right é a tabela da direita o left significa que o valor precisa estar só na tabela da esquerda se o valor existir na tabela da esquerda que tá no select ele vai trazer esse registro o Inner join significa que tem que estar nas duas se o valor existir na tabela da esquerda mas
não existir a chave na tabela da direita ele não traz ele ignora porque você tá falando Inner Tem que existir o valor nas duas se você definir como right o valor só precisa tá na tabela da direita tabela da esquerda pode ter esse valor nulo mas a da direita vai trazer isso então gente a vai dar um select a primeira coisa que a gente vai fazer é o Winner que vai ser mais simples de entender a gente vai fazer Winner Joint de endereços Aonde a estrutura dele é é exatamente essa você dá um select asterisco
depois do select você coloca qual o Joint que você quer fazer se fosse o left seria left se fosse o right seria right no nosso caso vai ser o Inner eu já mostro os outros aí a gente vai fazer o winer join aonde aonde pessoa.id é igual a endereço ppon ID Por que que você escreve desse jeito você tá falando aonde que o join vai resolver tá como eu sei que esse endereço pertence a essa pessoa você define exatamente nesse on então aonde o ID de pessoa é igual o e o Person ID na tabela
de endereços por isso que a gente chamou lá de Person ID uma referencia a outra então se eu der se eu executar Esse comando aqui ele já vai entender ó lá coisa mais bonita todo mundo Ele trouxe aqui ó o João por que que ele trouxe o João duas vezes porque o João tem dois endereços Mas lembra que eu falei que o o você a gente precisava separar as tabelas exatamente para não duplicar os usuários veja Ele trouxe o João com o mesmo ID duas vezes não é um usuário duplicado é só um endereço duplicado
então não tem problema nenhum e ele trouxe o Igor que seria o id3 aqui seria o id3 em em Londrina ele não trouxe o valor da id2 porque esse usuário não tem endereço Então como que eu faria para por mais que se o usuário existe ele tem que trazer mesmo que o endereço esteja nulo eu defino ele como left eu estou definindo que o valor da esquerda sempre precisa vir Independente se a tabela da direita não tiver o valor que se ele está referenciado ou seja não tem o Person aí de dois não interessa é
para você trazer do mesmo jeito se eu der o select aqui fazer esse left você vai ver que ele vai trazer ele já tava aqui embaixo né ó dois José nulo nulo e nulo porque o José existe mas o José não tem endereço no caso isso não tem problema era para ele fazer exatamente isso nulo nul e nul então ele traz todos os usuários independente que o usuário não tenha interesso porque a tabela de pessoa é da esquerda foi a tabela que você colocou no select e a tabela do join é a tabela da direita
então se eu quero ah agora por algum motivo eu quero que traga os endereços mesmo que não tem um usuário no nosso caso vai ser um caso impossível porque se tem um endereço precisa ter um usuário o usuário excluiu o o cadastro dele não existe mais aquele usuário a gente colocaria o WR join aqui que é para trazer todos os endereços Independente se ele tem uma pessoa relacionada então a gente tira aqui ele vai acontecer o mesmo caso do Inner join se a gente quisesse ver esse caso na prática a gente precisaria excluir uma pessoa
e tirar o ID dela da tabela de endereço mas eu não vou fazer isso eu vou deixar isso como um desafio para você e agora se você quiser Salvar esse teu SQL que você fez se você você fez junto comigo se você vai fazer depois se você quiser colocar ele no Git ou no Git Hub para você sempre se lembrar dele eu tenho um vídeo aqui no canal que eu mostro exatamente como usar o Git e o Git hup [Música]