Base de datos MySQL - declaración de consulta avanzada
- 1. Consulta de base de datos
- 2. Método de consulta eficiente
-
-
- 1. Especifique el campo a consultar - SELECCIONAR
- 2. Realice una consulta de deduplicación en el campo - DISTINTO
- 3. Consulta de condición - donde
- 3. Aumentar la consulta de la relación lógica - y y o
- 4. Consulta de registro de datos de valor conocido - IN
- 5. Consulta de registro de datos dentro del rango - ENTRE
- 6. Consulta comodín
- 7. Consulta de clasificación de palabras clave - ORDENAR POR
-
- 3. Consulta de función
- 4. Declaración de consulta avanzada
- 5. Consulta de combinación de tablas
- Seis, el uso de vista - vista
- 7. Cascada - UNIÓN
- 8. Valor de intersección: tome la intersección de los resultados de dos declaraciones SQL
- Nueve, declaración de consulta de selección de condición de caso
- 10. Expresiones regulares
1. Consulta de base de datos
Una base de datos es una herramienta que se utiliza para almacenar, actualizar y consultar datos, y la consulta de datos es la función principal de una base de datos. La base de datos se utiliza para transportar información y la información se utiliza para el análisis y la visualización. Por lo tanto, es necesario dominar un método de consulta más refinado. Este artículo se centrará en declaraciones de consulta avanzadas para datos.
2. Método de consulta eficiente
1. Especifique el campo a consultar - SELECCIONAR
Sintaxis: SELECT "字段" FROM "表名";
Ejemplo: SELECT Store_Name FROM fxk002;
2. Realice una consulta de deduplicación en el campo - DISTINTO
Sintaxis: SELECT DISTINCT "字段" FROM "表名";
Ejemplo: SELECT DISTINCT Store_Name FROM fxk003;
3. Consulta de condición - donde
Sintaxis: SELECT "字段" FROM "表名" WHERE "条件";
Ejemplo: SELECT Store_Name FROM fxk002 WHERE Ventas > 1000;
3. Aumentar la consulta de la relación lógica - y y o
语法:SELECT "字段" FROM "表名" WHERE "条件1" {[AND|OR] "条件2"}+ ;
例:SELECCIONE Store_Name FROM fxk003 DONDE Ventas > 1000 O (Ventas < 500 Y Ventas > 200);
4. Consulta de registro de datos de valor conocido - IN
语法:SELECT "字段" FROM "表名" WHERE "字段" IN ('值1', '值2', ...);
例:SELECT * FROM fxk003 WHERE Store_Name IN ('Los Ángeles', 'Houston');
5. Consulta de registro de datos dentro del rango - ENTRE
Sintaxis: SELECT "字段" FROM "表名" WHERE "字段" BETWEEN '值1' AND '值2';
Ejemplo: SELECT * FROM fxk003 WHERE Fecha ENTRE '2020-12-06' Y '2020-12-10';
6. Consulta comodín
Por lo general, los comodines se usan junto con LIKE
comodín | ilustrar |
---|---|
% | Un signo de porcentaje significa cero, uno o más caracteres |
_ | Los guiones bajos representan caracteres individuales |
LIKE: haga coincidir un patrón para encontrar los registros de datos que queremos.
Sintaxis: SELECT "字段" FROM "表名" WHERE "字段" LIKE {模式};
Ejemplo: SELECT * FROM fxk003 WHERE Store_Name like '%on%';
7. Consulta de clasificación de palabras clave - ORDENAR POR
语法:SELECT "字段" FROM "表名" [WHERE "条件"] ORDER BY "字段" [ASC, DESC];
ASC 是按照升序进行排序的,是默认的排序方式。
DESC 是按降序方式进行排序。
例:SELECCIONE Store_Name,Ventas,Fecha DESDE fxk003 ORDEN POR Ventas DESC;
3. Consulta de función
1. Funciones matemáticas de uso común en la base de datos
función matemática | efecto |
---|---|
abdominales(x) | devuelve el valor absoluto de x |
al azar() | Devuelve un número aleatorio entre 0 y 1 |
módulo(x,y) | Devuelve el resto después de dividir x por y |
potencia(x,y) | devuelve x a la potencia de y |
redondo(x) | devuelve el entero más cercano a x |
redondo (x, y) | Valor redondeado con decimales de x a y |
sqrt(x) | devuelve la raíz cuadrada de x |
truncar(x,y) | Devuelve el valor del número x truncado a y decimales |
techo(x) | devuelve el entero más pequeño mayor o igual que x |
piso(x) | devuelve el entero más grande menor o igual que x |
mayor(x1,x2…) | Devuelve el valor más grande de la colección y también puede devolver el valor más grande de varios campos |
menos(x1,x2…) | Devuelve el valor más pequeño de la colección y también puede devolver el valor más pequeño de varios campos |
2. Función de agregación:
función agregada | efecto |
---|---|
promedio() | Devuelve la media de la columna especificada |
contar() | Devuelve el número de valores no NULL en la columna especificada |
min() | Devuelve el valor mínimo de la columna especificada |
máx() | Devuelve el valor máximo de la columna especificada |
suma(x) | Devuelve la suma de todos los valores en la columna especificada |
3. Función de cadena:
funciones de cadena | efecto |
---|---|
recortar() | Devuelve el valor con el formato especificado eliminado |
concat(x,y) | Concatenar los parámetros proporcionados x e y en una cadena |
substr(x,y) | Obtenga la cadena a partir de la posición y-ésima en la cadena x, que tiene el mismo efecto que la función substring() |
substr(x,y,z) | Obtiene una cadena de longitud z que comienza en la posición y en la cadena x |
longitud (x) | Devuelve la longitud de la cadena x |
reemplazar (x, y, z) | sustituir la cadena z por la cadena y en la cadena x |
superior (x) | convertir todas las letras de la cadena x a mayúsculas |
inferior (x) | Convierte todas las letras de la cadena x a minúsculas |
izquierda (x, y) | Devuelve los primeros y caracteres de la cadena x |
derecha (x, y) | Devuelve los últimos y caracteres de la cadena x |
repetir (x, y) | repite la cadena x y veces |
espacio(x) | devuelve x espacios |
strcmp(x,y) | Compare x e y, el valor devuelto puede ser -1,0,1 |
inversa(x) | invertir la cadena x |
1. Eliminar recorte de caracteres
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. Declaración de consulta avanzada
1. Agrupación y resumen - GROUP BY
Resuma y agrupe los resultados de la consulta de los campos detrás de GROUP BY, que generalmente se usa en combinación con funciones agregadas. Hay
un principio en GROUP BY de que todos los campos que aparecen después de GROUP BY deben aparecer después de SELECT;
todos los campos que aparecen después de SELECT y Los campos que no aparecen en funciones agregadas deben aparecer después de 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 之间有一个字符的字符串 |
* |
coincide con cero o más de los caracteres que lo preceden | 'fo*t' coincide con t precedida por cualquier o |
+ |
Coincide con el carácter anterior 1 o más veces | 'hom+' coincide con una cadena que comienza con ho seguida de al menos una m |
字符串 |
coincide con la cadena especificada | 'clo' coincide con cadenas que contienen clo |
p1丨p2 |
coincide con p1 o p2 | 'bg丨fg' coincide con bg o fg |
[...] |
Coincide con cualquier carácter en el conjunto de caracteres | '[abc]' coincide con a o b o c |
[^...] |
coincide con cualquier carácter que no esté entre paréntesis | '[^ab]' coincide con una cadena que no contiene a o b |
{n} |
Coincide con la cadena anterior n veces | 'g{2}' coincide con una cadena que contiene 2 g |
{n,m} |
Coincide con la cadena anterior al menos n y como máximo m veces | 'f{1,3}' coincide con f al menos 1 vez y como máximo 3 veces |
gramática:SELECT "字段" FROM "表名" WHERE "字段" REGEXP {模式};