



















Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
comandos basicos do MySQL
Tipologia: Notas de estudo
1 / 27
Esta página não é visível na pré-visualização
Não perca as partes importantes!




















Tutorial de MySQL Esta apostila fornece uma introdução ao MySQL por mostrar ao usuário como criar e gerenciar um banco de dados. MySQL é um programa interativo que permite você conectar com um servidor de MySQL, perguntar e ver os resultados. Também veremos MySQL utilizado em modo de lote: você coloca suas perguntas em um arquivo de antemão, e MySQL executa os conteúdos do arquivo. Ambos os caminhos de usar o MySQL são descritos aqui. Para ver uma lista de opções fornecidas por MySQL, invoque-o com -help: shell> mysql --help Esta apostila assume que o MySQL está instalado em sua máquina, e que um servidor de MySQL está disponível para que possa conectar. A apostila descreve o processo inteiro de como criar e usar um banco de dados. Conectando e desconectando do servidor Para conectar ao servidor, você usualmente necessitará fornecer um usuário ao MySQL e, mais provavelmente, uma senha. Se o servidor continua numa máquina que não tem onde se registrar, também necessitará especificar um hostname. Sabendo os parâmetros próprios, você poderá se conectar: shell> mysql -h host -u user -p Enter password: ******** O ******** representa sua senha; entre com a senha quando MySQL exibir Enter password: prompt. Se daquela estação, você deveria ver alguma informação de introdução seguida por uma mysql> prompt: shell> mysql -h host -u user -p Enter password: ******** Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 459 to server version: 3.22.20a-log Tipo "help" para ajuda. mysql> O prompt diz que você está pronto para entrar com os comandos. Algumas instalações do MySQL permite aos usuários conectar com o servidor e continuar como anfitrião local. Se isto é o caso em sua máquina, você deveria ser capaz de conectar com o servidor ao invocar o MySQL sem quaisquer opções: shell> mysql Depois que está conectado, você pode desconectar a qualquer momento, é só digitar QUIT no mysql> prompt: mysql> QUIT Bye Você também pode desconectar por control-D. Na maioria dos exemplos nas seguintes seções, assumem que você está conectado ao servidor. Eles indicam isto por: mysql> prompt.
Entrando e perguntando Neste ponto, é mais importante descobrir como emitir perguntas do que criar tabelas, carregar e recuperar dados. Esta seção descreve os princípios básicos de como entrar com os comandos, usando várias perguntas. Você pode experimentar familiarizando com os trabalhos do MySQL. Aqui é um comando simples que pergunta ao servidor o número de sua versão e a data corrente. mysql> SELECT VERSION(), CURRENT_DATE; +--------------+--------------+ | version() | CURRENT_DATE | +--------------+--------------+ | 3.22.20a-log | 1999-03-19 | +--------------+--------------+ 1 row in set (0.01 sec) mysql> Esta pergunta ilustra várias coisas sobre MySQL:
mysql> SELECT USER() -> Se isto acontecer (você pensa que entrou com uma declaração mas a unicamente a resposta é um -> prompt), mas provavelmente, MySQL está esperando o ponto-e-vírgula. Entre com um ponto-e-vírgula para completar a declaração, e MySQL executará: mysql> SELECT USER() -> ; +--------------------+ | USER() | +--------------------+ | joesmith@localhost | +--------------------+ O '> e "> prompts ocorrem durante coleção de fio. No MySQL, pode escrever fios circundados por um "'" ou """ caracteres (por exemplo, 'hello' ou "adeus"), e MySQL deixa que você entre com os fios que transpõem linhas múltiplas. Quando você vê um '> ou "> prompt, este meio que tem de entrar com uma linha contendo um fio que começa com caracteres: "'" ou "", não tem ainda que entrar com a citação que termina o fio. Seria bom se está realmente entrando com uma linha múltipla de fio, mas como provavelmente é isso? Mais freqüentemente, o '> e "> prompts indicam que você descuidou e deixou fora um caracter de citação. Por exemplo: mysql> SELECT * FROM my_table WHERE name = "Smith AND age < 30; "> Se você ao entrar com a declaração SELECT, ele acessa, volta e se você ficar esperando o resultado e nada acontecer, ao invés de admirar, note a pista fornecida pelo "> prompt. Isto diz que MySQL está esperando ver o final de um fio. Neste ponto, o que deve ser feito? É simples, é só cancelar o comando. Entretanto, não pode ser somente \c, porque MySQL interpreta isto, como a separação do fio que está colecionando. Ao invés, de entrar somente com o fechamento de caracter (assim MySQL saberá que você terminou o fio), entre com "\c: mysql> SELECT * FROM my_table WHERE name = "Smith AND age < 30; "> "\c mysql> As mudanças do prompt retornam para mysql>, indicando que MySQL está pronto para um novo comando. Isto é importante, para saber o que '> e "> prompts expressam, porque se você entrar incorretamente com um fio, mais além, você digita a vontade e parece que MySQL ignorou, incluindo uma linha contendo QUIT, isto pode ser completamente confuso, se você não sabe o que necessita para fornecer a citação de término antes que possa cancelar o comando corrente. Exemplos de perguntas comuns Aqui segue exemplos de como resolver alguns dos problemas mais comuns do MySQL. Algum dos exemplos usam a tabela de compras, coloque os preços de cada artigo (número de item) de cada negociante. Supondo que cada negociante tem um preço fixo por artigo, então (item, negociante) é uma chave primária aos registros. Você pode criar a tabela de exemplo como: CREATE TABLE shop ( article INT(4) UNSIGNED ZEROFILL DEFAULT '0000' NOT NULL,
dealer CHAR(20) DEFAULT '' NOT NULL, price DOUBLE(16,2) DEFAULT '0.00' NOT NULL, PRIMARY KEY(article, dealer)); INSERT INTO shop VALUES (1,'A',3.45),(1,'B',3.99),(2,'A',10.99),(3,'B',1.45),(3,'C',1.69), (3,'D',1.25),(4,'D',19.95); Assim os dados de exemplo estarão: SELECT * FROM shop +---------+--------+-------+ | article | dealer | price | +---------+--------+-------+ | 0001 | A | 3.45 | | 0001 | B | 3.99 | | 0002 | A | 10.99 | | 0003 | B | 1.45 | | 0003 | C | 1.69 | | 0003 | D | 1.25 | | 0004 | D | 19.95 | +---------+--------+-------+ O valor máximo de uma coluna "Qual é o artigo que tem o preço mais alto?" SELECT MAX(article) AS article FROM shop +---------+ | article | +---------+ | 4 | +---------+ A fila da coluna com o número máximo "Encontre o número do negociantes, e avalie quem tem o artigo mais caro." No ANSI SQL isto é facilmente feito com um sub-query: SELECT article, dealer, price FROM shop WHERE price=(SELECT MAX(price) FROM shop) No MySQL (ainda não faz uma sub-seleção) somente faz isto em dois passos:
SELECT article, SUBSTRING( MAX( CONCAT(LPAD(price,6,'0'),dealer) ), 7) AS dealer, 0.00+LEFT( MAX( CONCAT(LPAD(price,6,'0'),dealer) ), 6) AS price FROM shop GROUP BY article; +---------+--------+-------+ | article | dealer | price | +---------+--------+-------+ | 0001 | B | 3.99 | | 0002 | A | 10.99 | | 0003 | C | 1.69 | | 0004 | D | 19.95 | +---------+--------+-------+ Usando chaves estrangeiras Você não necessita de chaves estrangeiras para unir 2 tabelas. O MySQL não faz a checagem de certificar que as chaves da tabela são referências e isto não é feito automaticamente apagando as filas da tabela com uma definição de chave estrangeira. Se você usa as chaves normais, ele trabalhará perfeitamente. CREATE TABLE persons ( id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, name CHAR(60) NOT NULL, PRIMARY KEY (id) ); CREATE TABLE shirts ( id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, style ENUM('t-shirt', 'polo', 'dress') NOT NULL, color ENUM('red', 'blue', 'orange', 'white', 'black') NOT NULL, owner SMALLINT UNSIGNED NOT NULL REFERENCES persons, PRIMARY KEY (id) ); INSERT INTO persons VALUES (NULL, 'Antonio Paz'); INSERT INTO shirts VALUES (NULL, 'polo', 'blue', LAST_INSERT_ID()), (NULL, 'dress', 'white', LAST_INSERT_ID()), (NULL, 't-shirt', 'blue', LAST_INSERT_ID()); INSERT INTO persons VALUES (NULL, 'Lilliana Angelovska'); INSERT INTO shirts VALUES (NULL, 'dress', 'orange', LAST_INSERT_ID()), (NULL, 'polo', 'red', LAST_INSERT_ID()), (NULL, 'dress', 'blue', LAST_INSERT_ID()), (NULL, 't-shirt', 'white', LAST_INSERT_ID()); SELECT * FROM persons; +----+---------------------+ | id | name | +----+---------------------+ | 1 | Antonio Paz | | 2 | Lilliana Angelovska | +----+---------------------+
SELECT * FROM shirts; +----+---------+--------+-------+ | id | style | color | owner | +----+---------+--------+-------+ | 1 | polo | blue | 1 | | 2 | dress | white | 1 | | 3 | t-shirt | blue | 1 | | 4 | dress | orange | 2 | | 5 | polo | red | 2 | | 6 | dress | blue | 2 | | 7 | t-shirt | white | 2 | +----+---------+--------+-------+ SELECT s.* FROM persons p, shirts s WHERE p.name LIKE 'Lilliana%' AND s.owner = p.id AND s.color <> 'white'; +----+-------+--------+-------+ | id | style | color | owner | +----+-------+--------+-------+ | 4 | dress | orange | 2 | | 5 | polo | red | 2 | | 6 | dress | blue | 2 | +----+-------+--------+-------+ Pesquisando em duas chaves MySQL ainda não faz, pesquisa com duas chaves diferentes combinadas com OR (Pesquisando com uma chave OR em diferentes partes é bem melhor): SELECT field1_index, field2_index FROM test_table WHERE field1_index = '1' OR field2_index = '1' No momento, você pode resolver isto com muita eficiência, usando uma tabela TEMPORÁRIA; Este tipo de otimização é também muito boa se você está usando muitas perguntas complicadas onde o servidor do SQL faz as otimizações no pedido errado. CREATE TEMPORARY TABLE tmp SELECT field1_index, field2_index FROM test_table WHERE field1_index = '1'; INSERT INTO tmp SELECT field1_index, field2_index FROM test_table WHERE field2_index = '1'; SELECT * from tmp; DROP TABLE tmp; Acima está o caminho para resolver a pergunta com efeito de união de duas perguntas. Criando e usando um banco de dados Agora que você já sabe como entrar com os comandos, isto é, como acessar um banco de dados. Suponha que você tenha vários animais de estimação em sua casa e tem vontade de guardar vários tipos de informações sobre eles. Você pode fazer isto, criando tabelas para guardar seus dados e carregá-las com informações desejada. Então você pode responder várias perguntas de diferentes tipos sobre seus animais recuperando os dados das tabelas. Esta seção mostra:
Seu banco de dados necessita ser criado uma unicamente vez, mas deve selecioná-lo o uso a cada vez que começar uma sessão do MySQL. Você pode fazer isto ao usar uma declaração de USE como mostrada acima. Alternativamente, você pode selecionar o banco de dados na linha de comando, quando você invocar MySQL. Somente vai especificar seu nome depois de quaisquer parâmetros de conexão que poderá ser necessário fornecer. Por exemplo: shell> mysql -h host -u user -p menagerie Enter password: ******** Note que menagerie não é sua senha no comando. Se você deseja fornecer sua senha na linha de comando depois da opção -p, você deve fazer não intervindo espaço (e.g., como -pmypassword, não como -p mypassword). Entretanto, colocar sua senha na linha de comando não é recomendada, porque impede ações que expõe a outros usuários registrados em sua máquina. Criando uma tabela Criar um banco de dados é a parte mais fácil, mas neste ponto ele está vazio, com SHOW TABLES mostrará: mysql> SHOW TABLES; Empty set (0.00 sec) A parte mais dura é decidir que estrutura o seu banco de dados deverá ter: que tabelas você necessitará, e que colunas deve ter em cada uma delas. Você desejará uma tabela que contém um registro para cada um de seus animais de estimação. Isto pode ser chamado de tabela de animal de estimação, e isto deveria conter, no mínimo, o nome de cada animal. O nome por si mesmo não está muito interessante, a tabela deveria conter outra informação. Por exemplo, se mais de uma pessoa em sua família tem animais de estimação, você pôde desejar listar o dono de cada animal. Pode registrar alguma informação básica, tal como, espécie e sexo. Como sobre idade? É interessante, mas isto, não é uma boa coisa para armazenar em um banco de dados. Ao invés da idade, será melhor armazenar um valor fixo, como a data de nascimento. Então, sempre que você necessitar da idade, você pode calcular isto como a diferença entre a data corrente e a data de nascimento. MySQL fornece funções aritmética de data. Armazenando a data de nascimento em vez da idade teremos outras vantagens:
O sexo do animal pode ser representado com uma variedade de caminhos, por exemplo, "m" e "f", ou talvez "masculino" e "feminino". É simples é só usar os caracteres únicos "m" e "f". O uso de dados tipo data para ao nascimento e morte é honestamente umaescolha óbvia. Agora que você criou uma tabela, SHOW TABLE deveria produzir alguma saída: mysql> SHOW TABLES; +---------------------+ | Tables in menagerie | +---------------------+ | pet | +---------------------+ Para verificar que sua tabela foi criada no caminho que você criou, use a declaração DESCRIBE: mysql> DESCRIBE pet; +---------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+-------------+------+-----+---------+-------+ | name | varchar(20) | YES | | NULL | | | owner | varchar(20) | YES | | NULL | | | species | varchar(20) | YES | | NULL | | | sex | char(1) | YES | | NULL | | | birth | date | YES | | NULL | | | death | date | YES | | NULL | | +---------+-------------+------+-----+---------+-------+ Você pode usar DESCRIBE a qualquer hora, por exemplo, se você esquecer os nomes das colunas em sua tabela. Carregando dados dentro uma tabela Depois de ter criado sua tabela, você necessita inserir os dados. As declarações: LOAD DATA e INSERT são úteis. Suponha que os registros do animal de estimação podem ser descritos como mostrados a baixo. (Observe que MySQL espera datas em formato: YYYY-MM-DD; pode ser diferente do que é utilizado.) Nome Dono Espécie Sexo Nascimento Morte Fofo Harold gato f 1993-02- Claws Gwen gato m 1994-03- Buffy Harold cão
especificado Puffball. Você podia inserir um novo registro usando uma declaração INSERT: mysql> INSERT INTO pet -> VALUES ('Puffball','Diane','hamster','f','1999-03-30',NULL); Note que o fio e valores de data são especificados como citados. Com INSERT, você também pode inserir NULL para representar um valor desconhecido. Você não usa \N, confome faz com LOAD DATA. Deste exemplo, você deveria ser capaz de ver que pode ser muito mais trabalhoso inserir seus registros inicialmente usando várias declarações de INSERT em vez de uma única declaração de LOAD DATA. Recuperando informação de uma tabela A declaração SELECT é utilizada para puxar informação de uma tabela. O formulário geral da declaração é: SELECT what_to_select FROM which_table WHERE conditions_to_satisfy what_to_select indica o que você deseja ver. Isto pode ser uma lista de colunas, ou
mysql> DELETE FROM pet; mysql> LOAD DATA LOCAL INFILE "pet.txt" INTO TABLE pet; Entretanto, se você fez isto, você também deve dar uma reentrada no registro do Puffball.
Você pode usar a cláusula WHERE para combinar a seleção da fila com seleção da coluna. Por exemplo, para obter datas de nascimento de cães e gatos unicamente: mysql> SELECT name, species, birth FROM pet -> WHERE species = "dog" OR species = "cat"; +--------+---------+------------+ | name | species | birth | +--------+---------+------------+ | Fluffy | cat | 1993-02-04 | | Claws | cat | 1994-03-17 | | Buffy | dog | 1989-05-13 | | Fang | dog | 1990-08-27 | | Bowser | dog | 1989-08-31 | +--------+---------+------------+ Classificando filas Você pode notar nos exemplos, que as filas de resultado são exibidas sem nenhum modo particular. Entretanto, isto é mais fácil examinar a saída da pergunta quando as filas são classificadas em algum caminho significativo. Para classificar um resultado, use ORDER BY. Aqui são os aniversários dos animais, classificados por data: mysql> SELECT name, birth FROM pet ORDER BY birth; +----------+------------+ | name | birth | +----------+------------+ | Buffy | 1989-05-13 | | Bowser | 1989-08-31 | | Fang | 1990-08-27 | | Fluffy | 1993-02-04 | | Claws | 1994-03-17 | | Slim | 1996-04-29 | | Whistler | 1997-12-09 | | Chirpy | 1998-09-11 | | Puffball | 1999-03-30 | +----------+------------+ Para classificar um pedido em ordem decrescente, use a palavra chave DESC com o nome da coluna: mysql> SELECT name, birth FROM pet ORDER BY birth DESC; +----------+------------+ | name | birth | +----------+------------+ | Puffball | 1999-03-30 | | Chirpy | 1998-09-11 | | Whistler | 1997-12-09 | | Slim | 1996-04-29 | | Claws | 1994-03-17 | | Fluffy | 1993-02-04 | | Fang | 1990-08-27 | | Bowser | 1989-08-31 | | Buffy | 1989-05-13 | +----------+------------+ Você pode classificar colunas múltiplas. Por exemplo, para classificar por tipo de animal e por data de nascimento, o tipo de animal deve ser classificado pelo o mais jovem, use a seguinte query:
mysql> SELECT name, species, birth FROM pet ORDER BY species, birth DESC; +----------+---------+------------+ | name | species | birth | +----------+---------+------------+ | Chirpy | bird | 1998-09-11 | | Whistler | bird | 1997-12-09 | | Claws | cat | 1994-03-17 | | Fluffy | cat | 1993-02-04 | | Fang | dog | 1990-08-27 | | Bowser | dog | 1989-08-31 | | Buffy | dog | 1989-05-13 | | Puffball | hamster | 1999-03-30 | | Slim | snake | 1996-04-29 | +----------+---------+------------+ Note que a palavra chave DESC aplica unicamente à coluna (nascimento); valores de espécie são classificados por ordem crescente. Cálculos de Data MySQL fornece várias funções que pode fazer cálculos em datas, por exemplo, para calcular idades ou extrair partes das datas. Para determinar quantos anos tem seus animais de estimação, ele pega a diferença entre a data de nascimento e a data corrente. Converte as duas datas para dias, tomam a diferença, e divide por 365 (o número de dias em um ano): mysql> SELECT name, (TO_DAYS(NOW())-TO_DAYS(birth))/365 FROM pet; +----------+-------------------------------------+ | name | (TO_DAYS(NOW())-TO_DAYS(birth))/365 | +----------+-------------------------------------+ | Fluffy | 6.15 | | Claws | 5.04 | | Buffy | 9.88 | | Fang | 8.59 | | Bowser | 9.58 | | Chirpy | 0.55 | | Whistler | 1.30 | | Slim | 2.92 | | Puffball | 0.00 | +----------+-------------------------------------+ Há algumas coisas que podem ser melhoradas. Primeiro, o resultado pode ser examinado mais facilmente se as filas que forem apresentadas em alguma ordem. Segundo, o título da coluna de idade não está significativo. O primeiro problema pode ser tratado por inserindo a cláusula ORDER BY ao nome, para classificar a saída por nome. Para lidar com o título da coluna, fornece um nome à coluna de modo que um rótulo diferente apareça na saída (isto é chamado de apelido da coluna): mysql> SELECT name, (TO_DAYS(NOW())-TO_DAYS(birth))/365 AS age -> FROM pet ORDER BY name; +----------+------+ | name | age | +----------+------+ | Bowser | 9.58 | | Buffy | 9.88 | | Chirpy | 0.55 | | Claws | 5.04 |
Descobrindo animais com aniversários no próximo mês é fácil, também. Suponha o mês corrente é abril. Então o valor de mês é 4 e você espera animais nascidos no mês de maio (mês 5): mysql> SELECT name, birth FROM pet WHERE MONTH(birth) = 5; +-------+------------+ | name | birth | +-------+------------+ | Buffy | 1989-05-13 | +-------+------------+ Há uma pequena complicação se o mês corrente é dezembro. Você não faz somente a soma do número do mês (12) e espera animais produzidos em mês 13, porque não há tal mês. Você espera animais produzidos em janeiro (mês 1). Você pode até mesmo escrever a pergunta de modo que isto trabalhe com nenhuma matéria do mês corrente. Aquele caminho que você não tem que usar um número de mês particular na pergunta. DATE_ADD() permite você somar um intervalo do tempo para uma data dada. Se você soma um mês ao valor de NOW(), então o mês desfaz-se MONTH(), o resultado produzido é o mês em que esperávamos os aniversários: mysql> SELECT name, birth FROM pet -> WHERE MONTH(birth) = MONTH(DATE_ADD(NOW(), INTERVAL 1 MONTH)); Um caminho diferente para efetuar a mesma tarefa é somar 1 para obter o próximo mês depois o mês corrente: mysql> SELECT name, birth FROM pet -> WHERE MONTH(birth) = MOD(MONTH(NOW()), 12) + 1; Note que MÊS volta um número entre 1 e 12. e MOD(alguma coisa,12) volta um número entre 0 e 11. Assim a adição tem que estar depois de MOD() de outra maneira nós poderíamos ir de Novembro (11) para Janeiro (1). Trabalhando com valores NULOS O valor NULL pode ser surpreendente até você se acostumar a isto. Conceitualmente, valores NULL são valores desconhecidos e isto é tratado diferentemente dos outros valores. Para testar NULL, você não pode usar os operadores de comparação de aritmética tal como =, < ou !=. Para demonstrar isto, tenta a seguinte pergunta: mysql> SELECT 1 = NULL, 1 != NULL, 1 < NULL, 1 > NULL; +----------+-----------+----------+----------+ | 1 = NULL | 1 != NULL | 1 < NULL | 1 > NULL | +----------+-----------+----------+----------+ | NULL | NULL | NULL | NULL | +----------+-----------+----------+----------+ Claramente você obtem nenhum resultado significativos destas comparações. Use o operadores IS NULL e IS NOT NULL: mysql> SELECT 1 IS NULL, 1 IS NOT NULL; +-----------+---------------+ | 1 IS NULL | 1 IS NOT NULL | +-----------+---------------+ | 0 | 1 | +-----------+---------------+ No MySQL, 0 são valores falsos e 1 são valores verdadeiros. Este tratamento especial de NULL é por que isto foi necessário para determinar se os animais não estam mortos, usando death IS NOT NULL ao invés de death != NULL.
Unindo Modelo MySQL fornece um modelo do SQL padronizado unindo assim um formulário de modelo baseado em expressões regulares parecidas com aquelas utilizadas por utilitários de Unix tal como vi, grep e sed. Modelo do SQL permite você usar "" para unir qualquer caracter único, e "%" para unir um número arbitrário de caracteres (incluindo zero caracteres). No MySQL, modelos do SQL são caso insensível por default. Alguns exemplos são mostrados baixo. Note que você não usa = ou != quando você usa modelos do SQL; use o GOSTADO DE ou NÃO operadores de comparação IGUAIS ao invés. Para encontrar nomes começam com "b": mysql> SELECT * FROM pet WHERE name LIKE "b%"; +--------+--------+---------+------+------------+------------+ | name | owner | species | sex | birth | death | +--------+--------+---------+------+------------+------------+ | Buffy | Harold | dog | f | 1989-05-13 | NULL | | Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 | +--------+--------+---------+------+------------+------------+ Para encontrar nomes finalizando com "%fy": mysql> SELECT * FROM pet WHERE name LIKE "%fy"; +--------+--------+---------+------+------------+-------+ | name | owner | species | sex | birth | death | +--------+--------+---------+------+------------+-------+ | Fluffy | Harold | cat | f | 1993-02-04 | NULL | | Buffy | Harold | dog | f | 1989-05-13 | NULL | +--------+--------+---------+------+------------+-------+ Para encontrar nomes contendo uns "w": mysql> SELECT * FROM pet WHERE name LIKE "%w%"; +----------+-------+---------+------+------------+------------+ | name | owner | species | sex | birth | death | +----------+-------+---------+------+------------+------------+ | Claws | Gwen | cat | m | 1994-03-17 | NULL | | Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 | | Whistler | Gwen | bird | NULL | 1997-12-09 | NULL | +----------+-------+---------+------+------------+------------+ Para encontrar nomes contendo extamente cinco caracteres, usam os caracteres de modelo "": mysql> SELECT * FROM pet WHERE name LIKE "_____"; +-------+--------+---------+------+------------+-------+ | name | owner | species | sex | birth | death | +-------+--------+---------+------+------------+-------+ | Claws | Gwen | cat | m | 1994-03-17 | NULL | | Buffy | Harold | dog | f | 1989-05-13 | NULL | +-------+--------+---------+------+------------+-------+ O outro tipo de modelo fornecido por MySQL usa expressões regulares. Quando você testa este tipo de modelo, usa os operadores REGEXP e NOT REGEXP (ou RLIKE e NOT RLIKE, que são sinônimos).