Comandos SQL: SELECT, INSERT, UPDATE e DELETE

Um amigo que trabalha em uma biblioteca me procurou com um desafio: criar um sistema que permitisse controlar o estoque de livros, os empréstimos, a disponibilidade de exemplares e a entrada de novos títulos no acervo.
Para resolver o problema, sugeri a criação de um sistema no banco de dados, pois assim eles teriam mais controle para dessas ações.
Neste artigo, vamos percorrer os primeiros passos dessa jornada, desde a criação do banco até a estruturação das tabelas.
Criando database
Comecei baixando o MySQL (confira nosso tutorial de download e instalação do MySQL), configurei um servidor e criei uma database biblioteca, com o comando CREATE:
CREATE database biblioteca;Agora, com a database criada, que é um banco de dados próprio da biblioteca 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 (International Standard Book Number)
- Edição
- Editora
- Ano de 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 livrosPara colocar as colunas, devemos abrir e fechar um parêntese e escrever as colunas entre eles, colocando o nome correspondente.
Na frente do nome da coluna, precisamos colocar o tipo de informação que ela receberá.
Para começar, nas colunas título e autor, como serão textos, e muitas vezes podem ser grandes, coloquei o tipo text que não precisa estipular um limite de caracteres. O resultado foi:
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 o tipo varchar e para evitar um desperdício de armazenamento, defini um limite de 50 caracteres para cada campo. Ficando assim:
ISBN varchar (50),
edicao varchar (50),
editora varchar(50),Então, criei a coluna anoPublicacao para indicar a data em que ano o livro foi publicado, sendo o tipo 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 o tipo 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 o tipo 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 como ficou 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 coluna idioma, também coloquei o tipo varchar porque podemos receber livros de diversas linguagens. Ficando:
idioma varchar(50),
Mais colunas e chave-primária
Para o controle de estoque, criei duas colunas: quantidade (total de exemplares adquiridos) e disponível (total em prateleira).
A ideia é manter o valor original em uma, enquanto a outra é atualizada conforme os empréstimos ocorrem. Como só podem ser números inteiros também, já que não podemos ter meio livro, coloquei o tipo int:
quantidade int,
disponivel int );Além disso, no fim do insert, depois de fechar o parêntese, devemos finalizar o comando com ponto e vírgula (`;`), como deve ser feito 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 tivesse o valor “1” e fosse aumentando os valores automaticamente para que, assim, esse número indicasse quantos livros a biblioteca tinha ao todo.
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.
Ao usar o INSERT devemos escrever INSERT INTO, seguido pelo nome da tabela e pela lista de colunas. Após a cláusula VALUES, inserimos os dados correspondentes entre parênteses. Como a coluna id será auto incrementada, 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 1Quando procurei para saber mais, descobri que este erro acontece quando colocamos valores em 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 outros livros 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 usei 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 errei a sintaxe do SQL, ou seja, que o comando ou uma parte dele foi escrita errado. Foi então que procurei e descobri que no SQL o comando para selecionar todos é *, então, coloquei:
SELECT * FROM livrosE apareceu todas as coisas que 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ítulos 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 banco de dados usamos o DELETE:
DELETE from livrosPoré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 linha de uma tabela em SQL utilizei o comando UPDATE. Porém, assim como 'DELETE', deve ser especificado para não serem 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 é autoincrementado 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! mpre 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 podermos 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.

Conclusão
Agora que você já sabe criar tabelas e inserir, atualizar, excluir e consultar dados, que tal aplicar tudo isso em um banco de dados?
Acesse a Carreira de Análise de Dados e aprenda a extrair, manipular, analisar e comunicar informações relevantes a partir de grandes volumes de dados. Desenvolva habilidades práticas para trabalhar com dados estruturados e não estruturados e avance na sua carreira em dados.








