SQL数据分析原代码--创建表与简单查询

  • CREATE TABLE:创建表,定义字段名、类型、注释
  • INSERT INTO:插入数据,支持单条或批量插入
  • SELECT:查询数据,*表示所有字段,AS可起别名,DISTINCT去重
  • WHERE:条件筛选,支持=<=IS NULLBETWEENANDORIN
  • LIKE:模糊查询,_匹配单个字符,%匹配任意字符
  • 聚合函数:COUNT()(计数)、AVG()(平均值)、MAX()(最大值)、MIN()(最小值)、SUM()(求和)
  • GROUP BY:分组查询,结合聚合函数使用;HAVING用于分组后筛选(区别于WHERE的分组前筛选)

1. 创建员工表(emp)

-- 创建名为emp的员工表,定义表结构及各字段信息
create table emp(id          int                comment '编号',  -- id字段:整数类型,用于唯一标识员工workno      varchar(10)        comment '工号',  -- workno字段:字符串类型(最长10字符),存储员工工号name        varchar(10)        comment '姓名',  -- name字段:字符串类型(最长10字符),存储员工姓名gender      char(1)            comment '性别',  -- gender字段:定长字符串(1字符),存储性别(如'男'/'女')age         tinyint unsigned   comment '年龄',  -- age字段:无符号tinyint类型(范围0-255),存储年龄idcard      char(18)           comment '身份证号',  -- idcard字段:定长18字符,存储身份证号(18位)workaddress varchar(50)        comment '工作地址',  -- workaddress字段:最长50字符,存储工作地址entrydate   date               comment '入职时间'  -- entrydate字段:日期类型,存储入职日期
) comment '员工表';  -- 表注释:说明该表为员工表

2. 插入数据(INSERT)

-- 向emp表插入一条员工数据,指定插入的字段及对应值
insert into emp(id, workno, name, gender, age, idcard, emp.workaddress, entrydate)
VALUES (10,'10','it10','女',56,null, '北京', '2016-01-01');  -- id=10的员工,idcard为null(未填写)-- 批量插入多条员工数据(一次性插入9条记录)
insert into emp(id, workno, name, gender, age, idcard, emp.workaddress, entrydate)
VALUES (1,'1','itcast','男',10,123456789012345678, '北京', '2000-01-01'),  -- 每条记录对应字段顺序与上方一致(2,'2','张无忌','男',30,123456789012345345, '上海', '2008-01-01'),(3,'3','留言','女',19,673456789012345678, '南京', '2011-01-01'),(4,'4','小昭','女',15,123456745612345678, '北京', '2000-01-01'),(5,'5','杨晓','男',43,123455489012345678, '河南', '2009-01-01'),(6,'6','范冰冰','女',32,123459089012345678, '河北', '1999-01-01'),(7,'7','itc','男',14,123412789012345678, '北京', '2000-01-01'),(8,'8','i6','男',76,123456789012345678, '天津', '1920-01-01'),(9,'9','it76t','男',43,123468789012345678, '西安', '2021-01-01');

3. 查询数据(SELECT 基础)

-- 查询员工的姓名、工号、年龄(只返回指定字段)
select emp.name, emp.workno, emp.age from emp;-- 查询员工表中所有字段的所有记录(*表示所有字段)
select * from emp;-- 查询员工的工作地址,并为字段起别名为“地址”(AS用于起别名,增强可读性)
select emp.workaddress as '地址' from emp;-- 查询不重复的工作地址(DISTINCT用于去除重复记录,只保留唯一值)
select distinct emp.workaddress as '地址' from emp;  -- AS可省略,此处保留是为了明确别名

4. 条件查询(WHERE 子句)

-- 查询年龄等于14的员工
select * from emp where age = 14;-- 查询年龄小于等于43的员工
select * from emp where age <= 43;-- 查询身份证号为null的员工(IS NULL判断字段值是否为空)
select * from emp where idcard is null;-- 查询身份证号不为null的员工(IS NOT NULL判断字段值是否非空)
select * from emp where idcard is not null;-- 查询年龄不等于43的员工(!= 等同于 <>,表示不等于)
select * from emp where age != 43;-- 查询年龄在15到40之间的员工(BETWEEN a AND b 包含a和b边界值)
select * from emp where age between 15 and 40;-- 查询性别为女且年龄小于25的员工(AND表示“且”,需同时满足两个条件)
select * from emp where gender = '女' and age < 25;-- 查询年龄为18、19或43的员工(OR表示“或”,满足任一条件即可)
select * from emp where age = 18 or age = 19 or age = 43;
-- 等价于上面的OR查询(IN表示“在指定列表中”,更简洁)
select * from emp where age in (18,19,43);

5. 模糊查询(LIKE)

-- 查询姓名为2个字符的员工(_表示单个任意字符,两个_即匹配2个字符)
select * from emp where name like '__';-- 查询身份证号以7结尾的员工(%表示任意长度的任意字符,%7即匹配“任意字符+7结尾”)
select * from emp where idcard like '%7';

