奋战了近两个月,机房收费系统总算完工,等待验收的到来啊,在整个的学习中,我感受较深的是米老师的囫囵吞枣理论,今天就拿数据库应用来说说!
当初学习数据库的时候还是一年前,当初纯粹是囫囵吞枣啊!把sql,视图,事务等内容都吞到到肚子里,到了今天验证了那句话“出来混,早晚要还的”当初的枣吞得太生硬,在一年的时间里经过不停地打磨和敲击,在vb6里c#里,vs里!到今天化开了它神秘的面纱,得以窥见一斑!
在sqlsever中能够用sql语句建立视图,主键等,也可以用一种图形化的方法建立,在说视图之前,必须要说的一个前提是jion语句,说白了就是怎么将两张表组合成一张表!
前提:我们有两张表
学生表:
记录姓名:
ID |
Name |
201301 |
张三 |
201302 |
李四 |
201303 |
王五 |
201304 |
赵六 |
201305 |
冯七 |
201306 |
马八 |
衣服:
记录衣服:
ID |
Clothes |
201301 |
t恤 |
201302 |
外套 |
201303 |
牛仔裤 |
201304 |
鸭舌帽 |
201201 |
墨镜 |
|
|
一、外连接 外连接可分为:左连接、右连接、完全外连接。 以左连接为例: left join 或 left outer join SQL语句:select * from 学生left join 衣服on 学生.ID=衣服.ID 执行结果:
ID |
Name |
ID |
Clothes |
201301 |
张三 |
201301 |
t恤 |
201302 |
李四 |
201302 |
外套 |
201303 |
王五 |
201303 |
牛仔裤 |
201304 |
赵六 |
201304 |
鸭舌帽 |
201305 |
冯七 |
null |
null |
201306 |
马八 |
null |
null |
|
|
|
|
大家看,左链接就会以左表(学生表为基准)进行填充,没有对应数据的值为空(null)。
大家再看其他的例子,就会明白:
右链接:right join 或 right outer join
ID |
Name |
ID |
Clothes |
201301 |
张三 |
201301 |
t恤 |
201302 |
李四 |
201302 |
外套 |
201303 |
王五 |
201303 |
牛仔裤 |
201304 |
赵六 |
201304 |
鸭舌帽 |
null |
null |
201201 |
墨镜 |
|
|
|
|
完全外连接:
full join 或 full outer join
ID |
Name |
ID |
Clothes |
201301 |
张三 |
201301 |
t恤 |
201302 |
李四 |
201302 |
外套 |
201303 |
王五 |
201303 |
牛仔裤 |
201304 |
赵六 |
201304 |
鸭舌帽 |
201305 |
冯七 |
null |
null |
201306 |
马八 |
null |
null |
null |
null |
201201 |
墨镜 |
|
|
|
|
二、内连接 join 或 inner join SQL语句:select * from 学生 inner join 衣服on 学生.ID=衣服.ID 执行结果:
ID |
Name |
ID |
Clothes |
201301 |
张三 |
201301 |
t恤 |
201302 |
李四 |
201302 |
外套 |
201303 |
王五 |
201303 |
牛仔裤 |
201304 |
赵六 |
201304 |
鸭舌帽 |
可见内连接只返回符合条件的行。
三、交叉连接 cross join SQL语句:select * from student cross join course 执行结果:
ID |
Name |
ID |
Clothes |
201301 |
张三 |
201301 |
t恤 |
201302 |
李四 |
201302 |
t恤 |
201303 |
王五 |
201303 |
t恤 |
201304 |
赵六 |
201304 |
t恤 |
201305 |
冯七 |
201305 |
t恤 |
201306 |
马八 |
201306 |
t恤 |
201301 |
张三 |
201302 |
外套 |
201302 |
李四 |
201302 |
外套 |
201303 |
王五 |
201302 |
外套 |
201304 |
赵六 |
201302 |
外套 |
201305 |
冯七 |
201302 |
外套 |
201306 |
马八 |
201302 |
外套 |
201301 |
张三 |
201303 |
牛仔裤 |
201302 |
李四 |
201304 |
牛仔裤 |
201303 |
王五 |
201305 |
牛仔裤 |
201304 |
赵六 |
201306 |
牛仔裤 |
201305 |
冯七 |
201307 |
牛仔裤 |
201306 |
马八 |
201308 |
牛仔裤 |
201301 |
张三 |
201304 |
鸭舌帽 |
201302 |
李四 |
201305 |
鸭舌帽 |
201303 |
王五 |
201306 |
鸭舌帽 |
201304 |
赵六 |
201307 |
鸭舌帽 |
201305 |
冯七 |
201308 |
鸭舌帽 |
201306 |
马八 |
201309 |
鸭舌帽 |
|
|
|
|
可见第一个表的行数乘以第二个表的行数等于我们要查的结果的表,这种表较为冗余,一般我们不用!
这只是数据库的简单应用,我们要处理比较分散的数据时用到这些比较多,如果数据集中,这些就很少用到,所以设计数据库时数据的粒度是一个很值得考虑的问题!粒度太大,数据冗余,粒度太小,关系复杂,还是那句话“合适就好” (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|