数据库原理及开发应用(总结的知识储备)1.数据库就是储存数据的仓库,专业的解释就是对数据存储和管理的软件和数据本身统称为数据库。
2.大型数据库有Oracle,Sql sever属于中型数据库,小的太多忽略不计,要知道就上网查。
3.数据库管理系统的主要功能:数据库定义功能;数据存取功能;数据库运行管理;数据库的建立和维护功能。
4.数据库的三级模式构:外模式、模式和内模式。
(外模式即是用户模式可以多个,模式只能一个,内模式就是储存模式)。
5.DDL: 数据库模式定义语言DDL(Data Definition Language)。
6.DML:数据操作语言(datamanipulationlanguage)。
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_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);顺带回忆一下主键和外键的定义:主键:能够唯一标示一个事物的的字段或者多个字段的组合,叫主键。
(含有主键的表叫做主键表,主键一般是整数不建议用字符串,而且一般用代理主键不要用业务主键,也就是说不要用有业务的字段作为主键,一般就用没有含义的编号当做主键。
)外键:如果一个表中的若干个字段来自若干个表的主键或者唯一键,就称这若干个字段为外键。
(含有外键的表叫做外键表,通常都来自主键,因为唯一键可能为null,而且外键不一定来自别的表可能就来自本表)。
自认为总结的超好。
哦哦,还有删除表的时候先删外键表,不然先删主键会报错,原因很简单,外键引用错误。
没完,主键约束:不允许重复元素,避免了数据的冗余。
外键约束:从语法上保证所关联的事物一定存在,而且事物和事物之间的关系是通过外键来体现的。
3.check语句: stu_mark int check(stu_mark>=60 andstu_mark<=100);check约束:保证事物属性的取值在合法的范围内。
4.insert 语句:insert into student values(‘施宁一’,14,’男’);(必须把所有字段全都输入除非有null的要写null);也可以是:insert into (stu_name ,stu_sex) values(‘施宁一’,’男’);5.default语句:stu_sex nchar(1) default (‘男’);default约束:保证事物的属性一定会有一个值。
6.unique语句:stu_name nvarchar(30) unique;表示其取值唯一不能重复。
7.update语句:(书上没写这,网上找的好例子)我们刚刚发现IndianaJones的等级为16,工资为$40,,我们可以通过下面的SQL语句对数据库进行更新(并清除那些烦人的NULL)。
8.9.UPDATE EMPLOYEES10.11.SET GRADE = 16, SALARY = 4000012.13.WHERE FIRST_NAME = 'Indiana'14.15. AND LAST_NAME = 'Jones';16.delete语句:(一样是网上的例子,代码大写的效果一样但看着不爽)DELETE语句用来删除已知表中的行。
如同UPDATE语句中一样,所有满足WHERE子句中条件的行都将被删除。
由于SQL中没有UNDO语句或是“你确认删除吗”之类的警告,在执行这条语句时千万要小心。
如果决定取消Los Angeles办事处并解雇办事处的所有职员,这一卑鄙的工作可以由以下这条语句来实现:17.DELETE FROM EMPLOYEESWHERE BRANCH_OFFICE = 'Los Angeles';如同UPDATE语句中一样,省略WHERE子句将使得操作施加到表中所有的行。
简单的操作及代码总结完了,后面是重点内容和难点部分,主要介绍查询【select】1.计算列:(下面的例子中 student是表名,其余的为字段名)select*from student; (数据库里的注释为--)--* 表示所有的意思。
此语句将表中的所有数据显示。
select stu_name from student;select stu_name ,stu_id from student;select stu_name ,stu_id * 10 as “学号的十倍”from student;select stu_name ,stu_id * 10 as “学号的十倍”,stu_id “学号” from student;--as 可以省略不写,此语句可以经过计算建立新的一列,并且命名。
必须知道的是select 123 from student;之类的语句结果不会报错,会显示student表的行数,每行都是123这个数据。
注:在写字段别名时可以用单引号也可以用双引号,但是为了增强可移植性,一般用双引号,因为在Oracle大型数据库中不允许用单引号。
2.distinct【不允许重复的】语句。
select distinct stu_name from student;--将一样的数据都过滤掉,包括null,如果有都只剩下一个。
select distinct stu_name ,stu_id from student;--将这两个字段的组合重复的过滤掉了。
但是不能写成select stu_id ,distinct stu_name from student ;用来过滤第二个字段,保留第一个字段。
逻辑上有错误,不可行。
3.between【在某个范围内的查询】语句。
(后面emp是表名,salary是薪水的字段)select * from empwhere salary >=1500 and salary <=5000等价于select * from empwhere salary between 1500 and 5000需要注意的是:select * from emp(;)where salary >=1500 and salary <=5000是不可取的,这两个命令是一起的,中间不能打分号。
查找另外一个范围的数据时可以用以下语句:select * from empwhere salary not between 1500 and 5000(另外一种是:select * from empwhere salary <=1500 or salary >=5000)4.in【若干个孤立的值】select * from emp where salary in (1500,3000)等价于select * from emp where salary =1500 or salary =3000select * from emp where 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的行数的所有字段,如果经计算百分之15是,则输出的是三行。
而且 * 不能省略,否则报错。
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;--输出为空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与上面一样表示年终奖金)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都按升序排列。