如何使用MySQL查询语句

发布时间:2021-10-09 17:51:31 作者:iii
来源:亿速云 阅读:199
# 如何使用MySQL查询语句

## 引言

MySQL作为最流行的开源关系型数据库管理系统,被广泛应用于Web开发、数据分析等领域。掌握MySQL查询语句是数据库操作的基础,本文将系统介绍SELECT查询、条件过滤、排序分组、多表连接等核心语法,帮助读者从入门到熟练使用MySQL进行数据检索。

---

## 一、基础SELECT查询

### 1.1 基本语法结构
```sql
SELECT 列名1, 列名2,... 
FROM 表名
[WHERE 条件]
[ORDER BY 排序字段]
[LIMIT 行数];

1.2 查询所有列

-- 查询employees表所有数据
SELECT * FROM employees;

1.3 查询特定列

-- 只查询员工姓名和工资
SELECT first_name, salary FROM employees;

1.4 使用列别名

SELECT 
    first_name AS '名',
    last_name AS '姓',
    salary*12 AS '年薪'
FROM employees;

二、条件查询(WHERE子句)

2.1 比较运算符

运算符 说明 示例
= 等于 salary = 5000
> 大于 hire_date > ‘2020-01-01’
<> 不等于 department_id <> 10
BETWEEN 范围匹配 salary BETWEEN 4000 AND 6000
-- 查询工资超过10000的员工
SELECT * FROM employees 
WHERE salary > 10000;

2.2 逻辑运算符

-- AND示例:查询部门10且工资>5000的员工
SELECT * FROM employees
WHERE department_id = 10 AND salary > 5000;

-- OR示例:查询部门10或20的员工
SELECT * FROM employees
WHERE department_id = 10 OR department_id = 20;

-- NOT示例:查询不在部门10的员工
SELECT * FROM employees
WHERE NOT department_id = 10;

2.3 IN运算符

-- 查询部门号为10,20,30的员工
SELECT * FROM employees
WHERE department_id IN (10, 20, 30);

2.4 LIKE模糊查询

-- %表示任意多个字符
SELECT * FROM employees 
WHERE first_name LIKE 'J%';  -- 以J开头的名字

-- _表示单个字符
SELECT * FROM employees
WHERE phone_number LIKE '515.___.____';  -- 匹配515开头的电话

三、排序与分页

3.1 ORDER BY排序

-- 按工资降序排序
SELECT * FROM employees
ORDER BY salary DESC;

-- 多列排序:先按部门升序,同部门按工资降序
SELECT * FROM employees
ORDER BY department_id ASC, salary DESC;

3.2 LIMIT分页

-- 查询前5条记录
SELECT * FROM employees
LIMIT 5;

-- 分页查询(每页10条,第3页)
SELECT * FROM employees
LIMIT 20, 10;  -- 偏移量20,取10条

四、聚合函数与分组

4.1 常用聚合函数

函数 说明
COUNT() 计数
SUM() 求和
AVG() 平均值
MAX() 最大值
MIN() 最小值
GROUP_CONCAT() 连接字符串
-- 计算员工总数
SELECT COUNT(*) FROM employees;

-- 计算平均工资
SELECT AVG(salary) FROM employees;

4.2 GROUP BY分组

-- 按部门统计平均工资
SELECT 
    department_id,
    AVG(salary) AS avg_salary,
    COUNT(*) AS emp_count
FROM employees
GROUP BY department_id;

4.3 HAVING过滤分组

-- 查询平均工资>8000的部门
SELECT 
    department_id,
    AVG(salary) AS avg_salary
FROM employees
GROUP BY department_id
HAVING avg_salary > 8000;

五、多表连接查询

5.1 内连接(INNER JOIN)

-- 查询员工及其部门信息
SELECT 
    e.first_name,
    e.salary,
    d.department_name
FROM employees e
INNER JOIN departments d
    ON e.department_id = d.department_id;

5.2 左外连接(LEFT JOIN)

-- 查询所有员工(包括没有部门的员工)
SELECT 
    e.first_name,
    d.department_name
FROM employees e
LEFT JOIN departments d
    ON e.department_id = d.department_id;

5.3 自连接

-- 查询员工及其经理信息
SELECT 
    e1.first_name AS employee,
    e2.first_name AS manager
FROM employees e1
LEFT JOIN employees e2
    ON e1.manager_id = e2.employee_id;

六、子查询

6.1 WHERE子句中的子查询

-- 查询工资高于平均工资的员工
SELECT * FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);

6.2 FROM子句中的子查询

-- 查询各部门工资排名
SELECT 
    department_id,
    first_name,
    salary,
    salary_rank
FROM (
    SELECT 
        department_id,
        first_name,
        salary,
        RANK() OVER(PARTITION BY department_id ORDER BY salary DESC) AS salary_rank
    FROM employees
) ranked_employees
WHERE salary_rank <= 3;

6.3 EXISTS子查询

-- 查询有下属的员工
SELECT * FROM employees e1
WHERE EXISTS (
    SELECT 1 FROM employees e2
    WHERE e2.manager_id = e1.employee_id
);

七、常用函数

7.1 字符串函数

-- 字符串拼接
SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM employees;

-- 大小写转换
SELECT UPPER(first_name), LOWER(last_name) FROM employees;

7.2 日期函数

-- 计算员工工龄
SELECT 
    first_name,
    DATEDIFF(CURRENT_DATE(), hire_date)/365 AS years_employed
FROM employees;

7.3 条件函数

-- CASE WHEN条件判断
SELECT 
    first_name,
    salary,
    CASE 
        WHEN salary > 10000 THEN '高薪'
        WHEN salary > 5000 THEN '中等'
        ELSE '一般'
    END AS salary_level
FROM employees;

八、查询优化建议

  1. 索引优化:为WHERE、JOIN、ORDER BY字段建立索引
  2. *避免SELECT **:只查询需要的列
  3. LIMIT分页:大数据量时使用分页查询
  4. EXPLN分析:使用EXPLN查看执行计划
  5. 避免子查询:复杂子查询可改用JOIN实现
-- 使用EXPLN分析查询
EXPLN SELECT * FROM employees WHERE department_id = 10;

结语

本文系统介绍了MySQL查询语句的核心语法和使用技巧。实际应用中,需要根据业务需求灵活组合各种查询方式。建议读者通过实践练习掌握这些技术,并持续学习窗口函数、CTE等高级特性以应对更复杂的数据处理场景。

注意:所有示例基于MySQL 8.0语法,部分函数在旧版本中可能不支持 “`

(全文约2700字,实际字数可能因格式略有差异)

推荐阅读:
  1. mysql 查询语句可以使用的函数总结
  2. mysql如何保存查询语句

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

mysql

上一篇:Python列表的应用场景都有哪些呢

下一篇:如何用Python替代Mapinfo更快查找两张表中距离最近的点

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》