SQL数据库-高级查询

本文详细介绍了SQL的基本统计函数,如count、max、min、avg和sum,以及如何进行子查询、分组查询、拥有条件的分组查询、联表查询和全联查询。同时,展示了如何通过SQL获取特定条件的数据,例如查询年龄大于平均年龄的学生信息,以及按性别、地址分组的平均年龄等。此外,还涵盖了左连接、右连接查询和查询所有学生信息及成绩的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

--统计函数:
--count总数、max最大、min最小、avg平均、sum求和
select * from Student
--求出 学生表中的数据总条数 
--count:求数据总条数
select count(*) from Student
--查询学生表中最大的年龄
select max(sage) from Student;
--查询最小的年龄
select min(sage) from Student; 
--求组所有人的年龄总和
select sum(sage) from Student;
--求出平均年龄
select avg(sage) from Student;

--子查询
--查询所有年龄大于平均年龄的学生信息
select sage from Student where sage>(
    select avg(sage) from Student
)

--分组查询:group by
--按照性别分组查询
select ssex from Student group by ssex

--查询每个地址的 平均年龄

select saddress,avg(sage) from Student group by saddress

--查询 男生 和 女生的平均年龄
select ssex,avg(sage) from Student group by ssex

--having:分组后的 过滤查询
--where:分组前的 条件查询
--根据性别查询出平均年龄大于14岁的
select ssex,avg(sage) from Student group by ssex
having avg(sage)>14

--查询男生
select * from Student where ssex='男'

--联表查询
/*
    select * from 表1 别名
    inner join 表2 别名
    on 联表条件
*/
--inner join 查询出两个表中都有的数据
--查询每一个学生的信息 以及考试成绩
select * from Student a
inner join Score b
on a.sid=b.sid;
--查询学生学号,姓名,性别,年龄,地址,机试,笔试
select Student.sid,sname,ssex,sage,saddress,js,bs from Student
inner join Score 
on Student.sid=Score.sid
where Student.sid=1

--全联
select Student.sid,sname,ssex,sage,saddress,js,bs from Student
full join Score 
on Student.sid=Score.sid

--left join:查询数据以第一个表为标准
select * from Student a
left join Score b
on a.sid = b.sid

--right join:
--查询所有学生的学号,姓名,机试,笔试。起别名
select a.sid as 学号,sname as 姓名,js as 机试,bs as 笔试 from Student a
right join Score b
on a.sid=b.sid

--经典示例
select  学号=a.sid ,sname as 姓名,js 机试,bs as '笔试' from Student a
right join Score b
on a.sid=b.sid


--查询所有学生的信息和成绩


--查询所有的学生信息
select * from Student
--查询所有的成绩表信息:死 来 可 特
select * from score

--地址分组
select saddress from Student group by saddress;

select * from Student

### STM32驱动YT8521芯片的方法 对于STM32单片机而言,要实现对YT8521以太网物理层(PHY)设备的支持,通常涉及几个关键方面:硬件连接、初始化设置以及数据传输处理。基于现有资源[^1],可以构建一个适用于STM32H743型号的非操作系统轮询模式下的DHCP客户端实例来说明如何操作。 #### 硬件接口配置 为了使能STM32与YT8521之间的通信,需确保两者通过MII/RMII接口正确相连。具体来说: - RMII_REF_CLK (来自PHY) - RMII_MDIO - RMII_MDC - RXD0, RXD1 (接收端口) - TX_EN, TXD0, TXD1 (发送端口) 这些信号线应当按照官方文档中的指导进行布板设计并焊接至相应管脚上。 #### 初始化过程 在软件层面,启动阶段应完成如下工作: ```c // 假设已经定义好了必要的外设句柄 `heth` 和 PHY 地址常量 `ETH_PHY_ADDRESS` /* Step 1: Enable clocks and reset the Ethernet MAC */ __HAL_RCC_ETH_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); /* For ETH pins */ /* Step 2: Configure GPIOs as alternate function push-pull */ static void MX_GPIO_Init(void){ // ...省略其他GPIO配置... } /* Step 3: Initialize HAL Library*/ HAL_Init(); /* Step 4: Configure the system clock to achieve higher performance */ SystemClock_Config(); /* Step 5: Initialize the Ethernet peripheral with default parameters */ if(HAL_ETH_Init(&heth)!= HAL_OK){ Error_Handler(); } else{ uint32_t phyregvalue=0; /* Read PHY ID register twice according to datasheet recommendation */ if((HAL_ETH_ReadPHYRegister(&heth, ETH_PHY_ADDRESS, PHY_IDR_LOW,&phyregvalue)==HAL_OK)&&\ ((phyregvalue & YT8521_ID_MASK)==YT8521_ID_VALUE)){ // 成功识别到YT8521 /* Perform additional configuration steps specific to this PHY chip here... */ /* Start Auto Negotiation process */ if(HAL_ETH_StartAutonegotiation(&heth)!= HAL_OK){ Error_Handler(); } while(__HAL_ETH_IS_FLAG_SET(&heth, ETH_FLAG_AUTONEGO_SUCCESS)== RESET); /* Get link status after negotiation completes successfully */ if(!__HAL_ETH_GET_LINK_STATUS(&heth)){ Error_Handler(); } else { printf("Link UP\n"); /* Now ready for data transmission/reception operations */ } } else { Error_Handler(); } } ``` 上述代码片段展示了从时钟使能到最后确认链路状态的一系列动作。值得注意的是,在实际应用中可能还需要针对特定需求调整某些寄存器位或参数值。 #### 数据收发流程 一旦完成了前面提到的基础准备工作之后,就可以利用标准库函数来进行网络包的发送和接收了。例如: ```c uint8_t buffer[64]; // 缓冲区大小取决于最大帧长度 struct eth_frame *frame=(void*)buffer; while(1){ /* Wait until a complete frame has been received into DMA SRAM buffers */ if (__HAL_ETH_DMA_RX_NOT_EMPTY (&heth)) { size_t length=__HAL_ETH_GetReceivedFrameSize(&heth); /* Copy incoming packet from internal memory to user space */ memcpy(frame,__HAL_ETH_GetRxBufferPointer(&heth),length); /* Process the received message here...*/ __HAL_ETH_DiscardCurrentPacket(&heth); // 清理当前已读取的数据包以便下次接收 } /* Prepare outgoing packets similarly using Tx descriptors etc.*/ } ``` 这段伪代码描述了一个简单的循环用于持续监听是否有新的消息到达,并对其进行适当解析;同时也提到了准备待发出的信息的方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值