6. 聚合函数(统计计算)

-- 统计员工总数(COUNT(emp.id)统计id字段非空的记录数,等同于COUNT(*))
select count(emp.id) from emp;-- 计算员工的平均年龄(AVG(age)求age字段的平均值)
select avg(emp.age) from emp;-- 查询员工中的最大年龄(MAX(age)求age字段的最大值)
select max(emp.age) from emp;-- 查询员工中的最小年龄(MIN(age)求age字段的最小值)
select min(emp.age) from emp;-- 计算工作地址为“北京”的员工年龄总和(SUM(age)求和,带WHERE条件筛选范围)
select sum(emp.age) from emp where workaddress = '北京';

7. 分组查询(GROUP BY)

-- 根据性别分组,统计每组(男性/女性)的员工数量
-- GROUP BY gender:将数据按gender字段分组(相同性别为一组)
-- count(id):统计每组的记录数(即该性别的员工数量)
select gender, count(id) from emp group by gender;-- 根据性别分组,计算每组的平均年龄
select gender, avg(age) from emp group by gender;-- 复杂分组查询:先筛选年龄<45的员工,再按工作地址分组,最后保留员工数>=3的地址
-- 1. WHERE age < 45:分组前先过滤出年龄小于45的员工
-- 2. GROUP BY workaddress:按工作地址分组
-- 3. HAVING count(*) >=3:分组后过滤,只保留员工数量>=3的地址(HAVING用于分组后筛选)
select workaddress, count(*) from emp where age < 45 group by workaddress having count(*) >= 3;

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

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

相关文章

k8s查询ServiceAccount有没有列出 nodes 的权限

要检查 ServiceAccount xxxxxx:default 是否具有列出 nodes 的权限&#xff0c;可以使用以下方法&#xff1a;1. **使用 kubectl auth can-i 命令**这是最直接的方法&#xff0c;可以检查特定用户或 ServiceAccount 是否具有特定权限&#xff1a;kubectl auth can-i list nodes…

调试Python程序时,控制台一直打印SharedMemory read faild

from tkinter import filedialog filedialog.askopenfilename()在使用 tkinter 时&#xff0c;只要一处罚&#xff0c;控制台就不停打印 SharedMemory read faild &#xff0c;虽然能用&#xff0c;但是大大的破坏了调试体验&#xff0c;看到如下的提示&#xff0c;你说烦不烦&…

QRCode React 完全指南:现代化二维码生成解决方案

前言 在数字化时代&#xff0c;二维码已经成为连接线上线下的重要桥梁。无论是分享链接、支付码、还是身份验证&#xff0c;二维码都扮演着不可或缺的角色。qrcode.react 是一个专门为 React 应用设计的二维码生成库&#xff0c;它能够快速、灵活地生成各种样式的二维码&#…

xxe外部实体注入漏洞

https://owasp.org/www-project-top-ten XXE基础 xxe外部实体注入 外部实体 xml&#xff08;用于传输和存储数据&#xff09; html&#xff08;用于显示数据&#xff09; 注入&#xff1a; SQL注入&#xff1a;用户输入数据被当做代码执行 1输入点 2.输入数据可以结合到数据库…

ros2获取topic信息解析

ros2 ros_discovery_info topic 发布逻辑疑问&#xff1a; 在运行ros2 topic info -v /topic时&#xff0c;运行的是p3&#xff0c;如何与p1进程通讯的呢&#xff1f; 进程间理论上应该是IPC

FFmpeg合成mp4

本章主要介绍如何使用FFmpeg来将一个音频文件和一个视频文件合成一个MP4文件&#xff0c;以及在这个过程中我们如何对编码过程进行封装以及sample_rate 重采样的过程&#xff08;由于提供的音频文件的编码类型为S16&#xff0c;所以我们需要转化为MP4支持的FLTP浮点类型&#x…

第十九章 使用LAMP架构部署动态网站环境

第十九章 使用LAMP架构部署动态网站环境 文章目录第十九章 使用LAMP架构部署动态网站环境一、安装Httpd服务1、安装httpd服务2、启动httpd服务3、设置允许通过防火墙4、验证http服务是否成功二、安装Mariadb服务1、安装Mariadb服务2、启动Mariadb服务三、安装PHP服务1、列出可用…

Selenium应用中的核心JavaScript操作技巧

Selenium是一款强大的浏览器自动化测试工具&#xff0c;其操作浏览器的能力部分来自于其内嵌的JavaScript执行引擎。这使得Selenium不仅能够模拟用户在浏览器中的各种操作&#xff0c;还能执行复杂的JavaScript脚本&#xff0c;以实现更为精细的控制。本文将探讨如何通过Seleni…

《Linux 基础指令实战:新手入门的命令行操作核心教程(第一篇)》

