Usando MySQL com comandos SQL básicos

2 de maio de 2019

Aprenda a usar comandos SQL básicos no sistema de gerenciamento de banco de dados de código aberto MySQL.

MySQL é o gerenciador de banco de dados relacional mais comumente usado. Sua facilidade de uso e licença de código aberto contribuíram muito para essa popularidade.

Na semana passada, cobri instalação e configuração do MySQL no Ubuntu. Neste artigo, apresentarei a você vários recursos do MySQL, principalmente nos básicos.

Observação: MySQL ** consultas (comandos) não diferenciam maiúsculas de minúsculas; no entanto, é prática comum usar MAIÚSCULAS para o comando real palavras-chave e minúsculas para o restante. *

Comandos Sql Básicos

Comandos Sql Básicos

Conectando-se e Desconectando-se do Servidor MySQL

Para poder inserir consultas, você primeiro terá que se conectar ao servidor usando MySQL e usar o prompt do MySQL. O comando para fazer isso é:

Comandos para usar no terminal

mysql -h host_name -u user -p

- h é usado para especificar um nome de host (se o servidor estiver localizado em outra máquina; se não estiver, apenas omita), - u menciona o usuário e - p especifica que você deseja inserir uma senha.

Embora não seja recomendado (por razões de segurança), você pode inserir a senha diretamente no comando, digitando-a logo após - p. Por exemplo, se a senha para test_user for 1234 e você estiver tentando se conectar à máquina que está usando, poderá usar:

Comandos para usar no terminal

mysql -u test_user -p1234

Se você inseriu com sucesso os parâmetros necessários, será saudado pelo prompt do shell do MySQL (mysql>):

Prompt do shell do MySQL Prompt do shell do MySQL Para desconectar do servidor e sair do prompt do mysql, digite:

Comandos para usar no terminal

QUIT

Digitar quit (MySQL não diferencia maiúsculas de minúsculas) ou \ q também funcionará. Pressione Enter para sair.

Você também pode gerar informações sobre a versão com um comando simples:

Comandos para usar no terminal

sudo mysqladmin -u root version -p

Nota: Certifique-se de estar conectado ao servidor antes de inserir qualquer uma das consultas que abordarei.

Se você quiser ver uma lista de opções, use:

Comandos para usar no terminal

mysql --help

Usando consultas no MySQL

O MySQL armazena dados em tabelas e usa comandos chamados consultas (SQL = linguagem de consulta estruturada). Antes de me aprofundar no armazenamento, acesso e modificação de dados, abordarei consultas básicas para que você pegue o jeito.

Como o MySQL usa tabelas, a saída de consultas também será exibida em tabelas. Todas as instruções SQL devem ser seguidas por um ponto-e-vírgula (; ), embora haja exceções (mais notavelmente: QUIT). Você pode separar colunas com vírgula (, ). Aqui estão alguns exemplos básicos:

Comandos para usar no terminal

mysql> SELECT VERSION(); mysql> SELECT CURRENT_DATE; mysql> SELECT VERSION(), CURRENT_DATE;

Como exemplo, a terceira consulta imprimiria algo semelhante a isto:

Comandos para usar no terminal

+-----------+--------------+ | VERSION() | CURRENT_DATE | +-----------+--------------+ | 8.0.15 | 2019-04-13 | +-----------+--------------+ 1 row in set (0,41 sec)

Visto que ponto-e-vírgula (; ) marca o final de uma instrução, você também pode escrever várias instruções em uma única linha.

Por exemplo, em vez de:

Comandos para usar no terminal

mysql> SELECT VERSION(); mysql> SELECT CURRENT_DATE;

Você também pode escrever:

Comandos para usar no terminal

mysql> SELECT VERSION(); SELECT CURRENT_DATE;

Você também pode inserir consultas multilinhas (se você não incluir um ponto-e-vírgula no final da linha antes de pressionar Enter). Nesse caso, o MySQL simplesmente entrará em um prompt diferente para permitir que você continue seu comando. Por exemplo:

