【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个,所以筛选出几个就显示几个。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/448581.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

攻上云端,独立数据库OceanBase的生存之道

文&#xff5c;白 鸽 编&#xff5c;王一粟 对于很多盲盒爱好者来说&#xff0c;应该都使用过泡泡玛特的线上抽盒机系统&#xff0c;也会发现即使在新品上市时期&#xff0c;其整体抽盲盒的体验也都非常顺畅。 事实上&#xff0c;泡泡玛特的抽盒机系统在2023年经历了一次核心…

【公共祖先】二叉树专题

里面涉及多个plus题 前言1.二叉树的最近公共祖先2.二叉搜索树的最近公共祖先3.二叉树的最近公共祖先II4.二叉树的最近公共祖先III5.二叉树的最近公共祖先IV 前言 公共祖先这一类题目&#xff0c;难度不大&#xff0c;但是非常实用&#xff0c;也是面试问到概率比较大的一类题目…

飞牛NAS未识别到网卡

最新都说国产免费的飞牛NAS非常好用&#xff0c;再也不用搞黑群辉了。 以前也没有搞过NAS&#xff0c;刚好借着这个机会学习一下NAS产品。 在虚拟机上安装&#xff0c;安装还挺顺利&#xff0c;就打算在买来的 也试试&#xff0c;结果系统都安装成功了&#xff0c;但是提示“…

进程通信——管道

文章目录 1. 管道简介2. 无名管道2.1 简介2.2 系统调用2.2.1 无名管道的创建和关闭2.2.2 pipe()2.2.3 无名管道读写说明2.2.4 代码示例 3. 命名管道3.1 简介3.2 mkfifo3.3 对于读进程3.4 对于写进程3.5 代码示例3.5.1 写管道3.5.2 读管道 1. 管道简介 管道是Linux中进程间通信…

物理环境检测及绘制

来解决连续跳跃这个问题&#xff0c;只有在地面上才可以执行跳跃 为了实现这个物理检测&#xff0c;我们需要单独写一个代码&#xff0c;因为除了人物需要检测周围的物理环境以外&#xff0c;我们的敌人也需要检测周围的物理环境&#xff0c;敌人撞墙需要返回继续走&#xff0…

《15分钟轻松学Go》教程目录

在AI快速发展的时代&#xff0c;学习Go语言依然很有用。Go语言擅长处理高并发任务&#xff0c;也就是说可以同时处理很多请求&#xff0c;这对于需要快速响应的AI服务非常重要。另外&#xff0c;Go适合用来处理和传输大量数据&#xff0c;非常适合机器学习模型的数据预处理。 …

linux提权【笔记总结】

文章目录 信息收集通过命令收集信息内核&#xff0c;操作系统&#xff0c;设备信息等用户信息环境信息进程与服务安装的软件服务与插件计划任务查看是否存在明文密码查看与主机的通信信息查看日志信息 通过脚本收集信息LinEnum脚本介绍复现 Linuxprivchecker复现 linux-exploit…

POMO:强化学习的多个最优策略优化(2020)(完)

文章目录 Abstract1 Introduction2 Related work3 Motivation4 多最优策略优化(POMO)4.1 从多个起始节点进行探索4.2 策略梯度的共享基线4.3 用于推理的多个贪婪轨迹5 Experiments5.1 Traveling salesman problem5.2 带容量限制得车辆路径问题5.3 0-1背包问题6 ConclusionAbs…

题目:小金鱼吐泡泡

解题思路&#xff1a; 用栈模拟&#xff0c;创建2个栈&#xff0c;a&#xff1a;字符串的栈&#xff0c;栈顶为s末尾&#xff1b;q&#xff1a;答案栈&#xff0c;与a顶元素互动做相应操作。 陷入的误区&#xff1a;认为可以两个方向可以随意消&#xff0c;但不同方向消得到的结…

AIGC时代 | 揭秘大型语言模型微调:11种高效方法助力模型升级

导读&#xff1a;大型预训练模型是一种在大规模语料库上预先训练的深度学习模型&#xff0c;它们可以通过在大量无标注数据上进行训练来学习通用语言表示&#xff0c;并在各种下游任务中进行微调和迁移。随着模型参数规模的扩大&#xff0c;微调和推理阶段的资源消耗也在增加。…

