SQL编程基础常见题型练习

news2024/11/28 3:52:28

SQL编程基础常见题型练习

    • 1. 基础查询
      • 1.1. 基础查询
      • 1.2. 简单处理查询结果
    • 2. 条件查询
      • 2.1. 基础排序
      • 2.2. 基础操作符
      • 2.3. 高级操作符
    • 3. 高级查询
      • 3.1. 计算函数
      • 3.2. 分组查询
    • 4. 多表查询
      • 4.1. 子查询
      • 4.2. 链接查询
      • 4.3. 组合查询
    • 5. 必会的常用函数
      • 5.1. 条件函数
      • 5.2. 日期函数

1. 基础查询

1.1. 基础查询

  1. 查询所有列
    在这里插入图片描述
select * from user_profile;
  1. 查询多列
    在这里插入图片描述

1.2. 简单处理查询结果

  1. 查询结果去重
    在这里插入图片描述
select university 
from user_profile 
group by university;
  1. 查询结果限制返回行数
    在这里插入图片描述
select device_id
from user_profile
where id in (1,2);
  1. 将查询后的列重新命名

在这里插入图片描述

select device_id
as user_infos_example 
from user_profile limit 2;

代码示例:

drop table if exists user_profile;
CREATE TABLE `user_profile` (
`id` int NOT NULL,
`device_id` int NOT NULL,
`gender` varchar(14) NOT NULL,
`age` int ,
`university` varchar(32) NOT NULL,
`gpa` float);
INSERT INTO user_profile VALUES(1,2138,'male',21,'北京大学',3.4);
INSERT INTO user_profile VALUES(2,3214,'male',23,'复旦大学',4.0);
INSERT INTO user_profile VALUES(3,6543,'female',20,'北京大学',3.2);
INSERT INTO user_profile VALUES(4,2315,'female',23,'浙江大学',3.6);
INSERT INTO user_profile VALUES(5,5432,'male',25,'山东大学',3.8);
INSERT INTO user_profile VALUES(6,2131,'male',28,'北京师范大学',3.3);

2. 条件查询

2.1. 基础排序

  1. 查找后排序
    在这里插入图片描述
select device_id,age
from user_profile
order by age asc
# 降序:select device_id,age from user_profile order by age desc;
  1. 查找后多列排序
    在这里插入图片描述
select device_id,gpa,age
from user_profile
order by gpa,age

  1. 查找后降序排列
    在这里插入图片描述
select device_id,gpa,age
from user_profile
order by gpa desc,age desc

2.2. 基础操作符

  1. 查找学校是北大的学生信息
    在这里插入图片描述
SELECT device_id,university FROM user_profile WHERE university LIKE '%北京大学%'
#使用like运行时间会更短点,虽然多写了几个符号

SELECT device_id,university FROM user_profile WHERE university = "北京大学";
  1. 查找年龄大于24岁的用户信息
    在这里插入图片描述
select 
    device_id,
    gender,
    age,
    university
from user_profile 
where age > 24;
  1. 查找某个年龄段的用户信息
    在这里插入图片描述
select 
    device_id,
    gender,
    age
from user_profile
where age between 20 and 23;
  1. 查找除复旦大学的用户信息
    在这里插入图片描述
select
    device_id,
    gender,
    age,
    university
from user_profile
where university <> "复旦大学"
# where university != '复旦大学'
# where not university = '复旦大学'
# where university not in('复旦大学')
# where university not like '复旦大学'
  1. 用 where 过滤空值练习
    在这里插入图片描述
select
    device_id,
    gender,
    age,
    university
from
    user_profile
where age is not null and age <> "";

2.3. 高级操作符

  1. 高级操作符练习(1)
    在这里插入图片描述
select device_id,gender,age,university,gpa
from user_profile
where gpa > 3.5 and gender in ('male');
  1. 高级操作符练习(2)
    在这里插入图片描述
select device_id,gender,age,university,gpa
from user_profile
where university = "北京大学" or gpa > 3.7;
  1. Where in 和 Not in
    在这里插入图片描述
select device_id,gender,age,university,gpa
from user_profile
where university IN ("北京大学","复旦大学","山东大学");
  1. 操作符混合运用
    在这里插入图片描述
