Sql查询语句

SELECT * from student,class

        在上一篇博客里我们已经介绍了Sql语句的增删改,以及创建了用来演示增删改的数据库和表,下面我们介绍SQL语句中最重要的查询语句。

增删改博客链接(Sql语句之增删改查(CRUD)-CSDN博客)

一、基本查询

1.查询学生的姓名

select name from student

2.查询学生姓名和性别

select name,sex from student

3.查询学生全部信息

select * from student

SELECT是关键字,表示将要执行一个查询,*表示“所有列”,FROM表示将要从哪个表查询

注意:查询结果也是一个二维表,它包含列名和每一行的数据

二、条件查询

运算符

说明

=

等于

<>或!=

不等于

小于

小于等于

>

大于

>=

大于等于

between..and...

两个值之间

is null

为null

and

并且

or

或者

in

包含

not

not可以取非,主要用在is或in

like

like为模糊查询,支持%或_匹配

1.查询班级号为 20201001 的学生

SELECT * FROM student where class_num = '20201001';

2.查询年龄为20岁的学生

SELECT name FROM student where age = 20

3.查询班级号为 20201001 的学生姓名和性别

需要查询多个字段的时候,字段之间以“,”(逗号)隔开

SELECT name,sex FROM student where class_num = '20201001';

4.查询出年龄不是20岁的学生

SELECT name FROM student where age <> 20 SELECT name FROM student where age != 20

5.查询出年龄小于21岁的学生

SELECT * FROM student where age < 21

6.查询出年龄在21-25岁的学生

SELECT * FROM student where age between 21 and 25

7.查询出班级号为空的同学名称

SELECT * FROM student where class_num is null

8.查询出班级号为20201001班的男同学

SELECT * FROM student where class_num = '20201001' and sex = '男'

9.查询出班级号为20201001班和20201002班的同学

SELECT * FROM student where class_num in ('20201001','20201002')

10.查询出查询出用户id为1和3的用户记录

IN 操作符允许我们在 WHERE 子句中规定多个值。

select * from student where id in (1,3)

11.查询出所有姓王的同学 模糊查询 like

通配符:

%表示任意多个字符

_表示单个字符)

SELECT * FROM student WHERE name like '王%';

12.查询姓王且名字只有两个字的学生

SELECT * FROM student WHERE name like '王_';

13.查询出所有含有张字的同学的名称

SELECT * FR OM student WHERE name like '%张%';

三、聚合函数

sum

求和

avg

取平均

max

取最大值

min

取最小值

count

取得记录数

1.求学生年龄的总和

好吧,这个应该没什么实际作用,不过懒得在建新表演示了

select sum(age) from student;

2.查询出学生的平均年龄

select avg(age) from student;

3.查询出学生的最大年龄

SELECT max(age) from student

4.查询所有的学生数量

SELECT count(*) from student;

5.查询出班级号不为空的学生数

SELECT count(class_num) from student

注意:

1、count(*)表示取得当前查询表所有记录

2、count(字段名称),不会统计为null的记录

四、分组查询:group by

作用:通过某个或某些字段进行分组,一般配合聚合函数使用

用法:group by [字段1,字段2……]

 

1.求每个班的平均年龄

SELECT avg(age),class_num from student GROUP BY class_num

2.求每个班各个年龄的人数

SELECT count(age),class_num,age from student GROUP BY class_num,age

3.查询出各个班年龄的最大值

SELECT max(age),class_num from student GROUP BY class_num

五、排序

我们使用SELECT查询时,细心的读者可能注意到,查询结果集通常是按照id排序的,也就是根据主键排序。这也是大部分数据库的做法。如果我们要根据其他条件排序怎么办?可以加上ORDER BY子句。

1.按照年龄升序:

SELECT * FROM student ORDER BY age;

如果要反过来,按照年龄降序,我们可以加上DESC

2.按照年龄降序

SELECT * FROM student ORDER BY age DESC;

3.如果想按照年龄降序,并且按照学号升序怎么弄?

SELECT * FROM student ORDER BY age DESC,sno;

默认的排序规则是ASC:“升序”,即ORDER BY ageASC和ORDER BY age是相同的。

4.按照班级升序,若是同班则按照年龄升序

SELECT * FROM student ORDER BY class_num,age;

         记录会先按照class_num升序排列,若class_num相同则会按照age升序排列,所以字段名越靠左排序优先级越高

六、分页查询(限制查询)

        使用SELECT查询时,如果结果集数据量很大,比如几万行数据,可是每次前端只能呈现最多20条数据,这样不仅全部查询出来浪费时间,而且还需要进行选取20条的操作,费时费力,我们不妨一次先查询20条,等到前端再次发出请求,比如点击下一页,再查询新的数据,返回给前端,这就是分页查询的sql实现。

        要实现分页功能,实际上就是从结果集中显示第1~20条记录作为第1页,显示第21~40条记录作为第2页,以此类推。因此,分页实际上就是从结果集中“截取”出第M~N条记录。这个查询可以通过LIMIT OFFSET 子句实现。我们先把所有学生按照班级从高到低进行排序:

现在,我们把结果集分页,每页3条记录。要获取第1页的记录,可以使用LIMIT 3 OFFSET 0:

SELECT * FROM student LIMIT 3 OFFSET 0;

上述查询LIMIT 3 OFFSET 0表示,对结果集从0号记录开始,最多取3条。

注意SQL记录集的索引从0开始。

如果要查询第2页,那么我们只需要“跳过”头3条记录,也就是对结果集从3号记录开始查询,把OFFSET设定为3:

SELECT * FROM student LIMIT 3 OFFSET 3;

 

七、联表查询

        上面的查询均是单表查询,不过我们在开发的时候,肯定不会是所有字段全部在一张表上,而是很多张表,比如教师信息和学生信息几乎没可能出现在一张表上,所以联表查询是肯定会出现的情况。

1.笛卡尔积

含义:若两张表进行联表查询的时候没有任何条件限制,最终的查询结果总数是两张表记录的成绩,该现象称为笛卡尔积现象。

就像这样

SELECT s.name,c.class_name from student s,class c

如果想要得到每个学生和其所在的班级名就应该加上限制语句

WHERE s.class_num = c.class_num

2.查询每个同学在哪个班 

SELECT s.name,c.class_name 
from student s,class c 
WHERE s.class_num = c.class_num

 

上面的写法属于sql92

缺点:表连接条件与查询条件放在一起,没有分离

3.SQL99语法

select xxx from A 表名 join B 表名 on 表的连接条件;

select student.name,class.class_name 
from student 
join class 
on student.class_num = class.class_num;

优点:表连接独立,结构清晰,如果结果数据不满足要求,可再追加where条件进行过滤;

4.三种连接方式

1.内连接

SELECT 
student.name,class.class_name 
from 
student 
INNER JOIN 
class 
on 
student.class_num = class.class_num;

2.左外连接

包含左边表的全部行(不管右边的表中是否存在与他们匹配的行),以及右边表中全部匹配的行。

SELECT 
student.name,class.class_name 
from student 
LEFT JOIN class on 
student.class_num = class.class_num;

3.右外连接

包含右边表的全部行(不管右边的表中是否存在与他们匹配的行),以及左边表中全部匹配的行。

SELECT 
student.name,class.class_name 
from student 
RIGHT JOIN class 
on student.class_num = class.class_num;

4.多张表进行表连接得语法格式

select xxx from A表 join B表 on 连接条件1 join C表 on 连接条件2

查询出每个学生所选择的课程

SELECT 
student.name,course.gradeName 
from student 
join relationship 
on student.sno = relationship.sno 
join course 
on relationship.cno = course.cno

八、嵌套查询

        一般在子查询中,程序先运行在嵌套在最内层的语句,再运行外层。因此在写子查询语句时,可以先测试下内层的子查询语句是否输出了想要的内容,再一层层往外测试,增加子查询正确率,因为多层的嵌套使语句可读性很低。

1.找到所有选选择课程号为1001的同学的名称

select 
t1.name 
FROM 
(SELECT student.name,relationship.cno 
FROM student 
INNER JOIN relationship 
on student.sno = relationship.sno) t1 
WHERE 
t1.cno = '1001';

 内层查询就是()中的部分,t1是内层查询出的二维表的别名

2.找到所有选选择课程号为 数学 的同学的名称

SELECT t2.name 
FROM 
(select t1.name,scoure.gradeName 
from 
(SELECT student.name,relationship.cno 
FROM 
student INNER JOIN relationship 
on student.sno = relationship.sno) t1 
INNER JOIN scoure 
on t1.cno = scoure.cno) t2 
where gradeName = '数学';

九、练习

1. 查询出所有班级的同学的名字

提示:不是所有的同学都有班级

SELECT student.name,class.class_name 
from student 
INNER JOIN class 
on student.class_num = class.class_num;

2.查询出年龄最高的同学的信息

提示:可以使用limit

select * FROM student ORDER BY age DESC LIMIT 1 OFFSET 0;

3.查询出在学生当中那个年龄段的学生最多,并统计其出现的次数

SELECT 
age,count(age) c_age 
FROM 
student GROUP BY age 
ORDER BY c_age desc 
LIMIT 1 OFFSET 0

4.查询出年龄超过21岁,并且选择 Jvm基础的同学名字

