MySQL查询操作总结归纳

本文总结了MySQL数据库的基本查询操作及高级用法,包括多表连接、子查询、分组与过滤、排序与分页等内容,并附带示例说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MySQL查询操作总结归纳

跟着康师傅学了几天MySQL数据库,通过此文进行回顾总结

基本语句

SELECT... , ... , ...  
FROM... , ...  ( (LEFT\RIGHT ) JOIN ... ON ... )  
WHERE ... AND/OR/NOT ...  
GROUP BY ...  
HAVING ...  
ORDER BY ... ( ASC/DESC ) , ...  
LIMIT ... , ...

1)from:从哪些表中筛选
2)on:关联多表查询时,去除笛卡尔积
3)where:从表中筛选的条件
4)group by:分组依据
5)having:在统计结果中再次筛选
6)order by:排序
7)limit:分页

注解:

  1. SELECT:选择字段
    标识选择哪些列
    SELECT * FROM A (显示A表中所有数据)
    SELECT name,age,id FROM A (显示A表中所有的name,age,id)
    SELECT salary*12 “annual Salary”–> 别名
    使用关键字DISTINCT去除重复行
    SELECT DISTINCT * FROM A

  1. FROM:选择表
    标识从哪个表中选择
    如上

多表查询

在这里插入图片描述

中图:JOIN
左上:LEFT JOIN
右上:RIGHT JOIN

#左中图  
#实现A - A∩B  
SELECT 字段列表  
FROM A表 LEFT JOIN B表  
ON 关联条件  
WHERE 从表关联字段 IS NULL AND 等其他子句;  

#右中图  
#实现B - A∩B  
SELECT 字段列表  
FROM A表 RIGHT JOIN B表  
ON 关联条件  
WHERE 从表关联字段 IS NULL AND 等其他子句;  
#左下图  
#实现查询结果是A∪B  
#用左外的A,union 右外的B  
SELECT 字段列表  
FROM A表 LEFT JOIN B表  
ON 关联条件  
WHERE 等其他子句  
UNION 
SELECT 字段列表  
FROM A表 RIGHT JOIN B表  
ON 关联条件  
WHERE 等其他子句;  
#右下图  
#实现A∪B - A∩B 或 (A - A∩B) ∪ (B - A∩B)  
#使用左外的 (A - A∩B) union 右外的(B - A∩B)  
SELECT 字段列表  
FROM A表 LEFT JOIN B表  
ON 关联条件  
WHERE 从表关联字段 IS NULL AND 等其他子句  
UNION  
SELECT 字段列表  
FROM A表 RIGHT JOIN B表  
ON 关联条件  
WHERE 从表关联字段 IS NULL AND 等其他子句  

  1. WHERE: 过滤数据
    与FROM贴贴
    不能在 WHERE 子句中使用聚合函数

写些限制条件:

  • BETWEEN A AND B 运算符 => 在A和B之间
  • IN 运算符 --> 之中
    SELECT ‘A’ IN( ‘A’,‘B’,‘C’)√
  • NOT IN 运算符 不在什么之中
  • LIKE 运算符 “像”
    WHERE A LIKE ‘%a%’ => 过滤选择A中有a的
    WHERE A LIKE ‘_a%’ => 过滤选择A中第二个字母是a的
  • REGEXP 运算符 (正则表达式)

子查询
就是以查询作为限制条件

  • 单行子查询
    #返回job_id与141号员工相同,salary比143号员工多的员工姓名,
    #job_id和工资
    
    SELECT last_name, job_id, salary  
    FROM employees
    WHERE job_id =
                  (SELECT job_id
                  FROM employees
                  WHERE employee_id = 141)
    AND salary >
                  (SELECT salary
                  FROM employees
                  WHERE employee_id = 143);
    
  • 多行子查询

多行比较操作符

操作符含义
IN等于列表中的任意一个
ANY需要和单行比较操作符一起使用,和子查询返回的某一个值比较
ALL需要和单行比较操作符一起使用,和子查询返回的所有值比较
#查询平均工资最低的部门id
SELECT department_id
FROM employees
GROUP BY department_id
HAVING AVG(salary) <= ALL (
                            SELECT AVG(salary) avg_sal
                            FROM employees
                            GROUP BY department_id
                            )
  • 相关子查询
#查询员工中工资大于本部门平均工资的员工的last_name,salary和其department_id
SELECT last_name,salary, department_id
FROM employees e
WHERE salary > (
                SELECT AVG(salary)
                FROM employees
                WHERE department_id = e.department_id
                )

#查询员工的id,salary,按照department_name 排序
SELECT employee_id,salary
FROM employees e
ORDER BY (
        SELECT department_name
        FROM departments d
        WHERE e.`department_id` = d.`department_id`
        );

  • 关键字 EXISTS 与 NOT EXISTS
    EXISTS:满足条件的
    NOT EXISTS:不满足条件的
#查询公司管理者的employee_id,last_name,job_id,department_id信息

SELECT employee_id, last_name, job_id, department_id
FROM employees e1
WHERE EXISTS (  SELECT *
                FROM employees e2
                WHERE e2.manager_id = e1.employee_id
                );



  1. GROUP BY:分组
    一般与聚合函数配合使用

  1. HAVING:过滤分组
    与GROUP UP搭配使用
SELECT department_id, MAX(salary)
FROM employees
GROUP BY department_id
HAVING MAX(salary)>10000 ;

  1. ORDER BY:排序
  • ASC:升序
  • DESC:降序

  1. LIMIT:分页
    LIMIT [位置偏移量 , ] 行数
    分页显式公式:(当前页数-1)每页条数,每页条数
    –前10条记录:
    SELECT * FROM 表名 LIMIT 0,10;
    或者
    SELECT * FROM 表名 LIMIT 10;
    –第11至20条记录:
    SELECT * FROM 表名 LIMIT 10,10;
    –第21至30条记录:
    SELECT * FROM 表名 LIMIT 20,10;

SELECT的执行过程

SELECT …,…,…
FROM … JOIN …
ON 多表的连接条件
JOIN …
ON …
WHERE 不包含组函数的过滤条件
AND/OR 不包含组函数的过滤条件
GROUP BY …,…
HAVING 包含组函数的过滤条件
ORDER BY … ASC/DESC
LIMIT …,…


END

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值