根据java类来设计表
做一个项目的时候首先需要对数据进行建模
// 多对一 员工--部门
drop table if exists employee;
// 建表
create table department
(
id int primary key auto_increment,
name varchar(20)
);
create table employee
(
id int primary key auto_increment,
name varchar(20),
departmentid int,
constraint departmentid_FK foreign key(departmentid) references department(id)
);
// 插入数据
insert into department (name) values('开发部');
insert into department (name) values('销售部');
insert into department (name) values('人事部');
insert into employee(name,departmentid) values('张三', 1);
insert into employee(name,departmentid) values('李四', 1);
insert into employee(name,departmentid) values('王五', 2);
insert into employee(name,departmentid) values('赵六', 2);
insert into employee(name,departmentid) values('田七', 3);
insert into employee(name,departmentid) values('田七', 4); 错
insert into employee(name) values('小红');
// 多对多
create table teacher
(
id int primary key auto_increment,
name varchar(20)
);
create table student
(
id int primary key auto_increment,
name varchar(20)
);
中间关系表
create table tea_stu
(
stuid int,
teaid int,
primary key(stuid,teaid),
constraint stuid_FK foreign key(stuid) references student(id),
constraint teaid_FK foreign key(teaid) references teacher(id)
);
// 插入数据
insert into student(name) values('张三');
insert into student(name) values('李四');
insert into student(name) values('王五');
insert into student(name) values('赵六');
insert into student(name) values('田七');
insert into student(name) values('周八');
insert into teacher(name) values('老张');
insert into teacher(name) values('老方');
// 插入中间表
insert into tea_stu (stuid,teaid) values(1,1);
insert into tea_stu (stuid,teaid) values(1,2);
insert into tea_stu (stuid,teaid) values(2,1);
insert into tea_stu (stuid,teaid) values(5,1);
insert into tea_stu (stuid,teaid) values(6,1);
insert into tea_stu (stuid,teaid) values(4,2);
insert into tea_stu (stuid,teaid) values(3,2);
// 一对一
create table people
(
id int primary key auto_increment,
name varchar(20)
);
create table idcard
(
id int primary key,
location varchar(20),
constraint peopleid_FK foreign key(id) references people(id)
);
// 插入数据
insert into people(name) values('张三');
insert into people(name) values('李四');
insert into people(name) values('王五');
insert into idcard(id,location) values(1,'天津');
insert into idcard(id,location) values(2,'北京');
insert into idcard(id,location) values(3,'上海');
九 、多表查询
// 查出1号部门所有的员工
select * from employee where departmentid=1;
题目: 查出开发部所有的员工
select id from department where name='开发部';
// 子查询
select * from employee where departmentid=(select id from department where name='开发部');
// 一条语句查出来 就需要查两张表
select * from employee,department;
| id | name | departmentid | id | name |
+----+------+--------------+----+--------+
| 1 | 张三 | 1 | 1 | 开发部 |
| 1 | 张三 | 1 | 2 | 销售部 |
| 1 | 张三 | 1 | 3 | 人事部 |
| 2 | 李四 | 1 | 1 | 开发部 |
| 2 | 李四 | 1 | 2 | 销售部 |
| 2 | 李四 | 1 | 3 | 人事部 |
| 3 | 王五 | 2 | 1 | 开发部 |
| 3 | 王五 | 2 | 2 | 销售部 |
| 3 | 王五 | 2 | 3 | 人事部 |
| 4 | 赵六 | 2 | 1 | 开发部 |
| 4 | 赵六 | 2 | 2 | 销售部 |
| 4 | 赵六 | 2 | 3 | 人事部 |
| 5 | 田七 | 3 | 1 | 开发部 |
| 5 | 田七 | 3 | 2 | 销售部 |
| 5 | 田七 | 3 | 3 | 人事部 |
| 6 | 小红 | NULL | 1 | 开发部 |
| 6 | 小红 | NULL | 2 | 销售部 |
| 6 | 小红 | NULL | 3 | 人事部 |
笛卡尔积: 多张表所有的记录排列组合的结果
假如 a表(3条记录)和b表(4条记录) 查出来有 3*4=12 条记录
在笛卡尔积中有很多无用(错误)的数据(废数据), 需要想办法剔除
只有外键列的值和被参照列的值相等的记录才是有效的
剔除废数据的条件就是 外键列=被参照列
select * from employee,department where employee.departmentid=department.id;
+----+------+--------------+----+--------+
| id | name | departmentid | id | name |
+----+------+--------------+----+--------+
| 1 | 张三 | 1 | 1 | 开发部 |
| 2 | 李四 | 1 | 1 | 开发部 |
| 3 | 王五 | 2 | 2 | 销售部 |
| 4 | 赵六 | 2 | 2 | 销售部 |
| 5 | 田七 | 3 | 3 | 人事部 |
+----+------+--------------+----+--------+
剔除了废数据的结果,也就是数据都是有效的
在这个前提下再加条件,该查什么就查什么
select employee.* from employee,department where employee.departmentid=department.id and department.name='开发部';
// 多表查询 习惯性地会为表起别名
select e.* from employee e,department d where e.departmentid=d.id and d.name='开发部';
思考: 查张三是哪个部门的
题目: 查三张表
1) 查1号老师的学生的id
select * from tea_stu where teaid=1;
2) 查1号老师的学生的信息
select s.* from tea_stu ts,student s where ts.stuid=s.id and ts.teaid=1;
3) 查出老方的学生的信息
select s.* from tea_stu ts, student s, teacher t where ts.teaid=t.id and ts.stuid=s.id and t.name='老方';
// n张表联合查询,需要写n-1个条件去除废数据
// 将所有的外键列和参照列去相等比较
// 剩下的该写什么条件写什么条件
// 多表查一定要给表起别名
分享到:
相关推荐
总的来说,自动将MySQL数据表生成Java实体类是提高开发效率的有效手段。通过理解数据库表结构并将其转化为符合Java语法规则的类,我们可以更快速地构建数据驱动的应用程序,同时减少了出错的可能性。这个过程涉及到...
在这个“javaswing课程设计——课程表”项目中,学生或初学者将学习如何利用Swing来开发一个功能齐全的课程表应用。 首先,我们需要了解Java Swing的基本使用。Swing是基于事件驱动模型的,也就是说,用户在界面上...
8. **面向对象编程**:Java是一种面向对象的语言,课程表的实现会涉及到类的设计、继承、封装和多态等概念。 9. **测试**:为了确保程序的正确性,需要进行单元测试和集成测试。JUnit是Java中常用的测试框架,可以...
首先,Kettle支持两种方式来调用Java类:使用“Java Class”步骤和使用“Execute Java Script”步骤。"Java Class"步骤允许直接执行一个预编译的Java类,而"Execute Java Script"步骤则用于运行Java Script...
以上步骤详细解释了如何使用Java连接到MySQL数据库并读取表结构。在实际开发中,可能需要封装成更通用的方法或者类,以便在不同的场景下复用。此外,为了提高代码的健壮性和安全性,建议使用PreparedStatement来防止...
3. **反射API**:这个工具可能使用了Java的反射机制来动态获取数据库表的信息,如字段名、类型等,并根据这些信息自动生成实体类的源代码。反射允许在运行时检查类、接口、字段和方法的信息,甚至可以动态地调用方法...
总结来说,使用Java自动生成Java类和XML文件是一种常见的开发实践,它依赖于对Java编程和XML处理的理解,以及对代码生成策略的设计。通过这种方式,我们可以快速地构建项目骨架,专注于核心业务逻辑的实现,从而提升...
使用"JAVA-表设计生成工具",开发者可以快速地获取到这些信息,并在Excel中进行进一步的分析和修改。Excel的灵活性使得团队成员可以轻松地共享、讨论和批准设计方案,而无需直接操作数据库。 在开发这个工具时,...
在Java开发中,将Java实体类转换为MySQL数据库的建表语句是一项常见的任务,它有助于快速构建数据库模型,尤其在使用ORM(对象关系映射)框架如Hibernate、MyBatis时更为便捷。本篇文章将深入探讨这个过程,并提供...
现在,当我们用Java实现这个功能时,我们可能需要设计一个类或者一组类,这些类能够处理数据结构(例如,使用List、Map或者其他集合框架中的类来表示数据表),并提供方法来进行左关联和右关联的操作。这通常涉及到...
本项目的核心是利用Java的`java.util.Calendar`类来构建日历功能,同时也可能涉及到`java.time`包中的类,如`LocalDate`,以实现更现代化的时间处理。 `java.util.Calendar`类是Java的标准日历实现,提供了获取和...
在Java课程设计中,个人信息调查表的实现是一个典型的面向对象编程的应用场景,它涉及到数据的收集、存储和处理。这个项目旨在让学生理解并实践Java语言的核心特性,如类、对象、封装、继承以及多态性。下面将详细...
在Java中,通常会创建一个`Schedule`类来封装这些数据,同时可能包含一些与日程相关的操作方法。 2. 用户界面:用户界面是用户与系统交互的窗口,可以采用Java Swing或JavaFX来构建。用户应能方便地添加新日程,...
这个“java-生成单表完全动态查询”技术可能使用了某种代码生成工具或者库,能够根据数据库表结构自动生成Java实体类。实体类通常包含对应数据库字段的属性和getter/setter方法,方便Java代码与数据库表进行映射。...
我们可以使用继承来实现多态,例如,我们可以定义一个 `Cylinder` 类,继承自 `Circle` 类,计算圆锥体的表面积和体积。 四、Java 中的常用包 Java 中有许多常用包,例如: * `java.applet`:提供了创建 applet ...
在实际的日历设计中,我们需要扩展这些基础,构建完整的日期显示、事件管理、用户交互等功能,并可能需要使用到Java的日期时间API(如`java.time`包)来处理日期和时间。此外,还需要考虑多线程以支持并发访问,以及...
Java实现的日历表是一种常见的软件组件,常用于各种桌面应用程序和Web应用程序中,提供日期查看、选择和管理功能。在Java编程中,我们可以利用Java API中的`java.time`包和`javax.swing`包来创建这样的组件。下面将...
[MonthMaker.java] 月份表算法类 [Pallet.java] 调色板,统一配色类 Java扫雷源码 Java生成自定义控件源代码 2个目标文件 Java实现HTTP连接与浏览,Java源码下载 1个目标文件 摘要:Java源码,网络相关,HTTP ...
《Java语言程序设计--吴倩_勘误表》是一份重要的学习资料,主要针对吴倩编著的《Java语言程序设计》一书中的错误进行了详细记录和修正。这份勘误表对于正在学习Java编程的读者来说是十分有价值的,因为它可以帮助...