第69节:Java中数据库的多表操作

前言

学习数据库的多表操作,去电商行业做项目吧!!!

达叔,理工男,简书作者&全栈工程师,感性理性兼备的写作者,个人独立开发者,我相信你也可以!阅读他的文章,会上瘾!,帮你成为更好的自己。

感谢!承蒙关照!

数据库的创建:
create database 数据库名 character set 字符集 collate 校对规则
数据库的删除:
drop database 数据库名
修改
alter database 数据库 character set 字符集
查询
show databases
show create database 数据库的名字
select database(); 当前数据库
切换数据库
use数据库名字

表操作:

create table 表名(列名 列的类型 列的约束,列名 列的类型 列的约束
)

列的类型:
char/varchar

列的约束
primary key 主键的约束
unique 唯一约素
not null 非空约素

自动增加 auto_increment

删除: drop table表名
修改: alter table表名(add, modify, change, drop)

修改表名:
rename table 旧表名 to 新表名
alter table 表名 character set 字符集

查询:
show tables;查询所有表
show create table 表名; 查询表的定义,表的创建语句
desc用于查询表的结构

表的插入:
insert into 表名(列名,列名) values (值1,值2);
表的删除:
delete from 表名 [where 条件]
表的修改:
update 表名 set 列名='值', 列名='值' [where 条件];
表的查询:
select [distinct] * [列名1,列名2] from 表名 [where 条件];
where的使用

>, >=, <, <=, !=, <>
is null is not null
in
between...and
and or notlike:
_:代表单个字符
%:代表多个字符分组: group by
条件过滤: having聚合函数:
sum();
avg();
count();
max();
min();

排序:
order by

asc: 升序
desc: 降序

多表查询

查看数据库
show databases;
创建数据库
create database dashu;
使用数据库
use dashu;

多表之间的约束

多表间的关系如何维护:
添加外键约束:
forerign key

alter table product add foreign key(cno) references category(cid);

product添加到category里.con等于cid之间有关系.

category
product

如果建立了表的外键约束,比如是产品,和产品分类,如果要删除产品分类,就要把产品分类对应产品的编码删除掉.

一个项目建立一个数据库

多表之间的关系:
一对多:商品和分类
分类是1,商品是多.

添加外键指向主键;
口诀:在多的一方添加一个外键,指向一的一方的主键.

多对多: 老师和学生,学生选课
多对多的关系很难表示?
口诀:多对多建表,多建一张中间表,中间表至少要有两个外建,这两个外键分别指向原来的那张表.

就是把多对多的关系弄成一对多的关系.

中间表的关系就是一对多的关系,一个学生学课表,一对多.

有两个外键以上,课表的编号对应学生.

建表的原则是,多对多的关系,中间要建立一个中间表连接, 中间表的字段就是外键, 至少要有两个以上, 建表嘛, 至少两个字符, 将多对多的关系拆分成一对多的关系,然后分别指向原来的那两张表.

一对一的关系: 公民和身份证

在一对一里添加一个外键指向id主键,添加唯一约素,外键,m->1.一对一是当作一对多处理,在任意一张表中添加一个外键,并且指向另一张表.将两张表合并为一张,可以将两张表的主键建立起来,连接,并让两张表中的主键相等.

拆表:

用于将个人常用的信息和不常用的信息拆分出来,使得查询效率更好,提供更好用户的体验.在表关系里,多对多用得比较多,一对多,然后才一对一.

用户表,订单表, 商品表,分类表

用户表:
用户ID
用户名
密码
手机号

订单表
订单编号
订单总价
创建时间
收货地址

商品表
商品编号
商品名称
商品价格

商品分类
分类ID
分类名称
分类描述

用户id,地址

分析

用户表到订单表->1对多

订单表创建一个外键,然后指向用户id.

商品表->商品分类
商品表中加外键->指向商品分类的id

订单表 和 商品表 -> 中间表
一个订单可以买多个商品
一个商品可以被多个用户去买,可以被多个订单所选择
m对n:

中间表 -> 外键约束多 -> 指向订单表 和 商品表为一.

订单表 商品表

中间表-> 订单编号 商品编号

// 用户表
create table user (uid int primary key auto_increment,username varchar(31),password varchar(31),phone varchar(11)
);insert into user(1,'zhangsan','12345','13344442333');
// 订单表(订单编号,订单时间,总价,地址,外键
create table orders(oid int primary key auto_increment,sum int not null,otime timestamp,address varchar(100),uno int,foreign key(uno) references user(uid)
);insert into orders values(1,200, null, '广州',1);
insert into orders values(2,300, null, '深圳',2);
// 商品表
// 商品id,商品名称,商品价格,外键
create table product(pid int primary key auto_increment,pname varchar(10),price double,cno int,foreign key(cno) references category(cid)
);// 添加商品
insert into product values(null, 'xiaomi', 233, 1);
// 商品分类表
// 分类id,分类名称,分类描述
create table category(cid int primary key auto_increment,cname varchar(15),cdesc varchar(100)
);insert into category values(null, '手机', '电子');

