网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
SELECT id, name, gender, scoreFROM students
ORDER BY score DESC``LIMIT 3 OFFSET 0;
如果要查询第2页,那么我们只需要“跳过”头3条记录,也就是对结果集从3号记录开始查询,把OFFSET设定为3:
SELECT id, name, gender, scoreFROM students
ORDER BY score DESC``LIMIT 3 OFFSET 3;
LIMIT 3表示的意思是“最多3条记录”。
* LIMIT总是设定为pageSize;
* OFFSET计算公式为pageSize \* (pageIndex - 1)。
注意:OFFSET是可选的,如果只写LIMIT 15,那么相当于LIMIT 15 OFFSET 0。
在MySQL中,LIMIT 15 OFFSET 30还可以简写成LIMIT 30, 15。
使用LIMIT OFFSET 分页时,随着N越来越大,查询效率也会越来越低。
SQL Server中可采用以下sql语句:
–查前五条信息``select TOP 5 *from students;
–如果要查 第四条到第七条信息SELECT TOP 4 * FROM students
WHERE students.idNOT IN
(SELECT TOP 3 id FROM students)
Oracle中可采用以下sql语句:
–查前五条信息``SELECT * FROM EMP WHERE ROWNUM <= 5;
–如果要查 第四条到第七条信息select * from (select t.*,rownum rn from tmmis01 t)
where rn>=4 and rn<=7
**6.聚合查询**
查询students表一共有多少条记录为例,我们可以使用SQL内置的COUNT()函数查询
SELECT COUNT(*) FROM students;
– 使用聚合查询并设置结果集的列名为num:
SELECT COUNT(*) num FROM students;
COUNT(\*)和COUNT(id)实际上是一样的效果。另外注意,聚合查询同样可以使用WHERE条件,因此我们可以方便地统计出有多少男生、多少女生、多少80分以上的学生等:
SELECT COUNT(*) boys FROM students WHERE gender = ‘M’;
| | |
| --- | --- |
| SUM | 计算某一列的合计值,该列必须为数值类型 |
| AVG | 计算某一列的平均值,该列必须为数值类型 |
| MAX | 计算某一列的最大值 |
| MIN | 计算某一列的最小值 |
注意,MAX()和MIN()函数并不限于数值类型。如果是字符类型,MAX()和MIN()会返回排序最后和排序最前的字符。
– 使用聚合查询计算男生平均成绩:``SELECT AVG(score) average FROM students WHERE gender = ‘M’;
如果聚合查询的WHERE条件没有匹配到任何行,COUNT()会返回0,而SUM()、AVG()、MAX()和MIN()会返回NULL。
**分组**
如果我们要统计一班的学生数量,我们知道,可以用 SELECT COUNT(\*) num FROM students WHERE class\_id = 1; 如果要继续统计二班、三班的学生数量,难道必须不断修改WHERE条件来执行SELECT语句吗?
对于聚合查询,SQL还提供了“分组聚合”的功能。我们观察下面的聚合查询:
SELECT class_id, COUNT(*) num FROM students GROUP BY class_id;
结果为三个结果:
| class\_id | num |
| --- | --- |
| 1 | 4 |
| 2 | 3 |
| 3 | 3 |
需注意分组后,只能 select 分组的字段,如果查询其他字段会提示“不是 GROUP BY 表达式”
–通过class_id, gender分组查询SELECT class_id, gender, COUNT(*) num FROM students
GROUP BY class_id, gender;
| class\_id | gender | num |
| --- | --- | --- |
| 1 | M | 2 |
| 1 | F | 2 |
| 2 | F | |
#### 17
|
**7.多表查询**
例如,同时从students表和classes表的“乘积”,即查询数据,可以这么写:
SELECT * FROM students, classes;
SELECT
students.id sid,
students.name,
students.gender,
students.score,
classes.id cid,
classes.name cname``FROM students, classes;
SELECT
s.id sid,
s.name,
s.gender,
s.score,
c.id cid,
c.name cnameFROM students s, classes c
WHERE s.gender = ‘M’ AND c.id = 1;
**8.连接查询**
SELECT s.id, s.name, s.class_id, s.gender, s.score FROM students s;
现在问题来了,存放班级名称的name列存储在classes表中,只有根据students表的class\_id,找到classes表对应的行,再取出name列,就可以获得班级名称。连接查询就派上了用场。我们先使用最常用的一种内连接——INNER JOIN来实现:
SELECT s.id, s.name, s.class_id, c.name class_name, s.gender, s.scoreFROM students s
INNER JOIN classes c``ON s.class_id = c.id;
SELECT s.id, s.name, s.class_id, c.name class_name, s.gender, s.scoreFROM students s
LEFT OUTER JOIN classes c``ON s.class_id = c.id;
SELECT s.id, s.name, s.class_id, c.name class_name, s.gender, s.scoreFROM students s
RIGHT OUTER JOIN classes c``ON s.class_id = c.id;
SELECT s.id, s.name, s.class_id, c.name class_name, s.gender, s.scoreFROM students s
FULL OUTER JOIN classes c``ON s.class_id = c.id;
![](https://img-blog.csdnimg.cn/img_convert/c82f4801dd44aa880f7b86d10db5226c.jpeg)
注意INNER JOIN查询的写法是:
1. 先确定主表,仍然使用FROM <表1>的语法;
2. 再确定需要连接的表,使用INNER JOIN <表2>的语法;
3. 然后确定连接条件,使用ON <条件…>,这里的条件是s.class\_id = c.id,表示students表的class\_id列与classes表的id列相同的行需要连接;
4. 可选:加上WHERE子句、ORDER BY等子句。
使用别名不是必须的,但可以更好地简化查询语句。
那什么是内连接(INNER JOIN)呢?先别着急,有内连接(INNER JOIN)就有外连接(OUTER JOIN)。我们把内连接查询改成外连接查询,看看效果:
执行上述RIGHT OUTER JOIN可以看到,和INNER JOIN相比,RIGHT OUTER JOIN多了一行,多出来的一行是“四班”,但是,学生相关的列如name、gender、score都为NULL。
这也容易理解,因为根据ON条件s.class\_id = c.id,classes表的id=4的行正是“四班”,但是,students表中并不存在class\_id=4的行。
有RIGHT OUTER JOIN,就有LEFT OUTER JOIN,以及FULL OUTER JOIN。它们的区别是:
**INNER JOIN只返回同时存在于两张表的行数据**,由于students表的class\_id包含1,2,3,classes表的id包含1,2,3,4,所以,INNER JOIN根据条件s.class\_id = c.id返回的结果集仅包含1,2,3。
\*\*RIGHT OUTER JOIN返回右表都存在的行。\*\*如果某一行仅在右表存在,那么结果集就会以NULL填充剩下的字段。
\*\*LEFT OUTER JOIN则返回左表都存在的行。\*\*如果我们给students表增加一行,并添加class\_id=5,由于classes表并不存在id=5的行,所以,LEFT OUTER JOIN的结果会增加一行,对应的class\_name是NULL。
最后,我们使用**FULL OUTER JOIN,它会把两张表的所有记录全部选择出来,并且,自动把对方不存在的列填充为NULL**。
**-End-**
`**黑客&网络安全如何学习**
**今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。**
#### **1.学习路线图**
![](https://img-blog.csdnimg.cn/img_convert/f6d7a70326a6c0071cc4dc6b3eeb8f95.png)
攻击和防守要学的东西也不少,具体要学的东西我都写在了上面的路线图,如果你能学完它们,你去就业和接私活完全没有问题。
#### **2.视频教程**
网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己录的网安视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。
内容涵盖了网络安全法学习、网络安全运营等保测评、渗透测试基础、漏洞详解、计算机基础知识等,都是网络安全入门必知必会的学习内容。
![](https://img-blog.csdnimg.cn/img_convert/0d8fcc94a8238255b741c19633efd10c.jpeg)
(都打包成一块的了,不能一一展开,总共300多集)
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
****************************************************************************************************************************************************************************************************************************************************************[CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享]( )****************************************************************************************************************************************************************************************************************************************************************
![img](https://img-blog.csdnimg.cn/img_convert/3392823e12488c33713ae7dc520f19ac.png)
![img](https://img-blog.csdnimg.cn/img_convert/91329fe94c14d653531b2f83d2c06049.png)
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化的资料的朋友,可以添加戳这里获取](https://bbs.csdn.net/topics/618658159)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
存中...(img-6k5mivq0-1715811299172)]
[外链图片转存中...(img-JMC8B6AE-1715811299173)]
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化的资料的朋友,可以添加戳这里获取](https://bbs.csdn.net/topics/618658159)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**