【H2O2|全栈】JS入门知识(二)

目录 JS 前言 准备工作 运算符 算数运算符 比较运算符 自增、自减运算符 逻辑运算符 运算符的优先级 分支语句 if-else语句 switch语句 三元表达式 结束语 JS 前言 本系列博客主要分享JavaScript的基础语法知识&#xff0c;本期为第二期&#xff0c;包含一些简…

c++应用网络编程之十一Linux下的epoll模式基础

一、epoll模式 在前面分析了select和poll两种IO多路复用的模式&#xff0c;但总体给人的感觉有一种力不从心的感觉。尤其是刚刚接触底层网络开发的程序员&#xff0c;被很多双十一千万并发&#xff0c;游戏百万并发等等已经给唬的一楞一楞的。一听说只支持一两千个并发&#x…

阿里Dataworks使用循环节点和赋值节点完成对mongodb分表数据同步

背景 需求将MongoDB数据入仓MaxCompute 环境说明 MongoDB 100个Collections&#xff1a;orders_1、orders_2、…、orders_100 前期准备 1、MongoDB数据源配置 需要先保证DW和MongoDB网络是能够联通的&#xff0c;需要现在集成任务中配置MongoDB的数据源信息。 具体可以查…

Python OpenCV精讲系列 - 三维重建深入理解(十七)

&#x1f496;&#x1f496;⚡️⚡️专栏&#xff1a;Python OpenCV精讲⚡️⚡️&#x1f496;&#x1f496; 本专栏聚焦于Python结合OpenCV库进行计算机视觉开发的专业教程。通过系统化的课程设计&#xff0c;从基础概念入手&#xff0c;逐步深入到图像处理、特征检测、物体识…

AD9361 在低至 1MHz 的频率下运行

AD9361 在低至 1MHz 的频率下运行 AD -FREQCVT1-EBZ是包含AD9361的FMCOMMS3/4/5板的附加板。虽然完整的芯片级设计包可在此 RF 收发器的ADI产品页面上找到&#xff0c;但有关此卡的信息及其使用方法、围绕它的设计包以及可使其工作的软件可在此处找到。 AD-FREQCVT1-EBZ 模块…

无人机之放电速率篇

无人机的放电速率是指电池在一定时间内放出其储存电能的能力&#xff0c;这一参数对无人机的飞行时间、性能以及安全性都有重要影响。 一、放电速率的表示方法 放电速率通常用C数来表示。C数越大&#xff0c;表示放电速率越快。例如&#xff0c;一个2C的电池可以在1/2小时内放…

储能电源自动化测试系统中不同硬件电路设计对测试结果有哪些影响?-纳米软件

随着能源领域的不断发展&#xff0c;储能电源在各个领域的应用越来越广泛。为了确保储能电源的性能和可靠性&#xff0c;自动化测试系统的重要性日益凸显。其中&#xff0c;硬件电路设计是自动化测试系统的关键组成部分&#xff0c;不同的硬件电路设计会对测试结果产生不同的影…

程序报错:ModuleNotFoundError: No module named ‘code.utils‘; ‘code‘ is not a package

程序报错内容&#xff1a; Traceback (most recent call last): File "code/nli_inference/veracity_prediction.py", line 10, in <module> from code.utils.data_loader import read_json ModuleNotFoundError: No module named code.utils; code is …

Linux运维_Apache更改默认网站目录

1.首先创建目录 并且在目录下新建测试文件 index.html mkdir -p /home/test/ap_web 直接wget 百度官网 wget www.baidu.com 2.编辑配置文件 /etc/apache2/sites-available/000-default.conf(找到 DocumentRoot)更改为刚刚创建的目录 接着在添加 最终文件: 3.给文件 添加属…

面试题:Redis(五)

1. 面试题 面试问 记录对集合中的数据进行统计 在移动应用中&#xff0c;需要统计每天的新增用户数和第2天的留存用户数&#xff1b; 在电商网站的商品评论中&#xff0c;需要统计评论列表中的最新评论&#xff1b; 在签到打卡中&#xff0c;需要统计一个月内连续打卡的用户数&…