关联关系
创建表时,表与表之间存在的业务关系
外键: 用来建立关系的字段称为外键
有哪些关系:
- 一对一:有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.dname from 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.name from team t join player p on p.tid=t.id; 3. 查询1号部门工资低于3000的员工姓名,工资,部门地址 select e.ename,e.sal,d.loc from emp e join dept d on e.deptno=d.deptno where 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.dname from emp e left join dept d on e.deptno=d.deptno; 2. 查询所有部门名称,地址和对应的员工姓名,工资 select d.dname,d.loc,e.ename,e.sal from emp e right join dept d on 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.sql Connection 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. 执行SQL String 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语句,返回值是结果集对象,里面装着查询回来的结果.