中间表,订单项

// 中间表:订单id,商品id,商品数量,订单项总价
create table orderitem(ono int, // -> oidpno int, // -> pidforeign key (ono) references orders(oid),foreign key (pno) references product(pid)count int,subsum double
)select * from orders;
select * from product;// 订单 商品 商品数量 商品总价
insert into orderitem values(1,7,100,100);
insert into orderitem values(1,8,100,100);// 添加商品
insert into orderitem values(2,5,1,100);
insert into orderitem values(2,3,100,100);

小结

// 多表之间关系的维护是由外键约束
foreign key
添加一个外键:
alter table product add foreign key (con) references category(cid);
foreign key (cno) references category (cid)建表原则:
一对多:
口诀: 在多的一方添加外键并指向另一张表多对多:
口诀: 将多对多的情况变成一对多的关系中间有一张中间表一对一:多用于拆表
将两张表合并为一张表,将两张表的主键建立起关系,原理将一对一变成一对多去处理

主键和唯一约束

唯一约素: 列里面的内容是唯一的,不能有重复的情况,但是可以为空.唯一约素是不能作为其它表的外键的,可以有多个唯一约素.

主键约束是不能为空的,唯一.外键都是指向另外一张表的主键,一张表只能有一个主键.

一对多:
在多的一方添加一个外键指向另一方
多对多:
拆成一对多,中间创建一个表,至少有两个外键,指向原来的表
一对一:
合并一张表,将主键建立关系

数据库软件
SQLyog和下载mysql软件.
架构设计器

category
orderitem
orders
product
user
// user 1->m
uid
username
password
phone
// orders
oid
sum
otime
address
uno// orderitem
ono
pno
ocount
subsum// product
pid
pname
price
cno
//category
cid
cname
cdesc

多表查询

交叉连接查询
笛卡尔积:查出来的是两张表的乘积
select * from product,category cno = cid;
select * from product as p,category as c where p.cno = c.cid;
select * from product  p,category  c where p.cno = c.cid;内连接查询
隐式内连接:
select * from product p, category c where p.cno = c.cid;
显示内连接
select * from product p inner join category c on p.con = c.cid;区别:
1.在查询出结构的基础上去做的where条件过滤;
2.是带条件去查询结果的,执行效率高// 添加数据
insert into product values(null,'dashujava',10,null);左外连接
select * from product p left outer join category c on p.cno = c.cid;
左外连接会将左表中的所有数据都查出来,如果右表没有会用null代替.// 右category 分类
insert into category values(100, '电脑', '详情');右外连接
select * from product p right outer join category c on p.cno = c.cid;
右外连接是只要右边有就显示
右外连接会将右表的所有数据都查出来,如果左边没有会用null替代.

分页查询

limit

select * from product limit 0,10;
select * from product limit 0,3;
select * from product limit 3,3;

startindex = (index-1)*3

计算启始索引

select * from product
// 查询分类名为手机
select cid from category where cname='手机';
select * from product where cno=1;
子查询
select * from product where cno=(select cid from category where cname='手机');// 查询信息
左连接:
select * from product  p left outer join category c on p.cno = c.cid;// 子查询 商品名称, 商品分类名称
select pname, cno from product;
select pname, (select cname c from category where p.cno = c.cid) from product p;
select max(sal) from emp;
select min(sal) from emp;select * from emp where sal = (select max(sal) from emp);
select * from emp where sal = (select min(sal) from emp);

如果看了觉得不错

点赞!转发!

达叔小生:往后余生,唯独有你
You and me, we are family !
90后帅气小伙,良好的开发习惯;独立思考的能力;主动并且善于沟通
简书博客: 达叔小生
https://www.jianshu.com/u/c785ece603d1

结语

  • 下面我将继续对 其他知识 深入讲解 ,有兴趣可以继续关注
  • 小礼物走一走 or 点赞

