Você está na página 1de 28

21/04/2023, 17:50 Anotações - Evernote

SQL
*Parâmetros para a construção do banco e tabelas*

create database teste


default character set utf8        (caracteres acentuados no padrão latino)
default collate utf8_general_ci;  (caracteres acentuados no padrão)

create table teste(


)default charset = utf8;

*Tipos de Dados*

- not null (constraint que não permite que o dado seja nulo)

- default 'algum_valor_pre_estabelecido' 

(constraint de numeros ou letras pré estabelecidos se caso nada for digitado)

  Ex:

  nacionalidade varchar(20) default 'Brasil'

- auto_increment (faz com que o id vá aumentando progressivamente sem precisar digitá-lo)

- int (11 bytes)/time int (3 bytes)

- varchar = quantidade de caracteres que podem ocupar até 30 campos na memória

- char = 30 campos obrigatórios na memória (ocupa espaço desnecessário)

- text = textos longos e que podem fazer uso de parágrafos

- ano + mês + dia = 1996-07-09

- decimal(3,2) = 0,00 / (5,2) = 000,00 (exemplo para se usar valores reais) 

- enum ('M','F')

- unique: não permite dois dados iguais (exemplo: dois nomes iguais)
https://www.evernote.com/client/web?login=true#?b=5e76cfdd-de69-479e-8caa-c0b802aaa996&n=0e7740ea-5c5d-4423-841d-cac9a500fc59& 1/28
21/04/2023, 17:50 Anotações - Evernote

  Ex:

  nome_curso varchar(30) not null unique,  

- unsigned: Sem sinal, e economiza um byte para cada registro

*Comandos úteis de construção de banco e tabelas*

create table if not exists nome_da_tabela();


create database if not exists nome_do_banco;

(If not exists cria a tabela/banco se não existir)

*Anotações*

- constraint (parâmetro)

  Ex:

  NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY, CHECK e DEFAULT

- Crases entre os nomes dos campos da tabela, possibilitam campos com acentos e/ou espaços

- O que está entre aspas são dados, e o que não está são constraints

- Tupla = registro/linha no banco de dados 

- Coluna = campos/atributos

- Alter table modify/change -> change permite renomear o campo

- Drop como parâmetro (alter table + drop) apaga coluna ou campo

- Drop como comando (drop table/drop database) apaga tabela, banco de dados ou índice

- * (asterisco) significa "todas as colunas", ou seja, todos os campos da tabela com os dados.

InnoDB é uma ENGINE (máquina de criação de tabelas): mecanismo criado por uma empresa chamada
https://www.evernote.com/client/web?login=true#?b=5e76cfdd-de69-479e-8caa-c0b802aaa996&n=0e7740ea-5c5d-4423-841d-cac9a500fc59& 2/28
21/04/2023, 17:50 Anotações - Evernote
- InnoDB é uma ENGINE (máquina de criação de tabelas): mecanismo criado por uma empresa chamada
InnoBase e que hoje pertence a Oracle e permite a criação de tabelas com características; a mais
importante é: suporte às chaves estrangeiras e a compatibilidade com as 4 regras de transação.

- Existem outros mecanismos (engines) como: MyISAM (Não dá suporte as 4 regras(ACID)) e XtraDB

- SAVEPOINT A: Comando para salvar um ponto específico do código (se houver algum erro, é possível
dar rollback)

- Lock: Trava o recurso para que não ocorram várias transações ao mesmo tempo.
  * Menor nível de trava: registro por inteiro
  * É possível travar a nível de tabela 

- Two Phase Commit: 

- 4 Principais regras de transação (ação que o banco de dados pode executar) - ACID:

A: Atomicidade: Não pode ser dividade em subtarefas (ou tudo acontece, ou nada é
considerado)  
C: Consistência: O banco de dados consistente deve estar consistente após uma transação
(sem falhas)
I: Isolamento: Quando duas transações ocorrem de forma paralela, devem ocorrer como se
estivessem isoladas (lock)  
D: Durabilidade: Uma transação deve durar o tempo que for necessário

*Teoria de Relacionamento de Tabelas*

DER: Diagrama Entidade Relacionamento

- Relacionamentos: "um-para-um" (1-1), "muitos-para-muitos" (n-2) e "um-para-muitos" (1-n)

*Chave primária*

- Atributo específico que identifica as tuplas (registros/linhas no banco de dados)


- Faz com que nenhuma das tuplas tenha um atributo específico igual ao outro
  Ex: ID, RG, CPF, código de barra...

https://www.evernote.com/client/web?login=true#?b=5e76cfdd-de69-479e-8caa-c0b802aaa996&n=0e7740ea-5c5d-4423-841d-cac9a500fc59& 3/28
21/04/2023, 17:50 Anotações - Evernote

*Chave estrangeira*

- Chave primária de uma entidade que foi para outra entidade


- A chave estrangeira necessariamente não precisa ter o mesmo nome da chave primária, mas o formato
de dado precisa ser o mesmo

Ex: Se a chave primária é int, o dado da chave estrangeira deverá permanecer int

1 -  Se for relacionamento de "um-para-um", denomina-se uma entidade dominante e coloca a chave


