您当前的位置:首页 > 电脑百科 > 数据库 > MYSQL

MySQL必须要掌握的常用查询语句

时间:2021-03-10 10:39:20  来源:今日头条  作者:陶伟学代码

最近我在学习MySQL,以前对它也略有了解,但是并不太会运用,这段时间把MySQL的相关语句系统地学习了一下,下面是学习的相关总结,分享给大家。

MySQL必须要掌握的常用查询语句

MySQL

MySQL常用的查询操作

一、MySQL查询语法

MySQL数据库使用SELECT语句来查询数据。

1.1 语法

SELECT column_name,column_name
FROM table_name [WHERE Clause][LIMIT N][ OFFSET M]

  • MySQL查询可以使用一个或者多个表,表与表之间需要用逗号(,)分割开,并且需要使用WHERE语句设置查询条件;
  • SELECT可以读取一条或多条记录;
  • 星号(*)表示SELECT语句会返回数据表的所有字段;
  • WHERE语句是用来设置查询条件的;
  • LIMIT用于限制返回的数据条数。
  • OFFSET用于指定SELECT语句开始查询数据时的偏移量,默认值为0。

1.2 常用的操作

  • 查看当前的数据库
SELECT database();
  • 结果

 

MySQL必须要掌握的常用查询语句

查看当前数据库

  • 查询当前数据库版本
SELECT version();
  • 结果
MySQL必须要掌握的常用查询语句

查看当前数据库版本

  • 查看当前时间
SELECT now();
  • 结果
MySQL必须要掌握的常用查询语句

查看当前时间

二、常用的查询语句及示例

新建一张员工(staffs)表,并插入一下数据,建表语句如下:

CREATE TABLE `users` (
  `uid` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '姓名',
  `age` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '年龄',
  `gender` enum('male','female') COLLATE utf8mb4_unicode_ci NOT NULL,
  `salary` int(10) unsigned NOT NULL DEFAULT '2000',
  `email` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '邮箱',
  `birthday` date NOT NULL COMMENT '生日',
  `create_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建日期',
  `update_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改日期',
  `test` int(10) unsigned NOT NULL DEFAULT '1',
  PRIMARY KEY (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
MySQL必须要掌握的常用查询语句

表结构

 

数据表建完之后插入一些数据:

MySQL必须要掌握的常用查询语句

插入一些数据

2.1 条件查询

  • 示例:查询工资大于11000的员工。
SELECT uid id, name, salary FROM staffs WHERE salary > 11000;
  • 示例:查询工资在6500~8000之间的员工。
SELECT uid, name, salary FROM staffs WHERE salary > 6500 AND salary < 8000;

注意: 以上方法查询的数据不包含6500和8000这两个值,也就是说不包含边界,如果要想使查询的结果包含边界值,应该使用BETWEEN...AND。

SELECT uid, name, salary FROM staffs WHERE BETWEEN 6500 AND 8000;

2.2 分组查询

  • 1.示例:分别统计男女员工的数量
SELECT gender, COUNT(1) FROM staffs GROUP BY gender;
  • 结果
MySQL必须要掌握的常用查询语句

分组查询

但是gender和COUNT(1)看起来不直观,我们可以改个名字,sql语句需要这样写:

SELECT gender AS 性别, COUNT(1) AS 数量 FROM staffs GROUP BY gender;

以上sql语句还有一个简写的方法,省略AS:

SELECT gender 性别, COUNT(1) 数量 FROM staffs GROUP BY gender;
  • 以上两种写法,输出的结果相同
MySQL必须要掌握的常用查询语句

分组查询


聚合函数:max()、min()、avg()、count()

  • 2.示例:分组统计男女员工的平均年龄
SELECT gender, AVG(age) avg_age FROM staffs GROUP BY gender;
  • 结果
MySQL必须要掌握的常用查询语句

分组统计男女员工的平均年龄

上面计算的avg_age值还可以使用ROUND()函数保留两位小数,ROUND(AVG(age))。

  • 3.示例:统计年龄大于20的男性员工
SELECT gender, COUNT(1) num FROM staffs GROUP BY gender HAVING gender = 'male';
  • 结果
MySQL必须要掌握的常用查询语句

统计年龄大于20的男性员工

分组条件,只能使用HAVING,不能使用WHERE ,因为WHERE只能从现存的字段中作为条件。

2.3 排序

  • 1.示例:按照员工工资升序排列。
SELECT uid, name, salary FROM staffs ORDER BY salary ASC;
MySQL必须要掌握的常用查询语句

按照员工工资升序排列

  • 2.示例:按照员工工资降序排列
SELECT uid, name, salary FROM staffs ORDER BY salary DESC;
MySQL必须要掌握的常用查询语句

按照员工工资降序排列

  • 3.示例:多字段排序,按照年龄降序排序,工资升序排序
SELECT * FROM staffs ORDER BY age DESC, salary ASC;
  • 结果
MySQL必须要掌握的常用查询语句

按照年龄降序排序,工资升序排序

2.4 分页查询

当我们查询出来的数据量太大的时候,一页展示得又太多,一般情况下都会将其分成N页,那么这时候就需要用到分页查询。

  • 示例:将数据分成每页5条,查询第3页的数据
SELECT * FROM staffs LIMIT 5 OFFSET 10;

上述sql语句可以简写:

SELECT * FROM staffs LIMIT 5, 10;
  • 结果
MySQL必须要掌握的常用查询语句

分页查询

至于每一页的其实偏移量应该怎么计算,这里其实有一个公式,假设每页的数据条数为num,当前查询的页码为page,那么,该公式可总结为:

offset = (page - 1) * num

关于分页查询的总结:

1. LIMIT 显示数量 OFFSET 偏移量(跳过的记录数量);
2. LIMIT 偏移量, 显示数量(这是简写);
3. LIMIT 子句一定要放在SELECT的最后面。

2.5 子查询

查询工资最高的员工信息,通常的做法是:

SELECT * FROM staffs ORDER BY salary DESC LIMIT 1;
  • 结果
MySQL必须要掌握的常用查询语句

查询工资最高的员工信息

这样肯定是可以查询出来工资最高的员工信息的,但是还可以利用子查询来查询。

SELECT * FROM staffs WHERE salary = (SELECT MAX(salary) FROM staffs);
  • 结果
MySQL必须要掌握的常用查询语句

利用子查询来查询

2.6 集合查询

  • 示例: 查询uid为1、3、5的用户信息
SELECT uid, name FROM staffs WHERE uid IN(1, 3, 5);
  • 结果
MySQL必须要掌握的常用查询语句

查询uid为1、3、5的用户信息

2.7 模糊查询

  • 示例:匹配用户姓名中包含a的员工
SELECT uid, name FROM staffs WHERE name LIKE 'a%';
  • 结果
MySQL必须要掌握的常用查询语句

匹配用户姓名中包含a的员工

  • 示例:匹配用户姓名第二个字母为i的员工
SELECT uid, name FROM staffs WHERE name LIKE '_i%';
  • 结果
MySQL必须要掌握的常用查询语句

匹配用户姓名第二个字母为i的员工

2.8 关联查询

关联查询也叫多表查询,下面再创建两张表作为示例数据。

2.8.1 创建一张文章表(article)并插入一些数据

-- 建表语句
CREATE TABLE articles (
  aid INT UNSIGNED NOT NULL AUTO_INCREMENT,
  title VARCHAR(100) NOT NULL COMMENT '文章标题',
  cid INT UNSIGNED NOT NULL COMMENT '栏目ID'
  PRIMARY KEY (aid)
) ENGINE = InnoDB COLLATE = utf8mb4_unicode_ci;

-- 插入数据
INSERT INTO articles (title, cid) VALUES
('探索废除生育限制,为何是东北?', 1),
('8210亿元!春节零售餐饮消费迎开门红', 1),
('为防控疫情,美加墨陆地边界通行限制再延一月', 2),
('得州宣布重大灾害700万人遇新危机', 2);
  • 表结构和数据
MySQL必须要掌握的常用查询语句

articles表结构


MySQL必须要掌握的常用查询语句

articles表数据

2.8.2 创建一张栏目表(categories)并插入一些数据

-- 建表语句
CREATE TABLE categories (
  cid INT UNSIGNED NOT NULL AUTO_INCREMENT,
  name VARCHAR(100) NOT NULL COMMENT '栏目名称',
  PRIMARY KEY (cid)
) ENGINE = INNODB COLLATE = utf8mb4_unicode_ci;

-- 插入数据
INSERT INTO categories (name) VALUES ('国内新闻'),('国际新闻'),('娱乐新闻'),('军事新闻');
  • 表结构和数据
MySQL必须要掌握的常用查询语句

categories表结构


MySQL必须要掌握的常用查询语句

categories表数据

2.8.4 内连接

现在我想让articles表中的cid字段显示新闻栏目的中文名称,如下图示例这样:

MySQL必须要掌握的常用查询语句

 

首先,不用内连接的方式,sql语句应该这样写:

SELECT a.aid, a.title, c.name FROM articles a, categories c WHERE a.cid = c.cid;

由于两张表的字段aid, title, name都不一样因此可以不用在字段前面加上表名限制,所以上面的语句还可以这样简写:

SELECT aid, title, name FROM articles a, categories c WHERE a.cid = c.cid; 
MySQL必须要掌握的常用查询语句

 

如果只看国内新闻:

SELECT aid, title, name FROM articles a, categories c WHERE a.cid = c.cid AND a.cid = 1;
MySQL必须要掌握的常用查询语句

 

上述写法有点繁琐,可以使用内连接改进(INNER JOIN + ON):

SELECT aid, title, name FROM articles a INNER JOIN categories c ON a.cid = c.cid;

-- 默认就是内连接,因此INNER可省略
SELECT aid, title, name FROM articles a JOIN categories c ON a.cid = c.cid;

如果我还是想只获取国内新闻,那么应该这样写:

SELECT aid, title, name FROM articles a JOIN categories c ON a.cid = c.cid WHERE a.cid = 1;

如果多表关联字段同名,可以使用关键字USING简化:

-- 关联的两张表cid字段一样
SELECT aid, title, name FROM articles a JOIN categories c USING(cid);

2.8.5 外连接

首先再往articles表中插入一些演示数据:

INSERT INTO articles(title, cid) VALUES
('体育教育成两会热点话题:学生只有分数赢不了未来', 7),
('玩家众筹25000美元做《Dota2》新教程:旧版本过时', 8);
MySQL必须要掌握的常用查询语句

插入一些演示数据

  • 左外连接
SELECT * FROM articles a LEFT JOIN categories c ON a.cid = c.cid;
MySQL必须要掌握的常用查询语句

左外连接

  • 右外连接
SELECT * FROM articles a RIGHT JOIN categories c ON a.cid = c.cid;
MySQL必须要掌握的常用查询语句

右外连接


 

  • 左、右外连接转内连接

原理:通过添加过滤器,过滤掉从表中的某一个为NULL的字段即可。

左外连接转内连接

SELECT * FROM articles a LEFT JOIN categories c ON a.cid = c.cid WHERE c.cid IS NOT NULL;

右外连接转内连接

SELECT * FROM articles a RIGHT JOIN categories c ON a.cid = c.cid WHERE a.cid IS NOT NULL;

以上两种连接转换结果都是一样的:

MySQL必须要掌握的常用查询语句

 

 


2.8.6 自然连接

自然连接是内连接的一种特例,前提是关联的表中存在同名字段,可以连USING()都省略了,如果不需要使用表别名,在写sql语句的时候,表的别名也可以省略。

SELECT aid, title, name FROM articles NATURAL JOIN categories;
MySQL必须要掌握的常用查询语句

自然连接

三、视图

3.1 创建视图

-- 创建视图
CREATE VIEW v_staffs AS SELECT * FROM staffs;

3.2 更新视图

更新视图,会同步更新基本表数据。

UPDATE v_staffs SET salary = salary + 1000 WHERE uid = 1;

3.3 删除视图

DROP VIEW v_staffs;

四、索引

  • 索引应该创建在经常被查询的字段或者经常出现在结果集的字段上。
  • 索引分类:普通索引、主键索引、唯一索引、全文索引。

4.1 创建索引

4.1.1 创建一个普通索引

-- 创建索引
CREATE INDEX 索引名称 ON 表名(字段名);

-- 示例
CREATE INDEX i_email ON staffs(email);
MySQL必须要掌握的常用查询语句

创建索引

4.1.2 创建唯一索引

CREATE UNIQUE INDEX i_unique_email ON staffs(email);
MySQL必须要掌握的常用查询语句

创建唯一索引

4.1.3 创建主键索引

-- 创建主键索引
ALTER TABLE 表名 ADD PRIMARY KEY 索引名称(字段名);

-- 为主键创建一个索引
ALTER TABLE test ADD PRIMARY KEY i_id(id);

4.2 删除索引

-- 删除索引
DROP INDEX 索引名称 ON 表名;

-- 示例
DROP INDEX i_email ON staffs;

4.3 查看索引

-- 查看索引
SHOW INDEX FROM 表名;

-- 示例
SHOW INDEX FROM staffs;

以上就是我这段时间学习总结的MySQL常用的一些查询语句,可能内容比较浅显,简单,没办法,我也是个新手,只能总结成这样了,欢迎各位大佬赐教,感激不尽。



Tags:MySQL 查询语句   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
最近我在学习MySQL,以前对它也略有了解,但是并不太会运用,这段时间把MySQL的相关语句系统地学习了一下,下面是学习的相关总结,分享给大家。MySQLMySQL常用的查询操作一、MySQL查...【详细内容】
2021-03-10  Tags: MySQL 查询语句  点击:(202)  评论:(0)  加入收藏
▌简易百科推荐
作者:雷文霆 爱可生华东交付服务部 DBA 成员,主要负责Mysql故障处理及相关技术支持。爱好看书,电影。座右铭,每一个不曾起舞的日子,都是对生命的辜负。 本文来源:原创投稿 *爱可生...【详细内容】
2021-12-24  爱可生    Tags:MySQL   点击:(6)  评论:(0)  加入收藏
生成间隙(gap)锁、临键(next-key)锁的前提条件 是在 RR 隔离级别下。有关Mysql记录锁、间隙(gap)锁、临键锁(next-key)锁的一些理论知识之前有写过,详细内容可以看这篇文章...【详细内容】
2021-12-14  python数据分析    Tags:MySQL记录锁   点击:(17)  评论:(0)  加入收藏
binlog 基本认识 MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二...【详细内容】
2021-12-14  linux上的码农    Tags:mysql   点击:(13)  评论:(0)  加入收藏
为查询优化你的查询 大多数的MySQL服务器都开启了查询缓存。这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的。当有很多相同的查询被执行了多次的时候,这些查...【详细内容】
2021-12-09  元宇宙iwemeta    Tags:mysql   点击:(15)  评论:(0)  加入收藏
测试的目的和原因,公司有很多程序员,每个程序员对数据库和表结构都有自己的理解。而且每个程序员的理解往往是以效率考虑。既然都是为了效率考虑,那么我就来测试一下究竟哪种使...【详细内容】
2021-12-08  吴彬的分享    Tags:Mysql数据库   点击:(14)  评论:(0)  加入收藏
当你们考虑项目并发的时候,我在部署环境,当你们在纠结使用ArrayList还是LinkedArrayList的时候,我还是在部署环境。所以啊,技术不止境,我在部环境。今天这篇文章缕一下在同一台服...【详细内容】
2021-12-08  秃头码哥    Tags:MySQL数据库   点击:(16)  评论:(0)  加入收藏
对于数据分析来说,MySQL使用最多的是查询,比如对数据进行排序、分组、去重、汇总及字符串匹配等,如果查询的数据涉及多个表,还需要要对表进行连接,本文就来说说MySQL中常用的查询...【详细内容】
2021-12-06  笨鸟学数据分析    Tags:MySQL   点击:(19)  评论:(0)  加入收藏
在学习SQL语句之前,首先需要区分几个概念,我们常说的数据库是指数据库软件,例如MySQL、Oracle、SQL Server等,而本文提到的数据库是指数据库软件中的一个个用于存储数据的容器。...【详细内容】
2021-11-24  笨鸟学数据分析    Tags:SQL语句   点击:(23)  评论:(0)  加入收藏
概述以前参加过一个库存系统,由于其业务复杂性,搞了很多个应用来支撑。这样的话一份库存数据就有可能同时有多个应用来修改库存数据。比如说,有定时任务域xx.cron,和SystemA域...【详细内容】
2021-11-05  Java云海    Tags:分布式锁   点击:(31)  评论:(0)  加入收藏
MySQL的进阶查询 一、 按关键字排序 使用ORDERBY语句来实现排序排序可针对一个或多个字段ASC:升序,默认排序方式 【升序是从小到大】DESC:降序 【降序是从大到小】ORDER BY的...【详细内容】
2021-11-05  Java热点    Tags:SQL语句   点击:(27)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条