当前位置: 首页 > news >正文

【MySQL】表的查询操作——SELECT

目录

 1.select的基本使用

1.1.查询所有列

1.2.查询特定列

1.3.DISTINCT关键字的使用——查询不重复的年级

1.4.带条件的查询

1.5.排序查询结果

1.6.LIMIT的使用——限制返回的行数

1.7.组合使用 WHERE、ORDER BY 和 LIMIT

1.8.查询字段为表达式

1.9.为查询结果指定别名

2.SELECT的WHERE子句 

 2.1.查询英语不及格的同学及其英语成绩

2.2.查询语文成绩在80到90分的同学及其语文成绩

2.3.数学成绩是 58 或者 59 或者 98 或者 99 分的同学及数学成绩

2.4.姓孙的同学 及 孙某同学

2.5.查询语文成绩好于英语成绩的同学

2.6.查询总成绩在200分以下的同学

2.7.语文成绩 > 80 并且不姓孙的同学

2.8.孙某同学,否则要求总成绩 > 200 并且 语文成绩 < 数学成绩 并且 英语成绩 > 80

2.9.NULL的查询

2.9.1. 查询 qq 号已知的同学姓名

2.9.2.查询QQ号未知的同学

3.结果排序

3.1. 同学及数学成绩,按数学成绩升序显示

3.2.查询同学及其QQ号,按QQ号排序显示

3.3.查询同学各门成绩,依次按 数学降序,英语升序,语文升序的方式显示

3.4.查询同学及总分,由高到低

 3.5.查询姓孙的同学或姓曹的同学及其数学成绩,按数学成绩降序显示

 4.筛选分页结果


 

 1.select的基本使用

SELECT [DISTINCT] {* | {column1 [, column2] ...}}  
FROM table_name  
[WHERE ...]  
[ORDER BY ...]  
[LIMIT ...];

组成部分解释

  1. SELECT
    • 关键字,用于开始一个查询操作。
  2. [DISTINCT]
    • 可选项,用于确保查询结果中的每一行都是唯一的。如果指定了DISTINCT,那么结果集中的重复行将被移除。
  3. { * | {column1 [, column2] ...} }
    • 用于指定要查询的列。
    • * 表示选择所有列。
    • {column1 [, column2] ...}表示选择指定的列,列名之间用逗号分隔。
  4. FROM table_name
    • 指定要从中查询数据的表名。
  5. [WHERE ...]
    • 可选项,用于指定查询条件。只有满足条件的行才会被包含在结果集中。
    • 条件通常涉及列名和比较运算符(如=、<>、>、< 等)。
  6. [ORDER BY ...]
    • 可选项,用于指定结果集的排序顺序。
    • 可以按一个或多个列进行排序。
    • 默认情况下,排序是升序的(ASC)。要指定降序排序,可以使用 DESC 关键字。
  7. [LIMIT ...]
    • 可选项,用于限制返回的行数。
    • 可以指定一个数字来限制返回的行数。
    • 在某些数据库系统中,LIMIT子句还可以接受一个偏移量(offset)和一个行数(row count),以指定从哪一行开始返回结果。

示例
假设有一个名为 students 的表,包含以下列:id、first_name、last_name、age 和 grade。

CREATE TABLE students (  id INT PRIMARY KEY AUTO_INCREMENT,  first_name VARCHAR(50) NOT NULL,  last_name VARCHAR(50) NOT NULL,  age INT NOT NULL,  grade VARCHAR(10)  
);

 

我们插入一些数据进去

INSERT INTO students (id, first_name, last_name, age, grade)  
VALUES  
(1, 'John', 'Doe', 25, 'A'),  
(2, 'Jane', 'Smith', 19, 'B+'),  
(3, 'Michael', 'Johnson', 17, 'A-'),  
(4, 'Emily', 'Davis', 14, 'B'),
(5, 'Alen', 'walk', 24, 'A'),  
(6, 'David', 'Brown', 18, 'A+');


1.1.查询所有列

select * from students; 

这条语句会选择students表中的所有列和所有行,并返回结果。*是一个通配符,表示所有列。

 

通常情况下不建议使用* 进行全列查询

  1. 查询的列越多,意味着需要传输的数据量越大(MySQL采用的CS模式);
  2. 可能会影响到索引的使用。

1.2.查询特定列

select first_name, last_name from students; 

这条语句只会选择students表中的first_name和last_name列,并返回这些列的所有行。

