Este artigo visa dominar com rapidez e precisão a instrução SELECT no banco de dados MySQL.
A sintaxe básica da instrução SELECT no MySQL é:
A seguir está um fragmento entre aspas:
SELECIONE [STRAIGHT_JOIN] [SQL_SMALL_RESULT]
[SQL_BIG_RESULT] [HIGH_PRIORITY]
[DISTINTO | DISTINTO | TODOS]
lista_selecionada
[INTO {OUTFILE|DUMPFILE} 'nome_do_arquivo' export_options]
[FROM table_references [WHERE where_definition]
[GROUP BY col_name,...] [TENDO onde_definição]
[ORDER BY {unsighed_integer|col_name|formura} [ASC|DESC],...]
[LIMIT [offset,] linhas] [PROCEDURE procedure_name]]
Como pode ser visto nesta sintaxe básica, a instrução SELECT mais simples é SELECT select_list. Na verdade, usando esta instrução SELECT mais simples, você também pode completar muitas funções que espera. Primeiro, você pode usá-la para executar qualquer operação suportada pelo MySQL. exemplo: SELECT 1+1, ele retornará 2; em segundo lugar, você também pode usá-lo para atribuir valores a variáveis. Em PHP, usando esta função da instrução SELECT, você pode usar livremente as funções do MySQL para executar várias tarefas para o. Operações do programa PHP e atribuição de valores às variáveis. Em muitos casos, você descobrirá que o MySQL possui funções muito mais poderosas que o PHP.
STRAIGHT_JOIN, SQL_SMALL_RESULT, SQL_BIG_RESULT e HIGH_PRIORITY são extensões MySQL para ANSI SQL92. Se o otimizador unir tabelas em uma ordem não ideal, usar STRAIGHT_JOIN poderá acelerar a consulta.
SQL_SMALL_RESULT e SQL_BIG_RESULT são um conjunto de palavras-chave relativas. Devem ser usados com GROUP BY, DISTINCT ou DISTINCTROW. SQL_SMALL_RESULT informa ao otimizador que o resultado será muito pequeno, exigindo que o MySQL use uma tabela temporária para armazenar a tabela final em vez de usar classificação, inversamente, SQL_BIG_RESULT informa ao otimizador que o resultado será muito pequeno, exigindo que o MySQL use classificação em vez de; fazendo uma mesa temporária.
HIGH_PRIORITY dará ao SELECT uma prioridade mais alta do que uma instrução que atualiza a tabela, permitindo que ele execute uma consulta priorizada e rápida.
O uso das quatro palavras-chave acima é de fato bastante obscuro. Felizmente, na maioria dos casos, podemos optar por não usar essas quatro palavras-chave no MySQL.
DISTINCT e DISTINCTROW fornecem a filtragem mais básica, porém útil, para o conjunto de resultados retornado pela consulta. Ou seja, o conjunto de resultados contém apenas linhas distintas. O que deve ser observado aqui é que para as palavras-chave DISTINCT e DISTINCTROW, os valores nulos são iguais. Não importa quantos valores NULL existam, apenas um é selecionado. O uso de ALL é supérfluo. Não tem efeito na geração do conjunto de resultados.
INTO {OUTFILE|DUMPFILE} 'file_name' export_options, grava o conjunto de resultados em um arquivo. O arquivo é criado no host do servidor e já não pode existir. A sintaxe da parte export_options da instrução é a mesma usada nas cláusulas FIELDS e LINES da instrução LOAD DATAINFILE. Discutiremos isso em detalhes no artigo MySQL Advanced_LOAD DATA. A diferença entre as palavras-chave OUTFILE e DUMPFILE é que apenas uma linha é gravada no arquivo, sem nenhum final de coluna ou linha.
lista de seleção: Pode conter um ou mais dos seguintes conteúdos:
1. "*" significa todas as colunas organizadas na ordem de criação da tabela.
2. Uma lista de nomes de colunas organizados na ordem exigida pelo usuário.
3. Você pode usar um alias para substituir o nome da coluna, no seguinte formato: nome da coluna como cabeçalho_da_coluna.
4. Expressões (nomes de colunas, constantes, funções ou qualquer combinação de nomes de colunas, constantes e funções conectadas com operadores aritméticos ou bit a bit).
5. Funções internas ou funções agregadas.
6. Qualquer combinação dos itens acima.
FROM: Determina quais tabelas são utilizadas no comando SELECT. Este item geralmente é obrigatório, a menos que select_list não contenha nomes de colunas (por exemplo, apenas constantes, expressões aritméticas, etc.). Se houver diversas tabelas na entrada da tabela, separe-as com vírgulas. A ordem das tabelas após a palavra-chave FROM não afeta os resultados.
Os nomes das tabelas podem receber aliases relacionados para tornar as expressões claras. A sintaxe aqui é nome_tabela [AS] nome_alias. Por exemplo:
selecione t1.name,t2.salary do funcionário como t1,info as t2 onde t1.name=t2.name é o mesmo que select t1.name,t2.salary do funcionário t1,info t2 onde t1.name= t2.name Completamente equivalente.
Todas as outras referências à tabela, como nas cláusulas where e nas cláusulas tendo, devem usar aliases, e os aliases não podem começar com um número.
A cláusula where define as condições de pesquisa e seu método de aplicação nas instruções insert, update e delete é exatamente o mesmo que seu método de aplicação nas instruções select. Os termos de pesquisa seguem a palavra-chave onde. Se o usuário quiser usar múltiplas condições de pesquisa em uma instrução, elas poderão ser conectadas por e ou ou. A sintaxe básica das condições de pesquisa é [not] expressão comparação_operador expressão [not] expressão [not] como “match_string” é [not] null; ] nome_coluna join_operator nome_coluna; [não] expressão_booleana.
e: Usado para conectar duas condições e retornar o resultado quando ambas as condições forem VERDADEIRAS. Quando vários operadores lógicos são usados na mesma instrução, o operador and sempre tem precedência, a menos que o usuário use parênteses para alterar a ordem das operações.
ou: Usado para conectar duas condições e retornar o resultado quando uma das condições for VERDADEIRA. Quando vários operadores lógicos são usados na mesma instrução, o operador or geralmente opera após o operador and. É claro que o usuário pode usar parênteses para alterar a ordem das operações.
entre: Palavra-chave utilizada para identificar o limite inferior do intervalo, e seguida do valor do limite superior do intervalo. O intervalo em que @val entre x e y inclui o primeiro e o último valores. Se o primeiro valor especificado após entre for maior que o segundo valor, a consulta não retornará nenhuma linha.
column_name: o nome da coluna usada na comparação. Quando surgir ambiguidade, certifique-se de especificar o nome da tabela onde a coluna está localizada.
comparação_operador: operador de comparação. Veja a tabela abaixo:
A seguir estão fragmentos de citações:
significado do símbolo
= igual a
> maior que
< menos que
>= maior ou igual a
<= menor ou igual a
!= não é igual a
<> não é igual a
Ao comparar dados do tipo char e varchar, "<" significa mais próximo do início do alfabeto e ">" significa mais próximo do final do alfabeto. De modo geral, as letras minúsculas são maiores que as letras maiúsculas e as letras maiúsculas são maiores que os números, mas isso pode depender da ordem de comparação do sistema operacional no servidor.
Os espaços à direita são ignorados durante a comparação. Por exemplo, “Dirk” é igual a “Dirk”.
Ao comparar datas, "<" significa anterior a e ">" significa posterior a.
Ao usar operadores de comparação para comparar dados de caracteres e data e hora, todos os dados devem ser colocados entre aspas.
expressão: pode ser um nome de coluna, uma constante, uma função ou qualquer combinação de nomes de colunas ou constantes e uma função conectada com operadores aritméticos ou operadores bit a bit. Os operadores aritméticos são mostrados na tabela a seguir:
Aqui está o trecho citado:
significado do símbolo
+ sinal de mais
- sinal de menos
* sinal de multiplicação
/ O sinal de divisão
é nulo: usado ao procurar um valor NULL.
like: palavra-chave, você pode usar like para char, varchar e datetime (excluindo segundos e milissegundos). No MySQL, like também pode ser usado para expressões numéricas.
Quando os usuários pesquisam dados de data e hora, é melhor usar a palavra-chave like, porque um registro de data e hora completo contém uma variedade de componentes de data. Por exemplo, o usuário adiciona um valor "9:20" à coluna chegada_hora, mas não o encontra na cláusula onde chegada_hora = "9:20" porque o MySQL converte os dados inseridos em "1º de janeiro de 1900 9h20" . No entanto, a cláusula onde Arrival_time como "%9:20%" pode encontrá-lo.
boolean_expression: Uma expressão que retorna um valor "true" ou "false".
match_string: uma string que consiste em caracteres e curingas, entre aspas simples ou duplas, é um padrão de correspondência. Os curingas são mostrados na tabela a seguir:
A seguir está um fragmento entre aspas:
significado do símbolo
% Uma sequência de 0 ou mais caracteres
_ qualquer caractere único
not: negar qualquer expressão lógica ou palavra-chave,
Como como, nulo, entre, etc.
As cláusulas group by e havendo são usadas na instrução select,
É possível dividir uma tabela em grupos e retornar os grupos que correspondem à condição da cláusula havendo.
Sintaxe: Início da instrução select
agrupar por [todos] expressão_agregada_livre [,expressão_agregada_livre]*
[tendo condições_de_pesquisa]
no final da instrução select
: especifica o grupo no qual a tabela será dividida. Se uma função agregada for incluída no item da tabela select, um valor total será calculado para cada grupo. Os resultados destes totais são exibidos em novas colunas em vez de novas linhas. Os usuários podem fazer referência a essas novas colunas de total na cláusula tendo. Funções de agregação como média, contagem, máximo, mínimo e soma podem ser usadas em select_list antes de agrupar por. As tabelas podem ser agrupadas por qualquer combinação de colunas.
all: extensão Transact-SQL que inclui todos os grupos nos resultados, mesmo aqueles excluídos pela cláusula where. Se a cláusula havendo for usada ao mesmo tempo, o significado de all será negado.
agregada_free_expression: uma expressão que não contém uma função agregada A extensão Transact-SQL permite agrupar por uma expressão sem uma função agregada enquanto agrupa por nome de coluna.
tendo: Defina condições para a cláusula group by, semelhante a where where define condições para a instrução select. As condições de pesquisa para ter podem incluir expressões de função agregadas. Fora isso, seus critérios de pesquisa são os mesmos dos critérios de pesquisa where.
ordenar por: Organize os resultados por coluna. As colunas geradas por select podem ser referenciadas por nomes de colunas, aliases de coluna ou posições de coluna. Por exemplo: selecione id como meuid, nomeie como meunome do grupo minhatabela por id, selecione id como meuid, nomeie como meunome do grupo minhatabela por meuid, selecione id como meuid, nomeie como meunome do grupo minhatabela por 1. Essas três frases são completamente equivalente de. É claro que não concordamos com o terceiro uso, que terá um impacto negativo na legibilidade do programa. Para classificar em ordem decrescente, adicione a palavra-chave DESC à cláusula order by antes do nome da coluna que deseja classificar. O padrão é ordem crescente, mas você pode especificá-la explicitamente usando a palavra-chave ASC.
cláusula limit: usada para limitar o número de linhas retornadas pela instrução select. limit aceita 1 ou 2 parâmetros numéricos. Se 2 parâmetros forem fornecidos, o primeiro especifica o deslocamento da primeira linha a ser retornada e o segundo especifica o número máximo de linhas a serem retornadas. O deslocamento da linha inicial é 0 (não 1). Se um argumento for fornecido, ele indica o número máximo de linhas retornadas no deslocamento 0. Em outras palavras, o limite 5 e o limite 0,5 são completamente equivalentes.
Quanto ao significado da palavra-chave procedimento, não estou muito claro sobre ela. Ela parece suportar procedimentos armazenados, e o próprio MySQL não oferece suporte a procedimentos armazenados.