select device_id,gender,age,university,gpa
from user_profile
where (gpa > 3.5 and university = "山东大学" ) or (gpa > 3.8 and university = "复旦大学");


#SELECT device_id, gender, age, university,gpa from user_profile where gpa > 3.8 and university = '复旦大学' UNION SELECT device_id, gender, age, university,gpa from user_profile where gpa > 3.5 and university = '山东大学'
  1. 查找学校名称中含北京的用户

代码:

drop table if exists user_profile;
CREATE TABLE `user_profile` (
`id` int NOT NULL,
`device_id` int NOT NULL,
`gender` varchar(14) NOT NULL,
`age` int ,
`university` varchar(32) NOT NULL,
`gpa` float);
INSERT INTO user_profile VALUES(1,2138,'male',21,'北京大学',3.4);
INSERT INTO user_profile VALUES(2,3214,'male',null,'复旦大学',4.0);
INSERT INTO user_profile VALUES(3,6543,'female',20,'北京大学',3.2);
INSERT INTO user_profile VALUES(4,2315,'female',23,'浙江大学',3.6);
INSERT INTO user_profile VALUES(5,5432,'male',25,'山东大学',3.8);
INSERT INTO user_profile VALUES(6,2131,'male',28,'北京师范大学',3.3);

在这里插入图片描述

select device_id,age,university
from user_profile
where university like "%北京%";
# WHERE university REGEXP "北京"

3. 高级查询

3.1. 计算函数

  1. 查找 GPA 最高值
    在这里插入图片描述
#select max(gpa)
#from user_profile
#where university = '复旦大学'

select gpa
from user_profile
where university = '复旦大学'
order by gpa desc
limit 1
  1. 查找男生人数以及平均 GPA
    在这里插入图片描述
select count(gender) as male_num ,round(avg(gpa),1) as avg_gpa
from user_profile
where gender = 'male'

3.2. 分组查询

  1. 分组计算练习题

代码:

drop table if exists user_profile;
CREATE TABLE `user_profile` (
`id` int NOT NULL,
`device_id` int NOT NULL,
`gender` varchar(14) NOT NULL,
`age` int ,
`university` varchar(32) NOT NULL,
`gpa` float,
`active_days_within_30` float,
`question_cnt` float,
`answer_cnt` float
);
INSERT INTO user_profile VALUES(1,2138,'male',21,'北京大学',3.4,7,2,12);
INSERT INTO user_profile VALUES(2,3214,'male',null,'复旦大学',4.0,15,5,25);
INSERT INTO user_profile VALUES(3,6543,'female',20,'北京大学',3.2,12,3,30);
INSERT INTO user_profile VALUES(4,2315,'female',23,'浙江大学',3.6,5,1,2);
INSERT INTO user_profile VALUES(5,5432,'male',25,'山东大学',3.8,20,15,70);
INSERT INTO user_profile VALUES(6,2131,'male',28,'山东大学',3.3,15,7,13);
INSERT INTO user_profile VALUES(7,4321,'male',28,'复旦大学',3.6,9,6,52);

在这里插入图片描述

select 
    gender,university,
    count(device_id) as user_num,
    avg(active_days_within_30) as avg_active_day,
    avg(question_cnt) as avg_question_cnt
from user_profile
group by gender,university

  1. 分组过滤练习题
    在这里插入图片描述
select 
    university,
    avg(question_cnt) as avg_question_cnt,
    avg(answer_cnt) as avg_answer_cnt
from user_profile
group by university
having 
    avg_question_cnt < 5 or avg_answer_cnt < 20;
  1. 分组排序练习题
    在这里插入图片描述
#当题目出现关键词“每”,“各”的时候,我们就可以判断结果集是需要进行分组的
select
    university,
    avg(question_cnt) as avg_question_cnt
from user_profile
group by university
order by avg_question_cnt

4. 多表查询

4.1. 子查询

  1. 浙江大学用户题目回答情况
    代码:
