SQL语句(数据更新、查询操作)

news2024/11/27 12:54:03

数据库表操作

  • 创建数据库语法格式

    create table 表名(
    	字段名1 类型 约束,
        字段名2 类型 约束,
        ..... ..... 
    )
    
  • 创建学生表,字段要求如下:

    • 姓名(长度为10)、年龄、身高(保留2位小数)
    create table students(
        id int unsigned primary key auto_increment, -- id字段为主键,且值自增
        name varchar(20), -- name字段类型为字符串,长度为20
        age int unsigned, -- age 字段类型为无符号的整数
        height decimal(5,2) -- height字段类型为小数,小数位数为2    
    );
    

image-20240901202453172

  • 删除数据库表

    drop table students;
    drop table if exists students;
    
    -- 注释说明,不是sql语句,不会被执行
    -- 对语句的解释说明
    -- 创建students 表
    create table students(
        id int unsigned primary key auto_increment, 
        name varchar(20), 
        age int unsigned, 
        height decimal(5,2)
    );
    -- 删除数据集
    -- 注释的快捷键 ctrl 加 /
    drop table students;
    drop table if exists students;
    

数据操作

简单查询

select * from 表名;
select * from students;

添加一行数据

-- 主键自增长,可以用0或null代替
insert into 表名 values(...)
insert into students values(0,'亚瑟',22,177.56);

insert into 表名(字段1,字段2...)values(1,值2...)
insert into students(name) values('老夫子');
  • 练习
-- 姓名(长度为10)、班级(长度为8)、科目(长度为56)、成绩(保留一位小数)
create table scores(
name varchar(10),
class varchar(8),
subject varchar(56),
score decimal(4,1)
);

-- 将刚才创建的成绩表删除
drop table scores;

-- 全部
insert into scores values('mike','24期','软测','59');

-- 部分
insert into scores(name) values("tom");

--查询
select * from scores;

数据更新操作

添加多行数据

-- 方式一:写多条insert语句,多条语句之间用英文分号分隔
insert into students(id,name)values(0,'张三');
insert into students(id,name)values(0,'李四');
insert into students values(0,'李四',20,180);

-- 方式二:通过一条insert 语句插入多条数据,数据间用逗号分隔
-- insert into 表名 values(...),(...)...
insert into students values(0,'亚瑟3',23,167.56),(0,'亚瑟4',23,167.56);

-- insert into 表名(字段名1,字段名2...) values(字段名1,字段名2...),(字段名1,字段名2...)...
insert into students(id,name) values(0,'小黑'),(0,'小蓝'),(null,'大白');

修改数据

-- update 表名 set 字段名1=值1,字段名2=值2,...where 条件
-- 修改id为5的数据,将名称设为狄仁杰,年龄设为22
UPDATE students set name='狄仁杰',age=22 where id =5;

注意:修改数据时一定要加条件,否则修改的是所有记录的值

删除数据

-- delete from 表名 where条件(物理删除对应的数据)
delete from students where id=6;
  • 注意

    • 此方法为物理删除,工作中大部分使用逻辑删除
    • 逻辑删除是指通过设定一个字段来标识当前记录已经删除
    • is_delete字段来标识,1代表删除,0表示未删除

    image-20240901210114770

其他删除数据的方式:

-- truncate table 表名(清除表里面的数据,但是表结构会保留,自增长字段的值会从1开始)
truncate table students;

--drop table 表名(删除数据表,包括数据和表结构)
drop table students;

image-20240901210836384

数据库查询操作

数据准备

drop table if EXISTS students;

create table students(
studentNo VARCHAR(10) PRIMARY KEY,
name VARCHAR(10),
sex VARCHAR(1),
hometown VARCHAR(20),
age tinyint(4),
class VARCHAR(10),
card VARCHAR(20)
);

insert into students VALUES
('001','王昭君','女','北京','20','1班','340322199001247654'),
('002','诸葛亮','男','上海','18','2班','340322199102247125'),
('003','张飞','男','南京','24','3班','340322199201237547'),
('004','白起','男','安徽','22','4班','340322199301247584'),
('005','大乔','女','天津','19','3班','340322199401257659'),
('006','孙尚香','女','河北','18','1班','340322199501267344'),
('007','百里玄策','男','山西','20','2班','340322199607247884'),
('008','小乔','女','河南','15','3班',null),
('009','百里守约','男','湖南','21','1班','');

