Você está na página 1de 11

Comandos SQL: SELECT, INSERT,

UPDATE e DELETE
Fui chamada por um amigo meu que trabalha em uma biblioteca para criar um
sistema para que os funcionários tivessem controle do estoque de livros, quais
eram emprestados, quantos haviam disponíveis, quando um novo livro fosse
acrescentado ao inventário, entre outras coisas.

Sugeri de fazer um sistema no banco de dados, pois assim eles podiam fazer
isso facilmente e teriam um sistema somente deles, no qual pudessem ter esse
controle.

Confira neste artigo:


 Criando tabelas com MySQL
 INSERT - Inserindo dados na tabela
 DELETE - Deletando linhas de tabelas
 UPDATE - Mudando dados da tabela
 SELECT - Mostrando dados da tabela

Comecei baixando o MySQL (confira nosso tutorial sobre MySQL do download,


instalação e criação da sua primeira tabela), configurei um servidor e
criei CREATE uma database biblioteca, com o comando:

CREATE database biblioteca;

Agora que a database, que é um banco de dados próprio da biblioteca, foi


criado, devemos adicionar os dados dos livros. E como podemos fazer isso?

No SQL os dados são inseridos em tabelas, na qual cada coluna representa


um dado e cada linha, um livro cadastrado.

Criando tabelas com MySQL


Comecei a pensar o que teria que ter na tabela. Cheguei aos seguintes tópicos:

 Título
 Autor
 ISBN
 Edição
 Editora
 Ano publicação
 Páginas
 Gênero literário
 Idioma
 Quantidade de livros desta edição
 Quantidade de livros desta edição disponível na biblioteca

Porém, lembrei que antes de começar a criar qualquer coisa no banco de


dados, devemos informar qual database queremos usar. Para isso, usamos
o comando USE e o nome da database sempre que formos mexer nessa
database. Então, escrevi:
USE biblioteca;

A partir daí, comecei a escrever o código para criar CREATE a tabela TABLE e o
nome da tabela, que será livros. Ficando:
CREATE TABLE livros

Para colocar as colunas, devemos abrir e fechar um parênteses e escrever as


colunas entre eles, colocando o que é cada um.

Na frente do nome da coluna, precisamos colocar o tipo de informação que ela


receberá.

Para começar, na coluna título e autor, como serão textos, e muitas vezes
podem ser grandes, coloquei a categoria text que não precisa estipular um
limite de caracteres. Aí ficou:
CREATE TABLE livros (

titulo text,

autor text,

Porém, nas colunas ISBN, edição e editora, que são informações que podem
conter algum número ou caractere especial, coloquei na categoria varchar, e
como não podemos deixar uma possibilidade enorme, coloquei um limite de 50
caracteres cada um. Ficando:

ISBN varchar (50),

edicao varchar (50),

editora varchar(50),

Então, criei a coluna ano para indicar a data em que ano o livro foi publicado,
sendo a categoria year, que aceita somente o ano e, assim não precisamos
incluir a data inteira:
anoPublicacao year,

Para a coluna de páginas, como essa informação sempre será um número


inteiro, coloquei a categoria int que indica que ali só serão acrescentando
números inteiros.
qtdePaginas int,
Já na coluna de gênero, como sempre inserimos os mesmos tipos, coloquei a
categoria enum, que só permite inserir um valor que está entre alguns que
foram definidos na criação da tabela.
Assim, também podemos saber quantos livros de determinado gênero temos
no estoque. E o como ficou como a seguir:

genero ENUM ('poesia', 'soneto', 'romance', 'fábula', 'novela',

'cronica', 'conto', 'ensaio', 'biografia', 'chicklit', 'fantasia',

'distopia', 'ficcao cientifica', 'horror', 'fantastica', 'infanto

juvenil', 'young adult', 'suspense', 'autoajuda', 'negocios',

'tecnologia', 'hq', 'aventura')),

Na categoria de idioma, também coloquei varchar porque podemos receber


livros de diversas linguagens. Ficando:

idioma varchar(50),

Por fim, coloquei as colunas da quantidade total de exemplares daquele livro


estão disponíveis na biblioteca e a quantidade que está disponível, que deve
ser atualizada sempre que um livro for emprestado.

CREATE TABLE livros (

titulo text,

autor text,

ISBN varchar (50),

edicao varchar (50),

editora varchar(50),

anoPublicacao year,
qtdePaginas int,

genero ENUM ('poesia', 'soneto', 'romance', 'fábula', 'novela',

'cronica', 'conto', 'ensaio', 'biografia', 'chicklit',

'fantasia', 'distopia', 'ficcao cientifica', 'horror',

'fantastica', 'infanto juvenil', 'young adult', 'suspense',

'autoajuda', 'negocios', 'tecnologia', 'hq', 'aventura'),

idioma varchar(50),

Mais colunas e chave-primária

A biblioteca quer uma coluna para a quantidade total e para a quantidade


disponível para uma ser sempre atualizada, enquanto outra permanece com o
mesmo valor desde que recebermos um livro, para termos um controle de
quanto livros deveríamos ter - e saber se algum deles foi perdido.

Como só podem ser números inteiros também, já que não podemos ter meio
livro, coloquei na categoria int:

quantidade int,

disponivel int );

