我的数据库原理及应用学习笔记Word文档下载推荐.docx

上传人:b****3 文档编号:7202375 上传时间:2023-05-08 格式:DOCX 页数:15 大小:36.26KB
下载 相关 举报
我的数据库原理及应用学习笔记Word文档下载推荐.docx_第1页
第1页 / 共15页
我的数据库原理及应用学习笔记Word文档下载推荐.docx_第2页
第2页 / 共15页
我的数据库原理及应用学习笔记Word文档下载推荐.docx_第3页
第3页 / 共15页
我的数据库原理及应用学习笔记Word文档下载推荐.docx_第4页
第4页 / 共15页
我的数据库原理及应用学习笔记Word文档下载推荐.docx_第5页
第5页 / 共15页
我的数据库原理及应用学习笔记Word文档下载推荐.docx_第6页
第6页 / 共15页
我的数据库原理及应用学习笔记Word文档下载推荐.docx_第7页
第7页 / 共15页
我的数据库原理及应用学习笔记Word文档下载推荐.docx_第8页
第8页 / 共15页
我的数据库原理及应用学习笔记Word文档下载推荐.docx_第9页
第9页 / 共15页
我的数据库原理及应用学习笔记Word文档下载推荐.docx_第10页
第10页 / 共15页
我的数据库原理及应用学习笔记Word文档下载推荐.docx_第11页
第11页 / 共15页
我的数据库原理及应用学习笔记Word文档下载推荐.docx_第12页
第12页 / 共15页
我的数据库原理及应用学习笔记Word文档下载推荐.docx_第13页
第13页 / 共15页
我的数据库原理及应用学习笔记Word文档下载推荐.docx_第14页
第14页 / 共15页
我的数据库原理及应用学习笔记Word文档下载推荐.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

我的数据库原理及应用学习笔记Word文档下载推荐.docx

《我的数据库原理及应用学习笔记Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《我的数据库原理及应用学习笔记Word文档下载推荐.docx(15页珍藏版)》请在冰点文库上搜索。

我的数据库原理及应用学习笔记Word文档下载推荐.docx

(可以在int和primary中间加上constraint约束名称)。

sch_addnvarchar(30)foreignkeyreferencesstudent(stu_numb);

顺带回忆一下主键和外键的定义:

主键:

能够唯一标示一个事物的的字段或者多个字段的组合,叫主键。