primária da outra entidade na entidade dominante, sendo assim, ela se torna chave estrangeira

2 - Se for relacionamento de "um-para-muitos", pega-se a chave primária do lado "1" e coloca em


"muitos" como chave estrangeira 

3 - Se for relacionamento de "muitos-para-muitos", o "relacionamento" entre as duas entidades, vira


uma terceira entidade que se relaciona com as duas anteriores:

* Sendo assim, a nova entidade recebe campos que organizam todos os dados das atividades, incluindo
as duas chaves primárias (que viram chaves estrangeiras) das duas entidades iniciais

Ex:

- Cria-se uma situação que haja interação entre as tabelas:

Um produto pode ser comprado por vários clientes * COMPRAR * Um cliente pode comprar vários
produtos         
                                   / Cliente \ (n)         (n) / Produto \
                                     cliente1                    produto1
                                     cliente2                    produto2
                                     cliente3                    produto3
                                     cliente4                    produto4

- Então dá se a classificação de "muitos-para-muitos" = (n-2) ou (n-n) 

 / Cliente \ (n)  *   *  (n) / Produto \

   PK cpf                    PK cod_prod


   nome                         nome
   endereco                  fabricante
   telefone 
https://www.evernote.com/client/web?login=true#?b=5e76cfdd-de69-479e-8caa-c0b802aaa996&n=0e7740ea-5c5d-4423-841d-cac9a500fc59& 4/28
21/04/2023, 17:50 Anotações - Evernote

- Sendo assim, é criada uma nova tabela com chave primária própria e com as chaves primárias das duas
primeiras (que viram chaves estrangeiras) e mais alguns dados para caracterizar a transação

 / Cliente \ 1  *  n / COMPRA (relacionamento que virou entidade) \ n  *  1 / Produto \

 PK cpf_________                   PK id_compra                   __________PK cod_prod


 nome           \                  data                          /          nome
 endereco        \                 forma_pagamento              /           fabricante
 telefone         \________________FK cpf_cliente              /            preco
                                   FK cod cod_prod____________/  

Categorias de Comandos (Letra do meio que vale)

ESTRUTURA (Comandos DDL)


+ Data Definition Language - Linguagem de Definição de Dados
- Definição da estrutura do banco de dados

      * Create database


  (Cria banco de dados)  
      * Create table     (Cria estrutura da tabela)
      * Alter table      (Altera estrutura da tabela)
      * Drop table       (Apaga dados e a tabela inteira)  

MANIPULAÇÃO (Comandos DML) 


+ Data Manipulation Language - Linguagem de Manipulação de Dados
- Manipulação de dados 

na estrutura  

      * Insert into

      (Insere dados na tabela)


      * Update           (Modifica os dados da tabela)
      * Delete           (Apaga linha/linhas)
      * Truncate         (Apaga todos os dados da tabela)
      * Select           (Seleciona dados)

QUESTIONAMENTOS (Comandos DQL)


https://www.evernote.com/client/web?login=true#?b=5e76cfdd-de69-479e-8caa-c0b802aaa996&n=0e7740ea-5c5d-4423-841d-cac9a500fc59& 5/28
21/04/2023, 17:50 Anotações - Evernote
QUESTIONAMENTOS (Comandos DQL) 
+ Data Query Language - Linguagem de Consulta de Dados
- Filtro de dados para exibição

      * Select           (Seleciona dados)

CONTROLE (Comandos DCL)


+ Data Control Language - Linguagem de Controle de Dados
- Gerência de acesso privilegiado

      * Grant            (Dá privilégios a um usuário)


      * Revoke           (Retira privilégios oferecidos a um usuário)

TRANSAÇÃO (Comandos DTL)


+ Data Transition Language - Linguagem de Transação de Dados

                                           COMANDOS DE TABELA

                                            COMANDOS GERAIS

                                       ADICIONA DADOS NA TABELA

insert into nome_da_tabela values


(default, 'dado1', 'dado2', 'dado3');

- Default (id) para continuar com a regra auto incrementar, exemplo (id, nome) = (DEFAULT, 'Izabelle') ou
ocultar o "id", e partir para o próximo campo.

                               
                                  MOSTRA OS DADOS CADASTRADOS NA TABELA
 

select * from nome_da_tabela; 

                          
https://www.evernote.com/client/web?login=true#?b=5e76cfdd-de69-479e-8caa-c0b802aaa996&n=0e7740ea-5c5d-4423-841d-cac9a500fc59& 6/28
21/04/2023, 17:50 Anotações - Evernote

                            MOSTRA QUAIS SÃO AS COLUNAS E OS FORMATOS DE DADOS

describe/desc nome_da_tabela;

                                
                                APAGA TABELA (ESTRUTURA) E REGISTROS (DADOS)

drop table nome_da_tabela;


drop table if exists nome_da_tabela;

                                       
                                         APAGAR LINHA/LINHAS

delete from nome_da_tabela

where nome_chave_primaria = 'numero_escolhido';

delete from nome_da_tabela

where campo_da_tabela = 'dado_especifico';

                                
                                   APAGAR TODOS OS DADOS DA TABELA