我们看到只显示了first_name和last_name列。

1.3.DISTINCT关键字的使用——查询不重复的年级

select distinct grade from students; 

这条语句会选择students表中的grade列,但只返回不重复的值。DISTINCT关键字用于去除重复的行。 

1.4.带条件的查询

select first_name, last_name from students where age > 18; 

这条语句会选择students表中的first_name和last_name列,但只返回那些age列值大于18的行。WHERE子句用于指定查询条件。

我们看到只显示了first_name和last_name列,再看看这三个人的age

我们发现这三个人的年龄刚好是比18大的

1.5.排序查询结果

select first_name, last_name from students order by last_name ASC; 

这条语句会选择students表中的first_name和last_name列,并按last_name列的值进行升序排序(ASC表示升序,是默认排序方式)。ORDER BY子句用于指定排序的列和排序方式。

我们发现从上到下都是根据last_name列的值按A-Z来排序的

1.6.LIMIT的使用——限制返回的行数

select first_name, last_name from students limit 2; 

这条语句会选择students表中的first_name和last_name列,但只返回前2行。LIMIT子句用于限制返回结果的数量。

我们可以对比之前的

1.7.组合使用 WHERE、ORDER BY 和 LIMIT

SELECT first_name, last_name FROM students
WHERE age > 18
ORDER BY last_name DESC
LIMIT 3;

这条语句结合了前面的几个示例。它首先选择students表中age大于18的行的first_name和last_name列,然后按last_name列的值进行降序排序(DESC表示降序),最后只返回前3行。


 

1.8.查询字段为表达式

select语句是一个非常特殊的语句,其在查询数据时,column列表中除了能罗列表中存在的列名外,我们也可以将表达式罗列到column列表中。如下:

SELECT first_name, last_name,1+1 FROM students;

 

我们发现这个直接在表的后面拼接了表达式的结果。

我们现在查询一下这个到底有没有存到表里面去

select * from students;

 

我们发现这个表达式的值,没有被存到这个表里面去。

事实上,select不仅能够用来查询数据,还可以用来计算某些表达式或执行某些函数。如下:

select 2*3/4;

我们可以借助上面那个特性来完成一些事情,

如果我们将表达式罗列到column列表中:

  • 那么每当一条记录被筛选出来时就会执行这个表达式,然后将表达式的计算结果作为这条记录的一个列值进行显示。

  • column列表中的表达式可以包含表中已有的字段,这时每当一条记录被筛选出来时,就会将记录中对应的列值提供给表达式进行计算。

例如:我们将每个人的年龄都加上10岁

select first_name,last_name,age+10 from students;

我们发现age+10的值就自动附在表的后方。同时我们要知道,那些数据并不会覆盖表里的数据 

select * from students;

 

 又或者我们可以求一下同学的id和age的总和:

select first_name,last_name,id+age from students;

1.9.为查询结果指定别名

为查询结果指定别名的SQL语法如下:

SELECT column [AS] alias_name [...] FROM table_name;

说明:

  • SQL中大写的表示关键字,[ ]中代表的是可选项。

比如我们刚刚计算的id+age太过于简陋了,我们可以设置别名result

select first_name,last_name,id+age as result from students;

2.SELECT的WHERE子句 

我们在上面简单的使用了一下where子句,但是那远远不够,现在我们来系统学习一下where子句。

where子句添加与否的区别:

  • 如果在查询数据时没有指定where子句,那么会直接将表中所有的记录作为数据源来依次执行select语句。
  • 如果在查询数据时指定了where子句,那么在查询数据时会先根据where子句筛选出符合条件的记录,然后将符合条件的记录作为数据源来依次执行select语句。(非常重要!!!)

 where子句中可以指明一个或多个筛选条件,各个筛选条件之间用逻辑运算符AND或OR进行关联,下面给出了where子句中常用的比较运算符和逻辑运算符。

  • 注意MySQL中的的NULL不能参与任何运算