第69节:Java中数据库的多表操作相关推荐

  1. java mysql单库多表_第69节:Java中数据库的多表操作

    第69节:Java中数据库的多表操作 前言 学习数据库的多表操作,去电商行业做项目吧!!! 达叔,理工男,简书作者&全栈工程师,感性理性兼备的写作者,个人独立开发者,我相信你也可以!阅读他的文 ...

  2. Java中数据库的多表操作

    前言 学习数据库的多表操作,去电商行业做项目吧!!! 达叔,理工男,简书作者&全栈工程师,感性理性兼备的写作者,个人独立开发者,我相信你也可以!阅读他的文章,会上瘾!,帮你成为更好的自己. 感 ...

  3. 第80节:Java中的MVC设计模式

    第80节:Java中的MVC设计模式 前言 了解java中的mvc模式.复习以及回顾! 事务,设置自动连接提交关闭. setAutoCommit(false); conn.commit(); conn ...

  4. 第68节:Java中的MYSQL运用从小白到大牛

    第68节:Java中的MYSQL运用从小白到大牛 前言 学习java必备要求,学会运用!!! 常见关系化数据库 BootStrap是轻量级开发响应式页面的框架,全局css组件,js插件.栅格系统是将页 ...

  5. 第83节:Java中的学生管理系统分页功能

    第83节:Java中的学生管理系统分页功能 分页功能一般可以做成两种,一种是物理分页,另一种是逻辑分页.这两种功能是有各自的特点的,物理分页是查询的时候,对数据库进行访问,只是查一页数据就进行返回,其 ...

  6. 第76节:Java中的基础知识

    第76节:Java中的基础知识 设置环境,安装操作系统,安装备份,就是镜像,jdk配置环境,eclipse下载解压即可使用,下载tomcat 折佣动态代理解决网站的字符集编码问题 使用request. ...

  7. 第70节:Java中xml和tomcat

    第70节:Java中xml和tomcat 前言: 哭着也要看完,字数: jdbc crud - statement dao java.sql.Driver The interface that eve ...

  8. 第79节:Java中一些要点

    第79节:Java中一些要点 前言 一些知识点忘了没,可以通过一个点引出什么内容呢?做出自己的思维导图,看看自己到了哪一步了呢 内容 如果有人问jre,jdk,jvm是什么,你怎么回答呢? jre的英 ...

  9. 第78节:Java中的网络编程(上)

    第78节:Java中的网络编程(上) 前言 网络编程涉及ip,端口,协议,tcp和udp的了解,和对socket通信的网络细节. 网络编程 OSI开放系统互连 网络编程指IO加网络 TCP/IP模型: ...

最新文章

  1. mysql 统计做饼状图_PHP+mysql+Highcharts实现饼状统计图
  2. 基于Redis的单点登录
  3. WPF无边框拖动、全屏、缩放
  4. java getIV_Java SAP CRM get_children 方法里面参数 iv_as_copy 有什么用? _好机友
  5. 计算机是如何启动的?从未上电到操作系统启动
  6. Kubernetes学习总结(5)——Kubernetes 常见面试题汇总
  7. BZOJ.1178.[APIO2009]会议中心(贪心 倍增)
  8. asp.net 读取导入的project(mpp)文件
  9. 《大型网站技术架构:核心原理与案例分析李智慧》pdf版电子书网盘附下载链接+仪式感技术书阅读法
  10. R语言使用median函数计算dataframe指定数据列的中位数
  11. EM and Variational Inference Derivation
  12. java 串口 中文乱码_Java 实现 POS 打印机无驱串口打印(解决中文乱码)
  13. 智能手机算不算嵌入式系统?
  14. Android 手机OAT升级后应用没有更新问题解析
  15. 如何在Windows中调整ClearType以提高屏幕可读性
  16. 2021年广东省安全员B证(项目负责人)证考试及广东省安全员B证(项目负责人)作业考试题库
  17. 小妞会装机 -- 一个装机软件的开发笔记 (二)
  18. 机械臂论文笔记(一)【基于卷积神经网络的二指机械手 抓取姿态生成研究 】
  19. threejs 物体根据相机位置显示_threejs中深度与透明
  20. 西安建筑科技大学计算机真题,2016年西安建筑科技大学计算机应用技术数据库复试笔试仿真模拟题...

热门文章

  1. 企业数字化转型:IT部门的未来!
  2. Andersen Global拓展巴西业务版图;在巴西新增合作公司
  3. strtok是分割字符串,查找中间最长的单元
  4. C#---百度图像识别SDK的控制台简单应用;
  5. win10 病毒实时防护 关闭
  6. Django——Ajax
  7. java date只保存年月日_java date 只保留年月日
  8. 阅读书源最新2020在线导入_书源篇五
  9. 几种常用图像处理开源库简介及使用总结
  10. 给大家科普一下商标小知识没注册下来的商标,做吊牌,做包装袋,发朋友圈广告时千万不能打R。将未注册商标冒充注册商标使用的,或者使用未注册商标的,最高可处罚20%的营业额罚款