truncate nome_da_tabela;

********************************************************************************************************
******
                                        SELECT (SELECIONA DADOS)
********************************************************************************************************
******

                                            ORDENA A COLUNA

https://www.evernote.com/client/web?login=true#?b=5e76cfdd-de69-479e-8caa-c0b802aaa996&n=0e7740ea-5c5d-4423-841d-cac9a500fc59& 7/28
21/04/2023, 17:50 Anotações - Evernote

select * from nome_da_tabela


order by nome_da_coluna; / order by nome_da_coluna asc; (order by é um parâmetro)

- Se acrescentar o "desc" a ordem alfabética será inversa:

Ex:

select * from nome_da_tabela


order by nome_da_coluna desc;

- "asc" ou nada significa ascendente (do menor para o maior)


- "desc" como comando é "describe" (Mostra quais são as colunas e os formatos de dados)
- "desc" como parâmetro do select significa "descendent" (do maior para o menor)

                        SELECIONA COLUNAS ESPECÍFICAS DE UMA TABELA E ORDENA (FILTRAR)

select nome_da_coluna1, nome_da_coluna2 from nome_da_tabela


order by nome_da_coluna;

- É possível mudar a ordem das colunas que serão exibidas 

Ex:

select nome_da_coluna2, nome_da_coluna1 from nome_da_tabela


order by nome_da_coluna;

- Se em determinado intervalo, desejar ordenar afabeticamente é necessário fazer

Ex:

Tabela Cursos

Ano    Nome
2010 - PHP
2011 - Java
2013 - CSS
2013 - Algoritmos

select ano, nome from cursos


order by ano, nome;
https://www.evernote.com/client/web?login=true#?b=5e76cfdd-de69-479e-8caa-c0b802aaa996&n=0e7740ea-5c5d-4423-841d-cac9a500fc59& 8/28
21/04/2023, 17:50 Anotações - Evernote
y

- A primeira ordenação foi feita pelo ano, e a segunda pelos nomes dos cursos (Algoritmos e CSS):

Ano    Nome
2010 - PHP
2011 - Java
2013 - Algoritmos
2013 - CSS

- É possível também exibir apenas uma coluna em específico:

select nome_da_coluna_escolhida from nome_da_tabela;

- Se desejar ordená-la:

select nome_da_coluna_escolhida from nome_da_tabela


order by nome_da_coluna_escolhida;

                                 SELECIONANDO E ORDENANDO LINHAS ESPECÍFICAS

select * from nome_da_tabela               (seleciona a tabela escolhida)


where nome_da_coluna = 'dado_especifico'   (seleciona as colunas que contêm o dado a ser visualizado)
order by nome_da_coluna;                   (ordena as colunas usando uma como parâmetro de ordenação)

- É possível também escolher as colunas que serão exibidas (ao invés da tabela inteira) se tiverem o valor
específico.

Ex:

select nome_da_coluna, nome_da_coluna from nome_da_tabela


where nome_da_coluna = 'dado_especifico' 
order by nome_da_coluna;

- Operadores relacionais utilizados:

<= / < / = / != ou <> / > / >=

- Termos utilizados:

1 b t ( t )
https://www.evernote.com/client/web?login=true#?b=5e76cfdd-de69-479e-8caa-c0b802aaa996&n=0e7740ea-5c5d-4423-841d-cac9a500fc59& 9/28
21/04/2023, 17:50 Anotações - Evernote
1 - between (entre)
  * O parâmetro é uma faixas de valores

  Ex:

  select nome_da_coluna1, nome_da_coluna2 from nome_da_tabela


  where nome_da_coluna2 between 2014 and 2016; 
  
  (De 2014 até 2016)

2 - in
  * O parâmetro é feito por valores específicos

  Ex:

  select nome_da_coluna1, nome_da_coluna2 from nome_da_tabela


  where nome_da_coluna2 in (2014, 2016); 

  (2014 e 2016)
 

3 - not in
  * Onde não for igual aos valores determinados
  
  select * from nome_da_tabela
  where coluna not in (valor1, valor2, ...);

4 - and
  * Aumenta o número de condições para que as colunas sejam exibidas 
  * Todas as condições precisam ser verdadeiras

  Ex:

  select * from nome_da_tabela


  where nome_da_coluna > valor_especifico and nome_da_coluna < valor_especifico;

5 - or
  * Aumenta o número de condições para que as colunas sejam exibidas 
  * Pelo menos uma das condições precisam ser verdadeiras

  Ex:
https://www.evernote.com/client/web?login=true#?b=5e76cfdd-de69-479e-8caa-c0b802aaa996&n=0e7740ea-5c5d-4423-841d-cac9a500fc59& 10/28
21/04/2023, 17:50 Anotações - Evernote

  select * from nome_da_tabela


  where nome_da_coluna > valor_especifico or nome_da_coluna < valor_especifico;

6 - is null
  * Onde a coluna for nula

  select * from nome_da_tabela


  where nome_da_coluna is null;

