我的数据库原理及应用学习笔记.doc

上传人:大张伟 文档编号:5655800 上传时间:2020-07-20 格式:DOC 页数:21 大小:81KB
返回 下载 相关 举报
我的数据库原理及应用学习笔记.doc_第1页
第1页 / 共21页
我的数据库原理及应用学习笔记.doc_第2页
第2页 / 共21页
我的数据库原理及应用学习笔记.doc_第3页
第3页 / 共21页
我的数据库原理及应用学习笔记.doc_第4页
第4页 / 共21页
我的数据库原理及应用学习笔记.doc_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《我的数据库原理及应用学习笔记.doc》由会员分享,可在线阅读,更多相关《我的数据库原理及应用学习笔记.doc(21页珍藏版)》请在三一文库上搜索。

1、 数据库原理及开发应用(总结的知识储备)1. 数据库就是储存数据的仓库,专业的解释就是对数据存储和管理的软件和数据本身统称为数据库。2. 大型数据库有Oracle,Sql sever属于中型数据库,小的太多忽略不计,要知道就上网查。3. 数据库管理系统的主要功能:数据库定义功能;数据存取功能;数据库运行管理;数据库的建立和维护功能。4. 数据库的三级模式构:外模式、模式和内模式。(外模式即是用户模式可以多个,模式只能一个,内模式就是储存模式)。5. DDL: 数据库模式定义语言DDL(Data Definition Language)。6. DML:数据操作语言(datamanipulatio

2、nlanguage)。7. DBMS: 数据库管理系统(Database Management System)。8. DBS:数据库系统(Database System)。9. DBA:数据库管理员(Database Administrator)。从三方面学习数据库1. 数据库是如何储存数据的?(主键,外键,唯一键)2. 数据库是如何操作数据的?(insert update delete)3. 数据库是如何显示数据的?(select重点)操作及代码1. Crate table 语句:create table student(stu_name nvarchar(30) not null,stu_

3、numb int not null,stu_sex nchar(1) not null);2. 主键外键:stu_numb int primary key;(可以在int 和primary中间加上constraint 约束名称)。 sch_add nvarchar(30) foreign key references student (stu_numb); 顺带回忆一下主键和外键的定义:主键:能够唯一标示一个事物的的字段或者多个字段的组合,叫主键。(含有主键的表叫做主键表,主键一般是整数不建议用字符串,而且一般用代理主键不要用业务主键,也就是说不要用有业务的字段作为主键,一般就用没有含义的编号

4、当做主键。) 外键:如果一个表中的若干个字段来自若干个表的主键或者唯一键,就称这若干个字段为外键。(含有外键的表叫做外键表,通常都来自主键,因为唯一键可能为null,而且外键不一定来自别的表可能就来自本表)。自认为总结的超好。 哦哦,还有删除表的时候先删外键表,不然先删主键会报错,原因很简单,外键引用错误。 没完,主键约束:不允许重复元素,避免了数据的冗余。外键约束:从语法上保证所关联的事物一定存在,而且事物和事物之间的关系是通过外键来体现的。 3. check语句: stu_mark int check(stu_mark=60 and stu_mark=1500 and salary =15

5、00 and salary =5000是不可取的,这两个命令是一起的,中间不能打分号。查找另外一个范围的数据时可以用以下语句:select * from empwhere salary not between 1500 and 5000(另外一种是:select * from empwhere salary =5000 )4. in【若干个孤立的值】select * from emp where salary in (1500,3000)等价于select * from emp where salary =1500 or salary =3000select * from emp where

6、salary not in (1500,3000)等价于select * from emp where salary 1500 and salary 3000 也作select * from emp where salary !=1500 and salary != 3000-数据库中不等于有两种写法: != 和 推荐使用第二种。-or取反时记得改为and,呵呵。5. top【最前面的若干个记录,专属于sql server不可移植到其他数据库】select top 5 * from emp;select top 15 percent * from emp;-此语句输出的是百分之15的行数的所有

7、字段,如果经计算百分之15是2.1,则输出的是三行。而且 * 不能省略,否则报错。6. null【没有值 空值】零和null不一样,null表示没有值,而零表示一个确定的值。null不能参与这些运算: != =可以参与如下运算:is is not (下面的例子中emp 表示表名,而 comm表示字段名)select * from emp where comm is null;-输出的是奖金为空的员工的信息。select * from emp where comm is not null;-输出的是奖金不为空的员工信息。select * from emp where comm null;-输出为

8、空errorselect * from emp where comm != null;-输出为空errorselect * from emp where comm = null;-输出为空error任何类型的数据都允许为nullcreate table t1 (stu_name nvarchar(30),stu_id int ,stu_sex nchar(1);insert into t1 values(null,null,null);-正确任何数字与null参与数学运算的结果都是null(后面例子中empna表示员工名字,empsal表示月薪,empid表示员工号码,comm与上面一样表示年

9、终奖金)select empid,empna,empsal * 12 + comm as ”年薪” from emp;运行结果是最后一个字段都为null,证明了上面的说法。另外一种正确的写法:select empid,empna,empsal * 12 + isnull(comm.,0) as “年薪”from emp;关于函数 isnull(comm.,0)的解释:如果comm的值为null则返回0,如果不是null则返回原本的comm值。7. order by【以某个字段排序】order by a,b按a,b都按升序排列。order by a,b desca升序,b,降序order by

10、a desc, ba 降序,b升序order by a desc,b desca,b 都按降序排列。-解释:默认是按照升序排列的,升序是asc 可以不写。(ascending,descending)8. 模糊查询【搜索时经常使用】格式:select 字段的集合 from 表名 where 某个字段的名字 like 匹配条件(匹配条件通常含有通配符 % )通配符表示任意零个或者多个字符select * from emp where ename like %A%-只要含A的ename 就输出。select * from emp where ename like A%-ename只要首字母为A就输出

11、。select * from emp where ename like %A-ename 只要以A结尾就输出。_【下划线】表示任意单个字符select * from emp where ename like _A%-ename只要第二个字母为A就输出。a-f a到f 中的任意单个字符select * from emp where ename like _a-f%-ename中只要第二个字母是在a到f中的就输出。a,f a或fa-c不是a到c中的任意一个字母,看清楚是 不是 自己瞎了别怪我没提醒。select * from emp where 部门ip like _发,联%(这个语句是从sql

12、sever里面复制的,感觉颜色还蛮好看的)注意:匹配的条件必须用单引号括起来,不能傻不拉几的用双引号,后面来解释一下要搜索带 % _ 的字段时的方法。直接把在sql sever里的复制看:create table people (name nvarchar(30) not null, age int)insert into people values (张三,32);insert into people values (Tom,66);insert into people values (a_b,22);insert into people values (c%d,44);insert int

13、o people values (abc_fe,56);insert into people values (Snail,18);insert into people values (施宁一,19);insert into people values (c%,65);insert into people values (longs,100);select * from peopleselect * from people where name like %/% escape / ; -把含有%的字段输出了select * from people where name like %/_% esc

14、ape /; -把含有_的字段输出了噢耶9. 聚合函数【多行记录返回至一个值,通常用于统计】函数的分类单行函数-每行返回一个值多行函数-每行返回一个值聚合函数是多行函数例子:select * from people select upper(name) from people ;-单行函数upper()将每行都返回为大写的字母。select MIN(age) from people ;-多行函数将多行中最小的值找出来返回了。聚合函数的分类:max()min()avg()平均值count()求个数count(*)返回表中所有记录的个数select COUNT(*) from people ;-返

15、回了表people中的记录个数。count (字段名)返回字段中包括重复的记录的个数,但是null不会被当做有效的记录算在个数之内。count (distinct 字段名)-返回了出去重复的记录后的记录个数。注意:判断下列sql语句是否正确1. select max(sal),min(sal),count(*) from emp;-Ok2. select max(sal) “最高薪”,min(sal) “最低薪”,count(*) “员工人数” from emp; -Ok3. select max(sal),lower(ename) from emp ; -error单行函数和多行函数不能混用

16、10. group by 【分组 难点】格式: group by 字段的集合功能: 把表中的记录按照字段分成不同的组。例子: 查询不同部门的平均工资并且按照升序排列select deptno , AVG(sal) from emp group by deptno order by deptno ;注意理解:group by a, b, c的用法 先按a分组,如果a 相同,再按b分组,如果b相同,再按c分组最终统计的是最小分组的信息一定要明白下列语句为什么是错误的:select deptno , avg(sal) as “部门平均工资”,enamefrom emp group by deptno

17、select deptno,enamefrom empgroup by deptnoselect deptno, job, salfrom emp group by deptno,job记住:使用group by之后select 中只能出现分组后的整体信息,不能出现组内的详细信息11. having【对分组后的信息进行过滤 难点】1. having通常是对分组之后的记录进一步过滤,所以having时一般先使用group up2. 如果没有使用group up而使用了having则意味着把所有的内容当做一组来处理3. Having子句出现的字段必须是分组之后组的整体信息,having子句不允许出

18、现组内的详细信息。4. Having子句中不能使用别名,尽管select中能使用别名。5. having和where的异同相同点:都是过滤的作用,都不允许使用别名,只允许使用最原始的字段名。不同点:where是对原始数据进行过滤,而having是对分组之后的数据进行过滤,where必须在having前面,否则运行出错。(没试过)例子:select deptno ,avg(sal) “平均工资”,count(*) ”部门人数”,max(sal) “部门的最高工资”from empwhere sal 2000 -where是对原始记录的过滤group by deptnohaving avg(sal

19、)3000 -对分组之后的记录的过滤 (where不能出现聚合函数)12. 连接查询定义:将两个或者两个以上的表以一定的连接条件连接起来,从中检索出满足条件的数据。分类内连接【重点的重点 也是难点的难点】1. select from A,B 的用法产生的结果:行数是A B 的乘积列数是A B 之和或者说把A表的每一条记录都和B 表的每一条记录组合起来了形成的是一个笛卡尔积 注意:select from A,B 和 select from B,A 是一摸一样的。2. select from A,B where 的用法其中A和B能够互换而且产生的笛卡尔积通过where的条件语句进行过滤例子:-输出

20、5行 11列select *from emp,dept -dept和emp 互换 输出的结果不变where empno = 73693. select from A join B on 的用法select from A join B on -A和B 互换 输出结果不变4. select , from ,where ,join , on , order , top ,having ,的混合使用查询的顺序 select top from A join B on join C on where group by having order by 例子: -把工资大于的所有的员工按照部门分组把部门平均工资大于的最高前个的部门的编号部门的名称部门平均工资的等级 -第一种写法 select “T” .*,”D” select from A join B on -A和B互换输出结果不变5. select , from, where , join , on , group ,order, top , having 的混合使用查询的顺序Select top From A Join B OnJoin cOn WhereGroup byHavingOrder by例子:把工资大于的所有员工按部门平均工资大于的最高前个的部门的编号部门的名称部门品均工资的等级第一种写法Select “T”

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1