MySQL-2. Consulta

0. Orden de la cláusula

SELECCIONE
DESDE
DONDE / ÚNASE AL
GRUPO AL
ORDENAR
POR
LÍMITE

1. Consultar datos

Inserte aquí, necesitamos usar datos de muestra para el siguiente contenido, la dirección es la siguiente , el siguiente archivo bueno se presuriza y luego ejecuta el comando en el directorio test_db-master.

mysql -u root -p < employees.sql

Como se muestra a continuación:

1.1 Consultar todo

Comando:
SELECCIONAR * DESDE el nombre de la tabla; se utiliza para consultar todos los datos de la tabla.
Por ejemplo:

SELECT * 
FROM departments;

Puede usar el nombre de la columna SELECT DISTINCT FROM nombre de la tabla; para excluir valores duplicados en el conjunto de resultados.

1.2 Seleccionar columna

Comando:
SELECCIONE el nombre de columna 1, el nombre de columna 2, ... FORM nombre de tabla ;, se utiliza para seleccionar la columna que necesita.
Por ejemplo:

SELECT emp_no,dept_no 
FROM dept_manager;

Puede consultar la columna para especificar un alias, SELECT nombre de columna AS alias, por ejemplo: SELECT COUNT (*) AS count.
Los nombres de las tablas también pueden tener un alias. Tales como:

SELECT e.first_name, e.last_name 
FROM employees AS e 
WHERE e.emp_no = 10001;

2 filtrado condicional

Comando:
SELECCIONE el nombre de la columna DESDE el nombre de la tabla WHERE condición de consulta ;, la cláusula WHERE se usa para especificar la condición de consulta.
Por ejemplo:

SELECT emp_no 
FROM employees 
WHERE first_name='Georgi' AND last_name='Facello';

Las palabras clave que se pueden usar en la cláusula WHERE: use AND para expresar la relación, O para expresar la relación.
Y tiene mayor prioridad que OR, puede usar () para incluir la operación que desea realizar.
Operadores que se pueden usar:
= igual a
<> o! = No igual a
> mayor que
<menor que
= aproximadamente igual a
<= menor o igual que

2.1 IN

Compruebe si un valor está en un conjunto de valores.
Comando:
nombre de columna IN (valor 1, valor 2, ...)
Por ejemplo:

SELECT COUNT(*) 
FORM employees 
WHERE last_name IN ('Christ','Lamba','Baba');