7 - like
  * "Igual"

  select * from nome_da_tabela


  where nome_da_coluna like 'palavraQualquer'  

                           DISTINGUINDO (APENAS OS DADOS DISTINTOS SÃO IMPORTANTES)

select distinct nome_do_campo from nome_da_tabela


order by nome_do_campo; (opcional)

- Seleciona apenas os dados distintos (uma ocorrência de cada valor distinto)


- Facilita para que na exibição não hajam repetições de dados iguais

Ex:

Tabela Cursos

Nome         Carga
PHP           40
Java          40
CSS            5
Algoritmos    10
POO            5

select distinct carga from cursos


order by carga;

Carga
https://www.evernote.com/client/web?login=true#?b=5e76cfdd-de69-479e-8caa-c0b802aaa996&n=0e7740ea-5c5d-4423-841d-cac9a500fc59& 11/28
21/04/2023, 17:50 Anotações - Evernote
Carga
5
10
40

                            AGRUPANDO REGISTROS (POR TIPO DETERMINADO - COUNT)

select nome_do_campo from nome_da_tabela


group by nome_do_campo;

Ex:

Tabela Cursos

Nome         Carga
PHP           40
Java          40
CSS            5
Algoritmos    10
POO            5

-----------------

Carga
5
10
40

- Com a função COUNT, podemos ver o total de registros em cada categoria obtida acima (5, 10 e 40),
caso contrário, o "agrupamento" terá o mesmo resultado que a "distinção"

select nome_do_campo, count(nome_do_campo_com_nomes) from nome_da_tabela


group by nome_do_campo;
 
Ex:

select carga, count(*) from cursos (count(*): refere-se ao campo, pode ser "(nome)" que se refere aos
cursos)
group by carga;

Carga    Count()
https://www.evernote.com/client/web?login=true#?b=5e76cfdd-de69-479e-8caa-c0b802aaa996&n=0e7740ea-5c5d-4423-841d-cac9a500fc59& 12/28
21/04/2023, 17:50 Anotações - Evernote

5          2
10         1
40         2

- count(*): soma quantos registros têm dentro de cada agrupamento

* Delimitando o que deve ser agrupado:

select * from nome_da_tabela where nome_do_campo for IGUAL, DIFERENTE, MAIOR, MENOR, MAIOR E
IGUAL ou MENOR E IGUAl valor_especifico;

* Exibindo campos que só tenham um certo valor de registros no agrupamento:

select nome_do_campo, count(*) from nome_da_tabela


group by nome_do_campo
having count(nome_do_campo) for IGUAL, DIFERENTE, MAIOR, MENOR, MAIOR E IGUAL ou MENOR E
IGUAl valor_especifico;

Ex 1:

select ano, count(*) from cursos


group by ano
having count(ano) >= 5
order by count(*);

- "having" para o "group by" é semelhante ao "where" para o "select"


- Só se pode trabalhar com "having" se o campo tiver sido agrupado

Ex 2:

select data_venda, sum(quantidade)


from Vendas
where codigo_produto = 200
group by data_venda
having sum(quantidade)>3

- Mostrará apenas datas onde foram vendidos mais de 3 produtos do tipo 200

                                               SELECT DUPLO

https://www.evernote.com/client/web?login=true#?b=5e76cfdd-de69-479e-8caa-c0b802aaa996&n=0e7740ea-5c5d-4423-841d-cac9a500fc59& 13/28
21/04/2023, 17:50 Anotações - Evernote

1 - select carga, count(*) from cursos                  


2 - where ano > 2015                                   
3 - group by carga                                     
4 - having carga > (select avg(carga) from cursos);     

1) Seleciona o campo "carga" e soma os registros de cada agrupamento


2) Onde ano é maior que 2015 (Só fará o passo "1", se o ano for maior que 2015)
3) Agrupa todas as "cargas"
4) Exibe todas as cargas maiores que a média de cargas de todos os cursos 

Ex:

Tabela Cursos

Nome         Carga       Ano


PHP           40         2016
Java          40         2015
CSS            5         2016
Algoritmos    10         2014
POO            5         2017

-----------------------------

1) 2016   2
   2017   1

4) Exibirá a carga de 40 com uma ocorrência (2016), já que esse valor da carga é maior que a média (20)
de todas as cargas dos cursos.

--------------------------------------------------------------------------------------------------------------
                                                 FUNÇÕES
--------------------------------------------------------------------------------------------------------------

* count (conta quantidade de registros totais ou específicos)

* avg (média de valores)

* sum (soma valores específicos)

* max (exibe valor máximo)

* min (exibe valo mínimo)


https://www.evernote.com/client/web?login=true#?b=5e76cfdd-de69-479e-8caa-c0b802aaa996&n=0e7740ea-5c5d-4423-841d-cac9a500fc59& 14/28
21/04/2023, 17:50 Anotações - Evernote

--------------------------------------------------------------------------------------------------------------
                                      UNIÃO ENTRE CONSULTAS (UNION)
--------------------------------------------------------------------------------------------------------------

- Une duas ou mais tabelas (SELECT)


