当前位置: 首页 > news >正文

数据库(five day)——物物而不物于物,念念而不念于念。

1.子查询

(1)where 子查询

①多行单列

配合innot in操作(类似于数据范围查询)

例:

显示工资与各个经理相同的雇员信息(包含经理本身)。

select * from emp

where sal=(select sal from emp where job='MANAGER');

(2)HAVING 子查询

伴随着GROUP BY子句出现,在HAVING子句中子查询的一般返回单行单列数据。

例:

查询出平均工资最低的职位信息、此职位的人数。此职位的平均工资

SELECT job,COUNT(empno),AVG(sal)
FROM emp
GROUP BY job
HAVING AVG(sal)=(
SELECT MIN(asal)
FROM (SELECT AVG(sal) asal
FROM emp
GROUP BY job));

更简便的做法:

SELECT job,COUNT(empno),AVG(sal)

FROM emp

GROUP BY job

ORDER BY AVG(sal) ASC

LIMIT 1;

(3)select 子查询(很少用)

例:

显示所有雇员的姓名、职位、部门名称和部门位置。

方便演示,强行使用SELECT子查询这种非主流子写法:
关联empdept两个表进行多表查询更简便。

SELECT e.ename,e,job,

(SELECT dname FROM dept WHERE deptno=e.deptno),

(SELECT loc FROM dept WHERE deptno=e.deptno)

FROM emp e;

(4)from 子查询

其用多表查询也能实现效果,其主要目的是提升效率,提高查询性能。

例:

查询出每个部门的编号、名称、位置、部门人数、平均工资。

多表查询:

SELECT d.deptno,dname,loc,COUNT(empno),AVG(sal)

FROM dept d LEFT JOIN emp e

ON d.deptno=e.deptno

GROUP BY d.deptno;

其计数数据量:emp表14行,dept表4行;

        14*4=56

from子查询:

SELECT d.deptno,dname,loc,num,asal

FROM dept d LEFT JOIN

(

        SELECT deptno,COUNT(empno) num,AVG(sal) asal

        FROM emp

        GROUP BY deptno

) temp

ON d.deptno = temp.deptno;

其计算数据量:

        其子查询先通过emp表查询,对其进行整理分组为三组(14,3),再对dept表(4)进行配对。

        14+3*4=26

2.更新操作

(1)数据的更新操作

(增、删、改)

针对DML两类

  • 查询DQL

(执行顺序:FROM-->WHERE-->GROUP BY-->HAVING-->SELECT-->ORDER BY-->LIMIT)

  • 更新增加删除修改

复制表语句:

CREATE TABLE myemp AS SELECT * FROM emp;

删除表语句:

drop table myemp; 

(2)插入数据

数据类型分类
  • 数字直接数字
  • 字符串使用单引号括起来表示
  • 日期
  • 符合格式字符串例如: '2025-07-16 14:10:00'
  • DATETIMEDATE函数返回值

SQLite数据类型还有:

插入数据语法格式

INSERT INTO 表名称[(字段,字段,...)] VALUES(,);

其有两种写法:

①可省略null部分,只需字段与值一一对应。

②省略字段部分,但不可省略null且得按表顺序写值。

如:

insert into myemp (empno,ename,job,hiredate,sal,deptno) 

values (1314,'GOUSHENG','PRESIDENT',

DATETIME('now','localtime'),6666,40);

insert into myemp

values (5200,'MARRY','SECRETARY',

DATETIME('now','localtime'),3000,99999,40);

(3)修改数据

语法

UPDATE 表名称 SET 字段=,字段=,... [WHERE 更新条件(s)]

如果不写WHERE表示修改所有数据

例:

        1.将所有销售的基本工资修改为2000

UPDATE myemp SET sal=2000 WHERE job='SALESMAN';

        2.将公司最早雇佣的雇员的基本工资增长20%

UPDATE myemp SET sal=sal*1.2 
WHERE hiredate=(SELECT MIN(hiredate)
FROM myemp);

        3.将公司基本工资最低的雇员的基本工资修改为公司的平均工资。

--公司的最低基本工资
SELECT MIN(sal) FROM myemp;
--公司的平均工资
SELECT AVG(sal) FROM myemp;
--嵌套
UPDATE myemp SET sal=(SELECT AVG(sal) FROM myemp)
WHERE sal=(SELECT MIN(sal) FROM myemp);

        4.将所有雇员的雇佣日期修改为今天。

UPDATE myemp SET hiredate=DATETIME('now','localtime');

(4)删除数据

语法

DELETE FROM 表名称 [WHERE 删除条件(s)];

如果不写WHERE表示删除所有数据

例:

        1.删除公司工资最高的雇员。

DELETE FROM myemp 
WHERE sal=(SELECT MAX(sal) FROM myemp);

        2.删除没有领导的雇员。

DELETE FROM myemp WHERE mgr IS NULL;

        3.删除所有雇员。

DELETE FROM myemp;

http://www.lryc.cn/news/589875.html

相关文章:

  • JAVA面试宝典 -《分布式ID生成器:Snowflake优化变种》
  • uniapp+vue3+鸿蒙系统的开发
  • Rust入门之并发编程基础(三)
  • Android开发知识点总结合集
  • 基于docker的redis集群
  • 智慧公厕系统打造洁净、安全的公共空间
  • 嵌入式学习笔记--MCU阶段--DAY06DHT11练习
  • java反序列化:CC1链深度剖析
  • EP01:【NLP 第二弹】自然语言处理概述
  • SFT:大型语言模型专业化定制的核心技术体系——原理、创新与应用全景
  • PDF 转 Word 支持加密的PDF文件转换 批量转换 编辑排版自由
  • AFFiNE开源知识管理和协作平台的部署,替代Notion不是梦~
  • Linux Ubuntu apt包管理器安装K8s1.30.1+Ingress-Nginx
  • 【Vue】tailwindcss + ant-design-vue + vue-cropper 图片裁剪功能(解决遇到的坑)
  • flink sql读hive catalog数据,将string类型的时间戳数据排序后写入kafka,如何保障写入kafka的数据是有序的
  • Clip微调系列:《coOp: learning to prompt for vision-language models》
  • Python 进阶学习之全栈开发学习路线
  • Excel处理控件Aspose.Cells教程:使用 Python 在 Excel 中创建甘特图
  • Apache RocketMQ + “太乙” = 开源贡献新体验
  • 【C#】实体类定义的是long和值识别到的是Int64,实体类反射容易出现Object does not match target type
  • 查看.bin二进制文件的方式(HxD十六进制编辑器的安装)
  • Golang学习之常见开发陷阱完全手册
  • 【深度学习】神经网络-part3
  • 第一章 【vue】基础(超详细)
  • 解锁高效Excel技能:摆脱鼠标,快速编辑单元格
  • Git远程仓库与协作技巧详解
  • 如何关闭Elasticsearch的安全认证的解决方法
  • 机器学习sklearn入门:归一化和标准化
  • CG--资料分析1
  • 【后端】配置SqlSugar ORM框架并添加仓储