比较运算符
运算符说明
>、>=、<、<=大于、大于等于、小于、小于等于
等于。需要注意的是,当比较的值中包含NULL时,结果也是NULL,而不是TRUE。这是因为在SQL中,NULL表示未知,所以任何与NULL的比较都是不确定的。
<=> 这是SQL中的一个特殊运算符,用于进行NULL安全的等于比较。如果两个值都是NULL,或者它们相等,那么结果是TRUE。这个运算符在某些数据库系统中可能不被支持。
!=、<>不等于运算符。这两个运算符是等价的,都用于表示两个值不相等。同样地,当比较的值中包含NULL时,结果可能是不确定的(在某些数据库系统中,NULL与任何值的不等于比较结果都是NULL)。
BETWEEN a0 AND a1范围匹配运算符。如果某个值在a0和a1之间(包括a0和a1),则结果为TRUE。
IN(option1, option2, …) 

用于判断某个值是否在一组给定的选项中。如果值在选项中,则结果为TRUE。

IS NULL用于判断某个值是否为NULL。如果是,则结果为TRUE。
IS NOT NULL用于判断某个值是否不为NULL。如果不为NULL,则结果为TRUE。
LIKE模糊匹配运算符。通常与通配符一起使用,如%(表示任意多个字符)和_(表示任意一个字符)。

    

逻辑运算符
运算符说明
AND逻辑与运算符。只有当所有条件都为TRUE时,结果才为TRUE。
OR逻辑或运算符。只要有一个条件为TRUE,结果就为TRUE。
NOT逻辑非运算符。用于反转条件的布尔值。如果条件为TRUE,则结果为FALSE;如果条件为FALSE,则结果为TRUE。

下面我们来做一些案例帮助我们理解并掌握这些运算符:

为了方便我们进行演示,下面创建一个成绩表,表当中包含:自增长的主键id、姓名、以及该同学的语文成绩、数学成绩和英语成绩。如下:

CREATE TABLE exam_result (
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20) NOT NULL COMMENT '同学姓名',
chinese float DEFAULT 0.0 COMMENT '语文成绩',
math float DEFAULT 0.0 COMMENT '数学成绩',
english float DEFAULT 0.0 COMMENT '英语成绩'
);

接下来向表中插入几条测试记录,以供我们进行查找。如下:

INSERT INTO exam_result (name, chinese, math, english) VALUES
('唐三藏', 67, 98, 56),
('孙悟空', 87, 78, 77),
('猪悟能', 88, 98, 90),
('曹孟德', 82, 84, 67),
('刘玄德', 55, 85, 45),
('孙权', 70, 73, 78),
('宋公明', 75, 65, 30);

 

 2.1.查询英语不及格的同学及其英语成绩

 在where子句中指明筛选条件为英语成绩小于60,我们直接使用<运算符即可。如下:

select name, english from exam_result where english < 60;

2.2.查询语文成绩在80到90分的同学及其语文成绩

在where子句中指明筛选条件为语文成绩,然后根据分数直接>=80 ,<= 90即可,然后根据其并列关系条件我们选择and逻辑运算符进行连接 。如下: 

select name, chinese from exam_result where chinese >= 80 and chinese <= 90;

 此外,这里也可以使用BETWEEN a0 AND a1来指明语文成绩的的所在区间。如下:

select name, chinese from exam_result where chinese between 80 and 90;

2.3.数学成绩是 58 或者 59 或者 98 或者 99 分的同学及数学成绩

在where子句中指明筛选条件为数学成绩等于58或59或98或99,在select的column列表中指明要查询的列为姓名和数学成绩。如下:

select name ,math from exam_result where math=58 or math=59 or math=98 or math=99;

此外,这里也可以通过IN(58, 59, 98, 99)的方式来判断数学成绩是否符合筛选要求。如下:

select name, math from exam_result where math in (58,59,98,99);

2.4.姓孙的同学 及 孙某同学

  • 查询姓孙的同学

这里给出的查询条件是模糊条件,所以在where子句中通过模糊匹配来判断当前同学是否姓孙(需要用到%来匹配多个字符),在select的column列表中指明要查询的列为姓名。如下:

select name from exam_result where name like '孙%';

  • 查询孙某同学(只查询孙x而不查询孙xx)

这里给出的查询条件是同样是模糊条件,在where子句中通过模糊匹配来判断当前同学是否为孙某(需要用到_来严格匹配单个字符),在select的column列表中指明要查询的列为姓名。如下: 

select name from exam_result where name like '孙_';

2.5.查询语文成绩好于英语成绩的同学

在where子句中指明筛选条件为:语文成绩>英语成绩,在select的column列表中指明要查询的列为姓名、语文成绩和英语成绩。如下:

select name,chinese, english from exam_result where chinese > english;