Além disso, no fim do insert, depois de fechar o parênteses, devemos finalizar


o comando com ponto e vírgula (;), como devemos fazer no fim de todo
comando em SQL.
O código inteiro para criar a tabela ficou assim:

CREATE TABLE livros (

titulo text,

autor text,

ISBN varchar (50),


edicao varchar (50),

editora varchar(50),

anoPublicacao year,

qtdePaginas int,

genero ENUM ('poesia', 'soneto', 'romance', 'fábula', 'novela',

'cronica', 'conto', 'ensaio', 'biografia', 'chicklit',

'fantasia', 'distopia', 'ficcao cientifica', 'horror',

'fantastica', 'infanto juvenil', 'young adult', 'suspense',

'autoajuda', 'negocios', 'tecnologia', 'hq', 'aventura'),

idioma varchar(50),

quantidade INT,

disponivel int);

Antes de executar, pensei em criar uma coluna que na primeira linha ela
tivesse o valor “1” e fosse aumentando os valores automaticamente para que,
assim, esse número indicasse quantos livros a biblioteca tinha ao todo.

Pensando em como fazer isso, lembrei que na Apostila de SQL da Alura era
criada uma coluna "id" que seria auto-incrementada com o comando
auto_increment e ela seria uma chave primária ou PRIMARY KEY, que é uma
coluna que possui um valor único em cada linha, o que as identifica.
CREATE TABLE livros (

id INT auto_increment PRIMARY KEY,

titulo text,

autor text,
isbn varchar (50),

edicao varchar (50),

editora varchar(50),

anoPublicacao year,

qtdePaginas int,

genero ENUM ('poesia', 'soneto', 'romance', 'fábula', 'novela',

'cronica', 'conto', 'ensaio', 'biografia', 'chicklit',

'fantasia', 'distopia', 'ficcao cientifica', 'horror',

'fantastica', 'infanto juvenil', 'young adult', 'suspense',

'autoajuda', 'negocios', 'tecnologia', 'hq', 'aventura'),

idioma varchar(50),

quantidade int,

disponivel int );

E pronto! A minha tabela foi criada!

Agora com a tabela criada temos que adicionar dados nela! E como podemos
fazer isso?

INSERT - Inserindo dados na tabela


Para isso, eu usei o comando INSERT
Para usar o INSERT devemos escrever INSERT INTO e o nome da tabela.
Depois colocar em parênteses as colunas que terão um valor inseridos,
escrever VALUES e escrever em outro parênteses os valores que serão
inseridos nas colunas.
Como a coluna id será auto-incrementada automaticamente, sempre que uma
linha for adicionada, não precisamos inserir um valor nela.
Assim, iremos adicionar uma linha, que são os dados que terão na tabela:

INSERT INTO livros (titulo, autor, isbn, edicao, editora,

anoPublicacao, qtdePaginas, genero, idioma, quantidade) VALUES

('orgulho e preconceito', 'jane austen', 978-8544001820, 'luxo',

'martin claret', 2018, 424, 'romance', 2);

Porém, apareceu o seguinte erro:

Error Code: 1136. Column count doesn’t match value count at row 1

Quando procurei para saber mais, descobri que este erro acontece quando
colocamos valores a colunas que não existem. Porém, todas essas colunas
existem na minha tabela. Qual será o problema?

Analisando o comando, notei que não havia inserido nenhum valor na coluna
idioma, mesmo tendo informado no comando que ela receberia um valor.
Tentando novamente:

INSERT INTO livros (titulo, autor, isbn, edicao, editora,

anoPublicacao, qtdePaginas, genero, idioma, quantidade,

disponivel) VALUES ('orgulho e preconceito', 'jane austen',

'978-8544001820', 'luxo', 'martin claret', 2018, 424, 'romance',

'portugues', 2, 2);

E deu certo! Assim, comecei a adicionar os as outras matérias daquele mês.

Porém, como eu podia fazer para mostrar a tabela na tela? Pensei que eu
deveria selecionar a tabela inteira ou uma parte dela para mostrar, então, o
comando é SELECT:
SELECT ALL FROM livros;

Porém, apresentou o seguinte erro:

Error 1064. You have an error in your SQL syntax.


Isso significa que eu errei a sintaxe do SQL, ou seja, que o comando ou uma
parte dele foi escrita errado. Foi então que eu procurei e descobri que no SQL
o comando para selecionar todos é *, então, coloquei:

SELECT * FROM livros

E apareceu todas as coisas que eu cadastrei no banco de dados!

DELETE - Deletando linhas de tabelas


Porém, observando a lista, notei que havia adicionado duas vezes uma mesma
edição em capa de Orgulho e Preconceito.

Como a questão é controlarmos a quantidade de título que temos, não tem


necessidade de tê-lo duas vezes, quando a quantidade de livros está na tabela,
certo? E como eu poderia apagar uma das linhas duplicadas?

Para deletar no computador usamos o DELETE, então, podemos usar o


mesmo comando:
DELETE from livros

Porém, percebi que não tinha indicado qual linha deveria ser deletada e
utilizando o comando assim eu poderia deletar toda a tabela, ou seja, todos
os dados que eu havia inserido nela.
Então, pensei em especificar qual linha era com ao menos um valor de uma
das colunas. Na minha tabela, existe alguma coluna que possui um valor único
para cada linha?

Lembra que quando criamos a tabela criamos a coluna id que teria um número
que se auto-incrementaria e era a chave primária da tabela?

Essa é a coluna que devemos usar como parâmetro! Pois, se usássemos a


coluna de nome, as duas linhas seriam excluídas e teríamos que incluir mais
uma vez. Usando a coluna id, que tem um número diferente para cada linha, só
a linha errada é excluída.
Então, usei mais uma vez o SELECT * FROM livros e vi na tabela o id da
linha duplicada.

Que no caso, o id é o 2.

Mudando o comando para deletar a linha da tabela, onde o id era 2, ficou:

DELETE from livros WHERE id=2;

E funcionou! Vendo a tabela novamente, não existe mais a linha 2 e há


somente uma linha para esta edição do Orgulho e Preconceito.

E pronto! Agora a biblioteca começou a funcionar!

UPDATE - Mudando dados da tabela


Os livros já estão sendo emprestados e como posso fazer para atualizar a
quantidade de livros disponíveis na biblioteca?

Para mudar dados de uma coluna de uma linha de uma tabela em SQL utiliza o
comando UPDATE. Porém, assim como DELETE, deve ser especificado para
que não sejam alteradas todas as linhas.
Fui escrevendo o comando para atualizar a linha da coluna, utilizando como
parâmetro o nome do livro.
UPDATE livros SET disponivel=1 WHERE titulo='O Diário de Anne

Frank';

Porém, temos diversas edições deste mesmo livro e, utilizando este comando,
iríamos alterar a quantidade de livros disponíveis para todas as edições. Então,
precisamos de uma informação da tabela que seja única em cada linha. Qual
seria essa?

Sim! O id da linha, que é auto incrementado e tem um número específico para


cada linha, permitindo que saibamos exatamente qual linha queremos alterar.

Assim, comecei a mudar os comandos, colocando como parâmetro de


verificação da linha é o id, que é a chave primária da tabela, de cada um. Como
aqui:

UPDATE livros SET disponivel=1 WHERE id=19;

Deu certo! E assim podemos atualizar a quantidade de livros disponíveis para


aquela edição sempre que um for emprestado e devolvido!

SELECT - Mostrando dados da tabela


Passado algum tempo com a biblioteca funcionando, uma pessoa veio
questionar quantos livros de poesia a biblioteca possui, que tinham edições
disponíveis para serem emprestadas. E como poderíamos saber esses dados
para respondê-la?

Vimos anteriormente como mostrar todos os dados da tabela, que é com


o SELECT * from livros.
Mas como podemos utilizar este comando para mostrar somente os títulos que
são poesia e não todos os livros que a biblioteca possui, como o comando fará
se o executarmos assim?
Para isso, precisamos utilizar o título do livro como parâmetro para que
possamos selecionar somente as edições deste mesmo título.

Então, seguindo a ideia dos comandos de DELETE e UPDATE, onde devemos


mostrar quais são as linhas que devem ser afetadas, vamos fazer o mesmo
com o SELECT.

SELECT * from livros WHERE genero='poesia' AND disponivel>0;

E funcionou! Aparecem somente os títulos de poesia E que possuem edições


disponíveis para serem emprestadas.

Porém, assim, aparecem todas as informações do livro e quero saber somente


o título, o autor e a quantidade disponível, certo? Como posso utilizar o
comando SELECT para mostrar apenas essas colunas?

Tentei o seguinte comando:

SELECT titulo, autor, disponivel FROM livros WHERE

genero='poesia' AND disponivel>0;

E deu certo! Apareceram somente essas colunas das linhas que são do gênero
poesia.

Agora que sabemos como criar uma tabela, inserir, deletar, mudar e selecionar
dados dela,q ual tabela você pode criar com o banco de dados? Acesse os
nossos cursos de SQL e descubra o que mais você pode fazer com banco de
dados!

Você também pode gostar