`

用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个条件去除废数据  

// 将所有的外键列和参照列去相等比较

// 剩下的该写什么条件写什么条件

// 多表查一定要给表起别名

分享到:
评论

相关推荐

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

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

    使用java设计钟表,界面美观

    运用java设计简单的钟表,执行文件,打开即可运行

    java 读取表结构 mysql

    java 读取表结构 mysql 数据库名: 表名: 字段描述 字段名 数据类型 是否可为空 自增 主键

    JAVA课程设计(倒计时)

    一个关于java的课程设计,能完成倒计时的功能,附报告和代码

    秒表软件设计,Java源代码

    而Java这种简单灵活的跨平台设计语言实现了基于这些设备的相应软件的开发。该程序是一个图形界面的秒表,主要采用了awt包和swing包提供各种组件,实现了分组记时的功能,使用起来非常的清晰方便。

    javaswing课程设计——课程表

    本系统采用javaswing+mysql.实现的功能有:课程表按日查询,按月查询。课程表录制。代码简单,适合初学者模仿

    java树结构,树结构表设计

    我当时回答树设计就是通过一pid来保存父结点的id值来实现,通过递归来生成一棵树,但是面试官说如果树比较大的话这样做的效率太低,网上找好像也都是这种方法,后来发现以前看用友的表结构设计里没有用这种方法,...

    《Java语言程序设计》课程教学设计方案.doc

    " " " "第 6 章 Java的基本可重用类"3 "3 " " " " "第 7 章 图形用户界面 "3 "3 " " " " "第 8 章 多线程程序设计 "3 "3 " " " " "第 9 章 Java小应用程序 "3 "3 " " " " "第 10 章 网络编程基础 "3 "2 " " " " "第 ...

    Java开发技术大全(500个源代码).

    demoMutex.java 使用上面这个类来演示线程的互斥 commSource.java 一个共享资源的类 demoSynchrony.java 演示线程的同步 setDataThread.java 设置数据的线程类 readDataThread.java 读取数据的线程类 ...

    计算机程序设计(Java)-教案--单元二--Java语言开发基础.docx.docx

    课堂教学计划表 计算机程序设计(Java)-教案--单元二--Java语言开发基础全文共8页,当前为第1页。 计算机程序设计(Java)-教案--单元二--Java语言开发基础全文共8页,当前为第1页。 课程名称 Java程序设计 教师...

    【Java语言程序设计教程】Java课程设计-教学大纲.docx

    本课程要求学生使用JAVA语言来独立完成软件的设计与开发。训练学生做出一个中、小型的项目,培养学生利用Java语言进行软件设计的基本思路和方法,提高运用Java语言解决实际问题的能力,提高编程技术,为今后从事项目...

    JAVA动态表单设计,自定义表单,自定义数据

    JAVA动态表单设计,自定义表单,自定义数据,在线设计,数据库存储

    Java服务器程序设计

    用java进行客户端的applet (小程序)开发的技术已广为使用,而用java进行服务器端的servlet(服务器小程序)开发则尚需揭开其神秘的面纱,本书正是基于这样的目的编写的。全书从java服务器的体系结构、开发工具和...

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

    java -- 自动生成实体类,dao层,及单表完全动态查询,不需要繁琐的写各种查询方法,为开发提供了极大的遍历

    JAVA-表设计生成工具

    根据现有表生成Excel版表设计

    java比较两个mysql数据库中的表信息差异

    一个简单JAVA 小工程进行两个MYSQL数据库对象的比较,导入eclipse中,修改jdbc.properties文件中的JDBC信息,然后直接运行action包类中的main方法,生成EXCEL,excel中包含表,表中列,索引,函数过程差异比对结果。...

    java课程设计 java大型作业 时钟

    利用java设计的多功能时钟…………java大型作业

    Java软件结构 设计和使用数据结构

    Java 设计 数据结构 集合 自己实现Java集合框架。

    基于java的模拟链表设计

    本模拟链表操作系统实现了常见的链表的相关操作,如随机链表建立,添加删除编辑链表中的指定元素,选中链表的删除,链表中元素的排序等操作。本系统所实现的这些功能基本上能够很好的实现模拟实际链表的各种操作的...

    Java程序设计PPT详解

    本书讲解Java程序设计知识及其编程方法,包括Java语言的基础语法、结构化程序设计、面向对象程序设计、数组、字符串、向量、哈希表、泛型、枚举、异常处理、文件和数据流、图形用户界面设计、小应用程序、线程、编程...

Global site tag (gtag.js) - Google Analytics