当前位置:网站首页>MySQL数据查询 - 简单查询
MySQL数据查询 - 简单查询
2022-07-29 20:17:00 【骆驼胡杨】
简单查询
在MySQL中可以通过SQL语句来实现基本数据查询,SQL语句可以通过如下多种使用:查询所有字段数据、查询指定字段数据、避免重复数据查询、对结果进行排序和分组等查询。
数据库中可能包含数量庞大的表,表中可能包含无数的记录,如果没有两把刷子要获得所需的数据并非易事。在MySQL中,可以使用SELECT语句来查询数据,根据查询条件的不同,数据库系统会找到不同的数据,通过SELECT语句可以很方便地获取所需的信息。
在MySQL中,SELECT语句的基本语法形式如下:
SELECT field1 field2 … fieldn FROM tablename [WHERE CONDITION1] [GROUP BY fieldm [HAVING CONDITION2]] //分组 [ORDER BY fieldn [ASC|DESC]]; //排序filed1~fieldn参数表示需要查询的字段名;
tablename参数表示表的名称;
CONDITION1参数表示查询条件;
fieldm参数表示按该字段中的数据进行分组;
CONDITION2参数表示满足该表达式的数据才能输出;
fieldn参数指按该字段中数据进行排序。排序方式由ASC和DESC两个参数指出;
ASC参数表示按升序的顺序进行排序,是默认参数;
DESC参数表示按降序的顺序进行排序。
查询所有字段数据
查询所有字段是指查询表中所有字段的数据,这种方式可以将表中所有字段的数据都查询出来。MySQL有两种方式可以查询表中的所有字段。
列出表的所有字段
通过SQL语句SELECT列出表的所有字段,具体语法形式如下:SELECT field1,field2,…,fieldn FROM tablename; 其中: filed1~fieldn参数表示需要查询的字段名; tablename参数表示表的名称。“*”符号表示所有字段
查询所有字段数据,除了使用上面的方式外,还可以通过符号“*”来实现,具体语法形式如下:SELECT * FROM tablename; 其中: 符号“*”表示所有字段名; tablename参数表示表的名称。 与上一种方式相比,“*”符号方式的优势比较明显, 即可用该符号代替表中的所有字段,但是这种方式不够灵活, 只能按照表中字段的固定顺序显示,不能随便改变字段的顺序。查询指定字段数据
查询指定字段数据,只需修改关键字SELECT后的字段列表为指定字段即可。SELECT field1,field2,…,fieldn FROM tablename; 例如,从班级表中查询班主任字段,SQL语句如下所示。 SELECT teacher FROM class;如果关键字SELECT后面的字段不包含在所查询的表中,那么MySQL会报错。
DISTINCT 去重查询
当在MySQL中执行简单数据查询时,有时会显示出重复数据。为了实现查询不重复数据,MySQL提供了DISTINCT功能,SQL语法如下:SELECT DISTINCT field1,field2,…,fieldn FROM tablename;在上述语句中,关键字DISTINCT去除重复的数据。下面将通过一个具体的示例来说明如何实现查询不重复数据。
执行SQL语句SELECT,在数据库school中查询班级表 class 中teacher字段的数据。具体步骤如下:mysql> create table class(name varchar(64)); #创建表class mysql> insert into class values('张三'),('李四'),('张三'),('张三'); #插入多条记录 mysql> select name from class ; #查询class表中的name 域,包含重复记录 mysql> select distinct name from class ; #查询class表中的name 域,去重IN查询
有的时候,当我们需要查询的目标记录限定在某个集合中的时候,在MySQL中可以使用关键字IN来实现,关键字IN可以实现判断字段的数值是否在指定集合中,该关键字的具体语句形式如下:SELECT field1,field2,…,fieldn FROM tablename WHERE filedm IN(value1,value2,value3,…,valuen);使用NOT IN可以反向查询非集合中的数据
SELECT field1,field2,…,fieldn FROM tablename WHERE filedm NOT IN(value1,value2,value3,…,valuen);集合查询的注意: 集合中慎用 NULL
在具体使用关键字IN时,查询的集合中如果存在NULL,则不会影响查询,NULL 存不存在的效果都一样;但如果使用关键字NOT IN,查询的集合中如果存在NULL,则不会查询到任何的结果。BETWEEN AND查询
当我们需要查询指定范围内的数据(如: id 从0 到 100)的时候,MySQL提供了关键字BETWEEN AND,用来实现判断字段的数值是否在指定范围内的条件查询。该关键字的具体语法形式如下:SELECT field1,field2,…,fieldn FROM tablename WHERE fieldm BETWEEN minvalue AND maxvalue在上述语句中,参数fieldn表示名称为tablename的表中的字段名,通过关键字BETWEEN和AND来设置字段field的取值范围,如果字段field的值在所指定的范围内,那么满足查询条件,该记录会被查询出来,否则不会被查询出来。
BETWEEN minvalue AND maxvalue,表示的是一个范围间的判断过程,只针对数字类型。
1.符合范围的数据记录查询
通过关键字BETWEEN和AND设置查询范围,以实现查询语文成绩(字段Chinese)在80和90之间的学生,具体SQL如下:mysql> create table class(id int , name varchar(128), age tinyint unsigned); #创建class表 mysql> insert into class values(1, '张三' 18),(2, '李四' 23),(3, '王五', 25); #插入多条记录 mysql> select * from class where age between 10 and 30; #查询class表中年龄在10 和 30 之间的年龄2.不符合范围的数据记录查询
通过关键字NOT设置反向查询非查询范围的条件,具体SQL语句如下:SELECT name,chinese FROM class WHERE age NOT BETWEEN 10 AND 30; 上面语句等同于: select age from class where age <10 or chinese >30;LIKE模糊查询
当我们只想用字符串中间的一部分特征查找含有特征字串的信息时,MySQL提供了关键字LIKE来实现模糊查询,需要使用通配符 % ,具体语法形式如下:SELECT field1,field2,…,fieldn FROM tablename WHERE fieldm LIKE value%; 在上述语句中,参数tablename表示表名,参数fieldn表示表中的字段名字,%表示通配符 通过关键字LIKE来判断字段field的值是否与value字符串匹配,如果相匹配,则满足查询条件, 该记录就会被查询出来;否则就不会被查询出来。在MySQL中,字符串必须加上单引号(‘’)和双引号(″″)。由于关键字LIKE可以实现模糊查询,因此该关键字后面的字符串参数除了可以使用完整的字符串外,还可以包含通配符。LIKE关键字支持的通配符如表5-1所示。

