入门MySQL——查询语法练习

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: 前面几篇文章为大家介绍了DML以及DDL语句的使用方法,本篇文章将主要讲述常用的查询语法。其实MySQL官网给出了多个示例数据库供大家实用查询,下面我们以最常用的员工示例数据库为准,详细介绍各自常用的查询语法。

1.员工示例数据库导入


官方文档员工示例数据库介绍及下载链接:


https://dev.mysql.com/doc/employee/en/employees-installation.html


同样的,为了方便大家,我这里将员工库的数据库备份分享给大家,大家也可以下载我这份数据,然后再解压导入进你们本地库就可以了。


链接: https://pan.baidu.com/s/13s1OH-3DepN-rpejys76Ww

密码: 2xqx

下载解压后,直接导入即可,如链接失效可后台联系我。


如果你导入完成,就可以看到下面这6张表了,这就是我们接下来练习查询语法要用的表哦。

image.png

image.png


为了让大家对示例数据库更了解,这里给出此数据库各表之间的关系图:

image.png


employees-schema.png


简单介绍下这6张表:


  • departments :部门表,记录的是9个部门的部门编号和部门名称。
  • dept_emp :部门员工表,记录各部门员工数据,员工id和部门id,起始时间和结束时间(注:9999-01-01的意思就是仍在该部门就职)。
  • dept_manager :部门经理表,同第二张表结构差不多,记录每个部门的每个经理的任职时期。
  • employees :员工信息表,记录员工信息,员工编号emp_no是唯一键值。
  • salaries :薪资表,记录每个员工每段时期的薪资。
  • titles :职称表,记录每个员工每段时期的职位名称。


2.模糊查询

#查找名字以L开头的员工信息
SELECT * FROM employees WHERE first_name LIKE 'L%';


3.排序

#按部门编号排序
mysql> SELECT * FROM departments ORDER BY dept_no;
+---------+--------------------+
| dept_no | dept_name          |
+---------+--------------------+
| d001    | Marketing          |
| d002    | Finance            |
| d003    | Human Resources    |
| d004    | Production         |
| d005    | Development        |
| d006    | Quality Management |
| d007    | Sales              |
| d008    | Research           |
| d009    | Customer Service   |
+---------+--------------------+
9 rows in set (0.00 sec)
总结:
order by排序默认按asc升序来排列
也可指定desc降序排列


4.限制多少行

#取前5行
mysql> SELECT * FROM employees LIMIT 5;
+--------+------------+------------+-----------+--------+------------+
| emp_no | birth_date | first_name | last_name | gender | hire_date  |
+--------+------------+------------+-----------+--------+------------+
|  10001 | 1953-09-02 | Georgi     | Facello   | M      | 1986-06-26 |
|  10002 | 1964-06-02 | Bezalel    | Simmel    | F      | 1985-11-21 |
|  10003 | 1959-12-03 | Parto      | Bamford   | M      | 1986-08-28 |
|  10004 | 1954-05-01 | Chirstian  | Koblick   | M      | 1986-12-01 |
|  10005 | 1955-01-21 | Kyoichi    | Maliniak  | M      | 1989-09-12 |
+--------+------------+------------+-----------+--------+------------+
5 rows in set (0.00 sec)
mysql> SELECT * FROM employees ORDER BY hire_date desc LIMIT 5;
+--------+------------+------------+-----------+--------+------------+
| emp_no | birth_date | first_name | last_name | gender | hire_date  |
+--------+------------+------------+-----------+--------+------------+
| 463807 | 1964-06-12 | Bikash     | Covnot    | M      | 2000-01-28 |
| 428377 | 1957-05-09 | Yucai      | Gerlach   | M      | 2000-01-23 |
| 499553 | 1954-05-06 | Hideyuki   | Delgrande | F      | 2000-01-22 |
| 222965 | 1959-08-07 | Volkmar    | Perko     | F      | 2000-01-13 |
|  47291 | 1960-09-09 | Ulf        | Flexer    | M      | 2000-01-12 |
+--------+------------+------------+-----------+--------+------------+
5 rows in set (0.11 sec)
总结:
limit限定显示前多少行,可与order by联合使用


5.聚合函数