- As colunas devem estar na ordem e para serem unidas precisam ter o mesmo tipo de formato
- Exibe as duas tabelas unidas
- Suprime registros que sejam exatamente iguais (não há repetição), então para que não haja este
problema, é necessário usar "UNION ALL" para mostrar todos os registros, mesmo que sejam idênticos.

Ex 1:

select descricao, valor, vencimento from Contas_Receber


Union
select descricao, valor, vencimento from Contas_Pagar

----------------

DESCRICAO  VALOR  VENCIMENTO

venda      100    00/00/00


venda       50    00/00/00
aluguel    200    00/00/00
luz        150    00/00/00

* Para simplificar e exibir o que significa cada coluna, podemos usar um campo calculado e dar nome a
ele:

Ex 2:

select descricao, valor, vencimento 'RECEBER' AS TIPO from Contas_Receber


Union
select descricao, valor, vencimento 'PAGAR' AS TIPO from Contas_Pagar  (AS TIPO na segunda tabela é
opcional)

----------------

DESCRICAO  VALOR  VENCIMENTO  TIPO

venda      100    00/00/00    RECEBER


venda       50    00/00/00    RECEBER
aluguel    200    00/00/00    PAGAR
https://www.evernote.com/client/web?login=true#?b=5e76cfdd-de69-479e-8caa-c0b802aaa996&n=0e7740ea-5c5d-4423-841d-cac9a500fc59& 15/28
21/04/2023, 17:50 Anotações - Evernote
g / /
luz        150    00/00/00    PAGAR

* UNION ALL

Ex 3:

select descricao, valor, vencimento 'RECEBER' AS TIPO from Contas_Receber


Union All
select descricao, valor, vencimento 'PAGAR' AS TIPO from Contas_Pagar  (AS TIPO na segunda tabela é
opcional)

----------------

DESCRICAO  VALOR  VENCIMENTO  TIPO

venda      100    00/00/00    RECEBER


venda       50    00/00/00    RECEBER *
venda       50    00/00/00    RECEBER *
aluguel    200    00/00/00    PAGAR
luz        150    00/00/00    PAGAR

--------------------------------------------------------------------------------------------------------------
                 BUSCANDO PALAVRAS COM POSICIONAMENTOS DE LETRAS ESPECÍFICAS (LIKE - NOT LIKE)
--------------------------------------------------------------------------------------------------------------

select nome_da_tabela
where nome like '%a'

- última letra tem que ser "%a"

select nome_da_tabela
where nome like 'a%'

- primeira letra tem que ser "a%"

select nome_da_tabela
where nome like '_a%'

- segunda letra tem que ser "a"

select nome_da_tabela
h lik '[BA]%'
https://www.evernote.com/client/web?login=true#?b=5e76cfdd-de69-479e-8caa-c0b802aaa996&n=0e7740ea-5c5d-4423-841d-cac9a500fc59& 16/28
21/04/2023, 17:50 Anotações - Evernote
where nome like '[BA]%'

- primeira letra pode ser "B" ou "A"

select nome_da_tabela
where nome like '%[BA]'

- última letra pode ser "B" ou "A"

select nome_da_tabela
where nome like '_%[BA]'

- segunda letra tem que ser a letra "B" ou "A"

select nome_da_tabela
where nome not like 'a%'

- a palavra não pode começar com a letra "a"

%   : Não importa qual seja o caractere (qualquer cadeia de 0 ou mais caracteres)


_   : Qualquer caracter único
[]  : Qualquer caracter único no intervalo entre os colchetes
[^] : Qualquer caracter único que não esteja no intervalo entre os colchetes

********************************************************************************************************
******
                                      ALTER TABLE (ALTERA TABELA)
********************************************************************************************************
******
                                         
                                           ADICIONA COLUNA  

alter table nome_da_tabela


add/add column nome_da_coluna formato_de_dado after/first; 

- after nome_da_coluna_anterior (posição da nova coluna após uma já existente)


- first; (nova coluna é colocada na primeira posição)
- sem especificação (a coluna nova é adicionada na última opção)

                                          
                                            APAGA COLUNA
https://www.evernote.com/client/web?login=true#?b=5e76cfdd-de69-479e-8caa-c0b802aaa996&n=0e7740ea-5c5d-4423-841d-cac9a500fc59& 17/28
21/04/2023, 17:50 Anotações - Evernote

alter table nome_da_tabela 


drop nome_da_coluna; 

                  
                     MODIFICA O FORMATO DE DADO E AS CONSTRAINTS QUE A COLUNA RECEBE 

alter table nome_da_tabela


modify nome_da_coluna formato_de_dado_novo; 

Ex: 

alter table nome_da_tabela

modify nome_da_coluna not null default ''; (campos adicionados depois da construção da tabela ficam
no formato NULL (sem dado), por isso é necessário colocar "default" depois de afirmar que não podem
ser nulos, assim apenas ficarão vazios esperando que dados sejam adicionados ao campo novo.)

                   
                      MODIFICA O FORMATO DE DADO, AS CONSTRAINTS E RENOMEIA A COLUNA

alter table nome_da_tabela


change nome_da_coluna_atual novo_nome;

- Se a coluna possui constraints é necessário repeti-las de novo para salvar.

