类和数据库的扫盲

类图(Class Diagram):面向对象中最常用的图。功能:显示系统中的类、接口以及他们之间的静态结构和关系的一种静态模型。三个基本组件:类名、属性、方法
UML:Unified Modeling Language 统一建模语言。类之间的关系有:泛化(Generalization),实现(Realization),依赖(Dependency),关联(Association)。
其中,关联关系又分为聚合关系(Aggregation)和合成关系(Composition)
泛化:是一种is-a的关系,对象间耦合度关系最大的一种关系,子类继承父类中的所有细节,使用继承来表达,子类指向父类,用带三角箭头的实线表示。
实现:就是一种接口和实现的关系。用带三角箭头的虚线表示,由实现类指向接口。
依赖:对象之间最弱的一种关联方式,是临时性的关联。代码中一般指的是由局部变量、函数参数、返回值建立的对于其他对象的调用关系。
一个类调用被依赖类中的某些方法而得以完成这个类的一些职责。使用带箭头的虚线表示,箭头从使用类指向被依赖类。
关联:对象之间的一种引用关系,比如客户类和订单类之间的关系,用带箭头的实现表示。
聚合(Aggregation) : 表示has-a的关系,是一种不稳定的包含关系。较强于一般关联,有整体与局部的关系,并且没有了整体,局部也可单独存在。
如公司和员工的关系,公司包含员工,但如果公司倒闭,员工依然可以换公司。在类图使用空心的菱形表示,菱形从局部指向整体。
组合(Composition) : 表示contains-a的关系,是一种强烈的包含关系。组合类负责被组合类的生命周期。是一种更强的聚合关系。部分不能脱离整体存在。
如公司和部门的关系,没有了公司,部门也不能存在了;调查问卷中问题和选项的关系;订单和订单选项的关系。在类图使用实心的菱形表示,菱形从局部指向整体。

//字节流输出到中文,btye[]表示字节数组,将数据以字节的形式存储到数组中
// 使用默认编码
String data = "中文";
ServletOutputStream sos = response.getOutputStream();
byte[] b = data.getBytes();// 浏览器默认使用GBK编码
sos.write(b);

// 使用UTF-8编码
String data = "中文";
response.setContentType("text/html;charset=UTF-8");
ServletOutputStream sos = response.getOutputStream();
byte[] b = data.getBytes("UTF-8");// 告诉浏览器请使用UTF-8编码
sos.write(b);

//字符流输出到中文
String data = "中文";
PrintWriter out = response.getWriter();
out.write(data);// 默认使用ISO8859-1

DTD:Document Type Definition 文档类型定义,是为了程序间的数据交换而建立的关于标记符的语法规则。可以看作是一个或多个XML文档。
TLD:Tag Lib Describe 标签库描述文件

Java类和表结构是对应的
Java对象和表中的一条记录是对应的
数据库的操作包括---------库操作和----------表操作
SELECT DATABASE();// 显示当前正在使用的数据库
SHOW TABLES;// 显示表格
ALTER TABLE employee ADD image blob; // 在上面基本表的基础上增加一个image列
删除表中的字段使用DROP
查看库中的所有表格
SHOW TABLES;
查看表的结构
DESC employee;
查看表的创建细节
SHOW CREATE TABLE employee;
在上面员工表的基本上增加一个image列。
ALTER TABLE employee ADD image blob;
修改job列,使其长度为60。
ALTER TABLE employee MODIFY job varchar(60);
删除image列。
ALTER TABLE employee DROP image;
表名改为user。
RENAME TABLE employee TO user;
修改表的字符集为utf8
ALTER TABLE user CHARACTER SET utf8;
列名name修改为username
ALTER TABLE user CHANGE name username VARCHAR(10);

水平线(前高、前低),分A,分B
趋势线
拐点线
60日均线(股价的生命线)和30日均线系统
黄金分割线
斐波那契扩展线
日内均线

DDL:数据定义语言,描述数据库中要存储的现实世界实体的语言,数据库和表结构的创建
DML:数据操作语言,对数据库中表的插入、修改和删除操作
关键词:UPDATE,DELETE,INSERT。注意三个都有介词:insert into,update set, delete from
在mysql数据库中,字符串和日期要包含在单引号中,只有字符和日期才有单引号包裹,其他的没有,空值为NULL
想表中插入数据(一条记录,可以认为是一个对象):INSERT INTO user VALUES(1,'tom','12','male','1991-12-11');
在进行数据修改时候,使用update,想一想要更新数据就是要设置某一字段的数值,那么必须要有set这个关键字才能重新确定数值,切记切记
将所有员工薪水修改为5000元。
UPDATE user SET salary=5000;
将姓名为’zxn’的员工薪水修改为3000元。
UPDATE user SET salary=3000 where name='zxn';
将姓名为’lyx’的员工薪水修改为4000元,job改为ccc。
UPDATE user SET salary=4000,jbb='ccc' where name='lyx';
将杜小文的薪水在原有基础上增加1000元。
UPDATE user SET salary=salary+1000 where name='杜晓雯';
删除表中名称为’zxn’的记录。
DELETE FROM user WHERE username='zxn';
删除表中所有记录。一条一条的删除记录
DELETE FROM user;
使用truncate删除表中记录。撕掉整张表,重新建立表结构
TRUNCATE TABLE user;

