数据库查询详解
数据库查询操作
前置:首先我们创建一个练习的数据库
/*
SQLyog Professional v12.09 (64 bit)
MySQL - 5.6.40-log : Database - studentsys
*********************************************************************
*//*!40101 SET NAMES utf8 */;/*!40101 SET SQL_MODE=''*/;/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`studentsys` /*!40100 DEFAULT CHARACTER SET utf8 */;USE `studentsys`;/*Table structure for table `course` */DROP TABLE IF EXISTS `course`;CREATE TABLE `course` (`cno` varchar(10) NOT NULL,`cname` varchar(20) NOT NULL,`credit` int(2) DEFAULT NULL,PRIMARY KEY (`cno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;/*Data for the table `course` */insert into `course`(`cno`,`cname`,`credit`) values ('C01','网页基础',1),('C02','数据库系统',2),('C03','计算机基础',3);/*Table structure for table `dept` */DROP TABLE IF EXISTS `dept`;CREATE TABLE `dept` (`did` int(11) NOT NULL AUTO_INCREMENT,`dname` varchar(20) NOT NULL,PRIMARY KEY (`did`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;/*Data for the table `dept` */insert into `dept`(`did`,`dname`) values (1,'计算机系'),(2,'土木工程系'),(3,'英语系');/*Table structure for table `sc` */DROP TABLE IF EXISTS `sc`;CREATE TABLE `sc` (`sno` varchar(10) DEFAULT NULL,`cno` varchar(10) DEFAULT NULL,`degree` int(3) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;/*Data for the table `sc` */insert into `sc`(`sno`,`cno`,`degree`) values ('S01','C01',80),('S01','C02',85),('S01','C03',90),('S02','C01',63),('S02','C02',58),('S03','C01',55),('S03','C03',65),('S04','C01',58);/*Table structure for table `student` */DROP TABLE IF EXISTS `student`;CREATE TABLE `student` (`sno` varchar(10) NOT NULL,`sname` varchar(20) NOT NULL,`sex` char(4) DEFAULT NULL,`age` int(11) DEFAULT NULL,`brithday` datetime DEFAULT NULL,`address` varchar(200) DEFAULT NULL,`did` int(11) DEFAULT NULL,PRIMARY KEY (`sno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;/*Data for the table `student` */insert into `student`(`sno`,`sname`,`sex`,`age`,`brithday`,`address`,`did`) values ('S01','陈宇乐','男',21,'2022-02-02 00:00:00','浙江义乌',1),('S02','陈紫樱','女',20,'2022-02-10 00:00:00','',1),('S03','杜陈宇','男',21,NULL,NULL,1),('S04','陈宇乐','男',23,NULL,NULL,2),('S05','陈樱','女',21,NULL,NULL,2),('S06','杜佳佳','男',19,NULL,NULL,NULL);/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
1 查询基础
1.1 select 操作
参考sql
#查询所有学生信息
select * from student;#查询学生表中的学号与姓名
select sno,sname from student;#查询学生表中的学号与姓名,并且给一个字段别名
select sno as snum,sname as `姓名` from student;#查询学生表中的姓名信息,并过滤掉相同姓名信息
select distinct sname from student;#查询学生个数,年龄总和,平均年龄,最大年龄,最小年龄,并给他们一个别名
select count(*) as `学生个数` ,sum(age) as `年龄总和` from student;select avg(age) as `平均年龄` ,max(age) as `最大年龄`,min(age) as `最小年龄` from student;
1.2 where
参考SQL
#查询所有男生的信息
select * from student where `sex`="男";#查询所有21岁男生的信息select * from student where `sex`="男"
and age = 21;
1.3 模糊查询
参考SQL
#查询姓‘陈’的同学
select * from student where sname like '陈%';#查询名字中出现‘陈’的同学
select * from student where sname like '%陈%';#查询姓陈的二个字姓名的同学
select * from student where sname like '陈_';#查询名字结尾是‘樱’的三个字姓名的同学
select * from student where sname like '__樱';
1.4 排序
参考SQL
#根据学生年龄从大到小进行排序学生信息
select * from student order by age desc;#根据学生年龄从小到大进行排序'男'同学信息
select * from student where sex='男'
order by age;#第一排序根据学生年龄升序进行排序,第二排序根据‘学号’降序排序的同学信息
select * from student order by age asc , sno desc;
1.5 分组与having子句
参考SQL
#分组一般和聚合函数一起使用
#根据性别进行分组,并分别统计各组的人数
select sex,count(*) as `人数` from student group by sex;#根据性别进行分组,并分别统计各组的同学的平均年龄
select sex,avg(age) as `平均年龄` from student group by sex;#HAVING子句 一般是配合GROUP BY使用
#根据性别进行分组,并统计各组的人数大于3人的分组信息
select sex,count(*) as `性别组` from student group by sex having `性别组` > 3
having 和 where 的区别
WHERE与HAVING的根本区别在于:
WHERE子句在GROUP BY分组和聚合函数之前对数据行进行过滤;
HAVING子句对GROUP BY分组和聚合函数之后的数据行进行过滤。
1.6 限制显示条数-limit
参考SQL
#显示学生表信息的前3条
select * from student limit 3;#显示学生表信息的2-4条
select * from student limit 1,3;#显示年龄第2大和第3大的"男"学生
select * from student where sex='男' order by age desc limit 1,2;
2 比较逻辑运算
参考SQL
#查询年龄大于20岁小于23岁的男生
select * from student where age > 20 and age < 23 and sex='男';#区间的另一种写法 BETWEEN 大于等于20岁小于等于23岁
select * from student where sex='男' and age between 20 and 23;#查询性别是男,或者年龄大于等于21岁的学生
select * from student where sex='男' or age >= 21;#查询地址为''的学生信息
select * from student where address = '';#查询地址为null的学生信息,和is搭配
select * from student where address is null;#查询年龄不是21岁的学生
select * from student where age != 21;
select * from student where age <> 21;
#查询地址不为null的学生信息
select * from student where address is not null;
3 多表连接
3.1 内连接
参考SQL
#显示拥有系别学生学号,姓名,及所在系名称-[内连接方式]
select s.sno,s.sname,d.dname from student s inner join dept d on s.did = d.did;#不推荐写法
select s.sno,s.sname,d.dname from student s ,dept d where s.did = d.did;
3.2 左连接
参考代码
#显示所有学生信息,及所在系情况-[左连接/左外连接]
#左连接已左边的表为主
select s.sno,s.sname,d.dname from student s left join dept d on s.did = d.did;
3.3 右连接
参考代码
#右连接/右外连接
select s.*,d.dname from student s right join dept d on s.did = d.did
3.4 全连接
MYSQL不支持FULL JOIN
select s.*,d.dname from student s left join dept d on s.did = d.did
union
select s.*,d.dname from student s right join dept d on s.did = d.did;
3.5 综合案例
#查询已选课学生姓名,课程名称,课程成绩
select st.sname,c.cname,sc.degree from sc
left join student st on sc.sno = st.sno
inner join course c on sc.cno = c.cno;#查询至少选修一门课的女同学姓名,除去重复姓名项
select st.sname,sc.degree from sc
join student st on sc.sno = st.sno where st.sex = '女';
4 子查询
4.1 =
SQL代码
#查询和'陈樱'同龄的学生信息
select * from student where age = (
select age from student where sname = '陈樱'
);
4.2 in/not in
SQL代码
#查询课程成绩不及格的选修课课程信息
select * from course where cno in (
select distinct cno from sc where degree < 60
);#查询课程成绩及格的选修课课程信息
select * from course where cno not in (
select distinct cno from sc where degree < 60
);#in或者not in一般来说查询效率低,采用多表连接
select distinct c.cname from sc join course c on sc.cno = c.cno
where sc.degree < 60;
4.3 all
满足所有条件
SQL代码
#ALL表示必须满足子查询结果的所有记录
#查询sc表里成绩最高的记录
select * from sc where degree >= ALL (select degree from sc);#查询sc表里成绩最低的记录
select * from sc where degree <= ALL (select degree from sc);
4.4 any
满足其中的一个条件
SQL代码
#any表示满足子查询结果的任意一条记录即可,和some一样
#查询选择’C01‘课程的成绩高于’C02‘的成绩的学生的学号
select * from sc where cno = 'C01' and degree > any(
select degree from sc where cno = 'C02'
);select * from sc where cno = 'C01' and degree > some(
select degree from sc where cno = 'C02'
);
4.5 exist/not exists
SQL代码
#EXISTS子查询返回结果类型bool
#EXISTS运算符的含义为"存在",
#使用 EXISTS 关键字引入一个子查询时,就相当于进行一次存在测试。
#外部查询的 WHERE 子句测试子查询返回的行是否存在。
#子查询实际上不产生任何数据;它只返回 TRUE 或 FALSE 值#显示已经选修了课程的学生信息
select distinct s.* from student s
inner join sc
on sc.sno = s.sno;select * from student s where exists (select * from sc where s.sno = sc.sno);#查询选修了C03课程的学生信息
select * from student s where exists (select * from sc where s.sno = sc.sno and sc.cno = 'C03');
相关文章:

数据库查询详解
数据库查询操作 前置:首先我们创建一个练习的数据库 /* SQLyog Professional v12.09 (64 bit) MySQL - 5.6.40-log : Database - studentsys ********************************************************************* *//*!40101 SET NAMES utf8 */;/*!40101 SET …...

c++视觉ROI 区域和ROI 区域图像叠加
ROI 区域提取和ROI 区域图像叠加 ROI 区域提取 #include <opencv2/opencv.hpp>int main() {// 读取图像cv::Mat image cv::imread("1.jpg");// 检查图像是否成功加载if (image.empty()) {std::cerr << "Error: Could not read the image." …...
scrapy爬虫系列之安装及入门介绍
前面介绍了很多Selenium基于自动测试的Python爬虫程序,主要利用它的xpath语句,通过分析网页DOM树结构进行爬取内容,同时可以结合Phantomjs模拟浏览器进行鼠标或键盘操作。但是,更为广泛使用的Python爬虫框架是——Scrapy爬虫。这是一篇在Windows系统下介绍 Scrapy爬虫安装及…...

洛谷刷题:数组
好累,学习令我快乐 一、小鱼比可爱 题目链接:https://www.luogu.com.cn/problem/P1428 题目描述 人比人,气死人;鱼比鱼,难死鱼。小鱼最近参加了一个“比可爱”比赛,比的是每只鱼的可爱程度。参赛的鱼被从…...
【Linux常用命令4】系统状态监测命令---2
last:查看所有系统的登录记录 执行last命令时,它会读取/var/log目录下名称为wtmp的文件,并把该文件记录的登录系统或终端的用户名单全部显示出来。默认显示wtmp的记录,btmp能显示的更详细,可以显示远程登录࿰…...
uboot启动流程-uboot代码重定位说明二
一. uboot启动流程 本文学习 uboot 的启动流程中涉及的 uboot 代码重定位部分。 _main 函数中会调用 relocate_code 函数。 relocate_code 函数分两个部分: 1. 拷贝 uboot 代码部分 2. 有关 " 重定位后有关函数调用或全局变量地址的问题"的解决方法…...
<HarmonyOS第一课>ArkTS开发语言介绍——闯关习题及答案
判断题 1.循环渲染ForEach可以从数据源中迭代获取数据,并为每个数组项创建相应的组件。( 对 ) 2.Link变量不能在组件内部进行初始化。( 对 ) 单选题 1.用哪一种装饰器修饰的struct表示该结构体具有组件化能力&#…...

香橙派、树莓派、核桃派、鲁班猫安装jupyter notebook【ubuntu、Debian开发板操作类似】
文章目录 前言一、安装环境二、使用方法总结 前言 香橙派树莓派鲁班猫安装一下调试代码还是比较方便的。 一、安装环境 假设已经安装好了miniconda3。如果还没安装可以参考我另外一篇博文,有写怎么安装。 pip install jupyter notebook # 生成Jupyter Notebook的…...

tomcat整体架构
Tomcat介绍 Tomcat是Apache Software Foundation(Apache软件基金会)开发的一款开源的Java Servlet 容器。它是一种Web服务器,用于在服务器端运行Java Servlet和JavaServer Pages (JSP)技术。它可 以为Java Web应用程序提供运行环境&#x…...

实现协议互通:探索钡铼BL124EC的EtherCAT转Ethernet/IP功能
钡铼BL124EC是一种用于工业网络通信的网关设备,专门用于将EtherCAT协议转换成Ethernet/IP协议。它充当一个桥梁,连接了使用不同协议的设备,使它们能够无缝地进行通信和互操作。 具体来说,BL124EC通过支持EtherCAT(以太…...

Android之App跳转其他软件
文章目录 前言一、效果图二、实现步骤1.弹框xml(自己替换图标)2.弹框utils3.两个弹框动画4.封装方便调用5.调用6.长按事件方法7.跳转步骤8.复制utils 总结 前言 最近遇到一个需求,就是App内大面积需要长按复制并跳转指定App,没办法,只能埋头…...
【Element UI】解决 el-dialog 弹框组件设置 custom-class 样式不生效问题
文章目录 问题描述解决方法 问题描述 <template><el-dialog class"myDialog" v-model"show" title"弹窗" custom-class"customDialog"><div>弹窗内容</div></el-dialog> </template> <script…...
前端菜鸟浅谈Web前端开发技术
Web前端开发技术按照过程遵循了由容易到困难,这就请求Web前端开发工作技术员方面要熟练学习基础的Web开发技术,关于网站性能的美化、SEO以及基础的关于服务器端方面的知识;另一方面还对开发人员有具体要求,比如能够熟练且灵敏的使…...

Springboot项目log4j与logback的Jar包冲突问题
异常信息关键词: SLF4J: Class path contains multiple SLF4J bindings. ERROR in ch.qos.logback.core.joran.spi.Interpreter24:14 - no applicable action for [properties], current ElementPath is [[configuration][properties]] 详细异常信息:…...

光伏并网逆变器低电压穿越技术研究(Simulink仿真)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
命令模式,命令 Command 类对象的设计(设计模式与开发实践 P9)
文章目录 命令举例撤销C# 例子 命令 命令模式 Command 指的是一个 执行某些特定事情的指令 应用场景:有时需要向某些对象发送请求,但并不知道请求的接受者是谁,也不知道被请求的操作是什么。这时候命令模式就负责使发送者和接受者之间解耦 …...

jira 浏览器插件在问题列表页快速编辑问题标题
jira-issueTable-quicker 这是一个可以帮助我们在问题表格页快速编辑问题的浏览器插件 github 地址 功能介绍 jira 不可否认是一个可以帮助有效提高工作效率的工具,但是我们在使用 jira 时使用问题表格可以让我们看到跟多的内容而不用关注细节,但是目…...

2020架构真题(四十六)
、以下关于操作系统微内核架构特征的说法,不正确的是()。 微内核的系统结构清晰,利于协作开发微内核代码量少,系统具有良好的可移植性微内核有良好的的伸缩性和扩展性微内核功能代码可以互相调用,性能很高…...

软件工程与计算总结(五)软件需求基础
本帖介绍软件需求涉及的诸多基本概念,通过对这些概念的阐述,剖析软件需求的来源、层次、类别、作用等重要知识~ 目录 编辑 一.引言 二.需求工程基础 1.简介 2.活动 3.需求获取 4.需求分析 5.需求规格说明 6.需求验证 7.需求管理 三.需求基…...

数学建模预测模型MATLAB代码大合集及皮尔逊相关性分析(无需调试、开源)
已知2010-2020数据,预测2021-2060数据 一、Logistic预测人口 %%logistic预测2021-2060年结果 clear;clc; X[7869.34, 8022.99, 8119.81, 8192.44, 8281.09, 8315.11, 8381.47, 8423.50, 8446.19, 8469.09, 8477.26]; nlength(X)-1; for t1:nZ(t)(X(t1)-X(t))/X(t1…...

Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能
1. 开发环境准备 安装DevEco Studio 3.1: 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK 项目配置: // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...

【C++】纯虚函数类外可以写实现吗?
1. 答案 先说答案,可以。 2.代码测试 .h头文件 #include <iostream> #include <string>// 抽象基类 class AbstractBase { public:AbstractBase() default;virtual ~AbstractBase() default; // 默认析构函数public:virtual int PureVirtualFunct…...