Ex:

alter table nome_da_tabela


change nome_da_coluna novo_nome formato_de_dado_novo not null default '';

                                         
                                            RENOMEIA TABELA

alter table nome_da_tabela


rename to novo_nome_da_tabela;

https://www.evernote.com/client/web?login=true#?b=5e76cfdd-de69-479e-8caa-c0b802aaa996&n=0e7740ea-5c5d-4423-841d-cac9a500fc59& 18/28
21/04/2023, 17:50 Anotações - Evernote

                
                    RENOMEIA UM CAMPO COMO CHAVE PRIMÁRIA DEPOIS DA CRIAÇÃO DA TABELA

alter table nome_da_tabela


add primary key (nome_do_campo);

********************************************************************************************************
******
                                          UPDATE (ATUALIZA)
********************************************************************************************************
******
                                      
                                      RENOMEAR DADOS DE UMA LINHA

update nome_da_tabela
set campo_da_tabela = 'novo_dado'
where nome_chave_primaria = 'numero_escolhido';

                                 
                                   RENOMEAR MAIS DE UM DADO EM UMA LINHA

update nome_da_tabela
set campo_da_tabela = 'novo_dado', campo_da_tabela = 'novo_dado'
where nome_chave_primaria = 'numero_escolhido';

                           
                              RENOMEAR DADOS DE VÁRIAS LINHAS AO MESMO TEMPO

update nome_da_tabela
set campo_da_tabela = 'novo_dado', campo_da_tabela = 'novo_dado'
where campo_da_tabela = 'dado_especifico';

- Se houver no fim do comando "limit 1" significa que a mudança só ocorrerá na primeira linha com os
dados especificados.

E
https://www.evernote.com/client/web?login=true#?b=5e76cfdd-de69-479e-8caa-c0b802aaa996&n=0e7740ea-5c5d-4423-841d-cac9a500fc59& 19/28
21/04/2023, 17:50 Anotações - Evernote
Ex:

update nome_da_tabela
set campo_da_tabela = 'novo_dado', campo_da_tabela = 'novo_dado'
where campo_da_tabela = 'dado_especifico'
Limit 1;

********************************************************************************************************
******
                                         RELACIONANDO TABELAS
********************************************************************************************************
******

                             ADICIONANDO A FOREIGN KEY (CHAVE ESTRANGEIRA)       

alter table nome_da_tabela


add nome_novo_campo formato_de_dado; (Campo novo adicionado)

- Formato de dado: pode ser int

- Agora é necessário dizer que o campo novo é uma chave estrangeira:

alter table nome_da_tabela


add foreign key (nome_novo_campo)
references nome_da_tabela(nome_do_campo);

Ex:

alter table alunos


add cursopreferido int;  

alter table gafanhoto (altera tabela "alunos")


add foreign key (cursopreferido) (adiciona FK)
references cursos(idcurso); (chave adicionada referente ao campo "idcurso" da tabela
"cursos")

- O "cursopreferido" da tabela "alunos" está ligado com o "idcurso" da tabela "cursos"

Ex:

\Tabela Aluno/n    \prefere/     1\Tabela Curso/

id (PK) / idcurso (int) (PK)


https://www.evernote.com/client/web?login=true#?b=5e76cfdd-de69-479e-8caa-c0b802aaa996&n=0e7740ea-5c5d-4423-841d-cac9a500fc59& 20/28
21/04/2023, 17:50 Anotações - Evernote
id (PK)                              / idcurso (int) (PK)
nome                                /  nome
profissao                          /   descricao                 
nascimento                        /    carga
sexo                             /     totaulas
peso                            /      ano
altura                         /
nacionalidade                 /
cursopreferido (FK) (int)    /

- Com o comando "desc" veremos que na opção "key" junto a linha "cursopreferido" está marcado o
rótulo "mul" de múltiplas chaves, neste caso, chave estrangeira.

Teste:

update gafanhoto set cursopreferido = '6' where id = '1';

- Na tabela "cursos", o id "6" é MySQL e na tabela "alunos" o id "1" corresponde a um aluno


- O comando coloca o curso "6" como curso preferido do aluno com id "1"

update gafanhoto set cursopreferido = '6' where id = '1';

mude gafanhoto colocando cursopreferido = '6' onde id = '1';

- O "cursopreferido" é a chave estrangeira da tabela "alunos", mas também é a chave primária "idcurso"
da tabela "cursos"

* Atualizando dados rapidamente

- Os dados no campo podem ser alterados diretamente na tabela, mas é necessário finalizar o processo
com o botão inferior direito da tela: APLLY

* Integridade Referencial (Evitando inconsistência de dados)

- Campos só poderão ser apagados se não houverem relação alguma com outro campo ou tabela

********************************************************************************************************
******
                                               
                                               JUNÇÕES

********************************************************************************************************
https://www.evernote.com/client/web?login=true#?b=5e76cfdd-de69-479e-8caa-c0b802aaa996&n=0e7740ea-5c5d-4423-841d-cac9a500fc59& 21/28
21/04/2023, 17:50 Anotações - Evernote

******
                                          INNER JOIN OU JOIN 