DQL:数据查询语言,查询表中的数据,关键字:SELECT FROM
查询表中所有学生的信息。
SELECT * FORM student;
查询表中所有学生的姓名和对应的英语成绩。
SELECT name,english FROM student;
过滤表中重复数据。
SELECT name, DISTINCT english FROM student;

在所有学生数学分数上加10分特长分。
SELECT name, math+10 FROM student;
统计每个学生的总分。
SELECT name,english+chinese+math FROM student;
使用别名表示学生分数
SELECT name AS 姓名,english+chinese+math AS 总分 FROM student;

查询姓名为王五的学生成绩
SELECT * FROM student WHERE name='王五';
查询英语成绩大于90分的同学
SELECT * FROM student WHERE english>90;
查询总分大于200分的所有同学
SELECT * FROM stuent WHERE (english+chinese+math)>200;

查询英语分数在 80-90之间的同学。
SELECT * FROM student WHERE english BETWEEN 80 AND 90;
查询数学分数为89,90,91的同学。
SELECT * FROM student WHERE math IN(89,90,91);
查询所有姓李的学生成绩。
SELECT * FROM student WHERE name LIKE '李%';
查询数学分>80,语文分>80的同学。
SELECT * FORM student WHERE math>80 AND chinese>90;

对数学成绩排序后输出。
SELECT name,math FROM student ORDER BY math;
对总分排序后输出,然后再按从高到低的顺序输出
SELECT name,english+chinese+math AS 总分 FROM student ORDER BY 总分 DESC;
对姓李的学生汉语成绩排序输出
SELECT * FROM student WHERE name LIKE '李%'ORDER BY chinese;

笛卡尔乘积:所有域的所有取值的一个组合,不能重复.表示所有的组合情况
D1={张三,李四}
D2={计算机专业,信息安全专业,通信专业}
D3={张老师,李老师}
则D1*D2*D3他们的笛卡尔积为:
{(张三,计算机专业,张老师),
(张三,计算机专业,李老师),
(张三,信息安全专业,张老师),
(张三,信息安全专业,李老师),
(张三,通信专业,张老师),
(张三,通信专业,李老师),
...
}
链接查询
a.交叉连接:返回两个表的笛卡尔积
b.内连接:表与表之间的连接,满足条件的数据将会重新组成新表返回过来
SELECT * FROM customers c,orders o WHERE c.id=o.customer_id;
或者
SELECT * FROM customers c INNER JOIN orders o ON c.id=o.customer_id;
c.外连接:努力了
左外连接LEFT JOIN:左外连接的结果集包括左表的所有行,如果连接的左表的某行在右表中没有匹配,所选列均为
SELECT * FROM customers c LEFT OUTER JOIN order o ON c.id=o.customer_id;
右外连接RIGHT JOIN:左外连接的反响连接,右表的某行在左表中没有匹配,则返回左表所选数据的Null
全连接FULL JOIN:返回左表和右表的所有行,没有的数据为

例子:
表a
----------------------------
id name
1 张三
2 李四
3 王五
----------------------------
表b
----------------------------
id job parent_id
1 23 1
2 32 2
3 45 4
----------------------------
a.id 和 b.parent_id存在关系

1)内连接:SELECT a.*,b.* FROM a INNER JOIN b ON a.id=b.parent_id;
结果:
1 张三 1 23 1
2 李四 2 32 2

2)左外连接:SELECT a.*,b.* FROM a LEFT JOIN b ON a.id=b.parent_id;
结果:
1 张三 1 23 1
2 李四 2 32 2
3 王五 null
3)右外连接:SELECT a.*,b.* FROM a RIGHT JOIN b ON a.id=b.parent_id;
结果:
1 张三 1 23 1
2 李四 2 32 2
null 3 45 4
4)全连接:SELECT a.*,b.* FROM a FULL JOIN b ON a.id=b.parent_id;
结果:
1 张三 1 23 1
2 李四 2 32 2
null 3 45 4
3 王五 null

posted @ 2017-12-20 17:44  今夜无风  阅读(999)  评论(0编辑  收藏  举报