1.查找某个字段含有 ‘三’ 字的记录:mysql> create table class(id int, name varchar(64)); #创建class表 mysql> insert into class values(1, '张三'),(2, '唐三藏'),(3, '张三丰'), (4, '三脚猫'), (5, '猫三脚'); mysql> select * FROM class WHERE name LIKE '%三%'; //查找class表所有包含'三'的字段 +----+--------+ | id | name | +----+--------+ | 1 | 张三 | | 2 | 唐三藏 | | 3 | 张三丰 | | 4 | 三脚猫 | | 5 | 猫三脚 | +----+--------+ 注意:将会把teacher字段为“张三”、“唐三藏”、“张三丰”、“三脚猫” 等等含“三”的记录全找出来。2.查找teacher字段中既有“三”又有“猫”的记录,请使用and条件
mysql> SELECT * FROM class WHERE name LIKE '%三%' AND name LIKE '%猫%'; +----+--------+ | id | name | +----+--------+ | 4 | 三脚猫 | | 5 | 猫三脚 | +----+--------+3.查询name字段中既有“三”又有“猫”的记录,同时“猫”在“三”之后的记录
mysql> SELECT * FROM class WHERE name LIKE '%三%猫%'; +----+--------+ | id | name | +----+--------+ | 4 | 三脚猫 | +----+--------+ 注意: 虽然能搜索出 “三脚猫”,但不能搜索出符合条件的 “猫三脚”。4.只找出“唐三藏”这样name为三个字且中间一个字是“三”的;
mysql> SELECT * FROM class WHERE name LIKE '_三_'; +----+--------+ | id | name | +----+--------+ | 2 | 唐三藏 | | 3 | 张三丰 | | 5 | 猫三脚 | +----+--------+ 注意:_表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句:(可以代表一个中文字符)5.只找出“三脚猫”这样teacher为三个字且第一个字是“三”的;
mysql> SELECT * FROM class WHERE name LIKE '三__'; +----+--------+ | id | name | +----+--------+ | 4 | 三脚猫 | +----+--------+对查询结果排序
在MySQL中,从表中查询出的数据可能是无序的,或者其排列顺序不是用户所期望的顺序,为了使查询结果的顺序满足用户的要求,可以使用关键字ORDER BY对记录进行排序,其语法形式如下:SELECT field1, field2, field3, …, fieldn FROM tablename ORDER BY fieldm [ASC|DESC]; 在上述语句中, 参数tablename表示所要进行排序的表名, 参数fieldn表示表中的字段名字, 参数fieldm表示按照该字段进行排序; ASC表示按升序进行排序; DESC表示按降序进行排序。默认的情况下按ASC进行排序。 注意:如果存在一条记录字段的值为空值(NULL),那么按升序排序时 ,含空值的记录将最先显示,可以理解为空值是该字段的最小值;按降序排列时,字段为空值的记录将最后显示。(1)执行SQL语句SELECT,查询表class中所有的数据记录,按照语文成绩(字段chinese)升序排序,具体SQL语句如下:
mysql> create table class(id int, name varchar(128), math tinyint, chinese tinyint, english tinyint); mysql> insert into class values(1, '甲', 80, 87, 91),(2,'乙', 72, 64, 89),(3, '丙', 54, 69, 87),(4,'丁', 78, 79, 89); mysql> SELECT id,name,chinese FROM class ORDER BY chinese ASC; #按升序的方式查询学员记录 mysql> SELECT id,name,chinese FROM class where between 2 and 3 ORDER BY chinese ASC; #只查询id列为2-3的简单分组查询
MySQL软件提供了5个统计函数来帮助用户统计数据,可以使用户很方便地对记录进行统计数、计算和、计算平均数、计算最大值和最小值,而不需要查询所有数据。
在具体使用统计函数时,都是针对表中所有记录数或指定特定条件(WHERE子句)的数据记录进行统计计算。在现实应用中,经常会先把所有数据记录进行分组,再对这些分组后的数据记录进行统计计算。
MySQL通过SQL语句GROUP BY来实现,分组数据查询语法如下:SELECT function()[,filed ] FROM tablename WHERE CONDITION GROUP BY field; 在上述语句中,参数field表示某字段名,通过该字段对名称为tablename的表的数据记录进行分组。 注意:在具体进行分组查询时,分组所依据的字段上的值一定要具有重复值,否则分组没有任何意义。五个统计函数简介
1.统计数量
COUNT(*):该种方式可以实现对表中记录进行统计,不管表字段中包含的是NULL值还是非NULL值。
COUNT(field):该种方式可以实现对指定字段的记录进行统计,在具体统计时将忽略NULL值。
2.统计计算平均值
该函数只有一种使用方式。
AVG(field)使用方式:该种方式可以实现对指定字段的平均值进行计算,在具体统计时将忽略NULL值。
3. 统计计算求和
该函数只有一种使用方式。
SUM(field)使用方式:该种方式可以实现计算指定字段值之和,在具体统计时将忽略NULL值。
4. 统计最大值
该函数只有一种使用方式。
MAX(field)使用方式:该种方式可以实现计算指定字段值中的最大值,在具体统计时将忽略NULL值。
5. 统计最小值
该函数只有一种使用方式。
MIN(field)使用方式:该种方式可以实现计算指定字段值中的最小值,在具体统计时将忽略NULL值。mysql> create table grade(id int, name varchar(128), math tinyint, chinese tinyint , english tinyint, class_id int); #创建表grade mysql> insert into grade values(1, '甲', 80, 87, 91, 1),(2,'乙', 72, 64, 89,2),(3, '丙', 54, 69, 87,2),(4,'丁', 78, 79, 89, 1); #插入多条记录 mysql> select class_id, sum(math) from grade group by class_id; #对两个班级的数学成绩进行统计 +----------+-----------+ | class_id | sum(math) | +----------+-----------+ | 1 | 158 | | 2 | 126 | +----------+-----------+ mysql> select class_id, avg(math), avg(chinese), avg(english) from grade group by class_id; #统计两个班级科目的平均分,会忽略掉NULL 记录 +----------+-----------+--------------+--------------+ | class_id | avg(math) | avg(chinese) | avg(english) | +----------+-----------+--------------+--------------+ | 1 | 79.0000 | 83.0000 | 90.0000 | | 2 | 63.0000 | 66.5000 | 88.0000 | +----------+-----------+--------------+--------------+统计分组查询
在MySQL中,只实现简单的分组查询有时候可能没有任何实际意义,因为关键字GROUP BY单独使用时,默认查询出每个分组中随机的一条记录,具有很大的不确定性,一般建议将分组关键字与统计函数一起使用。
如果想显示每个分组中的字段,可以通过函数GROUP_CONCAT()来实现。该函数可以实现显示每个分组中的指定字段,函数的具体语法形式如下:SELECT GROUP_CONCAT(field) FROM tablename WHERE CONDITION GROUP BY field; 在上述语句中会显示每个数组中的字段值。使用GROUP_CONCAT()对班级进行统计分组,并显示每组中学生的姓名。
执行SQL语句GROUP_CONCAT(),显示每个分组,具体SQL语句如下:mysql> create table grade(id int, name varchar(128), math tinyint, chinese tinyint , english tinyint, class_id int); #创建表grade mysql> insert into grade values(1, '甲', 80, 87, 91, 1),(2,'乙', 72, 64, 89,2),(3, '丙', 54, 69, 87,2),(4,'丁', 78, 79, 89, 1); #插入多条记录 mysql> select class_id, count(*), group_concat(name) from grade group by class_id; #按class_id 进行分组,统计数学总分并显示每个分组中的姓名 +----------+----------+--------------------+ | class_id | count(*) | group_concat(name) | +----------+----------+--------------------+ | 1 | 2 | 甲,丁 | | 2 | 2 | 乙,丙 | +----------+----------+--------------------+
边栏推荐
猜你喜欢