前引&#xff1a;当你第一次面对 Linux 系统中那片闪烁着光标、只有黑白字符的终端界面时&#xff0c;或许会和很多初学者一样感到些许茫然&#xff1a;这些由字母和符号组成的 “指令” 究竟该如何输入&#xff1f;它们又能完成哪些神奇的操作&#xff1f;其实&#xff0c;Lin…

03.【Linux系统编程】基础开发工具1(yum软件安装、vim编辑器、编辑器gcc/g++)

目录 1. 软件包管理器 1.1 什么是软件包 1.2 Linux软件生态 1.3 yum具体操作 1.3.1 查看软件包 1.3.2 安装软件 1.3.3 卸载软件 1.3.4 注意事项(测试网络) 1.3.5 yum指令集总结 1.4 yum源目录、安装源 2. Vim编辑器的使用 2.1 Linux编辑器-vim使用 2.2 vim的基本概…

3DMAX自动材质开关插件AutoMaterial安装和使用方法

3DMAX自动材质开关AutoMaterial&#xff0c;是一个3dMax脚本插件&#xff0c;它根据材质编辑器中当前活动的材质自动将材质应用于3dMax中新创建的对象&#xff0c;也适用于您复制的没有材质的对象。它作为一个开关&#xff0c;可以绑定到按钮或菜单来打开和关闭它。该工具的创建…

Linux内核调优实战指南

内核调优通常通过修改内核运行时参数来实现&#xff0c;这些参数的配置文件是 Linux 系统中核心的性能调整点。 内核调优配置文件名称 /etc/sysctl.conf: 这是最传统和主要的内核参数配置文件。系统启动时或手动执行 sysctl -p 命令时会读取并应用其中的设置。/etc/sysctl.d/*.…

Java基础常见知识点

Java 中 和 equals() 的区别详解_java中与equals的区别及理解-CSDN博客https://blog.csdn.net/m0_64432106/article/details/142026852深入理解Java中方法的参数传递机制 - 悟小天 - 博客园https://www.cnblogs.com/sum-41/p/10799555.html浮点型精度是什么意思&#xff1f;为…

OD C卷 -【高效货运】

文章目录高效货运高效货运 货车的额定载货量为wt&#xff1b;货物A单件重量为wa&#xff0c;单件运费利润为pa;货物B单件重量wb&#xff0c;单件运费利润为pb;每次出车必须包含A、B货物&#xff0c;且单件货物都不可分割&#xff0c;总重量达到额定的载货量wt;每次出车能够获取…

手动解压并读取geo 文件 series_matrix_table_begin series_matrix_table_end之间的数据

手动解压并读取geo 文件 series_matrix_table_begin series_matrix_table_end之间的数据 1. 手动解压并读取文件内容 file_path <- “K:/download/geo/raw_data/GEO/GSE32967_series_matrix.txt.gz” 使用latin1编码读取文件所有行 con <- gzfile(file_path, “r”) all_…

主板硬件研发基础--DP/DP++

现在的主板大多数使用的是比DP功能更加强大的DP++。 DisplayPort++(DP++)是 DisplayPort 技术的增强版,旨在提升与多种视频接口的兼容性和连接性能。以下是关于它的详细介绍: 功能特性 多协议兼容:DP++ 接口不仅支持 DisplayPort 标准的信号传输,还可以通过内部的转换电…

科技行业新闻发布平台哪家好?多场景推广专业方案服务商推荐

面对海量得新闻发布平台和碎片化的传播场景&#xff0c;如何精准选择推广方案无疑是企业主面临的一大难题&#xff0c;对于技术迭代迅速的科技行业更是如此。针对复杂的市场环境&#xff0c;一些专业的新闻发布平台往往能够针对性地给出营销方案&#xff0c;并提供一定技术支持…

SystemVerilog 学习之SystemVerilog简介

SystemVerilog简介SystemVerilog是一种硬件描述和验证语言&#xff08;HDVL&#xff09;&#xff0c;由Accellera开发并于2005年成为IEEE标准&#xff08;IEEE 1800&#xff09;。它在传统Verilog基础上扩展了高级验证和设计功能&#xff0c;广泛应用于数字电路设计、验证及系统…

JavaWeb--day3--AjaxElement路由打包部署

&#xff08;以下内容全部来自上述课程及课件&#xff09; Ajax &#xff08;此章节纯粹演示&#xff0c;因服务器端url链接失效&#xff0c;所以无法实战&#xff09; 1. 同步与异步 同步&#xff1a; 浏览器页面在发送请求给服务器&#xff0c;在服务器处理请求的过程…

IMF GDP的bug

IMF GDP 数据底子是官方数字&#xff0c;基本是沿用官方的&#xff0c;虽然经过修订或估算&#xff0c;存在4大“bug”&#xff1a;1. 依赖官方上报&#xff0c;真实性不保证2. PPP GDP 虚高&#xff0c;居民实际消费力低很多ppp gdp高&#xff0c;甚至gdp高的地方&#xff0c;…