MySQL 数据库快速入门 (四) 单表查询 order by、limit、group by select 查询入门 mysql版本8.0.21

select 查询从最简单的查询语句开始,我们先创建一个数据库,名字随意起,然后再创建一张表,表字段和内容都将使用牛客网的数据。创建一张名为salaries的工资表,复制以下代码,并在数据库中回车创建。CREATE TABLE `salaries` (`emp_no` int(11) NOT NULL,`salary` int(11) NOT NULL,`from_date` date NOT NULL,`to_date` date NOT NULL,PRIMARY KEY (`emp_no`
摘要由CSDN通过智能技术生成

数据准备


从最简单的查询语句开始,我们先创建一个数据库,名字随意起,然后再创建一张表,表字段和内容都将使用牛客网的数据。创建一张名为salaries的工资表,复制以下代码,并在mysql中回车创建。

CREATE TABLE `salaries` (
`emp_no` int(11) NOT NULL,
`salary` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`from_date`));

然后插入数据

INSERT INTO salaries VALUES(10001,60117,'1986-06-26','1987-06-26');
INSERT INTO salaries VALUES(10001,62102,'1987-06-26','1988-06-25');
INSERT INTO salaries VALUES(10001,66074,'1988-06-25','1989-06-25');
INSERT INTO salaries VALUES(10001,66596,'1989-06-25','1990-06-25');
INSERT INTO salaries VALUES(10001,66961,'1990-06-25','1991-06-25');
INSERT INTO salaries VALUES(10001,71046,'1991-06-25','1992-06-24');
INSERT INTO salaries VALUES(10001,74333,'1992-06-24','1993-06-24');
INSERT INTO salaries VALUES(10001,75286,'1993-06-24','1994-06-24');
INSERT INTO salaries VALUES(10001,75994,'1994-06-24','1995-06-24');
INSERT INTO salaries VALUES(10001,76884,'1995-06-24','1996-06-23');
INSERT INTO salaries VALUES(10001,80013,'1996-06-23','1997-06-23');
INSERT INTO salaries VALUES(10001,81025,'1997-06-23','1998-06-23');
INSERT INTO salaries VALUES(10001,81097,'1998-06-23','1999-06-23');
INSERT INTO salaries VALUES(10001,84917,'1999-06-23','2000-06-22');
INSERT INTO salaries VALUES(10001,85112,'2000-06-22','2001-06-22');

简易查询


查看salaries表里面的所有内容,使用最简单的select方法

select * from salaries

语句格式:select 字段 from 表名
表示从表中查询某某字段,*表示的是所有,即从salaries表中查询所有内容,为了到达一样的功能,也可以这样写

select salaries.* from salaries

上述的两种查询结果都是一致的,如下图所示

在这里插入图片描述
但是在正常工作中,我们一般不会打印出所有内容来,因为工作过程中的表数据往往是百万个数量级甚至更高,而且全部显示出来,也会导致服务器性能上的问题,所以我们通常是按字段查询,比如下面这题

题目:获取当前salaries表的成员编号emp_no,以及对应的工资salary

# 写法1
SELECT emp_no,salary FROM salaries

在select后面跟上对应的字段名就可以了

显示结果如下图:
在这里插入图片描述

也可以写成

# 写法2
SELECT salaries.emp_no,salaries.salary FROM salaries

表示的是从salaries中查看对应的emp_no和salary,但是这样写比较长,有点麻烦,还可以写成这样

# 写法3
SELECT s.emp_no,s.salary FROM salaries s

salaries后面空格跟个s表示:将salaries名改为s,即salaries as s的缩写

推荐使用写法3,因为通常的查询都会涉及多张表,而每张表中或多或少会有同样的字段名,表多起来非常难以区分是哪个表中的字段,所以建议使用写法3

题目:获取当前salaries表的成员编号为10001的emp_no,以及对应的工资salary

复制刚才的代码,加上一个条件,就可以筛选了

条件的筛选,我们使用where

SELECT s.emp_no,s.salary FROM salaries s 
WHERE s.emp_no = 10001

结果如下图:

在这里插入图片描述

order by排序查询


题目:获取当前salaries表的成员编号为10001的emp_no,以及对应的工资salary,并按照salary升序排序

排序的时候使用order by,写在条件的后面

SELECT s.emp_no,s.salary FROM salaries s 
WHERE s.emp_no = 10001
ORDER BY salary ASC

排序的写法 ORDER BY 字段名 ASC ,ASC表示升序排序,默认不写是升序排序,降序改为DESC即可
输出结果如下:
在这里插入图片描述

group by分组查询


题目:获取当前salaries表的emp_no,以及对应的工资salary,并按照emp_no进行分组

分组使用group by

SELECT emp_no,group_concat(salary) salary FROM salaries
GROUP BY emp_no 

按照emp_no分组以后,第二字段的salary可能会出现一个或多个,不使用group_concat的话,写了除分组的字段以外的字段会报错。所以需要用上group_concat()函数,往里面写对应的字段名即可,函数的中文意思是:将组里面多个字符串合并成一个。

输出结果如下图所示:

在这里插入图片描述

limit筛选查询


题目:请获取当前(to_date=‘9999-01-01’)薪水第二多的员工的emp_no以及对应的薪水salary
题目分析:
做之前先留意,题目这里有个默认条件to_date=‘9999-01-01’,to_date指的就是近期时间,'9999-01-01’表示无穷的年限,意思就是指to_date为’9999-01-01’的员工,现在还在这家公司工作,符合题意,作为我们做该题的条件依据。
而第几条或者第几名,有特定要求指向的排名的数据,我们可以先给所有数据排序,然后再使用limit取第几条

SELECT emp_no,salary FROM salaries
WHERE to_date = '9999-01-01'
ORDER BY salary desc
LIMIT 1,1	#第一个1表示从第二条开始,第二个1为取一行数据

输出结果如下图所示:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值