(含有主键的表叫做主键表,主键一般是整数不建议用字符串,而且一般用代理主键不要用业务主键,也就是说不要用有业务的字段作为主键,一般就用没有含义的编号当做主键。

外键:

如果一个表中的若干个字段来自若干个表的主键或者唯一键,就称这若干个字段为外键。

(含有外键的表叫做外键表,通常都来自主键,因为唯一键可能为null,而且外键不一定来自别的表可能就来自本表)。

自认为总结的超好。

哦哦,还有删除表的时候先删外键表,不然先删主键会报错,原因很简单,外键引用错误。

没完,

主键约束:

不允许重复元素,避免了数据的冗余。

外键约束:

从语法上保证所关联的事物一定存在,而且事物和事物之间的关系是通过外键来体现的。

3.check语句:

stu_markintcheck(stu_mark>

=60andstu_mark<

=100);

check约束:

保证事物属性的取值在合法的范围内。

4.insert语句:

insertintostudentvalues(‘施宁一’,14,’男’);

(必须把所有字段全都输入除非有null的要写null);

也可以是:

insertinto(stu_name,stu_sex)values(‘施宁一’,’男’);

5.default语句:

stu_sexnchar

(1)default(‘男’);

default约束:

保证事物的属性一定会有一个值。

6.unique语句:

stu_namenvarchar(30)unique;

表示其取值唯一不能重复。

7.update语句:

(书上没写这,网上找的好例子)我们刚刚发现IndianaJones的等级为16,工资为$40,000.00,我们可以通过下面的SQL语句对数据库进行更新(并清除那些烦人的NULL)。

  UPDATEEMPLOYEES

  SETGRADE=16,SALARY=40000

  WHEREFIRST_NAME='

Indiana'

  ANDLAST_NAME='

Jones'

;

8.delete语句:

(一样是网上的例子,代码大写的效果一样但看着不爽)DELETE语句用来删除已知表中的行。

如同UPDATE语句中一样,所有满足WHERE子句中条件的行都将被删除。

由于SQL中没有UNDO语句或是“你确认删除吗?

”之类的警告,在执行这条语句时千万要小心。

如果决定取消LosAngeles办事处并解雇办事处的所有职员,这一卑鄙的工作可以由以下这条语句来实现:

DELETEFROMEMPLOYEES

WHEREBRANCH_OFFICE='

LosAngeles'

如同UPDATE语句中一样,省略WHERE子句将使得操作施加到表中所有的行。

简单的操作及代码总结完了,后面是重点内容和难点部分,主要介绍

查询【select】

1.计算列:

(下面的例子中student是表名,其余的为字段名)

select*fromstudent;

(数据库里的注释为--)

--*表示所有的意思。

此语句将表中的所有数据显示。

selectstu_namefromstudent;

selectstu_name,stu_idfromstudent;

selectstu_name,stu_id*10as“学号的十倍”fromstudent;

selectstu_name,stu_id*10as“学号的十倍”,stu_id“学号”fromstudent;

--as可以省略不写,此语句可以经过计算建立新的一列,并且命名。

必须知道的是select123fromstudent;

之类的语句结果不会报错,会显示student表的行数,每行都是123这个数据。

注:

在写字段别名时可以用单引号也可以用双引号,但是为了增强可移植性,一般用双引号,因为在Oracle大型数据库中不允许用单引号。

2.distinct【不允许重复的】语句。

selectdistinctstu_namefromstudent;

--将一样的数据都过滤掉,包括null,如果有都只剩下一个。

selectdistinctstu_name,stu_idfromstudent;

--将这两个字段的组合重复的过滤掉了。

但是不能写成

selectstu_id,distinctstu_namefromstudent;

用来过滤第二个字段,保留第一个字段。

逻辑上有错误,不可行。

3.between【在某个范围内的查询】语句。

(后面emp是表名,salary是薪水的字段)

select*fromemp

wheresalary>

=1500andsalary<

=5000

等价于

wheresalarybetween1500and5000

需要注意的是:

select*fromemp(;

=5000是不可取的,这两个命令是一起的,中间不能打分号。

查找另外一个范围的数据时可以用以下语句:

wheresalarynotbetween1500and5000

(另外一种是:

wheresalary<

=1500orsalary>

4.in【若干个孤立的值】

select*fromempwheresalaryin(1500,3000)

select*fromempwheresalary=1500orsalary=3000

select*fromempwheresalarynotin(1500,3000)

select*fromempwheresalary<

>

1500andsalary<

3000

也作

select*fromempwheresalary!

=1500andsalary!

=3000

--数据库中不等于有两种写法:

=和<

推荐使用第二种。

--or取反时记得改为and,呵呵。

5.top【最前面的若干个记录,专属于sqlserver不可移植到其他数据库】

selecttop5*fromemp;

selecttop15percent*fromemp;

--此语句输出的是百分之15的行数的所有字段,如果经计算百分之15是2.1,则输出的是三行。

而且*不能省略,否则报错。

6.null【没有值空值】

零和null不一样,null表示没有值,而零表示一个确定的值。

null不能参与这些运算:

<

!

==

可以参与如下运算:

isisnot

(下面的例子中emp表示表名,而comm表示字段名)

select*fromempwherecommisnull;

--输出的是奖金为空的员工的信息。

select*fromempwherecommisnotnull;

--输出的是奖金不为空的员工信息。

select*fromempwherecomm<

null;

--输出为空error

select*fromempwherecomm!

=null;

select*fromempwherecomm=null;

任何类型的数据都允许为null

createtablet1(stu_namenvarchar(30),stu_idint,stu_sexnchar

(1);

insertintot1values(null,null,null);

--正确

任何数字与null参与数学运算的结果都是null

(后面例子中empna表示员工名字,empsal表示月薪,empid表示员工号码,comm与上面一样表示年终奖金)

selectempid,empna,empsal*12+commas”年薪”fromemp;

运行结果是最后一个字段都为null,证明了上面的说法。

另外一种正确的写法:

selectempid,empna,empsal*12+isnull(comm.,0)as“年薪”fromemp;

关于函数isnull(comm.,0)的解释:

如果comm的值为null则返回0,如果不是null则返回原本的comm值。

7.orderby【以某个字段排序】

orderbya,b

按a,b都按升序排列。

orderbya,bdesc

a升序,b,降序

orderbyadesc,b

a降序,b升序

orderbyadesc,bdesc

a,b都按降序排列。

--解释:

默认是按照升序排列的,升序是asc可以不写。

(ascending,descending)

8.模糊查询【搜索时经常使用】

格式:

select字段的集合from表名where某个字段的名字like匹配条件(匹配条件通常含有通配符%)

通配符表示任意零个或者多个字符

select*fromempwhereenamelike‘%A%’

--只要含A的ename就输出。

select*fromempwhereenamelike‘A%’

--ename只要首字母为A就输出。

select*fromempwhereenamelike‘%A’

--ename只要以A结尾就输出。

_【下划线】

表示任意单个字符

select*fromempwhereenamelike‘_A%’

--ename只要第二个字母为A就输出。

[a-f]

a到f中的任意单个字符

select*fromempwhereenamelike‘_[a-f]%’

--ename中只要第二个字母是在a到f中的就输出。

[a,f]a或f

[^a-c]

不是a到c中的任意一个字母,看清楚是^不是~自己瞎了别怪我没提醒。

select*fromempwhere部门iplike'

_[^发,联]%'

(这个语句是从sqlsever里面复制的,感觉颜色还蛮好看的)

注意:

匹配的条件必须用单引号括起来,不能傻不拉几的用双引号,后面来解释一下要搜索带%_的字段时的方法。

直接把在sqlsever里的复制看:

createtablepeople(namenvarchar(30)notnull,ageint)

insertintopeoplevalues('

张三'

32);

Tom'

66);

a_b'

22);

c%d'

44);

abc_fe'

56);

