前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >入门MySQL——查询语法练习

入门MySQL——查询语法练习

作者头像
MySQL技术
发布2019-09-08 09:21:50
5370
发布2019-09-08 09:21:50
举报
文章被收录于专栏:MySQL技术MySQL技术

前言:

前面几篇文章为大家介绍了DML以及DDL语句的使用方法,本篇文章将主要讲述常用的查询语法。其实MySQL官网给出了多个示例数据库供大家实用查询,下面我们以最常用的员工示例数据库为准,详细介绍各自常用的查询语法。

1.员工示例数据库导入

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

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

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

链接: https://pan.baidu.com/s/13s1OH-3DepN-rpejys76Ww 密码: 2xqx 下载解压后,直接导入即可,如链接失效可后台联系我。

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

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

简单介绍下这6张表:

  • departments :部门表,记录的是9个部门的部门编号和部门名称。
  • dept_emp :部门员工表,记录各部门员工数据,员工id和部门id,起始时间和结束时间(注:9999-01-01的意思就是仍在该部门就职)。
  • dept_manager :部门经理表,同第二张表结构差不多,记录每个部门的每个经理的任职时期。
  • employees :员工信息表,记录员工信息,员工编号emp_no是唯一键值。
  • salaries :薪资表,记录每个员工每段时期的薪资。
  • titles :职称表,记录每个员工每段时期的职位名称。
2.模糊查询
代码语言:javascript
复制
#查找名字以L开头的员工信息SELECT * FROM employees WHERE first_name LIKE 'L%';
3.排序
代码语言:javascript
复制
#按部门编号排序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.限制多少行
代码语言:javascript
复制
#取前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.聚合函数
代码语言:javascript
复制
#查找某员工薪水总和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
代码语言:javascript
复制
#可以试下下面3个语句执行结果的不同SELECT *FROM salaries INNER JOIN dept_empON salaries.emp_no = dept_emp.emp_noWHERE salaries.emp_no = 10010;
SELECT *FROM salaries LEFT JOIN dept_empON salaries.emp_no = dept_emp.emp_noWHERE salaries.emp_no = 10010;
SELECT *FROM salaries RIGHT JOIN dept_empON salaries.emp_no = dept_emp.emp_noWHERE 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。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 MySQL技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.员工示例数据库导入
  • 2.模糊查询
  • 3.排序
  • 4.限制多少行
  • 5.聚合函数
  • 6.JOIN
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档