2.6.查询总成绩在200分以下的同学

在select的column列表中添加表达式查询,查询的表达式为语文、数学和英语成绩之和,为了方便观察可以将表达式对应的列指定别名为“总分”,在where子句中指明筛选条件为三科成绩之和小于200。如下:

select name, chinese, math, english,  chinese+math+english as 总分 from exam_result where 总分 < 200;

我们执行起来怎么出现错误了?

 因为前面我们说过where子句的执行顺序是在select之前的,而我们是在select时才进行了取别名,所以where子句中的总分字段找不到,因此报错。

而且我们的where子句中也不支持起别名。所以我们只能完整写出:

select name, chinese, math, english , chinese+math+english 总分 from exam_result where chinese+math+english < 200;

注意点:在where子句中不能使用select中指定的别名:

  • 查询数据时是先根据where子句筛选出符合条件的记录。
  • 然后再将符合条件的记录作为数据源来依次执行select语句。

2.7.语文成绩 > 80 并且不姓孙的同学

在where子句中指明筛选条件为语文成绩大于80,并且and连接下一个条件,再通过模糊匹配和not否定来保证该同学不姓孙,在select的column列表中指明要查询的列为姓名和语文成绩。如下:

select name, chinese from exam_result where chinese > 80 and name not like '孙%';

2.8.孙某同学,否则要求总成绩 > 200 并且 语文成绩 < 数学成绩 并且 英语成绩 > 80

很显然该题目是一个使用or逻辑运算符的多选题目,要求是查询成绩,被查询的人要么是孙某,要么总成绩大于200分并且语文成绩小于数学成绩并且英语成绩大于80分,查询时需要用到模糊匹配、表达式查询和逻辑运算符。如下:

select name chinese,math,english,  chinese + math + english as 总分 from exam_result 
where name like '孙_' or (chinese+math+english>200 and chinese < math and english > 80);

2.9.NULL的查询

在SQL中,检查一个字段是否为NULL时,不能使用等于(=)或不等于(<>)运算符,因为NULL表示未知值,并且任何与NULL的比较都会返回NULL(即未知),而不是TRUE或FALSE。

为了方便进行演示,下面创建一个学生表,表当中包含自增长的主键id、学号、姓名和QQ号。如下:

create table students(
id int unsigned primary key auto_increment,
sn int unsigned not null unique comment '学号',
name varchar(20) not null comment '姓名',
qq varchar(15) unique comment 'qq号码'
);desc students;

接下来我们插入数据 

INSERT INTO students (id, sn, name) VALUES  
(99, 100, '唐僧'),  
(102, 123, '曹操'),  
(103, 187, '刘备'),  
(105, 1023, '孙行者');

 

这里我们将数据进行一下更新,给孙行者添加一下qq号。

update students set qq='1111111'  where name='孙行者';

2.9.1. 查询 qq 号已知的同学姓名

qq号已知即qq号不为空,所以我们需要在where子句中指明筛选条件为QQ号不为NULL,在select的column列表中指明要查询的列为姓名和QQ号。如下:

select name, qq from students where qq is not null;

2.9.2.查询QQ号未知的同学

qq号未知即qq号为空,所以我们需要在where子句中指明筛选条件为QQ号为NULL,在select的column列表中指明要查询的列为姓名和QQ号。如下:

select name, qq from students where qq is null;

当然这里也可以使用<=>来进行判断,

但需要注意的是在与NULL值作比较的时候应该使用<=>运算符,使用=运算符无法得到正确的查询结果如下:

select name, qq from students where qq <=> null;

注意:<=>运算符在标准SQL中并不存在(尽管在某些数据库系统中,如MySQL,它可能作为NULL-safe equal to运算符存在,用于比较两个值,如果它们相等或都为NULL,则返回TRUE) ——我们要尽量少用

select name, qq from students where qq <> null;

 

  对于qq <> NULL,这永远不会返回任何结果,因为任何与NULL的比较(使用=、<>、<、>等运算符)都会返回NULL,而不是TRUE或FALSE,而在WHERE子句中,只有TRUE条件才会导致行被选中。因此,应该始终使用IS NOT NULL来检查非NULL值。

3.结果排序

有些时候我们对我们查找到的数据可能要进行一下排序,于是这里我们就要学习一下MySQL怎么对结果进行排序了。

结果排序的SQL如下:

SELECT ... FROM table_name [WHERE ...] ORDER BY column1 [ASC | DESC] [, column2 [ASC | DESC] ...];
  • SQL中大写的表示关键字,[ ]中代表的是可选项。
  • SELECT ...: 指定您希望从表中检索的列。
  • FROM table_name: 指定您要从中检索数据的表。
  • [WHERE ...]: 是一个可选子句,用于指定检索数据的条件。
  • ORDER BY column1 [ASC | DESC]: 指定要按照哪个列对结果进行排序。ASC表示升序(从小到大),DESC表示降序(从大到小)。如果省略排序方向,则默认为ASC。
  • [, column2 [ASC | DESC] ...]: 您可以指定多个列进行排序。当指定多个列时,MySQL会首先按照第一列的值进行排序,如果第一列的值相同,则按照第二列的值进行排序,以此类推。

 注意: 如果查询SQL中没有order by子句,那么返回的顺序是未定义的。


下面我们来进行一些简单的练习:

3.1. 同学及数学成绩,按数学成绩升序显示

在select的column列表中指明要查询的列为姓名和数学成绩,在order by子句中指明按照数学成绩进行升序排序。如下:

select name, math from exam_result order by math asc;

当然我们也还可以省略order by 最后的asc,默认就是升序,但是这样的写法还是不太建议。

select name, math from exam_result order by math;

3.2.查询同学及其QQ号,按QQ号排序显示

  • 升序

这个需求也很简单,我们只需要对qq进行order by asc就行了,但是别忘了我们的students表中的qq有的是null,那么结果会是什么呢?

select name, qq from students order by qq asc;

可以看出在MySQL中默认null是比任何数据都要小的!

  • 降序

null在下面,结果符合我们的预期!

3.3.查询同学各门成绩,依次按 数学降序,英语升序,语文升序的方式显示

为了方便我们进行演示,下面创建一个成绩表,表当中包含:自增长的主键id、姓名、以及该同学的语文成绩、数学成绩和英语成绩。如下:

CREATE TABLE exam_result (
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20) NOT NULL COMMENT '同学姓名',
chinese float DEFAULT 0.0 COMMENT '语文成绩',
math float DEFAULT 0.0 COMMENT '数学成绩',
english float DEFAULT 0.0 COMMENT '英语成绩'
);
INSERT INTO exam_result (name, chinese, math, english) VALUES
('唐三藏', 67, 98, 56),
('孙悟空', 87, 78, 77),
('猪悟能', 88, 98, 90),
('曹孟德', 82, 84, 67),
('刘玄德', 55, 85, 45),
('孙权', 70, 73, 78),
('宋公明', 75, 65, 30);

 

 

我们现在就要查询同学各门成绩,依次按 数学降序,英语升序,语文升序的方式显示

        当在SQL查询中使用ORDER BY子句对结果进行排序时,如果某一列中存在相同的值,我们可以指定额外的列来进一步确定这些具有相同值的行的相对顺序。这不需要使用OR逻辑运算符来连接条件,而是直接在ORDER BY子句中列出要排序的列,并指定每列的排序方向(升序ASC或降序DESC)。

以下是一个具体的例子,说明如何按照数学成绩降序、英语成绩升序和语文成绩升序对学生进行排序:

SELECT id, name, math_score, english_score, chinese_score  
FROM students  
ORDER BY math_score DESC, english_score ASC, chinese_score ASC;

在这个查询中:

  1. 首先,MySQL会按照math_score列的值进行降序排序。
  2. 如果两行具有相同的math_score值,则MySQL会进一步按照english_score列的值进行升序排序。
  3. 如果两行具有相同的math_score和english_score值,则最后会按照chinese_score列的值进行升序排序。

由于排序中可能存在相同值,于是我们就要再进行比较其他列来确定最后的相对排序了。

排序这里我们不需要使用or来连接多个条件,在order by子句中指明依次按照数学成绩排降序、英语成绩排升序和语文成绩排升序。

在select的column列表中指明要查询的列为姓名、数学成绩、英语成绩和语文成绩,如下:

select name,math,english,chinese from exam_result order by math desc,english asc,chinese asc;

说明:

  1. order by子句中可以指明按照多个字段进行排序,每个字段都可以指明按照升序或降序进行排序,各个字段之间使用逗号隔开,排序优先级与书写顺序相同。
  2. 例如上述SQL中,当两条记录的数学成绩相同时就会按照英语成绩进行排序,如果这两条记录的英语成绩也相同就会继续按照语文成绩进行排序,以此类推。