Snail'

18);

施宁一'

19);

c%'

65);

long'

'

s'

100);

select*frompeople

select*frompeoplewherenamelike'

%/%%'

escape'

/'

;

--把含有%的字段输出了

%/_%'

--把含有_的字段输出了噢耶

9.聚合函数【多行记录返回至一个值,通常用于统计】

函数的分类

单行函数

--每行返回一个值

多行函数

聚合函数是多行函数

例子:

select*frompeople

selectupper(name)frompeople;

--单行函数upper()将每行都返回为大写的字母。

selectMIN(age)frompeople;

--多行函数将多行中最小的值找出来返回了。

聚合函数的分类:

max()

min()

avg()平均值

count()求个数

count(*)返回表中所有记录的个数

selectCOUNT(*)frompeople;

--返回了表people中的记录个数。

count(字段名)

返回字段中包括重复的记录的个数,但是null不会被当做有效的记录算在个数之内。

count(distinct字段名)

--返回了出去重复的记录后的记录个数。

判断下列sql语句是否正确

1.selectmax(sal),min(sal),count(*)fromemp;

--Ok

2.selectmax(sal)“最高薪”,min(sal)“最低薪”,count(*)“员工人数”fromemp;

--Ok

3.selectmax(sal),lower(ename)fromemp;

--error单行函数和多行函数不能混用

10.groupby【分组难点】

groupby字段的集合

功能:

把表中的记录按照字段分成不同的组。

查询不同部门的平均工资并且按照升序排列

selectdeptno,AVG(sal)fromempgroupbydeptnoorderbydeptno;

注意理解:

groupbya,b,c的用法

先按a分组,如果a相同,再按b分组,如果b相同,再按c分组最终统计的是最小分组的信息

一定要明白下列语句为什么是错误的:

selectdeptno,avg(sal)as“部门平均工资”,ename

fromemp

groupbydeptno

selectdeptno,ename

fromemp

selectdeptno,job,sal

groupbydeptno,job

记住:

使用groupby之后select中只能出现分组后的整体信息,

不能出现组内的详细信息

11.having【对分组后的信息进行过滤难点】

1.having通常是对分组之后的记录进一步过滤,所以having时一般先使用groupup

2.如果没有使用groupup而使用了having则意味着把所有的内容当做一组来处理

3.Having子句出现的字段必须是分组之后组的整体信息,having子句不允许出现组内的详细信息。

4.Having子句中不能使用别名,尽管select中能使用别名。

5.having和where的异同

相同点:

都是过滤的作用,都不允许使用别名,只允许使用最原始的字段名。

不同点:

where是对原始数据进行过滤,而having是对分组之后的数据进行过滤,where必须在having前面,否则运行出错。

(没试过)

selectdeptno,avg(sal)“平均工资”,count(*)”部门人数”,max(sal)“部门的最高工资”

wheresal>

2000-–where是对原始记录的过滤

havingavg(sal)>

3000-–对分组之后的记录的过滤

(where不能出现聚合函数)

12.连接查询

定义:

将两个或者两个以上的表以一定的连接条件连接起来,从中检索出满足条件的数据。

分类

内连接【重点的重点也是难点的难点】

1.select…fromA,B的用法

产生的结果:

行数是AB的乘积

列数是AB之和

或者说

把A表的每一条记录都和B表的每一条记录组合起来了

形成的是一个笛卡尔积

注意:

select…fromA,B

和select…fromB,A

是一摸一样的。

2.select…fromA,Bwhere…的用法

其中A和B能够互换而且产生的笛卡尔积

通过where的条件语句进行过滤

--输出5行11列

select*

fromemp,dept--dept和emp互换输出的结果不变

whereempno=7369

3.select…fromAjoinBon…的用法

select…fromAjoinBon…--A和B互换输出结果不变

4.select,from,where,join,on,order,top,having,的混合使用

查询的顺序

selecttop…

fromA

joinB

on…

joinC

where…

groupby…

having…

orderby…

例子:

--把工资大于的所有的员工按照部门分组把部门平均工资大于的最高前个的部门的编号部门的名称部门平均工资的等级

--第一种写法

select“T”.*,”D”

select…fromAjoinBon…--A和B互换输出结果不变

5.select,from,where,join,on,group,order,top,having的混合使用

Selecttop…

FromA

JoinB

On

Joinc

On

Where…

Groupby…

Having…

Orderby…

——把工资大于的所有员工按部门平均工资大于的最高前个的部门的编号部门的名称部门品均工资的等级

第一种写法

Select“T”

感谢下载!

欢迎您的下载,资料仅供参考

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

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2