MySQL数据操作DQL:单表查询
Posted 你很棒
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL数据操作DQL:单表查询相关的知识,希望对你有一定的参考价值。
(1)单表查询
1)环境准备
mysql> CREATE TABLE company.employee5(
id int primary key AUTO_INCREMENT not null,
name varchar(30) not null,
sex enum(‘male‘,‘female‘) default ‘male‘ not null,
hire_date date not null,
post varchar(50) not null,
job_description varchar(100),
salary double(15,2) not null,
office int,
dep_id int
);
insert into
company.employee5(name,sex,hire_date,post,job_description,salary,office,dep_id) values
(‘jack‘,‘male‘,‘20180202‘,‘instructor‘,‘teach‘,5000,501,100),
(‘tom‘,‘male‘,‘20180203‘,‘instructor‘,‘teach‘,5500,501,100),
(‘robin‘,‘male‘,‘20180202‘,‘instructor‘,‘teach‘,8000,501,100),
(‘alice‘,‘female‘,‘20180202‘,‘instructor‘,‘teach‘,7200,501,100),
(‘tianyun‘,‘male‘,‘20180202‘,‘hr‘,‘hrcc‘,600,502,101),
(‘harry‘,‘male‘,‘20180202‘,‘hr‘,NULL,6000,502,101),
(‘emma‘,‘female‘,‘20180206‘,‘sale‘,‘salecc‘,20000,503,102),
(‘christine‘,‘female‘,‘20180205‘,‘sale‘,‘salecc‘,2200,503,102),
(‘zhuzhu‘,‘male‘,‘20180205‘,‘sale‘,NULL,2200,503,102),
(‘gougou‘,‘male‘,‘20180205‘,‘sale‘,‘‘,2200,503,102);
2)简单查询
语法
select 字段1,字段2 from 表名;
select * from 表名;
查询表中指定字段的数据
mysql> select name,salary,post from employee5;
+-----------+----------+------------+
| name | salary | post |
+-----------+----------+------------+
| jack | 5000.00 | instructor |
| tom | 5500.00 | instructor |
| robin | 8000.00 | instructor |
| alice | 7200.00 | instructor |
| tianyun | 600.00 | hr |
| harry | 6000.00 | hr |
| emma | 20000.00 | sale |
| christine | 2200.00 | sale |
| zhuzhu | 2200.00 | sale |
| gougou | 2200.00 | sale |
+-----------+----------+------------+
查询表中的所有数据
mysql> select * from employee5;
+----+-----------+--------+------------+------------+-----------------+----------+--------+--------+
| id | name | sex | hire_date | post | job_description | salary | office | dep_id |
+----+-----------+--------+------------+------------+-----------------+----------+--------+--------+
| 1 | jack | male | 2018-02-02 | instructor | teach | 5000.00 | 501 | 100 |
| 2 | tom | male | 2018-02-03 | instructor | teach | 5500.00 | 501 | 100 |
| 3 | robin | male | 2018-02-02 | instructor | teach | 8000.00 | 501 | 100 |
| 4 | alice | female | 2018-02-02 | instructor | teach | 7200.00 | 501 | 100 |
| 5 | tianyun | male | 2018-02-02 | hr | hrcc | 600.00 | 502 | 101 |
| 6 | harry | male | 2018-02-02 | hr | NULL | 6000.00 | 502 | 101 |
| 7 | emma | female | 2018-02-06 | sale | salecc | 20000.00 | 503 | 102 |
| 8 | christine | female | 2018-02-05 | sale | salecc | 2200.00 | 503 | 102 |
| 9 | zhuzhu | male | 2018-02-05 | sale | NULL | 2200.00 | 503 | 102 |
| 10 | gougou | male | 2018-02-05 | sale | | 2200.00 | 503 | 102 |
+----+-----------+--------+------------+------------+-----------------+----------+--------+--------+
3)避免去重distinct,通常仅用于某一个字段
语法
select distinct 字段 from 表名;
查询雇员表中的部门,把部门字段去重
mysql> select distinct post from employee5;
+------------+
| post |
+------------+
| instructor |
| hr |
| sale |
+------------+
3 rows in set (0.00 sec)
mysql> select post from employee5;
+------------+
| post |
+------------+
| instructor |
| instructor |
| instructor |
| instructor |
| hr |
| hr |
| sale |
| sale |
| sale |
| sale |
+------------+
10 rows in set (0.00 sec)
4)通过四则运算查询,
语法:
select 字段1,字段2,字段数字 from 表名;
select 字段1,字段2,字段2数字 as 新字段名字 from 表名
select 字段1,字段2,字段2*数字 新字段名字 from 表名
根据月薪水查14年薪
mysql> select name,salary,salary*14 from employee5; \\创建一个新的年薪14薪字段(salary*14)
mysql> select name,salary,salary*14 as annual_salary from employee5; \\给salary*14这个设置一个别名
mysql> select name,salary,salary*14 annual_salary from employee5; \\salary*14 设定别名(annual_salary)
mysql> select name,salary,salary*14 from employee5;
+-----------+----------+-----------+
| name | salary | salary*14 |
+-----------+----------+-----------+
| jack | 5000.00 | 70000.00 |
| tom | 5500.00 | 77000.00 |
| robin | 8000.00 | 112000.00 |
| alice | 7200.00 | 100800.00 |
| tianyun | 600.00 | 8400.00 |
| harry | 6000.00 | 84000.00 |
| emma | 20000.00 | 280000.00 |
| christine | 2200.00 | 30800.00 |
| zhuzhu | 2200.00 | 30800.00 |
| gougou | 2200.00 | 30800.00 |
+-----------+----------+-----------+
10 rows in set (0.00 sec)
mysql> select name,salary,salary*14 as annual_salary from employee5;
+-----------+----------+---------------+
| name | salary | annual_salary |
+-----------+----------+---------------+
| jack | 5000.00 | 70000.00 |
| tom | 5500.00 | 77000.00 |
| robin | 8000.00 | 112000.00 |
| alice | 7200.00 | 100800.00 |
| tianyun | 600.00 | 8400.00 |
| harry | 6000.00 | 84000.00 |
| emma | 20000.00 | 280000.00 |
| christine | 2200.00 | 30800.00 |
| zhuzhu | 2200.00 | 30800.00 |
| gougou | 2200.00 | 30800.00 |
+-----------+----------+---------------+
10 rows in set (0.00 sec)
mysql> select name,salary,salary*14 annual_salary from employee5;
+-----------+----------+---------------+
| name | salary | annual_salary |
+-----------+----------+---------------+
| jack | 5000.00 | 70000.00 |
| tom | 5500.00 | 77000.00 |
| robin | 8000.00 | 112000.00 |
| alice | 7200.00 | 100800.00 |
| tianyun | 600.00 | 8400.00 |
| harry | 6000.00 | 84000.00 |
| emma | 20000.00 | 280000.00 |
| christine | 2200.00 | 30800.00 |
| zhuzhu | 2200.00 | 30800.00 |
| gougou | 2200.00 | 30800.00 |
+-----------+----------+---------------+
10 rows in set (0.00 sec)
5)定义显示格式:contcat()函数用于连接字符串
mysql> select concat(name,‘annual salary:‘,salary*14) as annual_salary from employee5;
+---------------------------------+
| annual_salary |
+---------------------------------+
| jackannual salary:70000.00 |
| tomannual salary:77000.00 |
| robinannual salary:112000.00 |
| aliceannual salary:100800.00 |
| tianyunannual salary:8400.00 |
| harryannual salary:84000.00 |
| emmaannual salary:280000.00 |
| christineannual salary:30800.00 |
| zhuzhuannual salary:30800.00 |
| gougouannual salary:30800.00 |
+---------------------------------+
(2)单条件查询
语法:
select 字段1,字段2 from 表名 where 条件;
1)单条件查询
mysql> select name,salary from employee5 where name=‘jack‘;
+------+---------+
| name | salary |
+------+---------+
| jack | 5000.00 |
+------+---------+
2)多条件查询:查询工资大于5000和小于20000的姓名
语法:
select select 字段1,字段2 from 表名 where 条件1 and 条件2;
select select 字段1,字段2 from 表名 where 条件1 or 条件2;
mysql> select name,salary from employee5 where salary > 5000 and salary <20000;
+-------+---------+
| name | salary |
+-------+---------+
| tom | 5500.00 |
| robin | 8000.00 |
| alice | 7200.00 |
| harry | 6000.00 |
+-------+---------+
3)关键字between and
查询工资大于等于5000和小于等于20000的姓名
mysql> select name,salary from employee5 where salary between 5000 and 20000;
mysql> select name,salary from employee5 where salary not between 5000 and 20000;
4)关键字 is null
查询字段是空的值
mysql> select name,job_description from employee5 where job_description is null;
5)关键字in 集合查询
查询工资是5000和6000的都是哪些人,和不是哪些人
mysql> select name,salary from employee5 where salary=5000 or salary=6000;
mysql> select name,salary from employee5 where salary in(5000,6000);
mysql> select name,salary from employee5 where salary not in(5000,6000);
6)模糊查询,关键字:like
通配符:%,匹配任意长度字符
mysql> select * from employee5 where name like ‘al%‘;
通配符:_ 匹配任意单个字符
mysql> select * from employee5 where name like ‘al_‘;
(3)查询排序
1)单列排序
按照薪水排序
mysql> select * from employee5 order by salary; //升序
按照薪水降序
mysql> select * from employee5 order by salary desc; //降序
2)按多列排序
先按入职时间排序,再按薪水排序
mysql> select * from employee5 order by hire_date ,salary asc;
(4)限制查询的记录数
mysql> select * from employee5 order by salary limit 5; \\取前5条数据,默认初始位置是0
mysql> select * from employee5 order by salary limit 4,5; \\从第3条数据开始,取5条数据
(5)使用集合函数查询
count(*) 统计行数据
max(字段) 取字段最大值
min(字段) :取字段最小值
avg(字段) :平均
sum(字段) :取字段和
mysql> select count(*) from employee5;
mysql> select count(*) from employee5 where post=‘hr‘;
查询薪水最高的人所有信息
mysql> select * from employee5 where salary = (select max(salary) from employee5); //子查询
(6)分组查询
1)group by和group_concat()函数一起使用
根据部门id进行分组,把相同部门的人统计出来(拼接)
mysql> select dep_id,group_concat(name) from employee5 group by dep_id;
根据部门进行分组,把部门的每个人姓名打印出来(拼接)
mysql> select post,group_concat(name) from employee5 group by post;
2)group by和集合函数一起使用
根据部门进行分组,取每个部门薪水最大的
mysql> select post,max(salary) from employee5 group by post;
(7)使用正则进行匹配
mysql> select name,salary from employee5 where name regexp ‘m{2}‘;
mysql> select name,salary from employee5 where name regexp ‘yun$‘;
mysql> select name,salary from employee5 where name regexp ‘^m‘;
以上是关于MySQL数据操作DQL:单表查询的主要内容,如果未能解决你的问题,请参考以下文章