drop table if exists `user_profile`;
drop table if  exists `question_practice_detail`;
CREATE TABLE `user_profile` (
`id` int NOT NULL,
`device_id` int NOT NULL,
`gender` varchar(14) NOT NULL,
`age` int ,
`university` varchar(32) NOT NULL,
`gpa` float,
`active_days_within_30` int ,
`question_cnt` int ,
`answer_cnt` int 
);
CREATE TABLE `question_practice_detail` (
`id` int NOT NULL,
`device_id` int NOT NULL,
`question_id`int NOT NULL,
`result` varchar(32) NOT NULL
);
INSERT INTO user_profile VALUES(1,2138,'male',21,'北京大学',3.4,7,2,12);
INSERT INTO user_profile VALUES(2,3214,'male',null,'复旦大学',4.0,15,5,25);
INSERT INTO user_profile VALUES(3,6543,'female',20,'北京大学',3.2,12,3,30);
INSERT INTO user_profile VALUES(4,2315,'female',23,'浙江大学',3.6,5,1,2);
INSERT INTO user_profile VALUES(5,5432,'male',25,'山东大学',3.8,20,15,70);
INSERT INTO user_profile VALUES(6,2131,'male',28,'山东大学',3.3,15,7,13);
INSERT INTO user_profile VALUES(7,4321,'male',28,'复旦大学',3.6,9,6,52);
INSERT INTO question_practice_detail VALUES(1,2138,111,'wrong');
INSERT INTO question_practice_detail VALUES(2,3214,112,'wrong');
INSERT INTO question_practice_detail VALUES(3,3214,113,'wrong');
INSERT INTO question_practice_detail VALUES(4,6543,111,'right');
INSERT INTO question_practice_detail VALUES(5,2315,115,'right');
INSERT INTO question_practice_detail VALUES(6,2315,116,'right');
INSERT INTO question_practice_detail VALUES(7,2315,117,'wrong');
INSERT INTO question_practice_detail VALUES(8,5432,118,'wrong');
INSERT INTO question_practice_detail VALUES(9,5432,112,'wrong');
INSERT INTO question_practice_detail VALUES(10,2131,114,'right');
INSERT INTO question_practice_detail VALUES(11,5432,113,'wrong');

在这里插入图片描述

# 子查询
#select device_id,question_id,resul
#from question_practice_detail
#where device_id = (
#    select device_id
#    from user_profile
#    where university = "浙江大学"
#);

# 连接查询
select u.device_id,q.question_id,q.result
from question_practice_detail q,user_profile u
where u.device_id = q.device_id and u.university = "浙江大学";

4.2. 链接查询

  1. 统计每个学校的答过题的用户的平均答题数
    在这里插入图片描述
select 
    university,
    count(qpd.question_id) / count(distinct qpd.device_id) as avg_answer_cnt
from
    question_practice_detail as qpd
inner join
    user_profile as up
on
    qpd.device_id = up.device_id
group by
    university
  1. 统计每个学校各难度的用户平均刷题数
    在这里插入图片描述
SELECT
u.university,
qd.difficult_level,
count(q.question_id)/count(distinct(q.device_id)) AS avg_answer_cnt
FROM question_practice_detail AS q
inner JOIN user_profile AS u
ON u.device_id=q.device_id
inner JOIN question_detail AS qd
ON q.question_id=qd.question_id
group by 
    university,difficult_level
  1. 统计每个用户的平均刷题数

代码:

drop table if exists `user_profile`;
drop table if  exists `question_practice_detail`;
drop table if  exists `question_detail`;
CREATE TABLE `user_profile` (
`id` int NOT NULL,
`device_id` int NOT NULL,
`gender` varchar(14) NOT NULL,
`age` int ,
`university` varchar(32) NOT NULL,
`gpa` float,
`active_days_within_30` int ,
`question_cnt` int ,
`answer_cnt` int 
);
CREATE TABLE `question_practice_detail` (
`id` int NOT NULL,
`device_id` int NOT NULL,
`question_id`int NOT NULL,
`result` varchar(32) NOT NULL
);
CREATE TABLE `question_detail` (
`id` int NOT NULL,
`question_id`int NOT NULL,
`difficult_level` varchar(32) NOT NULL
);

