您的位置首页生活百科

MySQL基础,查询语句详解

MySQL基础,查询语句详解

的有关信息介绍如下:

MySQL基础,查询语句详解

数据查询是Mysql数据库管理最重要的一个功能,不是简单的查询数据库中存储的数据

就完事了,还需根据需要对数据进行筛选,以及确定数据以什么样的格式显示。本文主

要介绍MySql数据库的单表查询语句。

SELECT { <字段1,字段2...> | * }

FROM {'<表1>','<表2>'}

[

[WHERE <查询条件表达式]

[GROUP BY <分组> [HAVING <查询表达式>]]

[ORDER BY <字段列表 [ASC(默认升序)|DESC(倒序)]>]

[LIMIT [<从第几行开始>],<查询数据行数>]

]

新建数据库表

DROP TABLE IF EXISTS `study_1`;

CREATE TABLE `study_1` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(20) DEFAULT NULL,

`age` int(11) DEFAULT NULL,

`sex` varchar(5) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;

数据库表中插入测试数据

INSERT INTO study_1 VALUES ('1', '张三', '20', '男');

INSERT INTO study_1 VALUES ('2', '李四', '21', '女');

INSERT INTO study_1 VALUES ('3', '王五', '22', '男');

INSERT INTO study_1 VALUES ('4', '赵六', '23', '女');

INSERT INTO study_1 VALUES ('5', '吴七', '24', '女');

INSERT INTO study_1 VALUES ('6', '钱八', '25', '男');

INSERT INTO study_1 VALUES ('7', '孙九', '26', '男');

查询表中所有字段的数据(示例结果如图按顺序)

以通配符 * 查询

示例

SELECT * FROM study_1;

以表中所有字段查询

示例

SELECT id,name,age,sex FROM study_1;

查询单个或多个字段(示例结果如图按顺序)

查询单个字段

示例

SELECT name FROM study_1;

查询多个字段

示例

SELECT name,age FROM study_1;

使用WHERE条件查询指定记录(示例结果如图按顺序)

示例1

SELECT * FROM study_1 WHERE age>22;

示例2

SELECT name,sex FROM study_1 WHERE sex='男';

带IN关键字的查询(示例结果如图按顺序)

查询字段值在指定范围内的数据

示例

SELECT * FROM study_1 WHERE age IN (20,21,22);

查询字段值不在指定范围内的数据

SELECT * FROM study_1 WHERE age NOT IN (20,22,24);

使用BETWEEN AND查询摸个范围内的值(示例结果如图按顺序)

示例

SELECT * FROM study_1 WHERE age BETWEEN 20 AND 25;

使用LIKE进行字符串匹配查询(示例结果如图按顺序)

通配符 % 匹配

示例一,向后匹配

SELECT * FROM study_1 WHERE name LIKE '张%';

示例二,向前匹配

SELECT * FROM study_1 WHERE name LIKE '%四';

示例三,前后匹配

SELECT * FROM study_1 WHERE name LIKE '%五%';

下划线匹配

SELECT * FROM study_1 WHERE name LIKE '张_';

查询空数据(示例结果如图按顺序)

往表中再插入一条sex值为控制的数据

INSERT INTO `study_1` VALUES ('8', '周十', '27', null);

示例

SELECT * FROM study_1 WHERE sex IS NULL;

示例2

SELECT * FROM study_1 WHERE sex IS NOT NULL;

AND多条件与查询,OR多条件或查询(示例结果如图按顺序)

注意1:AND优先级大于OR

注意2:IN查询能实现OR查询的效果,而且执行熟度更快

AND查询

示例

SELECT * FROM study_1 WHERE age > 22 AND sex IS NOT NULL;

OR查询

示例

SELECT * FROM study_1 WHERE age < 23 OR age > 26;

使用DISTINCT查询不重复的数据(示例结果如图按顺序)

插入一条与id=1数据内容一致的数据

INSERT INTO `study_1` VALUES ('9', '张三', '20', '男');

普通查询能查询到两条相同的数据

示例

SELECT name FROM study_1 WHERE name='张三';

使用DISTINCT剔除相同的数据

示例

SELECT DISTINCT name FROM study_1 WHERE name='张三';

对查询出来的数据按列值进行排序(示例结果如图按顺序)

不指明顺序默认按升序排序

SELECT * FROM study_1 WHERE age > 21 ORDER BY id;

按升序排序

SELECT * FROM study_1 WHERE age > 21 ORDER BY id ASC;

按倒序排序

SELECT * FROM study_1 WHERE age > 21 ORDER BY id DESC;

使用 [GROUP BY <字段>] [HAVING <查询表达式>] 进行分组查询(示例结果如图按顺序)

新增分组字段

ALTER TABLE study_1 ADD study_group int(11);

为原有的数据分组

UPDATE study_1 set study_group=1 where id<3;

UPDATE study_1 set study_group=2 where id>=3 AND id<7;

UPDATE study_1 set study_group=3 where id>=7;

示例1.把各分组的姓名按分组查询并组合起来。

SELECT GROUP_CONCAT(name) AS names,study_group FROM study_1 GROUP BY study_group;

示例2.把各分组的姓名按分组查询并组合起来,并使用HAVING限制查询分组人数在2人以上的数据。

SELECT GROUP_CONCAT(name) AS names,study_group,sex FROM study_1 GROUP BY study_group HAVING COUNT(name)>2;

示例3.把各分组的姓名按分组查询并组合起来,WITH ROLLUP在最后一条显示所有记录。

SELECT GROUP_CONCAT(name) AS names,study_group FROM study_1 GROUP BY study_group WITH ROLLUP;

示例4.多字段分组

SELECT GROUP_CONCAT(name) AS names,study_group,sex FROM study_1 GROUP BY study_group,sex;

使用 [LIMIT [<从第几行开始>],<查询数据行数>] 查询指定条数的数据

示例1.不指定开始位置默认从第一条开始(位置偏移量是0)

SELECT * FROM study_1 LIMIT 3;

示例2.指定开始位置

SELECT * FROM study_1 LIMIT 1,3;