mysql 查询语法基础_入门MySQL——查询语法练习

前言:

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

1.员工示例数据库导入

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

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

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

2a68c10cc744064db6eda412f32f6672.png

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

8f594cd1b36ba95832b5c4f5643410f9.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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值