3.4.查询同学及总分,由高到低

在select的column列表中指明要查询的列为姓名和总分,在order by子句中指明按照总分进行降序排序。如下:

select name, chinese+ math + english as 总分 from exam_result  order by 总分 desc;

那么这里的别名为什么我们order by中能够使用呢?

因为只有有了数据才能对数据进行排序,所以order by子句的执行的优先级是非常低的!所以order by能够使用select 中的别名。

  1. 查询数据时是先根据where子句筛选出符合条件的记录。
  2. 然后再将符合条件的记录作为数据源来依次执行select语句。
  3. 最后再通过order by子句对select语句的执行结果进行排序。

也就是说,order by子句的执行是在select语句之后的,所以在order by子句中可以使用别名。

 3.5.查询姓孙的同学或姓曹的同学及其数学成绩,按数学成绩降序显示

由于这里要排序的不是所有数据,所以这里面我们要结合 where 子句 和 order by子句。

这里我们先通过where子句模糊匹配找到人

select name, math from exam_result where name like '孙%' or name like '曹%';

当查询到目标数据后再在查询SQL后添加order by子句,在order by子句中指明按照数学成绩进行降序排序。如下:

select name, math from exam_result where name like '孙%' or name like '曹%' order by math desc;

 

 4.筛选分页结果

有时候我们即使经过了数据的筛选,但是数据依然很多,如果我们直接查看的话是不利于我们进行操作的,所以有时候我们还要对我们的数据进行分页显示。

筛选分页结果的语法如下

  • 从第0条记录开始,向后筛选出n条记录:
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n; 

这是最基本的分页查询,其中LIMIT n表示从查询结果中返回前n条记录。由于记录的下标从0开始,因此这实际上会返回第0条到第n-1条记录。

  • 从第s条记录开始,向后筛选出n条记录(旧语法):
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n; 

这种语法允许您跳过前s条记录,并从第s+1条记录开始返回n条记录。但需要注意的是,随着数据库版本的更新,一些数据库系统(如MySQL 8.0及以上版本)已经弃用了这种带两个参数的LIMIT语法,转而推荐使用LIMIT n OFFSET s。

  • 从第s条记录开始,向后筛选出n条记录(新语法):
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s; 


这是推荐的分页查询语法,其中LIMIT n表示要返回的记录数,而OFFSET s表示要跳过的记录数。这样,您就可以从第s+1条记录开始返回n条记录了。

说明:

  1. SQL中大写的表示关键字,[ ]中代表的是可选项。
  2. 查询SQL中各语句的执行顺序为:where、select、order by、limit。
  3. limit子句在筛选记录时,记录的下标从0开始。

建议:

  • 对未知表进行查询时最好在查询SQL后加上limit 1,避免在查询全表数据时因为表中数据过大而导致数据库卡死。

例、按 id 进行分页,每页 3 条记录,分别显示 第 1、2、3 页

我们先来看一看所有的数据:

查询第1页记录时在查询全表数据的SQL后,加上limit 3子句表示从第0条向后筛选出3条记录。如下:

select * from exam_result limit 3;

现在我们完成了第一页的显示,但是我们要进行第二页的显示时,我们就要指明起始位置为3了,于是我们的limit子句就要变成了limit 3,3。

select * from exam_result limit 3,3;

最后一页,同理我们可以使用limit 6,3,也可以使用 limit 3 offset 6,表明从第6条记录开始,向后筛选出3条记录。如下:

select * from exam_result limit 3 offset 6;

因为从表中筛选出的记录不足3个,所以筛选出几个就显示几个。

相关文章:

【MySQL】表的查询操作——SELECT

目录 1.select的基本使用 1.1.查询所有列 1.2.查询特定列 1.3.DISTINCT关键字的使用——查询不重复的年级 1.4.带条件的查询 1.5.排序查询结果 1.6.LIMIT的使用——限制返回的行数 1.7.组合使用 WHERE、ORDER BY 和 LIMIT 1.8.查询字段为表达式 1.9.为查询结果指定别名…...

天地伟业NVR管理工具EasyNVR平台多个NVR同时管理运行后日志一直在打印error

