多表操作

1、什么是外键,为表添加外键约束和删除外键的约束
2、三种关联关系,会向关联表中添加和删除数据
3、学会使用交叉连接,内连接,外连接以及复合条件连接查询多表中的数据
4、会子查询,使用IN, EXISTS,ANY,ALL关键字以及比较运算符查询多表中的数据
一、外键
1、 对于数据库中的数据有一定的很好参照完整性,如学生档案和成绩单两张表。若学生档案中学生张三的档案被删除,就会产生垃圾数据,为了保证数据的完整性,将两表之间的数据建立联系,因此,需要在成绩表中添加外键约束
外键是引用另一个表的列或者多列,被引用的列应该具有主键约束或唯一性约束,外键用户建立和加强两个表数据之间的连接。
建立班级表grade和学生表student,外键列只能插入参照列存在的值,参照列被参照的值不能被删除,这就保证了数据的参照完整性。
gid为外键
2、为表添加外键约束
真正连接两个表的数据,就需要为表添加外键约束。
alter table 表名 add constraint FK_ID foreign key(外键字段名)REFERENCES 外表表名(主键字段名);
为student表添加外键约束,
在这里插入图片描述在这里插入图片描述
上述表可以看出,gid为student表的外键,gid依赖于grade表中的主键id。这样表就可以通过外键关联起来
建立外键的表必须是InnoDB类型的,只有这种支持外键。FK_ID外键名不能加引号。
对于主表中的数据被删除或者修改,从表中对应的数据也应该被修改,否则数据库中有许多没有意义的垃圾数据。因此,可以在建立外键时添加ON DELETE或者ON UPDATE子句告诉数据库,怎样避免垃圾数据的产生。
alter table 表名 add constraint FK_ID foreign key (外键字段名) REFERENCE 外表表名(主键字段名)
【ON DELETE{CASCADE|SET NULL|NO ACTION|RESTRICT}】
【ON UPDATE{CASCADE|SET NULL|NO ACTION|RESTRICT}】
3、删除外键约束
需要解除两个表之间的关联关系时,需要删除外键约束。格式
alter table 表名 drop foreign key 外键名
例:将student表中的外键约束删除
FK_ID外键名
删除后查看student表
二、操作关联表
1、关联关系
由于实际开发中,需要根据实体的内容设计数据表,实体间会有各种关联关系,所以根据实体设计的
数据表之间也会存在各种关联关系
,关联关系有三种,多对一(员工(外键建立)与部门),一对一(人与身份证(从表中的主键作为外键)),多对多(学生与课程,建立连接表,会存在两个外键,两个外键可以重复但是两者关系不能重复)。
2、添加数据
添加的主键id为1,2
由于student表的外键和grade表的主键关联,因此在为student表添加数据是,gid只能是1或者2,不能是其他值。
向student表中添加数据选择班级1的学生
3、删除数据
由于某些情况下,需删除关联表中的数据,例如学校的软件一班取消了,就要将数据库中该班级及班级的学生一起删除,由于grade表和student之间存在关联关系。
由于参照列被参照的值是不能被删除,因此,在删除软件一班时,一定要先删除该班级的所有学生,然后再删除班级。
现在student表中将涉及的学生删除 然后删除班级
显示只剩下2班
不能直接删除班级
直接删除二班,显示出错
三、连接查询
在关系型数据管理系统中,建立表时各个数据之间的关系不必确定,通常将每个实体的所有信息放在一个表中,当查询数据时,通过连接操作查询多个表中的实体信息,当两个或多个表中存在相同意义的字段时,便可以通过这些字段对不同的表进行连接查询
1、交叉连接
返回的结果为被连接的两个表中所有数据行的笛卡尔积,即返回第一个表中符合查询条件的数据行数,乘以第二个表中符合查询条件的数据行数。
SELECT * FROM 表1 CROSS JOIN 表2;
CROSS JOIN 连接两个要查询的表,可以查询两个表中所有数据的组合。
在这里插入图片描述
在这里插入图片描述
CROSS JOIN
2、内连接
SELECT 查询字段 FROM 表1【INNER】JOIN 表2 ON 表1.关系字段=表2.关系字段
利用ON和WHERE共同使用,考虑连接条件和选择条件WHERE,例如下习题2
3、外连接
对于返回的结果包含查询条件,连接条件的数据,同时可以包含没有关联的数据。使用外连接分为左连接和右连接
SELECT 查询字段 FROM 表1【LEFT|RIGHT|OUTER】JOIN 表2 ON 表1.关系字段=表2.关系字段 WHERE 条件
左连接,返回左表的所有记录和右表中符合连接条件的记录。

4、复合条件连接查询
在连接查询的过程中,通过添加过了条件限制查询结果。
通过内连接并将查询结果按年龄排序
习题
有部门表dept和员工表employee,
1、查询存在年龄大于21岁的员工所对应的部门信息 dept部门和员工表employee
连接并利用where条件
2、采用自连接查询方式查询与王红所在同一个部门的员工
与王红同一部门的员工

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Java中进行MySQL多表操作需要使用JDBC(Java Database Connectivity)技术,具体步骤如下: 1. 加载MySQL驱动程序 在Java中连接MySQL数据库需要加载MySQL驱动程序,可以使用Class.forName()方法加载。 ``` Class.forName("com.mysql.jdbc.Driver"); ``` 2. 建立数据库连接 使用DriverManager.getConnection()方法建立数据库连接,需要传入数据库URL、用户名和密码。 ``` String url = "jdbc:mysql://localhost:3306/test"; String user = "root"; String password = "123456"; Connection conn = DriverManager.getConnection(url, user, password); ``` 3. 创建Statement对象 使用Connection.createStatement()方法创建Statement对象,用于执行SQL语句。 ``` Statement stmt = conn.createStatement(); ``` 4. 执行SQL语句 使用Statement.executeUpdate()方法执行SQL语句,可以执行增、删、改操作。 ``` String sql = "insert into user(name, age) values('Tom', 20)"; stmt.executeUpdate(sql); ``` 使用Statement.executeQuery()方法执行SQL查询语句,返回ResultSet对象,可以遍历结果集获取查询结果。 ``` String sql = "select * from user"; ResultSet rs = stmt.executeQuery(sql); while(rs.next()) { String name = rs.getString("name"); int age = rs.getInt("age"); System.out.println(name + " " + age); } ``` 5. 关闭连接 使用Connection.close()方法关闭连接。 ``` conn.close(); ``` 以上是Java进行MySQL多表操作的基本步骤,具体操作需要根据业务需求来设计SQL语句。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值