Banco de Dados
6.6 SQL básico
6.6.2 Chaves estrangeiras
Além de chaves primárias, nossas tabelas podem ter chaves estrangeiras. Chaves estrangeiras são chaves que estão diretamente relacionadas com outras chaves de outras tabelas no mesmo banco de dados. Por exemplo: um post e um usuário. Um post está diretamente relacionado ao seu autor, isto é, usuário. Portanto, podemos criar uma chave estrangeira e relacionar a tabela de posts com usuários:
1 C R E A T E TAB LE u s u a r i o s (
2 u s u a r i o _ i d INT NOT NULL A U T O _ I N C R E M E N T ,
3 u s u a r i o V A R C H A R (2 55) NOT NULL ,
4 se nha V A R C H A R (40) NOT NULL ,
5 P R I M A R Y KEY ( u s u a r i o _ i d ) ,
6 IN DEX ( u s u a r i o _ i d )
7 ) E N G I N E = I N N O D B ;
8
9 C R E A T E TAB LE pos ts (
11 au tor INT NOT NULL ,
12 post V A R C H A R ( 140 ) NOT NULL ,
13 P R I M A R Y KEY ( p o s t _ i d ) ,
14 IN DEX ( p o s t _ i d ) ,
15 F O R E I G N KEY au tor ( au tor ) R E F E R E N C E S u s u a r i o s ( u s u a r i o _ i d )
16 ON U P D A T E C A S C A D E ON D E L E T E C A S C A D E
17 ) E N G I N E = I N N O D B ;
Observe a linha ON UPDATE CASCADE ON DELETE CASCADE. Esta linha de- termina o comportamento que será adotado pelo banco de dados caso um registro desta tabela seja alterado ou removido. A opção CASCADE faz com que as rela- ções (de chave estrangeira) sejam automaticamente removidas, sem que haja uma intervenção manual. Sem a opção cascade, não poderíamos remover um post.
6.6.3 Alter
O comando ALTER permite que nós alteremos as características de um banco de dados ou tabela existente. Podemos alterar as colunas de uma tabela utilizando o alter da seguinte forma:
1 AL TER TA BLE po sts M O D I F Y t i t u l o TEXT ;
2 AL TER TA BLE po sts ADD au tor V A R C H A R (1 00 ) ;
3 AL TER TA BLE po sts DROP c o n t e u d o ;
4 AL TER TA BLE po sts ADD P R I M A R Y KEY ( id ) ;
Na primeira linha estamos modificando o tipo da coluna titulo para TEXT. Na se- gunda, adicionamos uma nova coluna chamada autor. Na terceira, removemos a
6.6.4 Drop
O comando DROP permite que nós deletemos bancos de dados e tabelas. Ele é muito similar ao create, mas possui menos parâmetros.
1 DROP T ABL E p ost s ;
2 DROP T ABL E posts , usuarios , c o m e n t a r i o s ;
3 DROP D A T A B A S E b anc o ;
6.6.5 Truncate
O comando TRUNCATE permite que nós esvaziemos uma tabela em nosso banco de dados. Isso irá remover todos os registros de uma tabela.
1 T R U N C A T E TAB LE pos ts ;
6.6.6 Insert
O comando INSERT permite a inserção de registros em uma tabela. É com ele que nós podemos começar a aprender mais sobre manipulação de dados em um banco de dados relacional. Para inserir informações em uma tabela, podemos:
1 I N S E R T INTO pos ts ( titulo , c o n t e u d o ) V A L U E S ( ’ Meu p r i m e i r o post ’ , ’ Este post é mui to legal , tri le gal ! ’) ;
2 I N S E R T INTO pos ts ( titulo , c o n t e u d o ) V A L U E S ( ’ O Gr ê mio g a n h o u ! ’ , ’ O t r i c o l o r ata ca de novo ! ’) ;
Observe que estamos especificando não só os valores que queremos inserir, mas onde queremos inseri-los. Especificamos que vamos inserir dados nas colunas titulo e conteudo, e logo depois com a cláusula VALUES, especificamos que valores irão nestas colunas respectivamente.
6.6.7 Update
Podemos utilizar o comando UPDATE para atualizar registros em uma tabela. Para atualizar registros, podemos:
1 U P D A T E pos ts SET t i t u l o = ’ Novo post ’ WHE RE t i t u l o = ’ Meu p r i m e i r o post ’;
2 U P D A T E pos ts SET t i t u l o = ’ Novo post ’ , c o n t e u d o = ’ Novo conteudo ’ WH ERE id =1;
Usamos a cláusula SET para especificar quais colunas receberão novos valores. Podemos especificar mais de uma coluna separando-as por vírgulas.
Observe que temos uma cláusula WHERE junto de nosso comando UPDATE. A cláu- sula WHERE espera uma condição e serve como filtro. Caso os registros de nossa tabela batam com a condição especificada no WHERE, eles serão repassados para o comando que utilizamos, neste caso o UPDATE.
É comum utilizarmos a chave primária de um registro para fazer condições onde que- remos encontrar um registro específico, mas podemos fazer condições com qualquer coluna da tabela. E não só condições de igualdade:
• Igual: =
• Maior que: >
• Menor ou igual: <=
• Maior ou igual: >=
Além disso, podemos ter múltiplas condições:
1 U P D A T E pos ts SET t i t u l o = ’ Novo post ’ WHE RE c a t e g o r i a = 1 AND tag = ’ futebol ’;
Se executarmos o comando UPDATE sem WHERE, iremos alterar todos os registros da tabela. E tenho certeza que não é isso que queremos, não é?
6.6.8 Delete
Podemos remover dados de nossas tabelas utilizando o comando DELETE. Assim como o UPDATE, o DELETE também pode ou não ter uma cláusula WHERE, ve- jam:
1 D E L E T E FROM pos ts ;
2 D E L E T E FROM pos ts WHE RE id = 1;
Na primeira linha, vamos remover todos os registros da tabela posts. Na segunda, vamos remover apenas o registro com id igual a 1.
6.6.9 Select
Com certeza o comando SELECT é o comando mais interessante de se trabalhar quando falamos de bancos de dados. É ele que permite que nós façamos consultas em nosso banco. O comando SELECT é muito versátil e permite que façamos con- sultas simples ou extremamente complexas, dependendo de como as informações estão organizadas em nosso banco de dados.
Para fazer uma simples consulta, fazemos:
1 S E L E C T * FROM pos ts ;
2 S E L E C T t i t u l o FROM pos ts ;
3 S E L E C T titulo , c o n t e u d o FROM pos ts ;
O primeiro parâmetro que o comando SELECT espera são as colunas que queremos ver. O segundo parâmetro é a tabela que queremos consultar. Quando não quiser- mos ver colunas específicas, mas sim, todas as colunas de uma tabela, podemos utilizar o asterisco.
Também podemos filtrar e manipular nossa consulta de várias maneiras. O primeiro exemplo é utilizar o comando SELECT junto com a cláusula WHERE:
1 S E L E C T * FROM pos ts WHE RE c a t e g o r i a = 2;
2 S E L E C T titulo , c o n t e u d o FROM pos ts WHE RE c a t e g o r i a <> 2 AND tag = ’ futebol ’;
Organizando resultados
Para organizar os resultados de nossa consulta por uma coluna, podemos:
Por padrão, será utilizada a ordem ascendente. Mas podemos, como na segunda linha do exemplo acima, organizar de forma descendente. Se organizarmos de forma descendente uma coluna que possui letras, não números, a ordem será Z-A não A- Z.
Limitando resultados
Podemos também limitar o número de resultados de nossa consulta:
1 S E L E C T * FROM pos ts LIM IT 0 ,10;
2 S E L E C T * FROM pos ts LIM IT 30 ,100;
O primeiro número é o início e o segundo, o fim. É como se disséssemos para nosso banco de dados: faça a consulta e me traga os resultados de 30 a 100.
Buscando informações
Podemos buscar informações nos registros de nossas tabelas utilizando o comando SELECT em conjunto com a cláusula WHERE e o operador LIKE. O LIKE permite que nós filtremos os resultados de nossa consulta com base no conteúdo de uma coluna:
1 S E L E C T * FROM pos ts WHE RE t i t u l o LIKE ’ Meu carro ’;
2 S E L E C T * FROM pos ts WHE RE t i t u l o LIKE ’% f u t e b o l % ’;
A primeira linha irá trazer todos os registros da tabela post que possuam exatamente a frase "Meu carro"na coluna titulo. Já a segunda linha irá trazer todos os registros que possuam em qualquer parte da coluna titulo a palavra "futebol".
Usamos o % para indicar um curinga, que pode representar qualquer letra, número ou palavra em nossa string.
6.6.10 Join
O comando join permite que, em uma consulta SQL, nós juntemos duas tabelas a partir de uma condição. Vamos supor que nós estamos querendo saber todos os posts que possuem uma categoria. Vamos executar a seguinte consulta:
1 S E L E C T * FROM posts , c a t e g o r i a s WHE RE pos ts . c a t e g o r i a = c a t e g o r i a s . nome ;
Esta consulta irá retornar apenas os posts que possuem categorias, deixando de lado os posts que não possuem.