image-20240901212408281

查询的基本操作

  • 查询部分字段的值
-- select 字段1,字段2...from 表名(查询的为一部分的字段的信息)
-- 查询学生表中的姓名、性别、年龄的数据
select name,sex,age from students;
  • 取别名
-- 给表取别名
-- select 别名.字段名1,别名.字段名2...from 表名 as 别名
-- 这个语法为后面关联查询做准备,现在只需要知道这个语法即可
select s.name,s.sex,s.age from students as s;

-- 给字段取别名
-- select 字段名1 as别名1,字段名2 as别名2...from 表名;
select name as 姓名,sex as 性别,age as 年龄 from students;
  • 去重
-- select distinct 字段1,字段2...from 表名;
-- 根据学生的性别去重
select distinct sex from students;

条件查询

  • 语法格式
select 字段1,字段2...from 表名 where 条件
select * from students where id=5

条件查询:比较运算符

  • 比较运算符:大于(>)、等于(=)、小于(<)、大于等于(>=)、小于等于(<=)、不等于(<>或者!=)
-- 例1:查询小乔的年龄
select age from students where  name='小乔';
-- 例2:查询20岁以下的学生
select * from students where age<20;
-- 例3:查询家乡不在北京的学生 !=之间不能有空格
select * from students where hometown !='北京';

-- 1、查询学号是'007'的学生身份证号
select card from students where studentNo='007';
-- 2、查询1班以外的学生信息
select * from students where class <> '1班';
-- 3、查询年龄大于20的学生姓名和性别
select name,sex from students where age>20;

条件查询:逻辑运算符

  • 逻辑运算符:and(且,同时符合对应的条件),or(或,符合其中的一个条件),not(非,不符合该条件)
-- 查询年龄等于18的女生的记录(and)
select * from students where age=18 and sex='女'; 
-- 查询出女学生或者是1班的学生
select * from students where sex='女' or class='1班';
-- 查询非天津学生的记录
select * from students where hometown !='天津';
select * from students where not hometown ='天津';

-- 1、查询河南或河北的学生
select * from students where   hometown ='河南'or  hometown ='河北';
-- 2、查询2班的上海学生
select * from students where class='2班' and hometown ='上海'
-- 3、查询非20岁的学生
select * from students where not age =20;
select * from students where  age !=20;

条件查询:模糊查询

  • 模糊查询:like关键字

    • %:匹配任意个字符
    • _:匹配任意单个字符
    • 一般like关键字只用来匹配字段类型为字符串的
    -- 例1、查询姓'孙'的学生
    select * from students where name like '孙%'
    -- 例2、查询姓'孙'且名字是一个字的学生
    select * from students where name like '孙_';
    -- 例3、查询名字以'乔'结尾的学生
    select * from students where name like '%乔';
    -- 例4、查询姓名中包含'白'的学生
    select * from students where name like '%白%';
    
    -- 1、查询姓名为两个字的学生
    select * from students where name like '__';
    -- 2、查询姓'百'且年龄大于20的学生
    select * from students where name like '百%' and age>20;
    -- 3、查询学号以1结尾的学生
    select * from students where studentNo like '%1';
    

条件查询:范围查询

  • in :查询非连续范围内的数据
-- 查询家乡为北京或上海或广东的学生
select * from students where hometown in ('北京','上海','广东');

-- 相同实现方式
select * from students where hometown='北京' or hometown='上海' or  hometown='广东';
  • between…and:查询连续范围内的数据(用在数值型字段中)
-- 查询年龄在18到20之间的学生
select * from  students where age between 18 and 20;
-- 相同实现方式
select * from  students where age >=18 and age<=20;

-- 1、查询年龄为18或19或22的女生
select * from  students where age in (18,19,20) and sex='女'
-- 2、查询年龄在20到25以外的学生
select * from  students where age not between 18 and 25;

条件查询:为空判断

  • null和 ’ '字符串不一样
  • 空判断 is null
