`

用java类来设计表

    博客分类:
  • sql
阅读更多

 根据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实体类

    总的来说,自动将MySQL数据表生成Java实体类是提高开发效率的有效手段。通过理解数据库表结构并将其转化为符合Java语法规则的类,我们可以更快速地构建数据驱动的应用程序,同时减少了出错的可能性。这个过程涉及到...

    javaswing课程设计——课程表

    在这个“javaswing课程设计——课程表”项目中,学生或初学者将学习如何利用Swing来开发一个功能齐全的课程表应用。 首先,我们需要了解Java Swing的基本使用。Swing是基于事件驱动模型的,也就是说,用户在界面上...

    java实现课程表

    8. **面向对象编程**:Java是一种面向对象的语言,课程表的实现会涉及到类的设计、继承、封装和多态等概念。 9. **测试**:为了确保程序的正确性,需要进行单元测试和集成测试。JUnit是Java中常用的测试框架,可以...

    《kettle中调用java类》示例代码

    首先,Kettle支持两种方式来调用Java类:使用“Java Class”步骤和使用“Execute Java Script”步骤。"Java Class"步骤允许直接执行一个预编译的Java类,而"Execute Java Script"步骤则用于运行Java Script...

    java 读取表结构 mysql

    以上步骤详细解释了如何使用Java连接到MySQL数据库并读取表结构。在实际开发中,可能需要封装成更通用的方法或者类,以便在不同的场景下复用。此外,为了提高代码的健壮性和安全性,建议使用PreparedStatement来防止...

    java根据数据库表或视图创建实体

    3. **反射API**:这个工具可能使用了Java的反射机制来动态获取数据库表的信息,如字段名、类型等,并根据这些信息自动生成实体类的源代码。反射允许在运行时检查类、接口、字段和方法的信息,甚至可以动态地调用方法...

    使用Java自动生成Java类和XML文件

    总结来说,使用Java自动生成Java类和XML文件是一种常见的开发实践,它依赖于对Java编程和XML处理的理解,以及对代码生成策略的设计。通过这种方式,我们可以快速地构建项目骨架,专注于核心业务逻辑的实现,从而提升...

    JAVA-表设计生成工具

    使用"JAVA-表设计生成工具",开发者可以快速地获取到这些信息,并在Excel中进行进一步的分析和修改。Excel的灵活性使得团队成员可以轻松地共享、讨论和批准设计方案,而无需直接操作数据库。 在开发这个工具时,...

    java实体转mysql建表语句

    在Java开发中,将Java实体类转换为MySQL数据库的建表语句是一项常见的任务,它有助于快速构建数据库模型,尤其在使用ORM(对象关系映射)框架如Hibernate、MyBatis时更为便捷。本篇文章将深入探讨这个过程,并提供...

    用java写的左关联右关联join类

    现在,当我们用Java实现这个功能时,我们可能需要设计一个类或者一组类,这些类能够处理数据结构(例如,使用List、Map或者其他集合框架中的类来表示数据表),并提供方法来进行左关联和右关联的操作。这通常涉及到...

    用JAVA日历表

    本项目的核心是利用Java的`java.util.Calendar`类来构建日历功能,同时也可能涉及到`java.time`包中的类,如`LocalDate`,以实现更现代化的时间处理。 `java.util.Calendar`类是Java的标准日历实现,提供了获取和...

    Java 课程设计 个人信息调查表

    在Java课程设计中,个人信息调查表的实现是一个典型的面向对象编程的应用场景,它涉及到数据的收集、存储和处理。这个项目旨在让学生理解并实践Java语言的核心特性,如类、对象、封装、继承以及多态性。下面将详细...

    基于java编写的日程表管理系统简易版

    在Java中,通常会创建一个`Schedule`类来封装这些数据,同时可能包含一些与日程相关的操作方法。 2. 用户界面:用户界面是用户与系统交互的窗口,可以采用Java Swing或JavaFX来构建。用户应能方便地添加新日程,...

    java-生成单表完全动态查询

    这个“java-生成单表完全动态查询”技术可能使用了某种代码生成工具或者库,能够根据数据库表结构自动生成Java实体类。实体类通常包含对应数据库字段的属性和getter/setter方法,方便Java代码与数据库表进行映射。...

    java实现计算圆锥体的表面积和体积(实验文档)

    我们可以使用继承来实现多态,例如,我们可以定义一个 `Cylinder` 类,继承自 `Circle` 类,计算圆锥体的表面积和体积。 四、Java 中的常用包 Java 中有许多常用包,例如: * `java.applet`:提供了创建 applet ...

    基于java开发的日历设计

    在实际的日历设计中,我们需要扩展这些基础,构建完整的日期显示、事件管理、用户交互等功能,并可能需要使用到Java的日期时间API(如`java.time`包)来处理日期和时间。此外,还需要考虑多线程以支持并发访问,以及...

    java实现的日历表

    Java实现的日历表是一种常见的软件组件,常用于各种桌面应用程序和Web应用程序中,提供日期查看、选择和管理功能。在Java编程中,我们可以利用Java API中的`java.time`包和`javax.swing`包来创建这样的组件。下面将...

    java源码包---java 源码 大量 实例

     [MonthMaker.java] 月份表算法类  [Pallet.java] 调色板,统一配色类 Java扫雷源码 Java生成自定义控件源代码 2个目标文件 Java实现HTTP连接与浏览,Java源码下载 1个目标文件 摘要:Java源码,网络相关,HTTP ...

    java语言程序设计--吴倩_勘误表

    《Java语言程序设计--吴倩_勘误表》是一份重要的学习资料,主要针对吴倩编著的《Java语言程序设计》一书中的错误进行了详细记录和修正。这份勘误表对于正在学习Java编程的读者来说是十分有价值的,因为它可以帮助...

Global site tag (gtag.js) - Google Analytics