Depois do tutorial de como criar tabelas, eis como manipular os dados em MySQL.
Vamos passar a analisar os comandos mais habituais para manipulação de dados em SQL:
- SELECT
- INSERT
- UPDATE
- DELETE
Existem mais alguns, que abordaremos oportunamente, mas estes são os mais comuns
SELEÇÃO DE DADOS
O comando SELECT permite selecionar dados a partir de uma tabela ou de várias tabelas. Tem uma sintaxe bastante extensa e potente.
Abaixo apresta-se toda a sintaxe deste comando e, mais à frente, é explicado um subconjunto dessa mesma sintaxe, nomeadamente os subcomandos e opções mais frequentes.
SELECT
[ALL | DISTINCT | DISTINCTROW]
[HIGH_PRIORITY]
[STRAIGHT_JOIN]
[SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT] [SQL_CACHE | SQL_NO_CACHE][SQL_CALC_FOUND_ROWS]
expr_select [, expr_select …]
[FORM referências_tabelas
[WHERE condição]
[GROUP BY {nome_col | expr | posição}
[ASC | DESC], … [WITH ROLLUP]]
[HAVING condição_where]
[ORDER BY {nome_col | expr | posição}
[ASC | DESC], …]
[LIMIT {[início,] contagem | contagem OFFSET início}]
[PROCEDURE nome_procedimento(lista_argumentos)]
[INTO OUTFILE ‘nome_ficheiro’
[CHARACTER SET código_carateres]
Opções_exportação
| INTO DUMPFILE ‘nome_ficheiro’
| INTO nome_variável [, nome_variável]]
[FOR UPDATE | LOCK IN SHARE MODE]]
O termo expr_select indica a coluna que se pretende obter com o comando SELECT.
O termo referências_tabelas indica a tabela ou tabelas onde se pretendem consultar os dados. A cláusula WHERE indica qual a condição ou condições que as linhas têm que satisfazer para serem selecionadas.
As colunas selecionadas podem ser ordenadas ou agrupadas usando as cláusulas ORDER BY ou GROUP BY.
A cláusula HAVING tem que vir depois de uma cláusula GROUP BY e antes de qualquer cláusula ORDER BY. É aplicada mesmo antes do resultado ser apresentado ao cliente.
EXEMPLO DE UTILIZAÇÃO DA CLÁUSULA WHERE
SELECT utl_nome FROM utilizador WHERE utl_paisid=1;
O comando anterior seleciona todos os nomes de utilizadores que pertencem ao país com código 1.
EXEMPLO DE UTILIZAÇÃO DA CLÁUSULA ORDER BY
SELECT utl_nome FROM utilizador ORDER BY utl_nome DESC;
O comando anterior apresenta os nomes de todos os utilizadores ordenados por ordem alfabética decrescente de nome.
EXEMPLO DE UTILIZAÇÃO DA CLÁUSULA GROUP BY
SELECT utl_nome, utl_paisid FROM utilizador GROUP BY utl_paisid
O comando anterior apresenta os nomes e códigos de país dos utilizadores agrupados por código de país, ou seja, apresenta apenas um utilizador de cada país.
Este código que se segue é idêntico ao anterior, mas filtra o resultado pela condição da cláusula HAVING.
SELECT utl_nome, utl_paisid FROM utilizador GROUP BY utl_paisid HAVING utl_paisid=1;
EXEMPLOS DE UTILIZAÇÃO DA CLÁUSULA LIMIT
SELECT * FROM utilizador ORDER BY utl_nome LIMIT 2;
SELECT * FROM utilizador ORDER BY utl_nome LIMIT 5,2;
No exemplo anterior, o primeiro comando seleciona os dois primeiros nomes depois de ordenados por ordem alfabética crescente. O segundo comando seleciona dois utilizadores, a partir do quinto exclusive, depois de ordenados por ordem alfabética crescente.
INSERÇÃO DE DADOS
O comando INSERT permite inserir linhas numa tabela. No quadro abaixo apresenta-se a sintaxe mais usual deste comando.
INSERT [LOW_PRIORITY | DELAYED |HIGH_PRIORITY] [IGNORE]
[INTO] nome_tbl [nome_col, …]
{VALUES | VALUE} ({expr | DEFAULT},…),(…),…
[ON DUPLICATE KEY UPDATE
Nome_col=expr
[,nome_col=expr] …]
Caso não se indique o nome das colunas antes da cláusula VALUES, os valores a inserir têm que ser indicados pela ordem com que os campos foram criados na tabela. Embora seja opcional indicar os nomes das colunas antes da cláusula VALUES, é conveniente fazê-lo pois, se no futuro a tabela sofrer alterações de estrutura, o comando SQL continua válido.
EXEMPLO DE COMANDO INSERT SEM DEFINIÇÃO DE COLUNAS
INSERT INTO pais VALUES
(1, ‘Portugal’),
(2, ‘Espanha’),
(3, ‘França’),
(4, ‘Grécia’),
(5, ‘Itália’);
Ao indicar as colunas onde se pretende fazer a inserção, é possível especificar apenas alguns campos e não necessariamente a totalidade dos campos da tabela.
EXEMPLO DE COMANDO INSERT COM DEFINIÇÃO DE COLUNAS
INSERT INTO utilizador (utl_nome, utl_passe, utl_paisid) VALUES
(‘Maria’, ‘abc’, 1),
(‘Manuel’, ‘xpto’, 2),
(‘João, ‘123’, 1),
(‘Júlia’, ‘xyz‘, 3),
(‘Sofia’, ‘321’, 4);
O comando atrás executa uma inserção de 5 linhas na tabela utilizador onde apenas são afectados 3 campos: tl_nome, utl_passe e utl_paisid.
ATUALIZAÇÃO DE DADOS
O comando UPDATE permite fazer alterações nos dados contidos numa ou mais tabelas. A sintaxe para alterações numa tabela é indicada abaixo.
UPDATE [LOW_PRIORITY] [IGNORE] referência_tabela
SET nome_col1={expr1|DEFAULT} [,
Nome_col2={expr2|DEFAULT}]…
[WHERE condição_where]
[ORDER BY …]
[LIMIT contagem]
EXEMPLO DE UTILIZAÇÃO DO COMANDO UPDATE
UPDATE utilizador SET utl_paisid=2 WHERE utl_id=4
O comando anterior atualiza o código do país para o valor 2, para o utilizador com o identificador (utl_id) igual a 4.
REMOÇÃO DE DADOS
O comando DELETE permite remover linhas de uma ou mais tabelas. A sintaxe para remoção de linhas de uma tabela é apresentada de seguida
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM nome_tbl
[WHERE condição_where]
[ORDER BY …]
[LIMIT contagem]
EXEMPLO DE UTILIZAÇÃO DO COMANDO DELETE
DELETE FROM utilizador WHERE utl_id=4 LIMIT 1;
O comando anterior elimina o utilizador com o identificador (utl_id) igual a 4. Por uma questão de segurança deve utilizar-se, sempre que possível a cláusula LIMIT para evitar remoções não pretendidas.