目录
一、单表查询
-
查询所有字符
select * from 数据表;
-
查询指定字符
select 字段名1,字段名2,……,字符段n
from 数据表
where 查询条件1 and 查询条件2;
select name,concat(MONTH(birthday),'月',DAY(birthday),'日')from student;
select studentid,name from student where sex='男' and nativeplace in("湖南","湖北");
concat:当字段之间有字符串时,用于连接字符串
datediff:用来计算两个日期之间相隔的天数
distinct:查询结果不重复,去掉重复的查询结果
通配符
% 、 _
模糊匹配数据内容SELECT 字段名 FROM 表名 WHERE 字段名 LIKE '字符%';
SELECT 字段名 FROM 表名 WHERE 字段名 LIKE '字符_';
下划线通配符
_
只能模糊匹配1个
字符举个例子:
SELECT * FROM Mall_products WHERE prod_name LIKE '%ir%';
该语句查询的结果返回所有商品的名字中间带
ir
字符的所有信息。通配符%
告诉MySQL
,返回字符串中间带ir
字符的记录,不管ir
前面和后面分别有多少字符。
in 、not in关键字查询
SELECT 字段名 FROM 表名 WHERE 字段名 IN (n1,n2,n3,...); SELECT 字段名 FROM 表名 WHERE 字段名 NOT IN (n1,n2,n3,...);
distinct : 使用关键字
DISTINCT
检索数据表中指定的不重复的内容,去除重复结果。
select datediff('2022-9-26','2021-9-26');
select distinct nativeplace from student;
or : 在
WHERE
声明中使用OR
关键字表示只需满足两个条件中的其中一个条件即可返回结果。and : 在
WHERE
子句中使用AND
操作符限制只有满足所有条件的查询才会被返回。可以使用AND
连接两个甚至更多个查询条件,多个条件表达式之间用AND
分开。
-
查询结果排序
order by <字段号1> [asc/desc],<字段号2> [asc/desc]… 首先按<字段号1> 的顺序排序,若多条记录的<字段号1> 值相同,则按<字段号2>顺序排列
ASC升序 DESC降序 默认升序
limit <位置偏移量> <行数> 指定查询结果的数量,[位置偏移量]指示从第几行开始显示,0表示从第1行开始,若[位置偏移量]省略默认为0。<行数>指定返回的记录条数。
select <字段名1>,<字段名2>,……,<字符段n>
from <数据表>
where <查询条件>
group by <分组表达式> having <分组条件>
order by <字段号1> [asc/desc],<字段号2> [asc/desc]
limit <位置偏移量> <行数>;
-
指定列名
select <列名> as <列别名> 为列名指定另外的名字
-
统计查询
函数名 | 功能 |
SUM |
计算数值列的和
|
AVG |
计算数值列的平均值
|
MAX |
计算列(数值、日期、字符)的最大值
|
MIN |
计算列(数值、日期、字符)的最小值
|
COUNT |
计算查询结果的数目
|
select count(*) from student where sex="女";
-
分组查询
group by <字段名> having <条件表达式>
<字段名>为分组依据<条件表达式>是分组后要满足的条件
例如,查询品均分大于80的学号和平均分
select studentid,avg(score) as 平均分 from score group by studentid having avg(score)>80;
-
连接查询
第一种 from 数据表1,数据表2 where 连接条件
第二种 from 数据表1 join 数据表2 on 连接条件
(on 后面是连接条件,通常是关键字段的值相同)
连接查询中引用两个表的公共字段,须在字符段前添加表名作为前缀
select score.studentid,name,courseid,score
from score,student
where score.studentid=student.studentid;
select score.studentid,name,courseid,score
from score join student
on score.studentid=student.studentid;
二、多表连接
-
左、右连接
left join 左连接。即输出中包含数据表1中所有的记录。如果该纪录在数据表2中有匹配记录,则返回数据表2中对应记录;如果没有匹配记录,则返回空值。
right join 右连接。即输出中包含数据表2中所有 的记录,如果该纪录在数据表1中有匹配记录,则返回数据表1中对应记录;如果没有匹配记录,则返回空值。
-
子查询
例如,查询student数据表中周晓阳的老乡
select * from student
where nativeplace= (select nativeplace from student where name=“周晓阳”);
In 关键字进行子查询,内层循环返回一个数据集,not in
any 和 some 是同义词。重要一行能使结果为真,子查询就为真。
ALL
关键字
ALL
必须接在一个比较运算符的后面,表示与子查询返回的所有值比较都为TRUE
则返回TRUE
。
select * from course where courseid=any(select courseid from score);
-
exists 或 not exists
select * from course
where not exists (select courseid from score where score.courseid=course.courseid);
-
合并查询
通过集合的并运算(UNION),可将两个SELECT 语句的查询结果合并为一个结果。
SELECT <字段1>,<字段2>……FROM <表1>
UNION
SELECT <字段1>,<字段2>…… FROM <表2>