INSERT INTO user_profile VALUES(1,2138,'male',21,'北京大学',3.4,7,2,12);
INSERT INTO user_profile VALUES(2,3214,'male',null,'复旦大学',4.0,15,5,25);
INSERT INTO user_profile VALUES(3,6543,'female',20,'北京大学',3.2,12,3,30);
INSERT INTO user_profile VALUES(4,2315,'female',23,'浙江大学',3.6,5,1,2);
INSERT INTO user_profile VALUES(5,5432,'male',25,'山东大学',3.8,20,15,70);
INSERT INTO user_profile VALUES(6,2131,'male',28,'山东大学',3.3,15,7,13);
INSERT INTO user_profile VALUES(7,4321,'male',28,'复旦大学',3.6,9,6,52);
INSERT INTO question_practice_detail VALUES(1,2138,111,'wrong');
INSERT INTO question_practice_detail VALUES(2,3214,112,'wrong');
INSERT INTO question_practice_detail VALUES(3,3214,113,'wrong');
INSERT INTO question_practice_detail VALUES(4,6543,111,'right');
INSERT INTO question_practice_detail VALUES(5,2315,115,'right');
INSERT INTO question_practice_detail VALUES(6,2315,116,'right');
INSERT INTO question_practice_detail VALUES(7,2315,117,'wrong');
INSERT INTO question_practice_detail VALUES(8,5432,117,'wrong');
INSERT INTO question_practice_detail VALUES(9,5432,112,'wrong');
INSERT INTO question_practice_detail VALUES(10,2131,113,'right');
INSERT INTO question_practice_detail VALUES(11,5432,113,'wrong');
INSERT INTO question_practice_detail VALUES(12,2315,115,'right');
INSERT INTO question_practice_detail VALUES(13,2315,116,'right');
INSERT INTO question_practice_detail VALUES(14,2315,117,'wrong');
INSERT INTO question_practice_detail VALUES(15,5432,117,'wrong');
INSERT INTO question_practice_detail VALUES(16,5432,112,'wrong');
INSERT INTO question_practice_detail VALUES(17,2131,113,'right');
INSERT INTO question_practice_detail VALUES(18,5432,113,'wrong');
INSERT INTO question_practice_detail VALUES(19,2315,117,'wrong');
INSERT INTO question_practice_detail VALUES(20,5432,117,'wrong');
INSERT INTO question_practice_detail VALUES(21,5432,112,'wrong');
INSERT INTO question_practice_detail VALUES(22,2131,113,'right');
INSERT INTO question_practice_detail VALUES(23,5432,113,'wrong');
INSERT INTO question_detail VALUES(1,111,'hard');
INSERT INTO question_detail VALUES(2,112,'medium');
INSERT INTO question_detail VALUES(3,113,'easy');
INSERT INTO question_detail VALUES(4,115,'easy');
INSERT INTO question_detail VALUES(5,116,'medium');
INSERT INTO question_detail VALUES(6,117,'easy');

在这里插入图片描述

select 
    university,
    difficult_level,
    count(qpd.question_id) / count(distinct qpd.device_id) as avg_answer_cnt
from
    question_practice_detail as qpd
inner join
    user_profile as up
on 
    up.device_id=qpd.device_id 
and
    up.university="山东大学" 
inner join 
    question_detail as qd
on 
    qd.question_id=qpd.question_id
group by 
    difficult_level

4.3. 组合查询

  1. 查找山东大学或者性别为男生的信息
    在这里插入图片描述
select device_id , gender , age , gpa from user_profile where university = '山东大学' 
union all
select device_id , gender , age , gpa from user_profile where gender = 'male'

5. 必会的常用函数

5.1. 条件函数

  1. 计算 25 岁以上和以下的用户数量
    在这里插入图片描述
SELECT IF(age>=25,"25岁及以上","25岁以下") AS age_cut,count(*) AS number
FROM user_profile
GROUP BY age_cut;


select 
    (case
        when age>=25 then '25岁及以上'
        else '25岁以下' end) as age_cut, 
    count(*) as number
from user_profile
group by age_cut

  1. 查找不同年龄段的用户明细
    在这里插入图片描述