LeetCode_474_一和零

940. 不同的子序列 II

优惠券系统设计思想

数据可视化----网页显示温湿度

单壁碳纳米管-DNA复合物(SWCNT-DNA)|作用机理

分布式限流 redission RRateLimiter 的使用及原理

一道菜撑起百亿估值的太二酸菜鱼,能否迈过食品安全这道坎?

The second growth curve | The driving guide for corporate innovation to break through the stagnation dilemma

R语言对airbnb数据nlp文本挖掘、地理、词云可视化、回归GAM模型、交叉验证分析

Safe Browser will have these hidden features that will let you play around with your browser
随机推荐
促进二十一世纪创客教育的新发展
JSP Servlet JDBC MySQL CRUD Sample Tutorial
Mass data query scheme mysql_Mysql massive data storage and solution 2 - Mysql sub-table query massive data... [easy to understand]
Omni-channel e-commerce | How can well-known domestic cosmeceuticals seize the opportunity to achieve rapid growth?
[GXYCTF2019] ban dolls
Setinel 原理简介
Kubernetes:(四)常用命令
藻酸盐/PEI/DNA复合载体|脂质-鱼精蛋白-DNA复合物|合成方法
C#笔记 之 Oracle.ManagedDataAccess包的安装及配置
Baidu internship students late night fun: originally giant is this kind of life
磁性层状双金属氢氧化物和酶-DNA复合物|聚乙烯亚胺-DNA复合物(PEI/DNA)|作用机理
万字总结:分布式系统的38个知识点
Unity determines whether a string can be converted to float type
What are the software development modes (software engineering development mode)
In the past six months, I have done those things about the automatic return of the transaction link...
赶紧进来!!!带你认识C语言基本数据类型
RNA修饰质谱检测|dextran-siRNA 葡聚糖化学偶联DNA/RNA|siRNA-PLGA聚乳酸-羟基乙酸共聚物修饰核糖核酸
进程间六种通信方式
240. 搜索二维矩阵 II
[GXYCTF2019]禁止套娃