视频安防监控平台天地伟业NVR管理工具EasyNVR可支持设备通过RTSP/Onvif协议接入&#xff0c;并能对接入的视频流进行处理与多端分发&#xff0c;包括RTMP、RTSP、WS-FLV、HTTP-FLV、WebRTC、HLS等多种视频流格式。平台可提供视频实时监控直播、云端录像、录像检索、云存储与回看…...

HAL+M4学习记录_7

一、TIM 记录学习HAL配置TIM定时器 1.1 简介 TIM&#xff08;timer&#xff09;定时器&#xff0c;16位或32位&#xff08;TIM2和TIM5&#xff09;计数器、预分频器&#xff08;16位&#xff09;、自动重装寄存器的时基单元&#xff1b;可对输入时钟进行计数&#xff0c;在计数…...

mysql 慢查询日志slowlog

慢查询参数 slow log 输出示例 # Time: 2024-08-08T22:39:12.80425308:00 #查询结束时间戳 # UserHost: root[root] localhost [] Id: 83 # Query_time: 2.331306 Lock_time: 0.000003 Rows_sent: 9762500 Rows_examined: 6250 SET timestamp1723127950; select *…...

基于AES的遥感图像加密算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 AES 加密算法概述 4.2 基于 AES 的遥感图像加密算法原理 5.完整程序 1.程序功能描述 通过AES算法对遥感图像进行加密和解密&#xff0c;分析加解密处理后图像的直方图&#xff0c;相关…...

MySQL insert 记录后查询是乱码问题分析

问题现象 后台应用程序使用的是云上的 MySQL 服务&#xff0c;需要给 MySQL 数据表里 insert 一些数据&#xff0c;平时都是先运行一个 MySQL 的 pod&#xff1a; kubectl run mysql-client --rm -it --restartNever --image mysql:5.7 --command -- env LANGC.UTF-8 mysql -…...

字符串算法之AC 自动机(Aho-Corasick Algorithm, 多模式匹配)详细解读

AC自动机&#xff08;Aho-Corasick Algorithm&#xff09;是一种高效的多模式字符串匹配算法&#xff0c;用于同时查找多个模式串&#xff08;子串&#xff09;在文本串中的出现位置。它结合了字典树&#xff08;Trie&#xff09;和有限状态机&#xff08;Finite State Machine…...

YoloV10改进:Block改进|使用ContextAggregation模块改善C2f模块|即插即用

摘要 在计算机视觉领域&#xff0c;目标检测与实例分割任务一直是研究的热点。YoloV10作为目标检测领域的佼佼者&#xff0c;凭借其出色的性能和效率赢得了广泛的认可。然而&#xff0c;随着技术的不断进步&#xff0c;如何进一步提升YoloV10的性能成为了我们追求的目标。近期…...

学习之高阶编程str方法

__str__方法 问题思考:交互环境下print打印的内容和和直接输入变量&#xff0c;返回的内容不一样这是为什么?. 使用print打印的时候触发的是_str_方法&#xff0c; 注意点: 重写str&#xff0c;必须要记得写return. return返回的必须是一个字符串对象。 class MyClass:def _…...

FreeRTOS:事件标志组

目录 一、简介 二、 事件控制块 三、相关API 四、 应用场景 一、简介 在FreeRTOS中&#xff0c;使用信号量可以实现同步&#xff0c;但是使用信号量来同步的话任务只能与单个的任务进行同步。有时候某个任务可能会需要与多个任务进行同步&#xff0c;此时信号量就无能为力。…...

【高分论文密码】AI赋能大尺度空间模拟与不确定性分析及数字制图

随着AI大语言模型的广泛应用&#xff0c;大尺度空间模拟预测与数字制图技术在不确定性分析中的重要性日益凸显。这些技术已经成为撰写高分SCI论文的关键工具&#xff0c;被誉为“高分论文密码”。大尺度模拟技术能够从不同的时空尺度揭示农业生态环境领域的内在机理和时空变化规…...

智能摆件(墨水屏)

因为需要申请8k的堆&#xff0c;所以需要更改堆的大小 stm32修改堆栈大小&#xff08;堆栈空间不足导致死机&#xff09;_minimum heap size-CSDN博客...

ansible————playbook

一、playbook和ad hoc命令 ad hoc命令是单行&#xff0c;一个简单的任务&#xff0c;运行一次。ansible真正强大的地方是使用ansible的playbook重复运行多次复杂的任务。 一个play是是一组有序的任务&#xff0c;该paly对应着在inventory被选择的主机。一个playbook是一个包含…...