-- 查询出身份证号为空的信息
select * from  students where card is null;
  • 非空判断:is not null
-- 查询出身份证号不为空的信息
select * from  students where card is not  null;

排序

  • 语法格式:
select * from 表名 order by 字段1 asc|desc,字段2 asc|desc...
  • 字段的排序规则默认为升序排序(从小到大)
  • asc:表示从小到大排序(升序)
  • desc:表示从大到小排序(降序)
-- 例1:查询所有学生信息,按年龄从小到大排序
select * from students ORDER BY age;
-- 例2:查询所有学生信息,年龄按从大到小排序,年龄相同时,再按学号从小到大排序
select * from students ORDER BY age desc,studentNo;
-- 例3:查询所有学生信息,班级按从大到小排序,班级相同时,再按学号从小到大排序
select * from students ORDER BY class desc,studentNo;

分组和聚合

聚合函数介绍

  • 使用聚合函数方便进行数据统计
  • 聚合函数不能在where中使用

image-20240902091756708

聚合函数案例

  • count(*):求表的总的记录数
-- 查询学生表的总记录数
select count(*) from students;
  • max(字段名):查询对应字段的最大的值
-- 查询女生的最大年龄
select max(age) from students where sex='女';
  • min(字段名):查询对应字段的最小的值
-- 查询1班的最小年龄
select min(age) from students where class='1班';
  • sum(字段名):查询对应字段的值的总和
-- 查询北京学生的年龄总和
select sum(age) from students where hometown='北京';
  • avg(字段名):查询对应字段的值的平均数
-- 查询女生的平均年龄
select avg(age) from students where sex='女';
-- 1、查询所有学生的最大年龄、最小年龄、平均年龄
select max(age),min(age),avg(age) from students;
-- 2、一班共有多少个学生
select count(*) from students where class='1班';
-- 3、查询3班年龄小于18岁的同学有几个
select count(*) from students where class='3班' and age<18;

分组查询

  • 分组的目的是对每一组的数据进行统计(使用聚合函数)

    • 语法格式

      select 字段1,字段2,聚合函数...from 表名 group by 字段1,字段2...
      
    • 例子

      -- 查询各种性别的人数
      select sex,count(*) from students group by sex;
      -- 查询各种性别年龄最大的
      select sex,max(age) from students group by sex;
      -- 查询各个班级的人数
      select class,count(*) from students group by class;
      -- 查询各个班级中不同性别的人数
      select class,sex,count(*)  from students group by class,sex;
      
  • 分组后的数据筛选:

    • 将分组之后的数据当成是一个表数据,然后再通过having条件来对当前的表数据进行筛选。

    • 语法格式

      select 字段1,字段2,聚合函数...from 表名 group by 字段1,字段2...
      having 条件
      
      • having条件 运算符跟where条件运算符是一样的
      • having后面可以使用聚合函数
    • 例子

      -- 查询男生总人数
      select count(*) from students where sex='男'
      select sex,count(*) from students GROUP BY sex HAVING sex='男'
      
      -- 查询每个班级男生的总记录数 
      select class,sex,count(*) from students GROUP BY class,sex having sex='男'
      -- 查询所有班级中不同性别的记录数大于1的信息
      select class,sex,count(*) from students GROUP BY class,sex HAVING count(*)>1
      

      1.where 是对from后面指定的表进行数据筛选,属于对原始数据的筛选

      2.having 是对group by的结果进行筛选

      3.having后面的条件中可以用聚合函数,where后面不可以

分页查询

  • 语法格式

    select * from limit start,count
    
    • start表示的是开始的记录,索引是从0开始。0表示第一条记录
    • count 表示的是从start开始,查询多少条记录
  • 例子

    -- 查询前3行的学生信息
    select * from students limit 0,3;
    select * from students limit 3;
    
  • 分页查询实现

    select * from students limit (n-1)*m,m;
    
    • n表示的是页数
      • n=1,2,3,4
    • m表示的是每页显示的记录数
      • m=3
    • (n-1)*m,m是公式,并不是语法格式,不能直接写在SQL中,需要替换为具体的数字。

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

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

相关文章

安卓shiply热更新入门

