Consulta de datos de MySQL SQL

Consulta de datos de MySQL SQL

Declaración de consulta SQL: SELECT

Primero da una mesa

Inserte la descripción de la imagen aquí

Recuperar datos seleccionar


Recuperar una sola columna

select 字段 from tbname;
# 例: select name from stu;

Si no hay una regla de orden clara, el orden de los datos devueltos, entonces el orden de los datos devueltos no tiene un significado especial.

El orden en el que se devuelven los datos puede ser o no el orden en el que se agregan los datos a la tabla. Siempre que se devuelva el mismo número, es normal.

Recuperar varias columnas

select 字段1,字段2,... from tbname;
# 例: select id,name,age,sex from stu;

Cuando seleccione varias columnas, asegúrese de agregar una coma entre los nombres de las columnas, pero no agregue una coma después del nombre de la última columna.

Si agrega una coma después del nombre de la última columna, se producirá un error.

Recuperar todas las columnas

select * from tbname;
# 例: select * from stu;

Generalmente no use comodines, a menos que realmente necesite cada columna de la tabla, es mejor no usar comodines *.

Utilice comodines para recuperar columnas con nombres desconocidos

DISTINTO de diferentes líneas de inspección

select distinct 字段1,字段2... from stu;
# 例: select distinct class_id from stu;

La palabra clave DISTINCT solo devuelve valores diferentes. Si hay muchos valores ay muchos valores b en la columna, solo se devuelven a y b.

Inserte la descripción de la imagen aquí

Limita el resultado LIMIT

select * from tbname limit 3,4;
# 代表从第三行开始检索,检索四行数据
# 代替的语法: limit 4 offset 3 意为从行3开始检索四行,和上面一样
# 例: select * from stu limit 3,4;

Inserte la descripción de la imagen aquí

Utilice nombres de tablas completamente calificados

select name from stu;
select stu.name from stu;
select stu.name from demoDB.stu;

Ordenar los datos recuperados ORDER BY


Ordenar datos ORDENAR POR

select * from tbname order by 字段;

Los datos consultados de forma predeterminada no se ordenan aleatoriamente. Si no se especifica una regla de clasificación, los datos generalmente se mostrarán en el orden en que aparecen en la tabla subyacente.

La teoría del diseño de bases de datos relacionales cree que si el orden de clasificación no se especifica claramente, no se debe suponer que el orden de los datos recuperados es significativo

Por lo general, la columna utilizada en la cláusula ORDER BY será la columna seleccionada para su visualización.

Pero este no es necesariamente el caso, y es completamente legal ordenar datos con columnas no recuperadas.

Ordenar por varias columnas

select * from tbname order by 字段1,字段2,...;

Cuando sea necesario ordenar varias columnas de datos, separe los nombres de las columnas con comas y la clasificación se comparará en el orden de la anterior y la siguiente, el valor predeterminado es ascendente

select * from tbname order by 字段1(desc),字段2(desc),...;

Ordene los nombres de columna especificados en orden ascendente o descendente, como select * from stu order by class_id, age desc; primero ordene class_id en orden ascendente y luego clasifique la edad en orden descendente

Nota

Cuando la cláusula ORDER BY se da en la posición de la cláusula ORDER BY, debe asegurarse de que esté ubicada después de la cláusula from.

Si se usa LIMIT, debe ubicarse después de que se complete la cláusula ORDER BY. El orden incorrecto de las cláusulas de uso resultará en un mensaje de error.

Filtro de condiciones de recuperación de datos DONDE


La base de datos generalmente contiene una gran cantidad de datos y rara vez es necesario recuperar todas las filas de la tabla.

Por lo general, solo se extrae un subconjunto de datos de la tabla en función de las necesidades de una operación o informe específico.

Para recuperar solo los datos requeridos, debe formular las condiciones de búsqueda

select 字段 from tbname where 条件; 

Cuando se usa where y order by al mismo tiempo, where debe estar en el frente y ordenar en la parte de atrás

Operador de cláusula WHERE

Operador Descripción
= igual
<> 、! = no igual a
< Menos que
<= Menos que o igual a
> mas que el
> = Mayor qué o igual a
En medio y … Especificar entre dos valores
ES NULO Valor nulo

Cláusula WHERE combinada

MySQL permite que se proporcionen múltiples cláusulas WHERE.

Dos formas: AND y OR conectan las dos cláusulas. También llamado operador lógico.

Y

AND se utiliza en la cláusula WHERE para recuperar todas las condiciones que deben cumplirse y conectarse antes de regresar. De lo contrario, devuelva el conjunto vacío

