数据库学习day_03:关联关系/ 关联查询/ JDBC
关联关系
创建表时,表与表之间存在的业务关系
外键: 用来建立关系的字段称为外键
有哪些关系:
- 一对一:有AB两张表,A表的一条数据对应B表的一条,同时B表的1条也对应A表的一条,称为一对一关系。
如何创建一对一的两张表:在从表(userinfo)中添加外键指向主表(user)的主键。
create table user(id int primary key auto_increment,username varchar(10),password varchar(10))charset=utf8;create table userinfo(uid int,nick varchar(10),email varchar(20))charset=utf8;insert into user values(null,'libai','123456');insert into userinfo values(1,'刺客','xxx@163.com');
- 一对多:有AB两张表,A表的一条数据对应B表的多条,同时B表的1条对应A表的一条,称为一对多关系。
如何创建一对多的两张表: 外键添加在多的表中
create table team(id int primary key auto_increment,name varchar(10))charset=utf8;create table player(id int primary key auto_increment,name varchar(10),tid int)charset=utf8;insert into team values(null,'北京队');insert into player values(null,'林书豪',1),(null,'王老五',1);
- 多对多:有AB两张表,A表的一条数据对应B表的多条,同时B表的1条对应A表的多条,称为多对多关系。
如何创建多对多的两张表: 创建单独的关系表
create table student(id int primary key auto_increment,name varchar(10))charset=utf8;create table teacher(id int primary key auto_increment,name varchar(10))charset=utf8;create table t_s(tid int,sid int);insert into student values(1,'小明'),(2,'小红'),(3,'小绿');insert into teacher values(1,'苍老师'),(2,'传奇哥');insert into t_s values(1,1),(1,2),(1,3),(2,1);
关联查询
关联查询: 查询存在关联关系的多张表的查询方式
三种关联查询的方式:1. 等值连接 2. 内连接 3. 外连接
等值连接
格式: select * from A,B where 关联关系 and 其它条件 1. 查询工资高于2000的员工的姓名和对应的部门名select e.ename,d.dnamefrom emp e,dept d where e.deptno=d.deptno and e.sal>2000;
内连接
格式: select * from A join B on 关联关系 where 其它条件1. 查询工资高于2000的员工的姓名和对应的部门名select e.ename,d.* from emp e join dept d on e.deptno=d.deptno where e.sal>2000;- 等值连接和内连接查询到的数据是一样的,都是两张表的交集数据2. 查询每个球队名和对应的球员名select t.name,p.namefrom team t join player pon p.tid=t.id;3. 查询1号部门工资低于3000的员工姓名,工资,部门地址select e.ename,e.sal,d.locfrom emp e join dept d on e.deptno=d.deptnowhere e.deptno=1 and e.sal<3000;
外连接:
等值连接和内连接查询的是两张表的交集数据,而外连接查询的是一张表的全部数据和另外一张表的交集数据格式: select * from A left/right join B on 关联关系 where 条件;insert into emp (empno,ename,sal) values(100,'灭霸',10000);1. 查询所有员工姓名和对应的部门名select e.ename,d.dnamefrom emp e left join dept don e.deptno=d.deptno;2. 查询所有部门名称,地址和对应的员工姓名,工资select d.dname,d.loc,e.ename,e.salfrom emp e right join dept don e.deptno=d.deptno;
关联查询总结:
如果查询的是多张表的数据,则使用关联查询, 查询的是两张表的交集数据使用等值连接或内连接(推荐),如果查询的是一张表的全部和另外一张表的交集数据则使用外连接.
各个关键字的顺序
select * from A join B on 关联关系 where普通字段条件 group by 字段名 having聚合函数条件 order by 字段名 limit 跳过条数,请求条数;
JDBC
什么是JDBC
JavaDataBaseConnectivity:Java数据库连接,是Sun公司提供的一套和数据库进行连接的API(Application Program Interface应用程序编程接口), 作用:通过Java语言和数据库软件进行连接
为什么使用JDBC
在工作中Java程序员有可能连接多种不同的数据库,为了避免Java程序员每一种数据库都学习一套新的方法,Sun公司定了一套方法的声明(JDBC),把方法名固定,不管连接的是什么数据库方法名是一样的,各个数据库厂商根据方法名写方法的实现类(驱动),这样Java程序员只需要掌握JDBC中方法的调用,即可访问任何数据库,而且安装JDBC规范所写的代码就算是换数据库代码一行都不用改.
如何使用JDBC
创建Maven工程
在pom.xml文件中添加以下jar包的坐标信息
mysql mysql-connector-java 5.1.6
创建Demo01.java 在main方法中写以下代码
//1. 注册驱动:告诉编译器使用的是什么数据库 异常抛出//Class.forName("com.mysql.jdbc.Driver");//2. 获取数据库连接 导包:java.sqlConnection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/newdb3?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true","root", "root");System.out.println(conn);//3. 创建执行SQL语句的对象Statement s = conn.createStatement();//4. 执行SQLString sql = "create table jdbct1(id int,name varchar(10))";s.execute(sql); //5. 关闭资源 conn.close();System.out.println("执行完成!");
执行SQL语句的对象Statement
- execute(sql) 可以执行任意SQL语句,但是推荐执行数据库和表相关的SQL(DDL数据定义语言)
- int row = executeUpdate(sql); 此方法执行增insert删delete改update的SQL ,方法的返回值为生效的行数
- ResultSet rs = executeQuery(sql); 此方法执行查询的SQL语句,返回值是结果集对象,里面装着查询回来的结果.
数据库学习day_03:关联关系/ 关联查询/ JDBC相关推荐
- MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)...
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- es父子结构查询_elasticsearch 学习之父子关联查询 parent/child
parent-child 关系 关联关系,可以为两个完全分开的文档,可以将一种文档类型以一对多的关系关联到另一个上 优点: 1.parent文档的更新不需要重新为子文档重建索引 2.对子文档进行添加, ...
- resultset mysql_MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)...
[声明] 欢迎转载,但请保留文章原始出处→_→ [正文] 一.ResultSet接口的介绍: 对数据库的查询操作,一般需要返回查询结果,在程序中,JDBC为我们提供了ResultSet接口来专门处理查 ...
- 数据库学习(MySQL):JDBC的简单增删改查实现
本文为原创,转载请注明出处: https://www.cnblogs.com/Tom-shushu/p/9171896.html 这里我们先在数据库建立一个userinfo表: CREATE TABL ...
- 【SQLite数据库学习】 连表查询
目录 一:数据分析 二:数据设计 三:数据库可视化操作 四:数据库命令行操作 一:数据分析 如下图,以视频播放器的ER图来进行数据分析 二:数据设计 新建表 表中添加数据 命令操作 如下 CREATE ...
- Mysql 数据库学习记录之空值查询
关键字:NULL 本文是关于mysql的空值查询,即某一列为空值,即值为NULL. 语法: SELECT * FROM 数据库表名 WHERE ...
- 数据库学习(十)— 查询演练
查询演练的数据表以及相应数据创建 drop table if exists goods; create table goods (id int unsigned primary key auto_i ...
- Oracle/MySQL数据库的表间关联查询_多表关联查询的SQL语句详解
文章目录 内连接 inner join 示例 外连接 outer join left outer join 左外连接 示例 right outer join 右外连接 示例 full outer jo ...
- MySQL中的关联查询
MySQL中的关联查询 (1)Question:关联是什么 关联是SQL语言中使用SELECT操作表的一种操作机制,用来联系两个或者多个表.SELECT是SQL中的查询语句,用于查询数据库中的数据.将 ...
最新文章
- 怎么样让自己更加从容的面对生活
- 知识图谱实体链接:一份“由浅入深”的综述
- JPA规范:一对多、一对一、多对多的双向关联与级联操作以及JPA联合主键
- Cocopods的升级错误解决
- 用maven建立一个工程2
- Bootstrap3 插件的原理
- 009.共享目录下VS编写的程序在linux下打开出现中文乱码
- matlab学习笔记(4)
- vue-quasar-admin 一个包含通用权限控制的后台管理系统
- 基于jedis.setnx(key, value)实现分布式锁
- 一、瞰景Smart3D软件介绍
- 怎样用java抽签小程序,可以作弊的抽签小程序,急求java抽签小程序
- 傲梅分区助手克隆Linux硬盘,傲梅分区助手如何复制磁盘?分区助手克隆磁盘的具体教程...
- 电脑系统pe去广告及恶意软件安装
- pop3邮箱怎么设置收发服务器端口,pop3设置(如何设置邮箱服务器?IMAP、POP3有何区别?)...
- 使用GLAD加载OpenGL的库
- android 单词本代码,android 背单词app源码(MVP架构)
- 2022年全球与中国磁阻随机存储器(MRAM)市场现状及未来发展趋势
- 企业微信开发之获取media_id的值
- C++ 读取TXT文件中的数据 每一行空格符相隔的数据单独取出
热门文章
- 关于 OneAPM Cloud Test DNS 监控的几个重要问题
- 去除警告,打电话,发信息,应用程序之间跳转,打印沙盒路径,字符串名字转换方法,包装导航控制器等的代码...
- bzoj 1877: [SDOI2009]晨跑 (网络流)
- 十天学Linux内核之第二天---进程
- android用于打开各种文件的intent
- IIS6.0上某些文件类型不能下载
- 初识WAP开发时..
- [异常处理]class kafka.common.UnknownTopicOrPartitionException (kafka.server.ReplicaFetcherThread)
- 解决使用mybatis分页插件PageHelper的一个报错问题
- Spark SQL中出现 CROSS JOIN 问题解决