Memo SQL (atualizado de tempos em tempos)

concat (), concat_ws (), group_concat ()

    concat () : concatena várias strings em uma string e retorna o resultado como a string gerada pelos parâmetros de conexão. Se algum parâmetro for nulo, o valor de retorno será nulo.

SELECT CONCAT(1,',',2,',',3,',',4) result;

Resultado da operação: 1, 2, 3, 4

SELECT CONCAT(1,',',NULL,',',3,',',4) result;

Resultado da operação: NULL


    concat_ws () : (concat com separador) O mesmo que concat (), concatena várias strings em uma string, mas você pode especificar o separador de uma vez. Se o separador for nulo, o resultado será totalmente nulo. Se o parâmetro após o separador for nulo, então nulo será ignorado.

SELECT CONCAT_WS(',',1,2,3,4) result;

Resultado da operação: 1, 2, 3, 4

SELECT CONCAT_WS(',',1,NULL,3,4) result;

Resultado da operação: 1,3,4

SELECT CONCAT_WS(',',1,2,3,4) result;

Resultado da operação: NULL


    group_concat () : Na instrução group by query, concatene várias linhas de dados no mesmo grupo em uma única string.

Sintaxe : group_concat ([distinto] o campo a ser conectado [ordenar pelo campo de ordenação asc / desc] [separador'separador '])
Descrição : Valores duplicados podem ser excluídos usando distinto; se você quiser ordenar os valores no resultado, você pode usar A cláusula order by; separator é um valor de string, o padrão é uma vírgula.

Insira a descrição da imagem aqui
    Use group_concat () para listar as notas de cada pessoa com um espaço como separador

SELECT `name`,GROUP_CONCAT(mark SEPARATOR ' ') result
FROM score1 GROUP BY `name`;

Insira a descrição da imagem aqui
    Use group_concat () para listar as notas de todos na forma de pares de valores-chave

SELECT `name`,GROUP_CONCAT(`subject`,':',mark ORDER BY `subject`) result
FROM score1 GROUP BY `name`;

Insira a descrição da imagem aqui
    Nota para group_concat () :

  1. Depois de usar group_concat, se limit for usado no select, não funcionará
  2. Há um limite de comprimento ao conectar campos com group_concat. Use a variável de sistema group_concat_max_len para definir o comprimento máximo permitido. SET [SESSION | GLOBAL] group_concat_max_len = val;
  3. O separador padrão do sistema é a vírgula

COALESCE () , IFNULL ()

    COALESCE () é usado principalmente para processamento de valor nulo, seu formato de parâmetro: COALESCE (expressão, valor1, valor2 ……, valor)
    A primeira expressão de parâmetro da função COALESCE () é a expressão a ser testada, e os seguintes parâmetros são O número é incerto.
    A função COALESCE () retornará a primeira expressão não vazia em todos os parâmetros, incluindo a expressão.
    Se a expressão não for um valor nulo, retorne a expressão; caso contrário, determine se o valor1 é um valor nulo,
    se o valor1 não é um valor nulo, retorne o valor1; caso contrário, determine se o valor2 é um valor nulo,
    se o valor2 não é um valor nulo, retorne o valor2;
    se todas as expressões Se a fórmula for nula, NULL será retornado.

SELECT COALESCE(1,2,3) result1,
COALESCE(NULL,2,3) result2,
COALESCE(NULL,NULL,3) result3;

Resultado da operação: 1, 2, 3

    A função COALESCE () pode ser usada para completar quase todo o processamento de valor nulo, mas uma versão simplificada dela é fornecida em muitos sistemas de banco de dados. Essas versões simplificadas aceitam apenas duas variáveis, como IFNULL ()

SELECT IFNULL(NULL,666) result;

Resultado de corrida: 666

SUM () calcula várias colunas

Insira a descrição da imagem aqui

SELECT *,SUM( Chinese + Math + English ) sum
FROM score2 GROUP BY `name`

Insira a descrição da imagem aqui

Coluna a linha e linha a coluna

    Coluna a linha, coluna a linha
Insira a descrição da imagem aqui

SELECT `name`,
MAX(IF(`subject`='语文',mark,0)) Chinese,
MAX(IF(`subject`='数学',`mark`,0)) Math,
MAX(IF(`subject`='英语',`mark`,0)) English
FROM score1
GROUP BY `name`;

Insira a descrição da imagem aqui


    Linha a coluna, linha a coluna

SELECT `name`,'语文'  `subject`,Chinese mark FROM score2
UNION
SELECT `name`,'数学'  `subject`,Math mark FROM score2
UNION
SELECT `name`,'英语'  `subject`,English mark FROM score2
ORDER BY `name`;

Conversão DISTINCT e GROUP BY

    Existem tabelas como a seguir, id é o id do registro, user_id é o id do usuário e conta o número de registros e usuários.
Insira a descrição da imagem aqui
    Abordagem do DISTINCT

SELECT COUNT(id) sum_id,COUNT(DISTINCT user_id) sum_user FROM t1;

    A prática do GROUP BY

SELECT sum(sum) sum_id,COUNT(user_id) sum_user FROM (
	SELECT user_id,COUNT(1) sum FROM t1 GROUP BY user_id ) temp;

Insira a descrição da imagem aqui

O nome da subconsulta

    O nome da subconsulta deve ser definido, se não for definido, um erro será relatado.

Subconsulta associada e subconsulta existente

SELECT product_type, product_name, sale_price
FROM product t1 WHERE sale_price > (
    SELECT avg(sale_price) FROM product t2
     WHERE t1.product_type = t2.product_type);

    A lógica de execução é a seguinte:
(1) Execute o loop externo primeiro, depois pegue o primeiro valor da coluna product _type, entre na subconsulta, julgue as condições da cláusula where e, se corresponder, calcule o valor médio e retorne o resultado.
(2) Repita a operação acima até que todos os registros na coluna product _type da tabela Product na consulta principal sejam recuperados.

    Descubra os dados na tabela do artigo, mas o uid deve existir na tabela do usuário. A instrução SQL é a seguinte:

SELECT * FROM article WHERE EXISTS (
SELECT * FROM user WHERE article.uid = user.uid);

    Coloque os dados da consulta principal na subconsulta para verificação condicional e determine se o resultado dos dados da consulta principal pode ser retido de acordo com o resultado da verificação (VERDADEIRO ou FALSO, portanto, a seleção pode ser arbitrária).

like corresponde a caracteres especiais

    escape pode especificar qual é o caractere de escape usado em like, e o caractere após o caractere de escape será considerado como o caractere original

select * from table where name like '1\_%' escape '\'

select * from table where name like '%\%%' escape '\'

Acho que você gosta

Origin blog.csdn.net/H_X_P_/article/details/107233245
Recomendado
Clasificación