Banco de dados MySQL - declaração de consulta avançada
- 1. Consulta de banco de dados
- 2. Método de consulta eficiente
-
-
- 1. Especifique o campo a ser consultado - SELECT
- 2. Realize a consulta de desduplicação no campo - DISTINCT
- 3. Consulta de condição - onde
- 3. Aumente a consulta de relacionamento lógico - e e ou
- 4. Consulta de registro de dados de valor conhecido - IN
- 5. Consulta de registro de dados dentro do intervalo - ENTRE
- 6. Consulta curinga
- 7. Consulta de classificação de palavras-chave - ORDER BY
-
- 3. Consulta de função
- 4. Declaração de consulta avançada
- 5. Consulta de junção de tabela
- Seis, o uso de view - view
- 7. Cascata - UNIÃO
- 8. Valor da interseção - obtém a interseção dos resultados de duas instruções SQL
- Nove, declaração de consulta de seleção de condição de caso
- 10. Expressões regulares
1. Consulta de banco de dados
Um banco de dados é uma ferramenta usada para armazenar, atualizar e consultar dados, e consultar dados é a função principal de um banco de dados. O banco de dados é usado para transportar informações e as informações são usadas para análise e visualização. Portanto, é necessário dominar um método de consulta mais refinado. Este artigo se concentrará em instruções de consulta avançada para dados.
2. Método de consulta eficiente
1. Especifique o campo a ser consultado - SELECT
Sintaxe: SELECT "字段" FROM "表名";
Exemplo: SELECT Store_Name FROM fxk002;
2. Realize a consulta de desduplicação no campo - DISTINCT
Sintaxe: SELECT DISTINCT "字段" FROM "表名";
Exemplo: SELECT DISTINCT Store_Name FROM fxk003;
3. Consulta de condição - onde
Sintaxe: SELECT "字段" FROM "表名" WHERE "条件";
Exemplo: SELECT Store_Name FROM fxk002 WHERE Sales > 1000;
3. Aumente a consulta de relacionamento lógico - e e ou
Exemplo SELECT "字段" FROM "表名" WHERE "条件1" {[AND|OR] "条件2"}+ ;
: SELECT Store_Name FROM fxk003 WHERE Sales > 1000 OR (Sales < 500 AND Sales > 200);
4. Consulta de registro de dados de valor conhecido - IN
语法:SELECT "字段" FROM "表名" WHERE "字段" IN ('值1', '值2', ...);
例:SELECT * FROM fxk003 WHERE Store_Name IN ('Los Angeles', 'Houston');
5. Consulta de registro de dados dentro do intervalo - ENTRE
Sintaxe: SELECT "字段" FROM "表名" WHERE "字段" BETWEEN '值1' AND '值2';
Exemplo: SELECT * FROM fxk003 WHERE Data ENTRE '2020-12-06' AND '2020-12-10';
6. Consulta curinga
Normalmente curingas são usados junto com LIKE
curinga | ilustrar |
---|---|
% | Um sinal de porcentagem significa zero, um ou mais caracteres |
_ | Sublinhados representam caracteres únicos |
LIKE——corresponde a um padrão para localizar os registros de dados que desejamos
Sintaxe: SELECT "字段" FROM "表名" WHERE "字段" LIKE {模式};
Exemplo: SELECT * FROM fxk003 WHERE Store_Name like '%on%';
7. Consulta de classificação de palavras-chave - ORDER BY
Exemplo SELECT "字段" FROM "表名" [WHERE "条件"] ORDER BY "字段" [ASC, DESC];
ASC 是按照升序进行排序的,是默认的排序方式。
DESC 是按降序方式进行排序。
: SELECT Store_Name,Sales,Data FROM fxk003 ORDER BY Sales DESC;
3. Consulta de função
1. Funções matemáticas comumente usadas no banco de dados
função matemática | efeito |
---|---|
abs(x) | retorna o valor absoluto de x |
rand() | Retorna um número aleatório entre 0 e 1 |
mod(x,y) | Retorna o restante após a divisão de x por y |
potência(x,y) | retorna x à potência de y |
redondo(x) | retorna o inteiro mais próximo de x |
redondo(x,y) | Valor arredondado com x a y casas decimais |
quadrado(x) | retorna a raiz quadrada de x |
truncar(x,y) | Retorna o valor do número x truncado para y casas decimais |
teto(x) | retorna o menor inteiro maior ou igual a x |
andar(x) | retorna o maior inteiro menor ou igual a x |
maior(x1,x2…) | Retorna o maior valor da coleção e também pode retornar o maior valor de vários campos |
menos(x1,x2…) | Retorna o menor valor na coleção e também pode retornar o menor valor de vários campos |
2. Função de agregação:
função agregada | efeito |
---|---|
média() | Retorna a média da coluna especificada |
contar() | Retorna o número de valores não NULL na coluna especificada |
min() | Retorna o valor mínimo da coluna especificada |
max() | Retorna o valor máximo da coluna especificada |
soma(x) | Retorna a soma de todos os valores na coluna especificada |
3. Função de string:
funções de string | efeito |
---|---|
aparar() | Retorna o valor com o formato especificado removido |
concat(x,y) | Concatene os parâmetros fornecidos x e y em uma string |
substr(x,y) | Obtenha a string começando na posição y na string x, que tem o mesmo efeito que a função substring() |
substr(x,y,z) | Obtém uma string de comprimento z começando na posição y na string x |
comprimento(x) | Retorna o comprimento da string x |
substituir(x,y,z) | substitua a string z pela string y na string x |
superior(x) | converter todas as letras da string x para maiúsculas |
inferior(x) | Converter todas as letras da string x para minúsculas |
esquerda(x,y) | Retorna os primeiros y caracteres da string x |
direita(x,y) | Retorna os últimos y caracteres da string x |
repita(x,y) | repita a string x y vezes |
espaço(x) | retorna x espaços |
strcmp(x,y) | Compare x e y, o valor retornado pode ser -1,0,1 |
reverso(x) | inverta a string x |
1. Remova a guarnição do personagem
1.去除字符 trim
语法格式:SELECT TRIM ([ [位置] [要移除的字符串] FROM ] 字符串);
#[位置]:的值可以为 LEADING (起头), TRAILING (结尾), BOTH (起头及结尾)。
#[要移除的字符串]:从字串的起头、结尾,或起头及结尾移除的字符串。缺省时为空格。
2. 截取 substr
语法格式:SELECT substr(x,y) #截取x字符串 从第y个开始,截取到末尾
3.字段拼接 concat
语法格式: select concat(字段1,字段2) from 表名;
使用 || 符号
将info表中,name字段值和height字段值拼接在一起。
语法格式: select 字段1 || 字段2 from 表名;
将info表中,name字段值和height字段值拼接在一起,且中间加空格。
语法格式: select 字段1 || ' ' || 字段2 from 表名;
4.返回字符长度 length
语法格式: select length(字段1) from 表名;
5.替换 replace
select replace(字段1,'替换前字符段','替换后字符段') from 表名;
4. Declaração de consulta avançada
1. Agrupamento e resumo - GROUP BY
Resuma e agrupe os resultados da consulta dos campos atrás de GROUP BY, que geralmente é usado em combinação com funções de agregação. Há
um princípio em GROUP BY de que todos os campos que aparecem após GROUP BY devem aparecer após SELECT;
todos os campos que aparecem após SELECT e Campos que não aparecem em funções agregadas devem aparecer após GROUP BY
语法:SELECT "字段1", SUM("字段2") FROM "表名" GROUP BY "字段1";
例:SELECT Store_Name, SUM(Sales) FROM fxk003 GROUP BY Store_Name ORDER BY sales;
2.过滤——HAVING
用来过滤由 GROUP BY 语句返回的记录集,通常与 GROUP BY 语句联合使用
HAVING 语句的存在弥补了 WHERE 关键字不能与聚合函数联合使用的不足。
语法:SELECT "字段1", SUM("字段2") FROM "表格名" GROUP BY "字段1" HAVING (函数条件);
例:SELECT Store_Name, SUM(Sales) FROM fxk003 GROUP BY Store_Name HAVING SUM(Sales) > 1500;
3.别名设置
----字段別名 表格別名
语法:SELECT "表格別名"."字段1" [AS] "字段別名" FROM "表格名" [AS] "表格別名";
例:SELECT A.Store_Name Store, SUM(A.Sales) “Total Sales” FROM fxk003 A GROUP BY A.Store_Name;
4.子查询
连接表格,在WHERE 子句或 HAVING 子句中插入另一个 SQL 语句
语法:SELECT "字段1" FROM "表格1" WHERE "字段2" [比较运算符]
外查询
(SELECT "字段1" FROM "表格2" WHERE "条件");
内查询
5.EXISTS
用来测试内查询有没有产生任何结果,类似布尔值是否为真
#如果有的话,系统就会执行外查询中的SQL语句。若是没有的话,那整个 SQL 语句就不会产生任何结果。
语法:SELECT "字段1" FROM "表格1" WHERE EXISTS (SELECT * FROM "表格2" WHERE "条件");
例:SELECT SUM(Sales) FROM fxk003 WHERE EXISTS (SELECT * FROM fxk002 WHERE Region = ‘West’);
五、表连接查询
MYSQL数据库中常用的表连接有三种
1.inner join(内连接)
只返回两个表中联结字段相等的行
语法:select * from 表1 A inner join 表2 B on A.字段 = B.字段;
2.left join(左连接)
返回包括左表中的所有记录和右表中联结字段相等的记录
语法:select * from 表1 A left join 表2 B on A.字段 = B.字段;
3.right join(右连接)
:返回包括右表中的所有记录和左表中联结字段相等的记录
语法:select * from 表1 A right join 表2 B on A.字段 = B.字段;
六、视图的运用—— view
视图:可以被当作是虚拟表或存储查询。
- 视图跟表格的不同是,表格中有实际储存数据记录,而视图是建立在表格之上的一个架构,它本身并不实际储存数据记录。
- 临时表在用户退出或同数据库的连接断开后就自动消失了,而视图不会消失。
- 视图不含有数据,只存储它的定义,它的用途一般可以简化复杂的查询。比如你要对几个表进行连接查询,而且还要进行统计排序等操作,写SQL语句会很麻烦的,用视图将几个表联结起来,然后对这个视图进行查询操作,就和对一个表查询一样,很方便。
语法格式:
创建视图表:CREATE VIEW "视图表名" AS "SELECT 语句";
删除视图表: DROP VIEW "视图表名";
七、联级——UNION
记录种类
UNION :生成结果的数据记录值将没有重复,且按照字段的顺序进行排序
语法:[SELECT 语句 1] UNION [SELECT 语句 2];
UNION ALL :将生成结果的数据记录值都列出来,无论有无重复
语法:[SELECT 语句 1] UNION ALL [SELECT 语句 2];
八、交集值 ----取两个SQL语句结果的交集
1.联级视图求交集值
create view v_info as select distinct name from info union all select distinct name from info3;
select name,count(*) from v_info group by name;
select name from v_info group by name having count(*) >1;
2.内连接求交集值
select A.name from info A inner join info3 B on A.name=B.name;
select A.name from info A inner join info3 B using(name);
3.使用子查询的方式求交集值
4.取非交集值
- 联级方法中 count(*)<=1
- 左右内连接 将is not null 改为 is null
- 子查询 外连接查询 not in (内连接查询)
九、case 条件选择查询语句
SELECT CASE ("字段名")
WHEN "条件1" THEN "结果1"
WHEN "条件2" THEN "结果2"
[ELSE "结果N"]
END
FROM "表名";
# "条件"可以是一个数值或是公式。ELSE子句则并不是必须的
十、正则表达式
匹配模式 | 描述 | 实例 |
---|---|---|
^ |
匹配文本的开始字符 | ‘^bd’ 匹配以 bd 开头的字符串 |
$ |
匹配文本的结束字符 | ‘qn$’ 匹配以 qn 结尾的字符串 |
. |
匹配任何单个字符 | ‘s.t’ 匹配任何 s 和 t 之间有一个字符的字符串 |
* |
corresponde a zero ou mais dos caracteres que o precedem | 'fo*t' corresponde a t precedido por qualquer o |
+ |
Corresponde ao caractere anterior 1 ou mais vezes | 'hom+' corresponde a uma string começando com ho seguido por pelo menos um m |
字符串 |
corresponde à string especificada | 'clo' corresponde a strings contendo clo |
p1丨p2 |
corresponde a p1 ou p2 | 'bg丨fg' corresponde a bg ou fg |
[...] |
Corresponde a qualquer caractere no conjunto de caracteres | '[abc]' corresponde a a ou b ou c |
[^...] |
corresponde a qualquer caractere que não esteja entre parênteses | '[^ab]' corresponde a uma string que não contém a ou b |
{n} |
Corresponde à string anterior n vezes | 'g{2}' corresponde a uma string contendo 2 g |
{n,m} |
Corresponde à string anterior pelo menos n e no máximo m vezes | 'f{1,3}' corresponde a f pelo menos 1 vez e no máximo 3 vezes |
gramática:SELECT "字段" FROM "表名" WHERE "字段" REGEXP {模式};