SELECT t3.name FROM(select t2.sno,student.name,student.age FROM student right JOIN (select t1.sno FROM(select relationship.sno,relationship.cno,course.gradeName FROM relationship INNER JOIN course on relationship.cno = course.cno) t1WHERE t1.gradeName = 'Jvm基础') t2on student.sno = t2.sno) t3
where age > 21;

5.查询出彩虹班年龄最大,所选择的课程名称及该同学的姓名。

SELECT	t3.name,course.gradeName 
FROM(
SELECTt2.name,relationship.cno 
FROM(
SELECTt1.sno,t1.name,t1.age 
FROM(
SELECTstudent.sno,student.name,student.age,class.class_name 
FROMstudentINNER JOIN class ON student.class_num = class.class_num ) t1 
WHEREt1.class_name = '彩虹班' 
ORDER BYage DESC LIMIT 1 OFFSET 0 ) t2INNER JOIN relationship ON t2.sno = relationship.sno ) t3INNER JOIN course ON t3.cno = course.cno;

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

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

相关文章

Nacos最新0day漏洞复现

目录 一、漏洞原理 二、版本信息 三、资产测绘 四、poc信息 五、总结 一、漏洞原理 漏洞的核心在于 Nacos 的某些接口没有严格的权限控制&#xff0c;攻击者可以通过特制的请求向 Nacos 服务器发送恶意数据&#xff0c;从而执行任意代码。下载nacos代码搭建环境https://gi…

数字孪生Digital Twin 结合建筑信息模型 BIM 在AIoT 智慧城市建设中Web 可视化大屏实践...

智慧城市建设通过将城市中的建筑、基础设施等构建 BIM 模型&#xff0c;并与实时采集的数据相结合&#xff0c;创建数字孪生体。可以实现对城市能源消耗、交通流量、环境质量等的实时监测和预测&#xff0c;优化城市规划和资源分配。 01 数字孪生 Digital Twin 数字孪生 Digita…

Jira学习

1.Dev OPS DevOps简介 DEV OPS 流程 DEV OPS流程对应工具 最重要的就是持续集成–Jenkins 2.Jira 新建项目

自主升级,平稳过渡!麒麟信安保障长沙市智慧交通发展中心CentOS迁移无忧

长沙市智慧交通发展中心围绕综合交通运输协调体系的构建&#xff0c;实施交通运行的监测、预测和预警&#xff0c;面向公众提供交通信息服务&#xff0c;开展多种运输方式的调度协调&#xff0c;提供交通行政管理和应急处置的信息保障。 该中心目前数据日交换量超2亿条&#x…

社交电商的新篇章:AI智能名片O2O商城小程序与传统微商的区别与融合

摘要 在数字经济蓬勃发展的今天&#xff0c;互联网技术的革新正以前所未有的速度重塑着商业格局。传统微商模式&#xff0c;尽管在初期借助社交媒体迅速崛起&#xff0c;但因其固有的局限性&#xff0c;如产品质量不一、营销手段单一、信任机制脆弱等&#xff0c;逐渐暴露出诸…

Qt程序图标更改以及程序打包

Qt程序图标更改以及程序打包 1 windows1.1 cmake1.1.1 修改.exe程序图标1.1.2 修改显示页面左上角图标 1.2 qmake1.2.1 修改.exe程序图标1.2.2 修改显示页面左上角图标 2 程序打包2.1 MinGW2.2 Visual Studio 3 参考链接 1 windows 1.1 cmake 1.1.1 修改.exe程序图标 获得一个…

【Git分支管理】分支2种合并模式

目录 0.回顾 1.ff模式 2.no-ff模式 3.ff模式转no-ff模式 先提交再合并再提交 0.回顾 前面介绍了两种情况总结如下&#xff1a; master没有修改提交&#xff0c;在dev中修改提交&#xff0c;master和dev合并顺利master修改提交的同时dev也修改提交了&#xff0c;产生合并…

【数据结构】高效解决连通性问题的并查集详解及Python实现

文章目录 1. 并查集&#xff1a;一种高效的数据结构2. 并查集的基本操作与优化2.1 初始化2.2 查找操作与路径压缩2.3 合并操作与按秩合并 3. 并查集的应用3.1 判断连通性3.2 计算连通分量 4. 并查集的实际案例4.1 图的连通性问题4.2 网络连接问题 5. 并查集的优缺点5.1 优点5.2…

BernNet Learning Arbitrary Graph Spectral Filters via Bernstein Approximation

发表于:neurips21 推荐指数: #paper/⭐⭐ 设定:在本文中,h是过滤器. bernstein 多项式逼近(这个证明有点稀里糊涂的,反正我觉得一点点问题,可能因为我水平低) p K ( t ) : ∑ k 0 K θ k ⋅ b k K ( t ) ∑ k 0 K f ( k K ) ⋅ ( K k ) ( 1 − t ) K − k t k . p_K(t):…

