Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)(中)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)

Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)(上):https://developer.aliyun.com/article/1580541

8 子查询【重要】

  • 子查询将查询结果放在where 从句 和 from 从句后使用

8.1 子查询作为where条件

SELECT 列名 FROM 表名 Where 条件 (子查询结果)

多个: in(子查询)

高于最高: >all

高于最低: >any

-- 1、查询工资大于bruce的员工信息
-- 第一步:查询bruce的工资
select salary from t_employees where first_name = 'bruce';
-- 第二步:查询大于上面结果的员工信息
select * from t_employees where salary > 6000;
-- 子查询写法
select * from t_employees where salary > ( select salary from t_employees where first_name = 'bruce')

-- 2、查询与bruce同一个部门的员工信息(单个)

-- 3、查询与king同一个部门的员工信息(多个)
-- 第一步:查询king所在的部门
select department_id from t_employees where last_name = 'king';
-- 第二步:查询80、90部门的员工信息
select * from t_employees where department_id in (80,90)
-- 子查询写法
select * from t_employees where department_id in (select department_id from t_employees where last_name = 'king')

-- 4、查询工资高于60部门所有员工的员工信息(高于最高)
select salary from t_employees where department_id = 60
select * from t_employees where salary >all (select salary from t_employees where department_id = 60)

-- 5、查询工资高于60部门员工的员工信息(高于最低)
select * from t_employees where salary >any (select salary from t_employees where department_id = 60)

8.2 子查询作为from查询

SELECT 列名 FROM**(子查询的结果集)**WHERE 条件;

-- 6、查询工资前五的员工信息
select * from t_employees order by salary desc
-- 子查询写法
select * from (select * from t_employees order by salary desc) temp limit 0,5

总结:

  • 子查询可用在from从句或者where从句后面使用
  • 单行单列结果:一般用于where后面,直接做判断
  • 多行单列结果:一般用于where后面,in、>all、>any
  • 多行多列结果:一般用于from后面 注意:必须要给子查询取别名

9 连接查询【重要】

当需要查询的字段在不同的表中,那么需要进行连接查询

  • 连接查询分类:
  • 内连接
  • 外连接
  • 全连接(mysql不支持)

注意:如果对表直接进行连接查询,会产生笛卡尔积

/*
   当查询数据不在同一张表中,那么需要使用连表查询
    1、确定关联表
    2、确定表的关系(消除笛卡尔积)
  注意:多表连接查询的时候,会产生笛卡尔积(多张表的数据的乘积)

 等值连接
  连表查询
   内连接
     只有左表和右表中的数据之间互相的关联的数据才会被查询出来
     语法1: select 列名,..... from 左表,右表  where 左表.关联字段 = 右表.关联字段
     语法2: select 列名,..... from 左表 [inner] join 右表 on  左表.关联字段 = 右表.关联字段
   外连接
     左外连接
       左表中所有的数据都会被查询出来
       左表如果没有与右表与之关联,也会被查询出来,右表的数据使用null填充
       语法:select 列名,..... from 左表 left join 右表 on 左表.关联字段 = 右表.关联字段
        右外连接
       右表中所有的数据都会被查询出来
       右表如果没有与左表与之关联,也会被查询出来,左表的数据使用null填充
       语法:select 列名,..... from 左表 right join 右表 on 左表.关联字段 = 右表.关联字段

    全连接(mysql不支持)
    合并查询:
       union:将多个查询结果进行合并,并且去重
       union all:将多个查询结果进行合并
             使用合并查询注意的地方:
          1、两个结果集合并,要保证列数一致
          2、两个结果集合并,类型要兼容
    非等值连接
    自连接 
*/


9.1 内连接

-- 查询员工的姓名、工资、入职日期、部门名称、部门位置、
-- 内连接查询
select ename,sal,hiredate,dname,location from emp,dept where emp.deptno = dept.dept no
select ename,sal,hiredate,dname,location from emp join dept on emp.deptno = dept.deptno

9.2 左外连接

-- 左外连接查询
select ename,sal,hiredate,dname,location from emp left join dept on emp.deptno = dept.deptno

9.3 右外连接

-- 右外连接查询
select ename,sal,hiredate,dname,location from emp right join dept on emp.deptno = dept.deptno

9.4 全连接(不支持)

9.5 合并查询

-- 合并查询
select ename,sal,hiredate,dname,location from emp left join dept on emp.deptno = dept.deptno
union 
select ename,sal,hiredate,dname,location from emp right join dept on emp.deptno = dept.deptno
  • Union作用
  • union 合并两个查询子集,且会去重
  • union all 合并两个查询子集,不会去重
  • 注意:合并的要保证列数相同,类型兼容

9.6 非等值连接