El operador IN es generalmente más rápido que la lista de operadores OR (#TODO da razones).
IN puede contener subconsultas.

2.2 ENTRE ... Y

Compruebe si un valor está dentro de un rango, el resultado contiene el valor inicial y el valor final.
Comando:
nombre de columna ENTRE el valor 1 Y el valor 2 .
Por ejemplo:

SELECT COUNT(*) 
FROM employees
WHERE hire_date BETWEEN '1986-12-01' AND '1986-12-31';

2.3 NO

Excluya el rango restringido y póngalo antes que otros operadores.
Por ejemplo:

NOT BETWEEN 值1 AND 值2
NOT IN (值1,值2,...)

En MySQL, admite la inversión de cláusulas EXISTS, IN, BETWEEN (usando NOT)

2.4 ME GUSTA

Coincidencia simple de patrones

Símbolo Descripción
_ _ Empareja un personaje
% Coincide con cualquier número de caracteres (no coincide con NULL)

Por ejemplo:

#以er结尾
LIKE '%er'
#以任意两个字符开头后接ka,再以任意字符结尾
LIKE '__ka%'

No abuses de los comodines. (Problema de rendimiento)
Cuando se colocan comodines al principio, la consulta es la más lenta.

2.5 Expresiones regulares

Comando:
REGEXP 'patrón' .
Por ejemplo:

# 返回名字中包含ab的行
SELECT first_name 
FROM employees 
WHERE first_name REGEXP 'ab';
Símbolo Descripción
^ Comenzando
PS El final
El | O (1000 | 2000)
[charlist] uno de charlist
[^ charlist] Excepto por cualquiera de los charlist

Charlist puede ser de tipo rango, como 0-9, az.

Caracteres de escape , para algunos caracteres específicos, como., - Estos necesitan usar caracteres de escape.

Metacaracteres Explicación
\\F Cambio de página
\\norte Salto de línea
\\ r Retorno de carro
\\ t Pestaña
\\ v Pestaña vertical
\\ símbolo Símbolos coincidentes, como., -, |, \, Etc.

La cantidad solo afecta al personaje anterior.

Metacaracteres Explicación
* * Match 0 o más
+ Match 1 o más
? Partido 0 o 1
{norte} N partidos
{norte,} No menos de n
{Nuevo Méjico} Coincide nam (m no excede 255)

2.6 IS

Se usa para detectar valores NULL.
Por ejemplo:

SELECT * 
FROM employees 
WHERE hire_date IS NULL;

NULL solo no tiene valor, que es diferente de 0, cadena vacía y espacio.

3. Limite la cantidad de resultados

Comando:
Cantidad LIMITE
Ejemplo:

# 选择结果集的前十行
SELECT first_name, last_name 
FROM employees
WHERE hire_date < '1986-01-01' LIMIT 10;

LÍMITE 3,4 comienza desde la línea 4 y devuelve 4 líneas, es decir, las líneas 4 a 7.
Hay otra forma de escribir, a saber, LIMIT 4 OFFSET 3.
El número de filas en el conjunto de resultados comienza a contar desde 0.

4. Ordenar los resultados

Comandos:
ORDER BY columna de nombre (número de columna) regla, columna nombre 2 regla, ...
por ejemplo:

SELECT emp_no, salary FROM salaries ORDER BY salary DESC;
SELECT emp_no, salary FROM salaries ORDER BY 2 DESC;#与上面的等价

DESC significa orden descendente, y el valor máximo está por encima.
ASC significa orden ascendente, el valor mínimo está por encima.
Si no se especifica, el valor predeterminado es ASC ascendente.
Puede ordenar columnas no seleccionadas.

5. Resultados del grupo (función de agregación)

Agrupe los resultados para facilitar el uso de funciones agregadas para procesar conjuntos de resultados.
Comando:
GROUP BY columna nombre 1, columna nombre 2, ...
Por ejemplo:

SELECT gender, COUNT(*) FROM employees GROUP BY gender;

Además de las funciones agregadas, cada columna de la instrucción SELECT debe aparecer en GROUP BY.

5.1 TENER

HAVING no es una función agregada, es una cláusula utilizada para filtrar el conjunto de resultados GROUP BY.
Por ejemplo:

SELECT emp_no, AVG(salary) AS avg 
FROM salaries GROUP BY emp_no HAVING avg > 140000 ORDER BY avg DESC;

5.2 CONTEO

Se usa para contar conjuntos de resultados.
Por ejemplo:
COUNT(*)

Cuando se usa * como parámetro de función, los valores NULL también se cuentan.
Si desea excluir filas con valores NULL en la columna, puede usar COUNT (nombre de columna) para contar.

5.3 SUMA

Se usa para sumar el conjunto de resultados.
Por ejemplo:

SELECT YEAR(from_date) AS year, SUM(salary) AS sum 
FROM salaries GROUP BY YEAR(from_date) ORDER BY sum DESC;

5.4 PROMEDIO

Se usa para promediar el conjunto de resultados.
Por ejemplo:

SELECT emp_no, AVG(salary) AS avg 
FROM salaries GROUP BY emp_no ORDER BY avg DESC LIMIT 10;

5.5 MÁX / MIN

El usuario busca los valores máximos y mínimos.
Por ejemplo:

# 最小值与最大值的用法相同。
SELECT YEAR(from_date) AS year, MAX(salary) AS max 
FROM salaries GROUP BY YEAR(from_date) ORDER BY max DESC;

5.6 Uso de DISTINCT para excluir columnas duplicadas

En MySQL5 y versiones posteriores, DISTINCT puede usarse para funciones agregadas.
Puede especificar ALL o DISTINCT en los parámetros de la función de agregado.
El valor predeterminado es TODO.

  • En la función COUNT, DISTINCT puede usarse para excluir columnas duplicadas solo si se especifica el nombre de la columna.
  • Para las funciones MIN y MAX, aunque DISTINCT puede usarse técnicamente, no es necesario en absoluto.

6. Funciones

La portabilidad de la función generalmente no es sólida, y debe prestar más atención al usarla.

6.1 Cuerdas de empalme

Por ejemplo:

SELECT Concat(Trim(first_name), ' ', Trim(last_name)) AS name 
FROM employees ;
  • Concat (): concatenará los resultados, la cadena debe marcarse con comillas.
  • Trim (): los espacios a ambos lados del resultado se eliminarán. También hay RTrim () que elimina el espacio a la derecha y LTrim () que elimina el espacio a la izquierda.

Fuera de las cadenas de empalme, MySQL también admite operaciones +, -, *, \.

6.2 Procesamiento de texto

Función Explicación
Izquierda() Devuelve el carácter a la izquierda de la cadena.
Longitud() Devuelve la longitud de la cadena.
Localizar() Encuentra una subcadena de una cadena
Inferior() Convertir cadena a minúscula
LTrim () Eliminar el espacio a la izquierda
Derecho() Devuelve el carácter a la derecha de la cadena.
RTrim () Eliminar el espacio a la derecha
Soundex () Devuelve el valor SOUNDEX de la cadena (coincide con valores que suenan similares)
Subcadena () Devuelve el carácter de la subcadena.
Superior() Convertir cadena a mayúsculas

6.3 Manejo de fecha y hora

Use la siguiente función para realizar una comparación parcial del campo que almacena la fecha.

Función Explicación
AddDate () Agregar una fecha (día, semana, etc.)
Agregar tiempo() Agregar un tiempo (horas, minutos, etc.)
CurDate() 返回当前日期
CurTime() 返回当前时间
Date() 返回日期部分,yyyy-MM-dd
DateDiff() 计算两个日期之差
Date_Add() 高度灵活的日期运算函数
Date_Format() 返回一个格式化的日期或时间串
Day() 返回一个日期的天数部分
DayOfWeek() 返回周几
Hour() 返回小时部分
Minute() 返回分钟部分
Month() 返回月份部分
Now() 返回当前的日期和时间
Second() 返回秒的部分
Time() 返回一个时间部分,hh:mm:ss
Year() 返回年份部分

6.4 数值处理函数

数值处理函数在主要DBMS的函数中,是最一致的函数。

函数 说明
Abs() 返回绝对值
Cos() 返回余弦
Exp() 返回指数
Mod() 返回余数
Pi() 圆周率
Rand() 返回随机数
Sin() 返回正弦
Sqrt() 返回平方根
Tan() 返回正切

7. 联表查询

从多个表中查询数据的方法。
关联有几种类型:

  1. INNER JOIN (JOIN).
  2. LEFT JOIN (LEFT OUTER JOIN).
  3. RIGHT JOIN (RIGHT OUTER JOIN).
  4. FULL JOIN.

这里的左表为先指定的表,即FROM指定的表。右表为后指定的表,即JOIN指定的表。

7.1 JOIN

内连接,返回匹配的到的行。
比如,我们查询一个员工编号为110022的人的员工编号、姓名和部门名称。

employees员工表存放员工信息。
departments部门表存放部门信息。
dept_manager部门员工关联表存放部门与员工的对应关系。

SELECT emp.emp_no,emp.first_name,emp.last_name,dept.dept_name
FROM employees AS emp 
JOIN dept_manager AS dept_mgr 
    ON emp.emp_no = dept_mgr.emp_no AND emp.emp_no = 110022 
JOIN departments AS dept 
    ON dept_mgr.dept_no = dept.dept_no;

8.子查询

MySQL支持将一个查询的返回结果作为其他查询语句的一部分来使用。
MySQL总是从内向外的执行查询。即先执行子查询,再执行外层的查询。

8.1 作为In的查询条件

例如:想要查询工资最大的员工信息。

# 在salaries表中查询工资最高。
SELECT MAX(salary) 
FROM salaries;
# 在salaries表中,查询工资等于最大工资的员工编号。
SELECT emp_no 
FROM salaries 
WHERE salary = (SELECT MAX(salary)
                FROM salaries);
# 在employees表中个,查找员工编号等于该编号的姓名。
SELECT first_name, last_name 
FROM employees 
WHERE emp_no = (SELECT emp_no 
                FROM salaries 
                WHERE salary = (SELECT MAX(salary)
                                FROM salaries));

MySQL8中,不在子查询中支持LIMIT语句。

8.2 作为字段使用子查询

例如:查询前十名薪资的员工信息和薪资总额。

SELECT emp_no, first_name, last_name, (SELECT SUM(salary) 
                               FROM salaries 
                               WHERE salaries.emp_no = employees.emp_no) AS salaries 
FROM employees 
ORDER BY salaries DESC
LIMIT 10;

注意如果两个表中个列名相同时,我们希望匹配到两个表中,emp_no相同的情况。所以在子查询中使用相关子查询来约束emp_no,否则sum会对salaries全表的工资进行加和。
子查询的性能通常不是太好,尤其嵌套多层子查询时。

9. 组合查询 UNION

将多个SELECT语句组合成一个结果集。

9.1 UNION

例如:查找工资平均年薪高于140000和低于39500的人的编号和平均年薪。

SELECT emp_no, AVG(salary) AS avg
FROM salaries  
GROUP BY emp_no
HAVING AVG(salary) >=140000 
UNION
SELECT emp_no, AVG(salary) AS avg
FROM salaries 
GROUP BY emp_no 
HAVING AVG(salary) <= 39500;

同一个表的不同条件可以用OR来实现,但是从不同表查询相同列的情况使用UNION更好。

使用UNION的规则:

  • UNION必须由两条或两条以上的SELECT语句组成,语句之间用UNION分隔。
  • UNION中的每个查询必须包含相同的列、表达式或聚合函数。
  • 列数据类型必须兼容,不必完全相同,但是必须是可以隐性转换的。

9.2 UNION ALL

UNION是不包含重复列的,如果想要包含重复列,需要是用UNION ALL。

Supongo que te gusta

Origin www.cnblogs.com/keathBlog/p/12715319.html
Recomendado
Clasificación