select 字段 from tbname where 字段=.. and 字段=..;
# 例:
select name from stu where age = 22 and sex = 'm';

O

OR se usa en la cláusula WHERE y se usa para recuperar solo una de las condiciones de la conexión o se puede devolver. De lo contrario, devuelva el conjunto vacío

AND y OR se pueden utilizar juntos, pero debe prestar atención al orden de cálculo de SQL. SQL dará prioridad al operador AND antes de procesar el operador OR.

Por ejemplo: consulte a las alumnas de la Clase 1 y la Clase 2.

select * from stu where class_id=1 or class_id=2 and sex='女';

De esta forma se producirá la siguiente situación
Inserte la descripción de la imagen aquí

Debido al mecanismo de procesamiento de prioridad de AND, SQL cree que son las niñas de la clase dos y todos los estudiantes de la clase uno los que necesitan ser consultados.

La solución es la siguiente:

select * from stu where class_id=1 and sex='女' or class_id=2 and sex='女';
# 或者
select * from stu where (class_id=1 or class_id=2) and sex='女';

Los paréntesis tienen prioridad sobre y.

EN 和 NO

EN

El operador IN se utiliza para especificar el rango de condiciones, y cada condición en el rango se puede hacer coincidir. Se puede utilizar junto con AND y OR

select name from stu where class_id in (1,2) and sex='女';

¿Por qué utilizar el operador IN? Las ventajas son las siguientes:

  • Cuando se utiliza una larga lista de opciones legales, la sintaxis del operador IN es más clara e intuitiva.
  • Cuando se usa IN, el orden de cálculo es más fácil de entender (porque hay menos operadores)
  • El operador IN es generalmente más rápido que la lista de operadores OR
  • La mayor ventaja de IN es que puede contener otras sentencias SELECT, lo que hace posible crear cláusulas WHERE de forma más dinámica.

NO

El operador NOT se utiliza para especificar todos los datos excepto esta condición.

select name from stu where class_id not in (1);

Uso de comodines

LIKE y comodines

LIKE es adecuado para búsquedas difusas, como buscar todos los productos que contienen el texto a en el nombre del producto.

  • El comodín de signo de porcentaje (%) en la búsqueda %para representar cualquier carácter que aparezca cualquier número de veces.

    select name from stu where name like 'a%'; # 表示匹配第一个字符为a的所有数据
    select name from stu where name like '%a'; # 表示匹配最后一个字符为a的所有数据
    select name from stu where name like '%a%'; # 表示匹配包含字符a的所有数据
    
  • El _carácter comodín de guión bajo ( ), cuando se utilizan guiones bajos, un guión bajo es igual a un carácter.

    select name from stu where name like '_a';# 表示匹配最后一个字符为a且总长度为两个字符的数据
    select name from stu where name like 'a_';# 表示第一个字符为a且总长度为两个字符的数据
    

Consejos para usar comodines

  • No use en exceso los comodines. Si otros operadores pueden lograr el mismo propósito, se deben utilizar otros operadores.
  • Cuando realmente necesite usar comodines, no los ponga al principio a menos que sea absolutamente necesario, como '% a'. Coloque el comodín al principio, la velocidad de búsqueda es la más lenta.
  • Preste atención a la posición del comodín.

REGEXP regular

select name from stu where name regexp '[0-5]abc'; # 第一个字符为0-5,后面为abc的所有数据

Funciones estadísticas (funciones agregadas) en MySQL

Uso de funciones convergentes

A menudo necesitamos resumir los datos sin tener que recuperarlos todos, por lo que MySQL proporciona funciones especiales.

Con estas funciones, las consultas de MySQL se pueden utilizar para recuperar datos específicos, analizar y formar informes.

tal como:

  • Determinar el número de filas en la tabla.
  • Obtenga la suma de las columnas de la tabla.
  • Descubra los valores máximo, mínimo y promedio de las columnas de la tabla (o todas las filas, algunas filas específicas).
función Descripción
CONTAR() Devuelve el número de filas en una columna.
MAX () Devuelve el valor máximo de una columna.
MIN () Devuelve el valor mínimo de una columna.
SUMA() Devuelve la suma de un valor de columna.
AVG () Devuelve el valor medio de una columna.

Nota:

Cuando se usa count, si se especifica el nombre de la columna, se ignora la fila cuyo valor es NULL, pero si se usa el asterisco (*) en la función, no se ignora.

GRUPO POR Y TENIENDO