-- 非等值连接
-- 查询员工姓名、职位、工资等级 
select ename,job,grade from emp left join salgrade on sal >= losal and sal <= hisal

9.7 表的自连接

-- 自连接
-- 查询员工姓名,以及经理的姓名
select e1.ename,e2.ename from emp e1 left join emp e2 on e1.mgr = e2.empno

10 DML 操作【重要】

10.1 新增

  • 语法1:insert into 表名 (字段名1,…) values (值1,…)
  • 语法2:insert into 表名 values(值1,值2,…);
  • 要求:每一个字段都必须给值,且顺序要与表中的顺序一致
  • 语法3:insert into 表名 (字段名1,…) values (值1,…),(值1,…),(值1,…),…
-- 增加
-- 语法1:insert into 表名 (字段名1,...) values (值1,...)
-- 增加一个员工
insert into emp (empno,ename,job,sal) values (7778,'尼古拉斯','php开发',10000);
-- 语法2:insert into 表名 values(值1,...)   
-- 要求:每一个字段都必须给值,且顺序要与表中的顺序一致
-- 增加一个员工
insert into emp values (7779,'尼古拉斯','php开发',7777,now(),10000,200,20);
-- 语法3:insert into 表名 (字段名1,...) values (值1,...),(值1,...),(值1,...),....
-- 添加3个员工
insert into emp (empno,ename,job,sal) values 
(8881,'李雷','英语',8000),(8882,'韩梅梅','数学',8000),(8883,'马冬梅','体育',6000)

10.3 删除

  • 语法:delete from 表名 [where 过滤条件]
  • 注意:如果不写where条件那么就是全表删除(谨慎操作!!!)
-- 删除(逻辑删除)
-- 语法:delete from 表名 [where 过滤条件]
-- 注意:如果不写where条件那么就是全表删除(谨慎操作!!!)
-- 删除编号为7778的员工信息
delete from emp where empno = 7778;

-- 批量删除8881 8882 8883 8884
delete from emp where empno in(8881,8882,8883,8884);

delete from emp -- 跑,别回头

11 数据类型 【了解】

11.1 数据类型

11.1.1 数值类型

类型 大小 范围(有符号) 范围(无符号) 用途
INT 4 字节 (-2 147 483 648,2 147 483 647) (0,4 294 967 295) 大整数值
DOUBLE 8 字节 (-1.797E+308,-2.22E-308) (0,2.22E-308,1.797E+308) 双精度浮点数值
DOUBLE(M,D) 8个字节,M表示长度,D表示小数位数 同上,受M和D的约束 DOUBLE(5,2) -999.99-999.99 同上,受M和D的约束 双精度浮点数值
DECIMAL(M,D) DECIMAL(M,D) 依赖于M和D的值,M最大值为65 依赖于M和D的值,M最大值为65 小数值

1.1.2 日期类型

类型 大小 范围 格式 用途
DATE 3 1000-01-01/9999-12-31 YYYY-MM-DD 日期值
TIME 3 ‘-838:59:59’/‘838:59:59’ HH:MM:SS 时间值或持续时间
YEAR 1 1901/2155 YYYY 年份值
DATETIME 8 1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和时间值
TIMESTAMP 4 1970-01-01 00:00:00/2038 结束时间是第 2147483647 秒北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07 YYYYMMDD HHMMSS 混合日期和时间值,时间戳

1.1.3 字符串类型