#查找某员工薪水总和
SELECT SUM(salary) FROM salaries WHERE emp_no = 10001;
#统计历史上各个部门所拥有的员工数量,并降序排序
mysql> SELECT dept_no, COUNT(*) AS emp_sum FROM dept_emp GROUP BY dept_no ORDER BY emp_sum DESC;
+---------+---------+
| dept_no | emp_sum |
+---------+---------+
| d005    |   85707 |
| d004    |   73485 |
| d007    |   52245 |
| d009    |   23580 |
| d008    |   21126 |
| d001    |   20211 |
| d006    |   20117 |
| d003    |   17786 |
| d002    |   17346 |
+---------+---------+
9 rows in set (0.07 sec)


6.JOIN

#可以试下下面3个语句执行结果的不同
SELECT *
FROM salaries INNER JOIN dept_emp
ON salaries.emp_no = dept_emp.emp_no
WHERE salaries.emp_no = 10010;
SELECT *
FROM salaries LEFT JOIN dept_emp
ON salaries.emp_no = dept_emp.emp_no
WHERE salaries.emp_no = 10010;
SELECT *
FROM salaries RIGHT JOIN dept_emp
ON salaries.emp_no = dept_emp.emp_no
WHERE salaries.emp_no = 10010;
总结:
a left join b  a表全,用b表去匹配a表
LEFT JOIN 关键字会从左表 (a) 那里返回所有的行,即使在右表 (b) 中没有匹配的行,匹配不到的列用NULL代替
a right join b  b表全,用a表去匹配b表
RIGHT JOIN 关键字会右表 (b) 那里返回所有的行,即使在左表 (a) 中没有匹配的行,匹配不到的列用NULL代替
inner join 与join 效果一样
在表中存在至少一个匹配时,INNER JOIN 关键字返回行

总结:


推荐大家在本地导入这个示例数据库,其实这个数据库是练习查询语法的好素材。对于我们日常学习或工作中,用的最多的应该就是查询语句了,个人以为写查询SQL没有技巧,只有多加练习才能快速写出能解决需求的SQL。

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2天前
|
存储 算法 关系型数据库
MySQL怎样处理排序⭐️如何优化需要排序的查询?
MySQL怎样处理排序⭐️如何优化需要排序的查询?
|
2天前
|
SQL 关系型数据库 MySQL
MySQL数据库的约束+进阶版新增与查询-2
MySQL数据库的约束+进阶版新增与查询
12 1
|
2天前
|
关系型数据库 MySQL 测试技术
MySQL数据库的约束+进阶版新增与查询-1
MySQL数据库的约束+进阶版新增与查询
11 1
|
2天前
|
SQL 存储 关系型数据库
MySQL查询原理,看这一篇就够了!
MySQL查询原理,看这一篇就够了!
|
5天前
|
SQL 关系型数据库 MySQL
MySQL 基本概念 基础用法 增删改查(特殊查询)语法 详细篇
MySQL 基本概念 基础用法 增删改查(特殊查询)语法 详细篇
|
7天前
|
缓存 关系型数据库 MySQL
为什么MySQL分页查询偏移量越大查询越慢
【5月更文挑战第1天】为什么MySQL分页查询偏移量越大查询越慢
42 4
|
10天前
|
关系型数据库 MySQL 数据库
【MySQL-10】DCL-数据控制语言-【管理用户&权限控制】 (语法语句&案例演示&可cv案例代码)
【MySQL-10】DCL-数据控制语言-【管理用户&权限控制】 (语法语句&案例演示&可cv案例代码)
【MySQL-10】DCL-数据控制语言-【管理用户&权限控制】 (语法语句&案例演示&可cv案例代码)
|
1天前
|
关系型数据库 MySQL 数据库
docker MySQL删除数据库时的错误(errno: 39)
docker MySQL删除数据库时的错误(errno: 39)
|
1天前
|
关系型数据库 MySQL 数据库连接
用Navicat备份Mysql演示系统数据库的时候出:Too Many Connections
用Navicat备份Mysql演示系统数据库的时候出:Too Many Connections
|
2天前
|
存储 Oracle 关系型数据库
oracle 数据库 迁移 mysql数据库
将 Oracle 数据库迁移到 MySQL 是一项复杂的任务,因为这两种数据库管理系统具有不同的架构、语法和功能。
15 0