Comandos para usar no terminal

mysql> SELECT -> VERSION() -> , -> CURRENT_DATE;

Consultas multilinhas também ocorrerão se você não finalizar uma string em uma linha (uma palavra cercada por ou*).

Se você deseja cancelar uma consulta, digite \ c e pressione Enter .

Existem prompts com diferentes significados:

  • mysql> = pronto para nova consulta
  • -> = aguardando a próxima linha de consulta de várias linhas
  • ‘> = aguardando a próxima linha, aguardando a conclusão de uma string que começou com aspas simples (')
  • > = aguardando a próxima linha, aguardando a conclusão de uma string que começou com uma aspa dupla (**) `> = esperando a próxima linha, aguardando a conclusão de um identificador que começou com uma crase (```) /*> *= aguardando a próxima linha, aguardando a conclusão de um comentário que começou com `/`

Você também pode imprimir a hora atual ( hh: mm: ss) junto com a data atual com AGORA (), bem como o usuário que você está conectado usando DO UTILIZADOR()**:

Comandos para usar no terminal

mysql> SELECT NOW(); mysql> SELECT USER();

Isso resultará em algo semelhante a este:

Comandos para usar no terminal

+---------------------+ | NOW() | +---------------------+ | 2019-04-13 23:53:48 | +---------------------+ 1 row in set (0,00 sec)

+----------------+ | USER() | +----------------+ | [email protected] | +----------------+ 1 row in set (0,00 sec)

MySQL permite que você calcule cálculos matemáticos também:

Comandos para usar no terminal

mysql> SELECT COS(PI()/3), (10-2+4)/3;

Saída:

Comandos para usar no terminal

+--------------------+------------+ | COS(PI()/3) | (10-2+4)/3 | +--------------------+------------+ | 0.5000000000000001 | 4.0000 | +--------------------+------------+

Usando bancos de dados no MySQL

1. Obtendo informações sobre bancos de dados

Em primeiro lugar, você pode listar os bancos de dados disponíveis com:

Comandos para usar no terminal

mysql> SHOW DATABASES;

Você também pode ver o banco de dados selecionado com:

Comandos para usar no terminal

mysql> SELECT DATABASE();

Isso produzirá NULL se nenhum banco de dados for selecionado. Aqui está um exemplo de saída para as duas instruções mencionadas:

Comandos para usar no terminal

+--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+

+------------+ | DATABASE() | +------------+ | NULL | +------------+

2. Criação de bancos de dados

Isso é feito simplesmente inserindo um comando:

Comandos para usar no terminal

mysql> CREATE DATABASE example_db;

Nota: * No banco de dados Ubuntu 18.04 (ou qualquer outro sistema baseado em Unix), os nomes das tabelas e bancos de dados diferenciam maiúsculas de minúsculas.

3. Selecionando bancos de dados

Para selecionar um banco de dados, você deve mencionar que deseja usá-lo:

Comandos para usar no terminal

mysql> USE example_db;

Se for bem-sucedido, você receberá a mensagem:

Comandos para usar no terminal

Database changed

Se não for bem-sucedido, você receberá um erro informando que o MySQL não pode encontrar o banco de dados especificado.

Você também pode selecionar um banco de dados ao se conectar ao servidor, mencionando o nome de um banco de dados existente no final do comando de conexão:

Comandos para usar no terminal

mysql -h host_name -u user_name -p example_table

Por exemplo:

Comandos para usar no terminal

mysql -u root -p example_table

Usando tabelas em SQL

1. Obtendo informações sobre tabelas

Para listar as tabelas no banco de dados atual, use:

Comandos para usar no terminal

mysql> SHOW TABLES;

Nota: Certifique-se de ter selecionado um banco de dados.

Se o banco de dados estiver vazio (por exemplo, um recém-criado), a saída será:

Comandos para usar no terminal

Empty set (0,00 sec)

Depois de criar tabelas, a saída será ao longo da linha de:

Comandos para usar no terminal

+----------------------+ | Tables_in_example_db | +----------------------+ | table_1 | | table_2 | +----------------------+ 1 row in set (0,00 sec)

2. Criação de tabelas

Para criar tabelas, você deve especificar o layout - as colunas e que tipo de dados elas devem armazenar.

No meu exemplo, armazenarei informações sobre um grupo de pessoas: nome, data de nascimento, sexo, país. Aqui está como posso criar essa tabela:

Comandos para usar no terminal

mysql> CREATE TABLE table_1 (name VARCHAR(30), birth_date DATE, sex CHAR(1), country VARCHAR(40));

Nota: Você também pode escrever o comando em várias linhas .

Você pode ver que mencionei o nome da tabela (tabela_1) e o nome das colunas (nome, nascimento_data, sexo, país ) Após os nomes das colunas, especifiquei o tipo de dados que eles armazenam. VARCHAR (n) são sequências de no máximo n caracteres de comprimento, DATE é autoexplicativo (formato CCYY-MM-DD) e CHAR (1 ) significa um único caractere (especificamente, pretendo usar 'm' e 'f' para masculino e feminino). Outros tipos comuns incluem INT (inteiros), BOOL (booleanos), TIME (hh: mm: ss), Existem muitos tipos de dados disponíveis para usar no MySQL (numérico, string, data e hora). Você também pode usar tipos de dados mais complexos, como AUTO_INCREMENT.

A tabela agora aparecerá se você MOSTRAR TABELAS.

Se desejar, você pode modificar o layout de uma tabela usando ALTER TABLE:

Comandos para usar no terminal

mysql> ALTER TABLE table_1 ADD email VARCHAR(50); mysql> ALTER TABLE table_1 DROP birth_date;

Esses exemplos adicionaram uma coluna (primeiro exemplo) e excluíram uma coluna (segundo exemplo). Você pode conferir mais informações sobre ALTER TABLE aqui, já que também possui usos mais avançados.

3. Descrevendo tabelas

Você pode ver a estrutura de uma tabela a qualquer momento com:

Comandos para usar no terminal

mysql> DESCRIBLE table_name;

Por exemplo:

Comandos para usar no terminal

mysql> DESCRIBE table_1;

produzirá:

Comandos para usar no terminal

+------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------+-------------+------+-----+---------+-------+ | name | varchar(30) | YES | | NULL | | | birth_date | date | YES | | NULL | | | sex | char(1) | YES | | NULL | | | country | varchar(40) | YES | | NULL | | +------------+-------------+------+-----+---------+-------+ 4 rows in set (0,00 sec)

4. Excluindo tabelas

A instrução para exclusão de tabelas é:

Comandos para usar no terminal

DROP TABLE table_name;

5. Inserindo Dados em Tabelas

Para inserir dados, deve-se especificar os valores a serem introduzidos em cada coluna (na mesma ordem que na definição da tabela). Para valores vazios ou desconhecidos, você deve usar NULL. Certifique-se de valores não numéricos com aspas () ou aspas duplas (**). Os valores devem ser separados por vírgulas (,**).

Aqui estão alguns exemplos para Smith e Emily:

Comandos para usar no terminal

mysql> INSERT INTO table_1 VALUES ('Smith', '1980-04-24', 'm', 'Argentina'); mysql> INSERT INTO table_1 VALUES ('Emily', '1994-07-19', 'f', NULL);

6. Esvaziando tabelas

Se você quiser esvaziar uma tabela (excluir todas as entradas), use:

Comandos para usar no terminal

DELETE FROM table_name;

Usando WHERE, você pode excluir linhas específicas:

Comandos para usar no terminal

DELETE FROM table_name WHERE col_name = value

Irei mais a fundo nas seções a seguir.

7. Atualizando entradas de tabela

A sintaxe para atualizar uma entrada é:

Comandos para usar no terminal

UPDATE table_name SET col = 'value' WHERE conditions

Por exemplo:

Comandos para usar no terminal

UPDATE table_1 SET country = 'France' WHERE name = 'Emily'

Se você não especificar as condições, todas as entradas serão alteradas.

8. Recuperando dados de tabelas

O comando MySQL usado para extrair dados de tabelas é SELECT. A estrutura de tal declaração é:

Comandos para usar no terminal

SELECT what FROM where WHERE conditions;

Abordarei alguns aplicativos comuns, para que você possa entender como extrair exatamente o que deseja do banco de dados.

uma. Selecionando todos os dados

Em primeiro lugar, o uso mais simples é exibir todos os dados de uma tabela. Por exemplo:

Comandos para usar no terminal

mysql> SELECT * FROM table_1;

O curinga (***) representa tudo, table_1 é a tabela da qual estou extraindo. Você pode ver que omiti a parte WHERE**; é opcional ter condições para os dados selecionados.

b. Selecionando dados específicos

Em primeiro lugar, examinarei a seleção de linhas.

Para selecionar linhas particulares, você deve especificar condições que restringem os dados:

Comandos para usar no terminal

mysql> SELECT FROM table_1 WHERE name = 'Smith'; mysql> SELECT FROM table_1 WHERE sex = 'm'; mysql> SELECT FROM table_1 WHERE birth_date < '1990-1-1'; mysql> SELECT FROM table_1 WHERE sex = 'f' AND birth_date > '1991-1-1'; mysql> SELECT FROM table_1 WHERE sex = 'm' OR country = 'France'; mysql> SELECT FROM table_1 WHERE country IS NOT NULL;

Nos primeiros dois exemplos, eu simplesmente comparo strings (não faz distinção entre maiúsculas e minúsculas). Você também pode comparar valores como datas e inteiros com operadores de comparação (>, <,> =, <=, = ). <> é usado para denotar ‘não é igual a‘. Você pode especificar várias condições usando operadores lógicos (AND, OR). E tem precedência maior do que OU. É melhor usar parênteses quando houver condições mais complexas.

IS NOT NULL é uma maneira de exibir apenas linhas que não têm um valor para a coluna especificada. Você não pode usar operadores de comparação aritmética com NULL, pois representa um valor ausente (o resultado também será NULL). Você deve usar IS NULL e IS NOT NULL.

NULL e 0 são tratados como FALSE, o restante como TRUE.

Agora abordarei a exibição de colunas específicas.

Para fazer isso, você deve especificar as colunas que deseja exibir, separadas por vírgulas. Por exemplo:

Comandos para usar no terminal

mysql> SELECT name, birth_date FROM table_1;

Você também pode se livrar de dados repetidos. Por exemplo, se eu quiser obter todas as datas de nascimento (sem obter o mesmo valor várias vezes se várias pessoas nascerem nessa data), usarei:

Comandos para usar no terminal

mysql> SELECT DISTINCT birth_date FROM table_1;

Isso exibirá apenas resultados DISTINCT.

Para obter ainda mais específico, você pode combinar a exibição de colunas particulares com condições (WHERE):

Comandos para usar no terminal

mysql> SELECT name, sex FROM table_1 WHERE country = 'France' AND birth_date < '1991-1-1';

c. Classificando dados

Para classificar os dados, você usa ORDER_BY:

Comandos para usar no terminal

mysql> SELECT name FROM table_1 ORDER BY birth_date;

Você pode ver que combinei isso com a seleção de dados específicos. O comando acima exibirá os nomes de todas as entradas, ordenados em ordem crescente por data de nascimento.

Você também pode pedir em ordem decrescente:

Comandos para usar no terminal

mysql> SELECT name FROM table_1 ORDER BY birth_date DESC;

Classificação pode ser aplicada em colunas múltiplas. Por exemplo, para classificar em ordem decrescente por data de nascimento e pessoas nascidas na mesma data em ordem crescente por nome, eu usaria:

Comandos para usar no terminal

mysql> SELECT name FROM table_1 ORDER BY birth_date DESC, name;

d. Manipulando datas

Você pode obter a data atual usando CURDATE (). Usando este e outro ano, você poderia calcular a diferença (por exemplo, para obter a idade de uma pessoa) com TIMESTAMPDIFF ():

Comandos para usar no terminal

mysql> SELECT name, birth_date, CURDATE(), -> TIMESTAMPDIFF(YEAR, birth_date, CURDATE()) AS age -> FROM table_1 ORDER BY age;

Aqui está a saída de um exemplo table_1:

Comandos para usar no terminal

+--------+------------+------------+------+ | name | birth_date | CURDATE() | age | +--------+------------+------------+------+ | Emily | 1994-07-19 | 2019-04-13 | 24 | | Danny | 1992-08-04 | 2019-04-13 | 26 | | Joanna | 1992-08-04 | 2019-04-13 | 26 | | Joe | 1985-03-11 | 2019-04-13 | 34 | | Smith | 1980-04-24 | 2019-04-13 | 38 | +--------+------------+------------+------+

TIMESTAMPDIFF () toma como argumentos a unidade a ser usada para o resultado (ANO) e duas datas (data de nascimento_data, CURDATE ()) para as quais calcular a diferença. A palavra-chave AS (alias) nomeia a coluna resultante e facilita o trabalho (neste exemplo: classificação por idade).

Para se referir a partes específicas de datas, você pode usar ANO (), MÊS () e DIAFMONTH (), usando a data como argumento. Por exemplo:

Comandos para usar no terminal

mysql> SELECT name, birth_date, MONTH(birth_date) FROM table_1;

Você pode comparar resultados (meses, anos, dias) apenas como números normais. No entanto, para comparar isso com coisas como o mês seguinte, você não pode simplesmente adicionar a CURDATE (), pois isso pode fazer com que você verifique o mês 13 ou outro não -sentido. A solução alternativa para isso é INTERVAL e DATE_ADD ():

Comandos para usar no terminal

mysql> SELECT name, birth_date FROM table_1 WHERE MONTH(birth_date) = MONTH(DATE_ADD(CURDATE(),INTERVAL 1 MONTH));

Você também pode usar o operador módulo (MOD):

Comandos para usar no terminal

mysql> SELECT name, birth_date FROM pet WHERE MONTH(birth_date) = MOD(MONTH(CURDATE()), 12) + 1;

Usar datas inválidas retornará NULL e produzirá AVISOS, visto com:

Comandos para usar no terminal

mysql> SHOW WARNINGS;

e. Usando correspondência de padrões

No MySQL, _ significa qualquer caractere único e% para 0+ caracteres e os padrões são (por padrão) não diferenciam maiúsculas de minúsculas . Em vez de = e <>, para usar padrões, você deve usar LIKE e NOT LIKE:

Comandos para usar no terminal

mysql> SELECT birth_date FROM table_1 WHERE name LIKE '%a%'; mysql> SELECT birth_date FROM table_1 WHERE name LIKE '%b'; mysql> SELECT birth_date FROM table_1 WHERE name LIKE 'c%'; mysql> SELECT * FROM table_1 WHERE name LIKE '___';

Estes exemplos selecionam as datas de nascimento das entradas em que o nome contém 'a' (primeiro exemplo), termina com 'b' (segundo exemplo) ou começa com 'c' ( terceiro exemplo). O último exemplo seleciona linhas onde o nome tem exatamente três caracteres (três instâncias de ‘_ ‘).

Você também pode usar expressões regulares estendidas, com REGEXP_LIKE () (também operadores REGEXP e RLIKE). As expressões regulares estão além do escopo deste guia, mas você pode verificar mais informações aqui.

f. Resultados da contagem

Contar dados é importante e tem muitos usos no mundo real. MySQL usa COUNT () para tais tarefas. O exemplo mais simples é contar as entradas de uma tabela:

Comandos para usar no terminal

mysql> SELECT COUNT(*) FROM table_1;

Você também pode dividir a contagem entre grupos. Por exemplo, eu poderia GROUP BY country e exibir quantas entradas existem em cada país:

Comandos para usar no terminal

mysql> SELECT country, COUNT(*) FROM table_1 GROUP BY country;

Você poderia mencionar grupos ainda mais específicos inserindo mais colunas para agrupar por. Por exemplo:

Comandos para usar no terminal

mysql> SELECT country, sex, COUNT(*) FROM table_1 GROUP BY country, sex;

Esses resultados também podem ser usados junto com WHERE para restringir a saída.

Tenha cuidado ao contar. Se você especificar qualquer outra coisa para imprimir além de COUNT () e não mencionar essas colunas após GROUP BY, poderá obter um erro ou resultados inesperados (consulte SOMENTE_FULL_GROUP_BY **).

g. Usando várias tabelas

Isso é algo que você pode querer fazer em um contexto um pouco mais complexo.

Como exemplo, imagine que haja outra tabela (tabela_2) que armazena a data (data) em que as pessoas (nome) participaram das reuniões (reunião).

Você pode exibir a idade das pessoas nessas tabelas quando participaram das reuniões:

Comandos para usar no terminal

mysql> SELECT table_1.name, TIMESTAMPDIFF(YEAR, birth_date, date) AS age, meeting FROM table_1 INNER JOIN table_2 ON table_1.name = table_2.name;

Isso produzirá algo como:

Comandos para usar no terminal

+-------+------+-----------------+ | name | age | meeting | +-------+------+-----------------+ | Emily | 21 | Dog Lovers Club | | Emily | 22 | Dog Lovers Club | | Emily | 23 | Hackathon | | Smith | 36 | TED Talk | | Smith | 38 | Footbal Match | +-------+------+-----------------+

Vou tentar explicar a sintaxe. Para nome, tivemos que mencionar tabela_1.nome e tabela_2.nome, uma vez que a coluna está presente em ambas as tabelas (para nascimento_data, data e reunião **não foi necessário especificar a tabela, pois são exclusivas de uma delas). Isso usa as declarações que já cobri.

A parte interessante é esta:

Comandos para usar no terminal

FROM table_1 INNER JOIN table_2 ON table_1.name = table_2.name;

INNER JOIN coloca as tabelas juntas e pega a linha que tem algo em comum, uma condição especificada pela palavra-chave ON; neste caso, onde os nomes correspondem.

Observação: Você também pode montar a mesma tabela com ela mesma, talvez para comparar dois resultados de SELECT.

Usando o modo em lote no MySQL

Outro recurso interessante é o modo em lote. Em vez do shell interativo, você pode colocar as instruções em um arquivo e executá-las:

Comandos para usar no terminal

mysql -h host_name -u user_name -p < batch_file

Será solicitado que você digite uma senha (se necessária para o usuário). Se você quiser continuar executando em vez de parar nos erros, use - force.

Você pode até redirecionar a saída para outro programa ou arquivo:

Comandos para usar no terminal

mysql -h host_name -u user_name -p < batch_file | less mysql -h host_name -u user_name -p < batch_file > output_file

Você também pode obter saída interativa com - t ou saída de eco com parâmetros - v.

Se você estiver no shell MySQL interativo e quiser executar um script, use um dos dois:

Comandos para usar no terminal

mysql> source batch_file; mysql> . batch_file;

Conclusão

Neste artigo, abordei diferentes maneiras de usar o MySQL para lidar com bancos de dados tabulares, até mesmo investigando recursos mais avançados.

Eu ficaria feliz se este guia ajudasse usuários com dificuldades e iniciantes. Mesmo que você não seja um iniciante, espero que você leia algo que não conhece. Se te ajudou, avise-nos nos comentários!

Confira também a versão original desse post em inglês
Esse post foi originalmente escrito por Sergiu e publicado no site itsfoss.com. Tradução sujeita a revisão.

Using MySQL with Basic SQL Commands

Propaganda
Blog Comments powered by Disqus.
Propaganda