类型 大小 用途
CHAR 0-255字符 定长字符串 char(10) 10个字符
VARCHAR 0-65535 字节 变长字符串 varchar(10) 10个字符
BLOB(binary large object) 0-65535字节 二进制形式的长文本数据
TEXT 0-65535字节 长文本数据
/*
  数值类型
    整数型
       int  long
        浮点型
       float double

       double(n,m) 可以表示数字的位数
           n:表示总位数(整数位数+小数位数)
                     m:表示小数位数
       举例:double(7,2)
          dicmal(n,m)

  字符串类型
     char   
          定长字符串  char(5) 最大只能储存5个字节,不满5个字节占5个字节空间
          最大范围:0~255个字节
         varchar
          可变长字符串  varchar(10) 最大只能储存10个字节,不满10个字节占实际字节数的空间
          最大范围:0~65535个字节
     text
          大型文本,最大范围:0~65535个字节
         blob
          以二进制的形式存储  最大范围:0~65535个字节
     在以后的开发:视频、音频、图片 只在数据库存地址
  日期时间类型
      date 
          表示日期
      time
          表示时间
      datetime
          表示日期时间
      timestamp
          表示日期时间(时间戳)
*/

Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)(下):https://developer.aliyun.com/article/1580558

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
3月前
|
存储 Java
# 【Java全栈学习笔记-U1-day02】变量+数据类型+运算符
本篇笔记主要围绕Java全栈学习的第二天内容展开,涵盖了变量、数据类型、运算符以及Scanner类的应用。首先介绍了变量的概念与命名规范,以及如何定义和使用变量;接着详细讲解了Java中的基本数据类型,包括整型、浮点型、字符型、布尔型等,并通过实例演示了数据类型的运用。随后,深入探讨了各类运算符(赋值、算术、关系、逻辑)及其优先级,帮助理解表达式的构成。最后,介绍了如何利用Scanner类实现用户输入功能,并通过多个综合示例(如计算圆面积、购物打折、变量交换及银行利息计算)巩固所学知识。完成相关作业将进一步加深对这些基础概念的理解与实践能力。
54 12
|
1月前
|
存储 关系型数据库 MySQL
大数据新视界 --面向数据分析师的大数据大厂之 MySQL 基础秘籍:轻松创建数据库与表,踏入大数据殿堂
本文详细介绍了在 MySQL 中创建数据库和表的方法。包括安装 MySQL、用命令行和图形化工具创建数据库、选择数据库、创建表(含数据类型介绍与选择建议、案例分析、最佳实践与注意事项)以及查看数据库和表的内容。文章专业、严谨且具可操作性,对数据管理有实际帮助。
大数据新视界 --面向数据分析师的大数据大厂之 MySQL 基础秘籍:轻松创建数据库与表,踏入大数据殿堂
|
1月前
|
SQL 关系型数据库 MySQL
MySQL下载安装全攻略!小白也能轻松上手,从此数据库不再难搞!
这是一份详细的MySQL安装与配置教程,适合初学者快速上手。内容涵盖从下载到安装的每一步操作,包括选择版本、设置路径、配置端口及密码等。同时提供基础操作指南,如数据库管理、数据表增删改查、用户权限设置等。还介绍了备份恢复、图形化工具使用和性能优化技巧,帮助用户全面掌握MySQL的使用方法。附带常见问题解决方法,保姆级教学让你无忧入门!
MySQL下载安装全攻略!小白也能轻松上手,从此数据库不再难搞!
|
29天前
|
关系型数据库 MySQL 定位技术
MySQL与Clickhouse数据库:探讨日期和时间的加法运算。
这一次的冒险就到这儿,期待你的再次加入,我们一起在数据库的世界中找寻下一个宝藏。
60 9
|
26天前
|
存储 关系型数据库 MySQL
【赵渝强老师】OceanBase数据库从零开始:MySQL模式
《OceanBase数据库从零开始:MySQL模式》是一门包含11章的课程,涵盖OceanBase分布式数据库的核心内容。从体系架构、安装部署到租户管理、用户安全,再到数据库对象操作、事务与锁机制,以及应用程序开发、备份恢复、数据迁移等方面进行详细讲解。此外,还涉及连接路由管理和监控诊断等高级主题,帮助学员全面掌握OceanBase数据库的使用与管理。
107 5
|
2月前
|
负载均衡 算法 关系型数据库
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL集群架构负载均衡故障排除与解决方案
本文深入探讨 MySQL 集群架构负载均衡的常见故障及排除方法。涵盖请求分配不均、节点无法响应、负载均衡器故障等现象,介绍多种负载均衡算法及故障排除步骤,包括检查负载均衡器状态、调整算法、诊断修复节点故障等。还阐述了预防措施与确保系统稳定性的方法,如定期监控维护、备份恢复策略、团队协作与知识管理等。为确保 MySQL 数据库系统高可用性提供全面指导。
|
2月前
|
SQL 关系型数据库 MySQL
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL 数据库 SQL 语句调优方法详解(2-1)
本文深入介绍 MySQL 数据库 SQL 语句调优方法。涵盖分析查询执行计划,如使用 EXPLAIN 命令及理解关键指标;优化查询语句结构,包括避免子查询、减少函数使用、合理用索引列及避免 “OR”。还介绍了索引类型知识,如 B 树索引、哈希索引等。结合与 MySQL 数据库课程设计相关文章,强调 SQL 语句调优重要性。为提升数据库性能提供实用方法,适合数据库管理员和开发人员。
|
2月前
|
关系型数据库 MySQL 大数据
大数据新视界--大数据大厂之MySQL 数据库课程设计:MySQL 数据库 SQL 语句调优的进阶策略与实际案例(2-2)
本文延续前篇,深入探讨 MySQL 数据库 SQL 语句调优进阶策略。包括优化索引使用,介绍多种索引类型及避免索引失效等;调整数据库参数,如缓冲池、连接数和日志参数;还有分区表、垂直拆分等其他优化方法。通过实际案例分析展示调优效果。回顾与数据库课程设计相关文章,强调全面认识 MySQL 数据库重要性。为读者提供综合调优指导,确保数据库高效运行。
|
3月前
|
关系型数据库 MySQL Java
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库