以下为我学习数据库时候的笔记,和大家分享一下,谢谢!
1.数据结构和数据库的区别
数据库是在应用软件级别研究数据的存储和操作
数据结构式在体统软件级别研究数据的存储和操作
2.连接是我们操作数据库的软件与数据库的连接,我们操作的不是数据库,而是一个操作数据库的软件
3.对内存数据操作时我们编程语言的强项,但是对于硬盘数据操作却是编程语言的弱项;
对硬盘数据操作时数据库的强项,是数据库研究的核心问题。
4.表相关数据(大部分数据都是通过表实现的)
字段 : 一个事物的某一个静态的特征(年龄,性别等)(静态是指属性石静态的,动态的属性另外实现,如吃,喝等)
如果一个字段不写null或者not null,则默认为null。
记录 : 字段的组合,表示一个具体的事物(一个事物的所有特征的组合)
表 : 记录的组合,表示的是同一类型事物的集合
表和字段记录的关系 : 字段是事物的属性 ; 记录是事物本身 ;表表示事物的集合
列 : 字段的另一种称谓
属性 :字段的另一种称谓
元组 :记录的另一种称谓,记录也叫元组。
5.create teble 命令
6.什么是约束 : 对一个表中属性操作的限制
主键约束 : 不允许重复元素 ,避免数据冗余
外键约束 : 关联的其他事物一定是存在的,事物和事物之间的关系通过外键来实现
check约束 : 保证事物属性的取值在合法的范围之内
default约束 :stu_sex nchar(1) default ('男') 表示默认显示
保证事物的属性值不会为空
唯一约束 : unique约束,表示属性值不能重复,但是可以为空,但是主键不能为空
sql2005只允许一个unique列为空,oracle允许多个unique为空
7.表和约束的区别
数据库是通过表来解决事物的存储问题的
数据库是通过约束来解决事物取值的有效性和合法性的问题
建表的过程就是指定事物属性及其事物属性各种约束的过程
8.主键 : 能够唯一的表示一个事物的字段或者组合,可以防止数据冗余(不要用用户名等其他来充当主键,因为用户名等可以改变,而主键变了会很乱,一般采用一个没有实际意义的编号作为主键,而在需要跨数据库使用时,可以考虑字符串,因为不同数据库中id可能重复)
stu_id int primary key identity, identity表示编号自动增长
stu_email nvarchar(200) not null, nvarchar表示支持国际化的可变的char
主键的值通常不允许修改,除非本记录被删除
9.外键
如果一个表中的若干字段是来自另外若干个表的主键或者唯一建,
则这若干个建就是外键
但是外键也可以来自自己表中的唯一建或者主键
问题 :删除时应先删除外键表,否则会报错。
10.查询(重要,难度大)
(1).计算列
select * from table1;
select no_id,name from table1;
select name,sal*12 as "年薪" from teble1; //sal为工资列,表示将sal*12以年薪列显示出来
select 89 from table1; 输出table1行数个89,不会报错
(2).distinct
select distinct name from table1; 过滤掉同名的,如果是几个字段表示把字段组合不重复的输出,总之显示的个数必须一样,前一个字段满足要求的个数和后一个字段满足要求的个数不等的话错误
(3).between
select * from table1 where sal between 1500 and 3000;
等价于select * from table1 where sal >= 1500 and sal<= 3000;
(4).in
select * from table1 where sal in (2500,300,3500);选出table1中工资为(2500,300,3500)中一个的记录
select * from table1 where sal not in (2500,300,3500);
等价于select * from table1 where sal <>2500 and sal<>300 and sal <> 3500);
(5).top
select top 2 *from table1; 把表的前两个记录输出
select top 15 percent *from tabel1; 把表记录的15%输出,除不尽,往上取
oracle中是通过rownum命令实现top命令
一般网站的分页显示都是用的这个命令
(6).null
null表示没有值,不能参与<>!= = * +等运算,可以与is,not连用,is null,not null
select * from table1 where sal <> null是无意义的
isnull(sal,0)表示如果sal为空,返回0,否则返回sal值
(7).order by(以某个字段排序)
select top 4 * from table1 where sal between 1500 and 3000 order by sal desc;将前四条记录中工资在1500到3000的按照降序显示
如果order by 后面有两个或者更多字段,先以紧跟的第一个字段为主排,在次之
如果order by sal desc,no;表示先按sal降序,在按no升序
(8).模糊查询
select * from table1 where name like '%A%';找出名字中含有A的记录
select * from table1 where name like '_A%';找出第二个字母是A的记录
select * from table1 where name like '_[A-F]%';找出第二个字符是A到F的记录
select * from table1 where name like '_[^A-F]%';找出第二个字符不是A到F的记录
select * from table1 where name like '_[A,F]%';找出第二个字母是A或者F的记录
匹配的条件必须用‘’括起来
select * from student where name like '%\%%' escape '\'; 把name中包含%的输出
select * from student where name like '%\m%' escape 'm'; 把name中包含m的输出
(9).聚合函数
单行函数
多行函数
多行返回一个值
聚合函数是多行函数
(注意:单行函数和多行函数不能混用)
聚合函数分类:
max()
min()
avg() 求均值
count() 求个数
例子:
select lower(name) from emp ;最终返回行lower()
select max(sal) from emp ;返回行,max()是多行函数
select max(sal),min(sal),count(*) from emp ; 输出最高工资,最低工资,员工人数
(10).group by
select sal from emp group by sal;将工资按照工资分组输出
(11).having
对分组之后的数据进行过滤
select * from emp group by sal having avg(sal) >2000;将品均工资大于2000的组输出
having 和 where 的区别 :
相同点 : 都是对数据过滤,只保留有效数据
不同点 : where是对原始数据的记录过滤 having是对分组后的记录过滤
where必须写在having的前面,顺序不可颠倒,否则出错
使用having时通常先使用group by,如果没有用group by表示把所有记录当做一组来对待
having字句出现的字段必须是分组之后的组的整体信息
having字句不允许出现组内的详细信息
尽管select字段中可以出现别名,但是having字句不能出现字段的别名,只能使用字段的最原始的名字
(12).连接查询
内连接
外连接
完全连接
交叉连接
自连接
联合
(13).嵌套查询
11. 第一代语言0101011101101二进制语句
第二代语言是汇编语言,将二进制直译成字母符号
第三代高级语言,c(面向过程的语言),c++(面向过程和对象的语言),java,c#(面向对象的语言)
第四代语言(数据库),是面向对象的,命令语言,里面没有循环等,只需要命令语言就可以实现。命令实现简单,但是流程复杂的操作难以实现 。
12.什么是关系
表和表之间的联系,通过设置不同形式的外键来体现表和表之间的不同关系
一对一 : 即可以把A的主键充当B的外键,也可以把B的主键充当A的外键,
一对多 : 把A的主键充当B的外键,反之不行
多对多 : 班级 学生 老师
1240

被折叠的 条评论
为什么被折叠?