AGRUPAR POR

Las funciones agregadas de SQL se pueden utilizar para resumir datos. Aquí es donde podemos realizar técnicas en las filas, calcular la suma y el promedio, y obtener los valores máximo y mínimo sin recuperar todos los datos.

Hasta ahora, todos los cálculos se realizan en todos los datos de la tabla o datos que coinciden con una cláusula WHERE específica.

Pero luego podemos usar el grupo ... teniendo que filtrar nuevamente después de agrupar.

Por ejemplo: necesitamos obtener el número de estudiantes en todas las clases.

mysql> select class_id,count(*) as nums from stu where class_id=1;
+----------+------+
| class_id | nums |
+----------+------+
|        1 |    6 |
+----------+------+
1 row in set (0.00 sec)

mysql> select class_id,count(*) as nums from stu where class_id=2;
+----------+------+
| class_id | nums |
+----------+------+
|        2 |    4 |
+----------+------+
1 row in set (0.00 sec)

Necesitamos consultar dos veces.

Pero si necesitamos consultar el número de estudiantes en cada clase en una escuela, este método es obviamente inadecuado. ¿Qué debemos hacer?

En este momento, la agrupación es necesaria. La agrupación SQL permite que los datos se dividan en varios grupos lógicos para que cada grupo se pueda agregar y calcular (agrupar por).

Sintaxis: seleccionar campo, función (*) como nombre de columna de tbname agrupar por campo;

mysql> select class_id,count(*) as nums from stu group by class_id;
+----------+------+
| class_id | nums |
+----------+------+
|        1 |    6 |
|        2 |    4 |
+----------+------+
2 rows in set (0.00 sec)

¿Qué sucede si desea que el sistema devuelva una clase con menos de 5 personas o una clase con más de 5 personas?

Es necesario filtrar nuevamente a partir de los resultados devueltos arriba, que es el grupo de filtros TENIENDO a continuación

TENIENDO

Además de agrupar datos con GROUP BY, MySQL también permite filtrar grupos, incluidos esos grupos, y excluir esos grupos.

Por ejemplo, como se mencionó anteriormente, deje que el sistema devuelva una clase con menos de 5 personas

De hecho, todas las cláusulas WHERE mencionadas anteriormente pueden ser reemplazadas por HAVING, la única diferencia es que WHERE filtra filas y HAVING filtros grupos .

Sintaxis: Sintaxis: seleccionar campo, función (*) como nombre de columna del grupo tbname por campo que tenga condición;

# 大于五人的班级
mysql> select class_id,count(*) as nums from stu group by class_id having nums>5;
+----------+------+
| class_id | nums |
+----------+------+
|        1 |    6 |
+----------+------+
1 row in set (0.00 sec)

# 小于五人的班级
mysql> select class_id,count(*) as nums from stu group by class_id having nums<5;
+----------+------+
| class_id | nums |
+----------+------+
|        2 |    4 |
+----------+------+
1 row in set (0.00 sec)

Precauciones

Si ahora necesita agregar un campo class_name para almacenar el nombre de la clase, filtre class_id, class_name y el número de personas

mysql> select class_id,count(*) as '数量' from stu group by class_id;
+----------+--------+
| class_id | 数量   |
+----------+--------+
|        1 |      6 |
|        2 |      4 |
+----------+--------+
2 rows in set (0.00 sec)

-- 在select里面有class_id、class_name,group by后面只有id就会出错

mysql> select class_id,class_name,count(*) as '数量' from stu group by class_id;
ERROR 1055 (42000): Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'yuge.stu.class_name' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

-- 正确的语句,应该是吧select所有列都作为分组条件。
mysql> select class_id,class_name,count(*) as '数量' from stu group by class_id,class_name;
+----------+------------+--------+
| class_id | class_name | 数量   |
+----------+------------+--------+
|        1 | c1         |      6 |
|        2 | c2         |      4 |
+----------+------------+--------+
2 rows in set (0.00 sec)

no compatible con sql_mode = only_full_group_by

-La declaración correcta, debe seleccionar todas las columnas como condiciones de agrupación.

mysql> select class_id,class_name,count(*) as '数量' from stu group by class_id,class_name;
+----------+------------+--------+
| class_id | class_name | 数量   |
+----------+------------+--------+
|        1 | c1         |      6 |
|        2 | c2         |      4 |
+----------+------------+--------+
2 rows in set (0.00 sec)

Supongo que te gusta

Origin blog.csdn.net/weixin_43701183/article/details/114117685
Recomendado
Clasificación