********************************************************************************************************
******

- INNER JOIN só faz junções de campos das tabelas que se relacionam

select nome_da_tabela1.nome_campo1, nome_da_tabela1.nome_campo2, nome_da_tabela2.nome_campo1,


nome_da_tabela2.nome_campo2
from nome_da_tabela1 join nome_da_tabela2
on nome_da_tabela2.chave_primaria = nome_da_tabela1.chave_estrangeira;

Ex:

select alunos.nome, alunos.cursopreferido, cursos.nome, cursos.ano


from alunos join cursos
on cursos.idcurso = alunos.cursopreferido;

Ou

select alunos.nome, alunos.cursopreferido, cursos.nome, cursos.ano


from alunos inner join cursos
on cursos.idcurso = alunos.cursopreferido;

- "On" é uma cláusula para o join e funciona para especificar a junção entre a chave primária e
estrangeira
- No exemplo acima, nem precisará mais do campo "cursopreferido" porque a junção já exibirá o nome
do curso ao invés do "id" do curso

* Ordenar a exibição por nome de aluno

select alunos.nome, alunos.cursopreferido, cursos.nome, cursos.ano


from alunos inner join cursos
on cursos.idcurso = alunos.cursopreferido
order by alunos.nome;

* É possível apelidar a tabela para não precisar escrever o nome sempre

Ex:

select a.nome, a.cursopreferido, c.nome, c.ano


from alunos as a inner join cursos as c
https://www.evernote.com/client/web?login=true#?b=5e76cfdd-de69-479e-8caa-c0b802aaa996&n=0e7740ea-5c5d-4423-841d-cac9a500fc59& 22/28
21/04/2023, 17:50 Anotações - Evernote
j
on c.idcurso = a.cursopreferido
order by a.nome;

- Os únicos lugares onde devem estar escritos os nomes das tabelas originais é depois de "from" e de
"join"

********************************************************************************************************
******                                      LEFT JOIN OU LEFT OUTER JOIN
********************************************************************************************************
******

- LEFT JOIN faz junções de todos os campos, mesmo que não se relacionem

- Dá preferência para a tabela da esquerda (no caso: alunos)


- Mostra todos os campos da tabela de preferência mesmo que não se relacionem com a outra tabela
  
select a.nome, a.cursopreferido, c.nome, c.ano
from alunos as a left join cursos as c
on c.idcurso = a.cursopreferido;

Ex:

NOME        NOME

Ana         MySQL
Fabiana     MySQL   
Paulo        
Maria       C
Carlos      JAVA

- Mostra todos os alunos, mesmo aqueles que não possuem curso preferido como o PAULO
- Os cursos que aparecerão, estarão relacionados ao aluno que escolheu como preferido

********************************************************************************************************
******
                                     RIGHT JOIN OU RIGHT OUTER JOIN
********************************************************************************************************
******

- RIGHT JOIN faz junções de todos os campos, mesmo que não se relacionem

- Dá preferência para a tabela da direita (no caso: cursos)


M t t d d t b l d f ê i ã l i t t b l
https://www.evernote.com/client/web?login=true#?b=5e76cfdd-de69-479e-8caa-c0b802aaa996&n=0e7740ea-5c5d-4423-841d-cac9a500fc59& 23/28
21/04/2023, 17:50 Anotações - Evernote
- Mostra todos os campos da tabela de preferência mesmo que não se relacionem com a outra tabela    

select a.nome, a.cursopreferido, c.nome, c.ano


from alunos as a left join cursos as c
on c.idcurso = a.cursopreferido;

Ex:

NOME        NOME

Ana         MySQL   
Fabiana     MySQL
            HTML5
Maria       C
Carlos      JAVA

- Mostra todos os cursos, mesmo aqueles que não possuem um aluno que preferiu o curso como
HTML5               
- Os alunos que aparecerão, serão aqueles que escolheram o curso como preferido 

********************************************************************************************************
******
                                      INNER JOIN COM VÁRIAS TABELAS
********************************************************************************************************
****** 

- Tabela de interação entre as duas tabelas já existentes ("alunos" e "cursos") 

alunos - 1     n - assiste - n      1 - cursos

idaluno(PK)        id(PK)               idcurso(PK)


nome               data                 nome
sexo               idaluno(FK)          descricao
nascimento         idcurso(FK)          aulas
 

- Criando tabela extra de relacionamento "muitos-para-muitos":

create table aluno_assiste_curso (

https://www.evernote.com/client/web?login=true#?b=5e76cfdd-de69-479e-8caa-c0b802aaa996&n=0e7740ea-5c5d-4423-841d-cac9a500fc59& 24/28
21/04/2023, 17:50 Anotações - Evernote

id int not null auto_increment,


data date,
idaluno int,
idcurso int,
primary key (id),
foreign key (idaluno) references alunos(idaluno), (id) -> é o id da tabela "alunos"
foreign key (idcurso) references cursos(idcurso) (idcurso) -> é o id da tabela "cursos"
) default charset = utf8;

- Inserindo registros:

insert into aluno_assiste_curso values


(default, '2014-03-01', '1', '2');