目录 一。我的开发环境 二。集成shiply热更新sdk 三。编写代码 1。创建一个CustomRFixLog类 2。创建一个MyApplication类 3。配置AndroidManifest.xml 4。创建一个新的Activity继承AbsRFixDevActivity 用于测试 四。登录shiply后台配置 1。创建项目 五。制作补丁 1。在app…

Ae关键帧动画基础练习-街道汽车超车

目录 1.让背景向左移动 2.让小红车匀速移动 3.实现小黄车的超车 完成街道汽车超车的一个简单动画&#xff0c;背景向左移动看起来就如同画面向右移动了一般&#xff0c;根据这个原理&#xff0c;可以完成这个动画。 导入素材时&#xff0c;要选择不同的图层&#xff0c;这样…

微软AD替代方案统一管理Windows和信创电脑的登录认证与网络准入认证

自国资委79号文明确了2027年底前信息系统全面国产化的目标后&#xff0c;金融单位、央国企集团及各子公司纷纷加大国产化改造力度。不少子、孙公司表示&#xff0c;集团要求到2024年底或2025年底国外的关键IT基础设施要停止使用&#xff0c;如微软AD、云桌面等。 信创国产化是大…

Mybatis链路分析:JDK动态代理和责任链模式的应用

背景 此前写过关于代理模式的文章&#xff0c;参考&#xff1a;代理模式 动态代理功能&#xff1a;生成一个Proxy代理类&#xff0c;Proxy代理类实现了业务接口&#xff0c;而通过调用Proxy代理类实现的业务接口&#xff0c;实际上会触发代理类的invoke增强处理方法。 责任链功…

艾体宝洞察丨透过语义缓存,实现更快、更智能的LLM应用程序

传统的缓存只存储数据而不考虑上下文&#xff0c;语义缓存则不同&#xff0c;它能理解用户查询背后的含义。它使数据访问更快&#xff0c;系统响应更智能&#xff0c;对 GenAI 应用程序至关重要。 什么是语义缓存&#xff1f; 语义缓存解释并存储用户查询的语义&#xff0c;使…

功率谱密度估计(Power Spectral Density Estimation, PSD)介绍,轴承磨损检测

介绍 功率谱密度估计&#xff08;Power Spectral Density Estimation, PSD&#xff09;是信号处理中的一项重要技术&#xff0c;用于描述信号在频率域中的能量分布。PSD提供了信号的功率随频率变化的情况&#xff0c;是分析随机信号和确定信号频率特性的常用工具。 功率谱密度…

美团代付支持多模板全开源多种支付通道 多模版三合一源码附教程

美团代付 支持多模板全开源多种支付通道 多模版三合一源码附教程 美团代付源码&#xff0c;支持多模板&#xff0c;全开源&#xff0c;多种支付通道&#xff0c;其它的就没什么好介绍的了&#xff0c;有兴趣的自行去体验吧。

驱动(RK3588S)第五课时:字符设备驱动编程

目录 一、操作系统的框架二、设备的类型三、什么是设备四、杂项字符设备的 API五、代码实现1、底层实现&#xff08;内核&#xff09;2、应用层代码3、交叉编译环境4、结果展示 一、操作系统的框架 二、设备的类型 硬件设备其实是分类型的&#xff1a; 字符设备&#xff1a;所…

TCP/IP 报文传输过程

目录 1. 概念理解2. 传输过程 原文回到 TCP/IP 强烈推荐下面博客&#xff0c;详细阐述了TCP/IP协议概念和传输过程 TCP协议详解 (史上最全) 1. 概念理解 2. 传输过程 以一个具体例子为例&#xff0c;如下图所示&#xff0c;由A 给 F 发送一个数据包整个过程是怎样的

Windows 安装 MySQL8

目录 前言 下载 安装 配置 连接 前言 一般数据库都是部署在 Linux 服务器上&#xff0c;在 Windows 上开发&#xff0c;通过数据库连接工具来连接数据库。在工作中&#xff0c;如果条件允许&#xff0c;会有单独的开发库给开发人员使用&#xff0c;否则开发人员就只能连接…

U盘损坏深度解析与高效数据恢复指南