select device_id,gender,
case
    when age<20 then '20岁以下'
    when age<25 then '20-24岁'
    when age>=25 then '25岁及以上'
    else '其他'
end age_cut
from user_profile;

5.2. 日期函数

  1. 计算用户 8 月每天的练题数量
    在这里插入图片描述
select
    day(date) as day,
    count(question_id) as question_cnt
from question_practice_detail
where month(date)=8 and year(date)=2021
group by date

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

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

相关文章

Nginx实战:故障处理_后端服务正常,nginx偶发502(Bad Gateway)

一、故障场景 用户访问服务偶发报错【502 Bad Gateway】&#xff0c;但是服务后端正常运行。架构如下&#xff1a; #mermaid-svg-4dDszusKEuPgIPlt {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-4dDszusKEuPgIPlt…

基于51单片机心率计设计

1 绪论1.1 国内外心率计脉搏仪系统研究现状 心率(Heart Rate)是用来描述心跳周期的专业术语,是指心脏每分钟跳动的次数, 它不仅是反映心脏功能强弱的重要标志,也是反映人体运动强度的生理指标。自公元三世纪我国最早的脉学专著《脉经》问世以来,脉学理论得到不断的发展和提…

Elasticsearch 认证模拟题 - 20

一、题目 定义一个 pipeline&#xff0c;并且将 earthquakes 索引的文档进行更新 pipeline 的 ID 为 earthquakes_pipeline将 magnitude_type 的字段值改为大写如果文档不包含 batch_number&#xff0c;增加这个字段&#xff0c;将数值设置为 1如果已经包含 batch_number&…

自动化测试断言

自动化判断测试用例的执行的结果是否成功&#xff0c;是通过判断测试得到的实际结果与预期结果是否相等决定的。这个时候就用到了断言。 检查点分为两个&#xff0c;一个是页面级别的检查&#xff0c;包括网页的标题和网址&#xff0c;以及是否包含某个文字 另一个检查点是页…

React入门教程:构建你的第一个React应用

在当今快速发展的Web开发领域&#xff0c;前端技术日新月异&#xff0c;而React作为一款强大的JavaScript库&#xff0c;已经成为众多开发者的首选。React以其组件化、高效的性能和灵活的数据处理机制闻名于世&#xff0c;被广泛用于构建动态且复杂的用户界面。在本教程中&…

S7-1200PLC和V90总线伺服通过工艺对象实现定位控制(标准报文3应用)

1、V90伺服驱动器控制(PN版本) V90伺服驱动器控制(PN版本)_v90 pn 最简接线-CSDN博客文章浏览阅读303次。V90伺服驱动器脉冲控制常用参数和接线,请查看下面文章链接:SMART PLC和V90伺服实现外部脉冲位置控制-CSDN博客。_v90 pn 最简接线https://rxxw-control.blog.csdn.net/…

《Windows API每日一练》4.2 设备环境

在第三章我们已经使用设备环境句柄在窗口客户区绘图了。在图形输出设备&#xff08;比如屏幕或者打印机&#xff09;上绘制图形&#xff0c;必须首先获取设备环境&#xff0c;即DC的句柄。当 Windows把这个句柄交给你的程序&#xff0c;Windows同时也就给予你使用这个设备的权限…

【机器学习】机器学习与物流科技在智能配送中的融合应用与性能优化新探索

文章目录 引言机器学习与物流科技的基本概念机器学习概述监督学习无监督学习强化学习 物流科技概述路径优化车辆调度需求预测 机器学习与物流科技的融合应用实时物流数据分析数据预处理特征工程 路径优化与优化模型训练模型评估 车辆调度与优化深度学习应用 需求预测与优化强化…

vue2 + element-ui,前端配置化表单封装(2024-06-14)

技术栈是 vue2 element-ui&#xff0c;主要能解决的问题就是 提高代码复用能力、提升开发效率&#xff0c;特别是需要开发多个大型表单系统的&#xff0c;配置化可以极大的提升效率&#xff0c;让你上班摸鱼不再是梦想&#xff01;为了早点下班&#xff0c;我们接着往下看吧&a…

C#客户端

