前言:

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

1.员工示例数据库导入

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

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

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

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

简单介绍下这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。

mysql 查询语法基础_入门MySQL——查询语法练习相关推荐

  1. mysql pool返回值_【Mysql】你知道一条查询语句是如何执行的吗?

    [Mysql]你知道一条查询语句是如何执行的吗?​mp.weixin.qq.com 前言 在默认大家学习了Mysql结构的基础上,我们来深入的解析一下sql语句在mysql中是如何流转和实现的.本文会 ...

  2. php 查看mysql连接数据库_php基础之连接mysql数据库和查询数据

    php基础之连接mysql数据库和查询数据 文章主要介绍了php连接mysql数据库和查询数据的方法和示例,需要的朋友可以参考下,就跟随百分网小编一起去了解下吧,想了解更多相关信息请持续关注我们应届毕 ...

  3. mysql 截断表_入门MySQL——基础语句篇

    前言: 前面几篇文章,我们介绍了MySQL的基础概念及逻辑架构.相信你现在应该有了自己的一套MySQL环境,接下来我们就可以开始练习MySQL了.本文将从MySQL最基础的语句出发,为你展示出创建及修 ...

  4. mysql 查询执行过程_深入浅出Mysql(一)——sql查询执行过程

    一.sql查询执行过程概括 下面给出的mysql基本架构示意图,从中你可以清楚的mysql的各个模块和执行过程. 大体来说可以分为两部分Server层和储存引擎层.Server层包括连接器.查询缓存. ...

  5. mysql两个查询结果差集_【Mysql】求两个表(查询结果)的差集

    求两个查询结果的差集,Mysql直接提供了关键字not in,但是not in的效率极其低下,出现例如求一个上千查询结果在上万查询结果的差集,那么使用not in来查询的查询速度极其缓慢,这是必须使用 ...

  6. mysql profiling详解_使用mysql profiling功能剖析单条查询

    5.1版本开始引入show profile剖析单条语句功能,支持show profiles和show profile语句,参数have_profiling;控制是否开启: 查看是否支持这个功能(查询为 ...

  7. mysql慢查询设置无线_深入mysql慢查询设置的详解

    在web开发中,我们经常会写出一些SQL语句,一条糟糕的SQL语句可能让你的整个程序都非常慢,超过10秒一般用户就会选择关闭网页,如何优化SQL语句将那些运行时间 比较长的SQL语句找出呢?MySQL ...

  8. python 多表查询_Python基础学习教程—MySQL常见的多表联查

    一. MySQL的多表联查 ================================== 表之间的关系有:1对1 1对多 多对多 1. 嵌套查询:一个查询的结果是另外sql查询的条件: 如:查 ...

  9. mysql查询自定义数据_实现自定义查询的数据库设计及实现(一)

    需求 先说一下需求:实现用户自定义的查询,用户可以自定义要查询的列.自定义条件条件.自定义排序.除了查询使用外,还可以使用于各个需要根据条件进行约束的业务,如权限: 本设计和实现,很大部分是通过数据库 ...

  10. mysql 查询语句超时_解决SQL查询总是 超时已过期

    1.由于数据库设计问题造成SQL数据库新增数据时超时 症状: Microsoft OLE DB Provider for SQL Server 错误 '80040e31' ([ODBC SQL Ser ...

最新文章

  1. 第7周项目实践 1 队列算法库的建立
  2. 在Github上搭建Jekyll博客和创建主题
  3. 黑马程序员--线程【下】
  4. Web端即时通讯技术盘点:短轮询、Comet、Websocket、SSE
  5. 【从零开始】Python字符串的操作方法
  6. 【IoT平台技术对接分享】如何上传正确的消息推送证书
  7. CSS快速学习:几种导航条案例
  8. 如何获得select被选中option的value和text和......
  9. matlab之svd、svds函数
  10. qt学习之路(三)之使用QT语言家
  11. 移动网优大神VoLTE学习笔记(四):主叫信令流程
  12. python论坛签到_python简单实现网站打卡签到
  13. 谷歌浏览器下载速度很慢,怎么解决?
  14. cpolar:一款好用的内网穿透工具 - 无需公网IP
  15. java编译器:必须对其进行捕获或声明以便抛出
  16. scrapy学习(完全版)
  17. Android常用五大平台上架详解
  18. java selector 源码_Java NIO——Selector机制源码分析---转
  19. Centos7创建及修改用户名和用户组名
  20. iOS并发编程指南(3)

热门文章

  1. Java中对数组的操作
  2. Codewar python训练题全记录——持续更新
  3. webserver/CGI
  4. 常用的sql语句集锦
  5. C#泛型-小心使用静态成员变量
  6. android trace获取和分析
  7. js动态修改onclick的响应函数后,IE无效的解决方案
  8. How to recover deleted data from SQL Server
  9. Linux Command - alien
  10. 2010 GCR MVP Open Day