一、U盘损坏现象初探 在数字化时代&#xff0c;U盘作为便捷的数据存储与传输工具&#xff0c;几乎成为了我们日常生活与工作中的必需品。然而&#xff0c;不少用户都曾遭遇过U盘损坏的困境&#xff0c;面对无法读取、文件丢失或系统提示错误等问题&#xff0c;往往感到束手无策…

【概率与统计 动态规划】 808. 分汤

本文涉及知识点 C动态规划 数学 概率与统计 LeetCode 808. 分汤 有 A 和 B 两种类型 的汤。一开始每种类型的汤有 n 毫升。有四种分配操作&#xff1a; 提供 100ml 的 汤A 和 0ml 的 汤B 。 提供 75ml 的 汤A 和 25ml 的 汤B 。 提供 50ml 的 汤A 和 50ml 的 汤B 。 提供 25…

Chapter 10 async函数 await关键字

欢迎大家订阅【Vue2Vue3】入门到实践 专栏&#xff0c;开启你的 Vue 学习之旅&#xff01; 文章目录 前言一、async 函数二、await 关键字 前言 在现代 JavaScript 开发中&#xff0c;异步编程是一个重要的概念。随着 ES2017 的引入&#xff0c;async 函数和 await 关键字为处…

一文读懂Mysql连接数的基本知识

目录 前言1. 基本知识2. 常用命令 前言 原先写过一篇SQL Server的知识点&#xff0c;推荐阅读&#xff1a;Sql Server缓冲池、连接池等基本知识&#xff08;附Demo&#xff09; 其余知识点推荐阅读&#xff1a; java框架 零基础从入门到精通的学习路线 附开源项目面经等&…

Windows10上Nginx如何通过自签名证书方式发布Https服务(上)

背景 在Android开发中使用平板设备进行调试,Android版本是13。在调试中遇到一个这样的报错信息:“java.io.IOException: Cleartext HTTP traffic to 192.168.137.1 not permitted”,然后查了下报错原因是:应用正在尝试通过不安全的HTTP协议进行网络通信,而你的应用运行的环…

计时计费收银软件如何控制设备 佳易王电玩城PS5机计时定时提醒管理系统操作教程

一、前言 计时计费收银软件如何控制设备 佳易王电玩城PS5机计时定时提醒管理系统操作教程 【特别说明&#xff1a;下载的文件为压缩包文件&#xff0c;右键 解压到当前文件夹&#xff0c;将解压后 的文件夹复制到电脑的D盘或E盘&#xff0c;打开该文件夹&#xff0c;将程序图…

竞品分析文档——word版

今天和大家免费分享产品必备文档模板——竞品分析文档&#xff08;word&#xff09;&#xff0c;包括一下部分内容&#xff1a; 1、竞品概述——基本信息、竞品目的、发展历程、产品定位、商业模式 2、市场分析——发展背景、发展现状、流量分析 3、用户分析——用户画像、用…

如何使用Windows自带的软件进行扫描

我们在使用电脑办公的时候&#xff0c;可能会需要进行文件的扫描。有的小伙伴在扫描的过程中可能会出现一些问题&#xff0c;明明扫描仪已经安装了&#xff0c;但是又不知道Windows扫描仪程序在哪里怎么启动&#xff1b;那么今天就跟大家分享一下Windows扫描仪程序在哪里&#…

uniapp插槽用法

目录 什么是插槽? 基本概念 默认插槽 命名插槽 作用域插槽 场景一:子插槽向父组件传递一个字符串 场景二:子插槽向父组件传递对象 什么是插槽? 在 UniApp 中&#xff0c;插槽&#xff08;Slot&#xff09;是一种允许父组件向子组件特定位置插入HTML内容的方式。这种方式使得组…

安科瑞DJSF1352型电子式直流电能表 CE/UL等资质认证

产品概述 DJSF1352型电子式直流电能表采用液品显示&#xff0c;具有RS485功能可与微机进行数据交换。适合充电桩直流计量、电池、太阳能电池板等直流信号设备电量测量和电能计量使用&#xff0c;亦可用于工矿企业&#xff0c;民用建筑&#xff0c;楼宇自动化等现代供配直…