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;