大数据hive表和iceberg表格式

iceberg: https://iceberg.apache.org/ iceberg表&#xff0c;是一种面向大型分析数据集的开放表格式&#xff0c;旨在提供可扩展、高效、安全的数据存储和查询解决方案。它支持多种存储后端上的数据操作&#xff0c;并提供 ACID 事务、多版本控制和模式演化等特性&#xff0c…

【常见开源库的二次开发】基于openssl的加密与解密——Base的编解码(二进制转ascll)(二)

目录&#xff1a; 目录&#xff1a; 一、 Base64概述和应用场景 1.1 概述 1.2 应用场景 二、Base16 2.1 Base16编码 2.2 Base16编解码 三、Base64 四、OpenSSL BIO接☐ 4.1 Filter BIOs&#xff1a; 4.2 Source/Sink BIOs&#xff1a; 4.3 应用场景&#xff1a; 4.4 具体使用&…

设计模式学习(二)工厂模式——抽象工厂模式

设计模式学习&#xff08;二&#xff09;工厂模式——抽象工厂模式 背景抽象工厂模式优点与缺点参考文章 背景 现在我需要开发一个相机操作模块&#xff0c;它可能在Windows下运行&#xff0c;也可能在Linux下运行。由于在厂家提供的SDK中&#xff0c;Windows下的SDK和Linux下…

【JVM】JVM实战笔记-随笔

JVM实战笔记-随笔 前言字节码如何查看字节码文件jclasslibJavapArthasArthurs监控面板Arthus查看字节码信息 内存调优内存溢出的常见场景解决内存溢出发现问题Top命令VisualVMArthas使用案例 Prometheus Grafana案例 堆内存情况对比内存泄漏的原因:代码中的内存泄漏并发请求问…

代谢组数据分析(十四):代谢物组间网络分析(spearman coefficient)

介绍 在代谢物网络分析领域,研究者采用斯皮尔曼系数来定量评估代谢物之间的相关性。该系数作为一种有效的非参数统计工具,能够揭示代谢物间潜在的关联模式,不受它们分布特性的限制。通过计算所有代谢物配对间的斯皮尔曼系数,研究者能够构建出反映代谢物相互关系的网络。 …

Git钩子Hook功能

&#x1f4be; Hook 钩子 目录 &#x1f514; 简介&#x1f514; 常见类型&#x1f514; 如何配置&#x1f514; 使用场景&#x1f514; 示例 &#x1f514; 简介 Git Hooks是Git内置的一种机制&#xff0c;允许在特定事件发生时执行自定义脚本。Git Hook可以在客户端和服务器端…

PHP多功能投票微信小程序系统源码

&#x1f389;一键决策&#xff0c;尽在掌握&#xff01;多功能投票小程序&#xff0c;让选择不再纠结&#x1f914; &#x1f4f2;【开篇&#xff1a;告别传统&#xff0c;拥抱便捷投票新时代】&#x1f4f2; 还在为组织投票活动手忙脚乱&#xff1f;或是面对众多选项犹豫不…

Hadoop发展史和生态圈介绍

目录 一、Hdoop概述 二、Hadoop生态组件 三、大数据的技术生态体系 四、Hadoop发展历史 4.1 概述 4.2 Hadoop历史发展节点 4.2.1 2002-2004年理论阶段 4.2.2 2005-2008年Hadoop的问世与崛起 4.2.3 2009-2017年Hadoop助力大数据行业的发展 4.2.4 至今 五、Hadoop优势特…

华为HCIP Datacom H12-821 卷40

1.单选题 下面是台路由器BGP错误输出信息&#xff0c;关于这段信息描述错误的是 <HUAWEI>display bgp error Error Type :Peer Error Date/Time :2010-03-22 12:40:39 Peer Address :10.1.1.5 Error Info : Incorrect remote AS A、可能是由于邻居…

面向 AI 而生的香橙派 AIpro 开发板开箱实测

前几天搞到一块很牛掰的开发板&#xff0c;是香橙派联合华为精心打造的高性能 AI 开发板 – OrangePi AIpro 开发板。 其搭载了昇腾 AI 处理器&#xff0c;可提供 8TOPS INT8 的计算能力&#xff0c;作为单板硬件设备来说&#xff0c;算力杠杠的了&#xff0c;至于跑 AI 模型性…

django实现用户的注册、登录、注销功能

创建django项目的步骤&#xff1a;Django项目的创建步骤-CSDN博客 一、前置工作 配置数据库&#xff0c;设置数据库引擎为mysql 1、在settings文件中找到DATABASES, 配置以下内容 DATABASES {"default": {ENGINE: django.db.backends.mysql, # 数据库引擎NAME: dja…