- default: para continuar com a regra "auto incrementar"


- '2014-03-01': data em que começou o curso
- '1': id do aluno
- '2': id do curso que o aluno assiste  

- Junção de resultados:

1 - select a.nome, c.nome from alunos a


2 - join aluno_assiste_curso aac
3 - on a.idaluno = aac.idaluno
4 - join cursos c
5 - on c.idcurso = aac.idcurso
6 - order by a.nome;

1 - Seleciona para exibição: campo "nome" da tabela "alunos" e campo "nome" da tabela "cursos" 
    (tabela "alunos" ganha o apelido "a")

2 - Tabela "aluno_assiste_curso" ganha o apelido "aac"

3 - Faz junção do campo "idaluno" da tabela "alunos" com o campo "idaluno" da tabela
"aluno_assiste_curso"

4 - Tabela "cursos" ganha o apelido "c"

5 - Faz junção do campo "idcurso" da tabela "cursos" com o campo "idcurso" da tabela
"aluno_assiste_curso" 

https://www.evernote.com/client/web?login=true#?b=5e76cfdd-de69-479e-8caa-c0b802aaa996&n=0e7740ea-5c5d-4423-841d-cac9a500fc59& 25/28
21/04/2023, 17:50 Anotações - Evernote

6 - Ordena a exibição por nomes da tabela "alunos"

- Exemplo de exibição:

nome(aluno)      nome(curso)

Ana              MySQL
Ana              PHP
Beto             Java
Camila           CSS3

--------------------------------------------------------------------------------------------------------------

                                LEFT JOIN / INNER JOIN \ RIGHT JOIN  

LEFT JOIN: Preferência para a tabela da esquerda


INNER JOIN: Só exibe colunas que se relacionem entre as tabelas
RIGHT JOIN: Preferência para a tabela da direita 

               
********************************************************************************************************
******
        PERMITIR A EDIÇÃO (RENOMEAÇÃO DE DADOS/APAGAR DADOS) DE VÁRIAS LINHAS AO MESMO
TEMPO *PERIGOSO*
********************************************************************************************************
******

1 - Edit
2 - Preferences
3 - Sql editor
4 - Desmarcar o check box "Save updates (atualizações seguras)"

********************************************************************************************************
******                                         
BACKUP MySQL (DUMP)
********************************************************************************************************
******

* Gerar Dump
https://www.evernote.com/client/web?login=true#?b=5e76cfdd-de69-479e-8caa-c0b802aaa996&n=0e7740ea-5c5d-4423-841d-cac9a500fc59& 26/28
21/04/2023, 17:50 Anotações - Evernote

1 - Server

2 - Data Export

3 - Seleciona banco e tabelas a serem exportadas

4 - Seleciona o que terá no backup:


a) Dump structure and data (estrutura e dados cadastrados)
b) Dump data only (apenas dados)
c) Dump structure only (apenas estrutura, sem dados)

5 - Tipos de exportação:
a) Exportação do projeto inteiro
b) Exportação de um arquivo único (Export to Self-Contained File)
   * Marcar opção "INCLUDE CREATE SCHEMA"

6 - Start Export

* Abrir Dump

1 - Server

2 - Data Import

3 - Selecionar de onde (Folder ou Self Container File)

4 - Usuário/senha

5 - Start Import

********************************************************************************************************
******
********************************************************************************************************
******

* Console MySQl

- WampServer
- MySQL
- Console MySQl
- usuário: (root)
- password: (colocar senha do servidor)

https://www.evernote.com/client/web?login=true#?b=5e76cfdd-de69-479e-8caa-c0b802aaa996&n=0e7740ea-5c5d-4423-841d-cac9a500fc59& 27/28
21/04/2023, 17:50 Anotações - Evernote

- show databases;                      (Mostra todos os bancos de dados)


- status;                              (Mostra algumas informações e qual banco de dados está em uso)
- use nome_do_banco;                   (Para usar o banco de dados)
- show tables;                         (Mostra tabelas)
- desc nome_da_tabela;                 (Descreve formato de dados da tabela)
- show create table nome_da_tabela;    (Exibe os comandos utilizados para a criação da tabela)
- show create database nome_do_banco;  (Exibe os comandos utilizados para criação do banco)

********************************************************************************************************
******

* PHPMyAdmin

- WampServer
- PHPMyAdmin

- New ou Base de dados (Criar banco de dados)


- Criar tabela (Digitar o nome da tabela na caixa e adicionar o número de colunas (campos))
- Nomear as colunas na estrutura de tabela criada
- not null (Escolher se algum campo pode deixar de ser preenchido)
- id (Selecionar como auto increment)
- "Muda" (Altera a estrutura da coluna)
- Se for um dado de duas opções como MASCULINO e FEMININO, colocar entre 'M' e 'F'

* Gerar Dump

1 - Casinha
2 - Exportar
3 - Modo rápido ou personalizado

https://www.evernote.com/client/web?login=true#?b=5e76cfdd-de69-479e-8caa-c0b802aaa996&n=0e7740ea-5c5d-4423-841d-cac9a500fc59& 28/28

Você também pode gostar