控件 打开链接 Socket socket; // 打开连接 private void button1_Click(object sender, EventArgs e) {button1.Enabled false;button2.Enabled true;//1 创建socket客户端对象socket new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);// 2…

基于C#开发web网页管理系统模板流程-主界面统计功能完善

点击返回目录-> 基于C#开发web网页管理系统模板流程-总集篇-CSDN博客 前言 紧接上篇->基于C#开发web网页管理系统模板流程-主界面管理员入库和出库功能完善_c#web程序设计-CSDN博客 统计功能是管理系统很常见的功能&#xff0c;例如仓库管理系统要统计某时间段的出入库以…

【计算机视觉】人脸算法之图像处理基础知识(四)

图像的几何变换 图像的几何变换是指在不改变图像内容的前提下对图像的像素进行空间几何变换。主要包括图像的平移变换、镜像变换、缩放和旋转等。 1.插值算法 插值通常用来放缩图像大小&#xff0c;在图像处理中常见的插值算法有最邻近插值法、双线性插值法、二次立方、三次…

【仪器仪表/电源专题】浮地信号的测试的四种方案对比

接地信号和浮地信号区别 所有的电压测量都是差分测量&#xff0c;差分测量定义为两点之间的电压差。所以会分成两类&#xff1a; 1.参考地电平测量&#xff08;有时也叫接地信号&#xff09; 2.非参考地电平测量&#xff08;也称为浮地测量&#xff09; 测试信号可以分为接地信…

SSM 基于大数据技术的创业推荐系统-计算机毕业设计源码02979

摘 要 科技进步的飞速发展引起人们日常生活的巨大变化&#xff0c;电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流&#xff0c;人类发展的历史正进入一个新时代。在现实运用中&#xff0c;应用软件的工作…

基于Matlab停车场车牌识别计时计费管理系统 【W2】

简介 停车场车牌识别计时计费管理系统在现代城市管理中具有重要意义。随着城市化进程的加快和车辆数量的增加&#xff0c;传统的人工管理停车场的方式已经难以满足效率和精确度的要求。因此引入车牌识别技术的自动化管理系统成为一种趋势和解决方案。 背景意义 提升管理效率&a…

从零开始开发知识付费APP:在线教育系统源码详解

今天&#xff0c;小编将从零开始&#xff0c;详细讲解在线教育系统的源码开发过程&#xff0c;帮助你打造一款功能完善的知识付费APP。 一、需求分析与规划 1.1 市场调研 在开始开发之前&#xff0c;首先要进行市场调研&#xff0c;了解当前市场上的主要竞争对手和用户需求。…

Linux笔记--权限与属性命令、查找指令、压缩命令、网络指令

权限 使用ls指令查看详细信息时 rwx分别代表读写执行三种权限&#xff0c;book代表book用户&#xff0c;对于权限来说三种权限分别代表二进制一位&#xff0c;即同时拥有rwx就是111&#xff0c;此时这个文件权限为775 改变权限为rw-rwxr-w指令 book100ask:~/Desktop$ chmod …

[Kubernetes] etcd 单机和集群部署

文章目录 1.etcd基本概念2.etcd的基本知识3.etcd优势4.etcd单机部署4.1 linux部署4.2 windows部署4.3 docker安装etcd 5.etcd集群部署 1.etcd基本概念 etcd是一个高可用的分布式键值存储系统&#xff0c;是CoreOS&#xff08;现在隶属于Red Hat&#xff09;公司开发的一个开源…

TLE9879的基于Arduino调试板SWD刷写接口

官方的Arduino评估板&#xff0c;如下图所示&#xff1a; 如果你有官方的调试器&#xff0c;应该不用关注本文章&#xff0c;如下图连接就是&#xff1a; 如果&#xff0c;您和博主一样需要自己飞线的话&#xff0c;如下图所示&#xff1a;PCB的名称在右边整理&#xff0c;SWD的…

代码随想录算法训练营day22|701.二叉搜索树中的插入操作、 450.删除二叉搜索树中的节点、 235. 二叉搜索树的最近公共祖先

701.二叉搜索树中的插入操作 这道题较为简单&#xff0c;只需要通过递归找到符合要求的叶子节点&#xff0c;并将节点插入即可。 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(…