linux日志分割工具logorate快速验证配置是否有效

创建一些文件, 并修改文件的mtime(修改时间) # /var/log/test/*.log touch -d "2024-10-14" test1.log touch -d "2024-10-15" test2.log touch -d "2024-10-16" test3.log touch -d "2024-10-17" test4.log#快速创建一个1G的大文…...

Unity3D URP画面品质的上限如何详解

Unity3D是一款广泛应用于游戏开发的引擎&#xff0c;它提供了多种渲染管线用于实现不同的画面品质。其中一种渲染管线是Universal Render Pipeline&#xff08;简称URP&#xff09;&#xff0c;它是Unity3D的一种轻量级渲染管线&#xff0c;专注于提供高性能和可移植性。 对惹…...

风管阻力计算

风管阻力主要包括摩擦阻力和局部阻力两大类。摩擦阻力:空气在风管内流动时,与管壁的摩擦作用导致的能量损失,与管道长度、断面尺寸、风速、空气密度等参数有关。局部阻力:风管系统中的弯头、三通、变径、阀门等部件,由于改变了气流的流动方向或速度,导致的额外能量损失,用局部阻…...

【redis】redis的多线程和IO多路复用

【redis】redis的多线程和IO多路复用 【一】前言【二】Redis单线程和多线程问题的背景【1】Redis的单线程【2】Redis为什么选择单线程&#xff1f;【3】Redis为什么开始利用多核&#xff1f;【4】Redis当前的性能瓶颈【5】Redis的主线程如何和IO线程协同 【三】IO多路复用的理解…...

webstorm 编辑器配置及配置迁移

1.下载地址 WebStorm&#xff1a;JetBrains 出品的 JavaScript 和 TypeScript IDE 其他版本下载地址 2.安装 点击下一步安装&#xff0c;可根据需要是否删除已有版本 注意&#xff1a; 完成安装后需要激活 3.设置快捷键 以下为个人常用可跳过或根据需要设置 如&#xff1a…...

Oracle19.25发布,如何打补丁到19.25

一. 19.25发布 2024年10月16日 19c 19.25补丁发布 文档编号19202410.9&#xff0c;文档编码规则&#xff1a; 19&#xff08;版本号&#xff09;2024&#xff08;年份&#xff09;07&#xff08;当季的第一个月01/04/07/10&#xff09;.9 一般每个季度的首月中15号左右发布…...

vue3中,拦截双击事件的第一次点击,写一些逻辑

在 Vue 3 中&#xff0c;如果想要拦截双击事件的第一次点击并执行一些逻辑&#xff0c;你可以使用一个状态变量来跟踪第一次点击事件&#xff0c;并在第二次点击时阻止第一次点击逻辑的执行。以下是一个实现示例&#xff1a; <template><divmousedown"handleMou…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析

Linux 内存管理实战精讲&#xff1a;核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用&#xff0c;还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

使用LangGraph和LangSmith构建多智能体人工智能系统

现在&#xff0c;通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战&#xff0c;比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案

在大数据时代&#xff0c;海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构&#xff0c;在处理大规模数据抓取任务时展现出强大的能力。然而&#xff0c;随着业务规模的不断扩大和数据抓取需求的日益复杂&#xff0c;传统…...

uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)

UniApp 集成腾讯云 IM 富媒体消息全攻略&#xff08;地理位置/文件&#xff09; 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型&#xff0c;核心实现方式&#xff1a; 标准消息类型&#xff1a;直接使用 SDK 内置类型&#xff08;文件、图片等&#xff09;自…...

Monorepo架构: Nx Cloud 扩展能力与缓存加速

借助 Nx Cloud 实现项目协同与加速构建 1 &#xff09; 缓存工作原理分析 在了解了本地缓存和远程缓存之后&#xff0c;我们来探究缓存是如何工作的。以计算文件的哈希串为例&#xff0c;若后续运行任务时文件哈希串未变&#xff0c;系统会直接使用对应的输出和制品文件。 2 …...

Qt的学习(一)

1.什么是Qt Qt特指用来进行桌面应用开发&#xff08;电脑上写的程序&#xff09;涉及到的一套技术Qt无法开发网页前端&#xff0c;也不能开发移动应用。 客户端开发的重要任务&#xff1a;编写和用户交互的界面。一般来说和用户交互的界面&#xff0c;有两种典型风格&…...