1,sql概述与数据库定义

sql server性别设置只允许男或女约束条件怎么写 sql语句性别约束_学习


sql server性别设置只允许男或女约束条件怎么写 sql语句性别约束_算法_02


其中,grant为授权,revork为撤销授权.

sql server性别设置只允许男或女约束条件怎么写 sql语句性别约束_算法_03


这里的n表示的是字节数.

sql server性别设置只允许男或女约束条件怎么写 sql语句性别约束_子查询_04


一般一个汉字,占两个字节.所以用char(2)表示性别.

这里的表名,就是前面说的S表(学生表之类),列名就是说,其中的一个属性.

sql server性别设置只允许男或女约束条件怎么写 sql语句性别约束_算法_05


实体完整性约束,就是主键.有两种方式定义主键.

上图为第一种,直接在一个属性后面写上primary key.(使用列级完整性约束)

第二种是,使用表级完整性约束.使用如下形式

sql server性别设置只允许男或女约束条件怎么写 sql语句性别约束_子查询_06


这里还可以看到,sql语句中一句话结束是用;表示,在一句话中的多个属性是用,隔开.

参照完整性约束,就是指这个属性的值只能来自于对应外表的属性域(1到100),这个属性的取值就不能是101.

这里对于sc(sno,cno,grade)表,sno,cno为外码
我们可以写成create sc(sno char(10) references s(sno)
如果用表级约束条件就在最后写
foreign key(sno) references s(sno)
foreign key(cno) references c(cno)

sql server性别设置只允许男或女约束条件怎么写 sql语句性别约束_主键_07


这里使用mysql来测试简单的命令.首先需要在服务中打开mysql的服务项.

sql server性别设置只允许男或女约束条件怎么写 sql语句性别约束_数据结构_08


也可以用cmd命令来做.最上面一行为登录命令.下面先来介绍mysql的基本操作.

首先配置,大多数的编码都是用utf-8的形式,只有保持一致才会不出现乱码

sql server性别设置只允许男或女约束条件怎么写 sql语句性别约束_数据结构_09


所以需要将配置文件(my.int)中的gbk,改为utf8

在此路径下,D:\Program Files\MySQL\MySQL Server 5.5,

sql server性别设置只允许男或女约束条件怎么写 sql语句性别约束_子查询_10


添加这两句.

重启服务之后,就都为utf-8了

sql server性别设置只允许男或女约束条件怎么写 sql语句性别约束_学习_11


启动mysql服务,用net srart mysql,可能因为权限不够,无法启动.登录mysql,会发现前面的-u后的root其实是用户名.-p是密码

sql server性别设置只允许男或女约束条件怎么写 sql语句性别约束_子查询_12


-h是服务器名称,

exit,quit,\q都可以用来退出

这里的–prompt是命令提示符.

sql server性别设置只允许男或女约束条件怎么写 sql语句性别约束_算法_13


这里的on delete cascade表示如果删除了s表中的3003,那么sc表中的3003也会被删除.

ondelete set null,表示不删除,但是将参照关系的相应属性置为空值.

sql server性别设置只允许男或女约束条件怎么写 sql语句性别约束_主键_14


这里的说的都是限制条件,与主码与外码在同一位置(数据结构后面),并且not null unique 可以等同于主键的效果.

sql server性别设置只允许男或女约束条件怎么写 sql语句性别约束_学习_15


这里对于check函数,我们可以规定一个属性的取值范围,将他放在列级完整性约束条件位置.

我们还可以规定两个属性之间的关系,这时候就需要在表级完整性约束条件位置,添加check命令.

sql server性别设置只允许男或女约束条件怎么写 sql语句性别约束_学习_16


这就是代码实现过程.

前面两个没有问题.第三个是关系表.是一个多对多关系,这里用复合主键,注意复合主键只有如上一种规定模式.还要规定其外码.

numeric(6,2)整数位为6,小数位2.这里我们如果设置s表与sp表中sno长度不一样,可以运行,但是会有问题.

sql server性别设置只允许男或女约束条件怎么写 sql语句性别约束_学习_17


注意,外键也可以如上形式写在,逗号前,就不需要foreign key.这个例子就将很多东西联系在一起.

我们用表如何来存储实体,还有用表如何来存储实体之间的联系.

sql server性别设置只允许男或女约束条件怎么写 sql语句性别约束_算法_18


如上图例子,这里需要注意,首先属性名是不需要加’ ‘的,表示汉字的值的时候才要加’ ’ 如性别=’ 男’,这时候要加.

其次,check前应该要加个,逗号.

sql server性别设置只允许男或女约束条件怎么写 sql语句性别约束_学习_19


这里介绍三种修改表的操作,

(1)添加一列,需要指明增加的属性的数据类型,和约束条件.

(2)丢弃掉完整性约束,如第三句话,就为check约束取名为c_cno

(3)修改某一属性的数据类型.删除表操作,表示删除了基本表,就是不再是数据库模式的一部分了.

sql server性别设置只允许男或女约束条件怎么写 sql语句性别约束_学习_20


sql server性别设置只允许男或女约束条件怎么写 sql语句性别约束_子查询_21


需要清楚,建立索引是在物理上进行,改变的是内模式.

cluster 一个索引可能对应一个组.

sql server性别设置只允许男或女约束条件怎么写 sql语句性别约束_算法_22


sql server性别设置只允许男或女约束条件怎么写 sql语句性别约束_主键_23


注意select语句后的横线上的属性组,需要与视图名()内的属性组相同.

另外注意前面用as来连接两部分.这里的子查询中(select)一般不包含order by和distinct

第二条,表示检查更新.

第三条,意思是视图名后面的()可以省略,省略之后由select语句的主属性来决定,但是考试中还是写着吧.

sql server性别设置只允许男或女约束条件怎么写 sql语句性别约束_学习_24


这里编写程序的时候注意,cs需要’cs’,表示值.另外视图名后的括号别省略.

视图对应于外模式.

所以说,表,索引,视图就表示三级结构,所以删除他们都用drop.都是大层面上的删除.

sql server性别设置只允许男或女约束条件怎么写 sql语句性别约束_算法_25

sql server性别设置只允许男或女约束条件怎么写 sql语句性别约束_主键_26


这道题的允许员工在多家公司工作,意思是员工与公司是多对多关系,这时候,我们就需要将两者联系,放在一张表中存储.

如果是员工只在一家公司工作.那么员工就决定公司了,也就不需要cno这个属性来作为主码了,只需要将他作为外码.

但是有了这句话,就需要(sno,cno)作为主码.

sql server性别设置只允许男或女约束条件怎么写 sql语句性别约束_学习_27


这里主键只能在最后定义,并且一定要加(),另外这里check后面salary也要写出来.不能光写>=1500

sql server性别设置只允许男或女约束条件怎么写 sql语句性别约束_算法_28


这里可以看到,视图后面的()中不需要加来自哪张表,这里决定的是视图的属性名是什么.

下面的select语句,如果在from后面的表中有重名属性,就需要指定,重名属性来自哪张表.2,数据操作

sql server性别设置只允许男或女约束条件怎么写 sql语句性别约束_学习_29


sql server性别设置只允许男或女约束条件怎么写 sql语句性别约束_数据结构_30


sql server性别设置只允许男或女约束条件怎么写 sql语句性别约束_主键_31


首先有all,和distinct(不同值)可选,

目标列表达式是指,sno(直接一列),或者(基本工资+奖金)形式

sql server性别设置只允许男或女约束条件怎么写 sql语句性别约束_子查询_32


会发现,现在好像还缺少向表中插入数据行的指令.前面的alter table ()add 语句一般为空白列.

sql server性别设置只允许男或女约束条件怎么写 sql语句性别约束_学习_33


group by选项在做的事情如:按学号分组,来求一个学生的平均分,按课程号分组,来求一个课程的每个学生的平均分.

having作用是对分组之后的数据进行筛选,如:求平均分为85分以上的学生.

order by关键字是排序.asc为升序(默认),desc为降序.

注意不等于写为<>

sql server性别设置只允许男或女约束条件怎么写 sql语句性别约束_主键_34


这里的select相当于投影,而where相当于选择.

注意这里的重命名操作,对列和对整个表都重命名.注意,需要用重命名之后的名称,不能用s,sc了.这里很有可能select语句结果不会改变基本表.

sql server性别设置只允许男或女约束条件怎么写 sql语句性别约束_数据结构_35


这才是改变基本表名称的操作.

sql server性别设置只允许男或女约束条件怎么写 sql语句性别约束_主键_36


这里是连接查询操作.

对于select * from s,sc;这一语句其实是做s,sc的笛卡尔积.

题上(1)的这两句,实际上是笛卡尔积再进行投影.最后加上where进行选择,实现连接过程.会发现它并不是自然连接.这里(2)是多张表进行连接

(3)是自己与自己进行连接.

这些本质上都不是自然连接,但是经过了投影选择,所以结果相当于自然连接.

sql server性别设置只允许男或女约束条件怎么写 sql语句性别约束_算法_37


这里我们将前面的多个查询,分解为子查询.

sql server性别设置只允许男或女约束条件怎么写 sql语句性别约束_数据结构_38


这里in后面的语句,返回的是一个集合.然后去查看sno是否在这个集合中.注意这里将in后面的select sno改成select *

就查找不到,因为sno当然不在结果集合中.

sql server性别设置只允许男或女约束条件怎么写 sql语句性别约束_子查询_39


这个不存在和not in 相似,区别在于not exists前面没有属性名,它是在让where后面的表达式为真.这道题中就是让(select语句结果为空.)当cno值为c4,c5,c6,c7时,后面的查询语句结果为空.notexists就为真.

简单来说,就是子查询的结果不存在.关键在子查询中的表达式.
可以看到这两个函数非常相似.区别只在语句中.通俗来说,in用属性值来决定是否取这一行,而exist 用true来决定,是否取这一行.

如何判断用in还是exist?

首先,前面的属性值一个有一个没有

其次,子查询中如果是 星号,那么就是exist.当然exist的子查询也可以是属性.

sql server性别设置只允许男或女约束条件怎么写 sql语句性别约束_学习_40


这里注意count(*),与count(列名)的区别(不计算空值),以及其中的all和distinct参数表示是否计算重复的值.

sql server性别设置只允许男或女约束条件怎么写 sql语句性别约束_子查询_41


需要这样用聚集函数.

sql server性别设置只允许男或女约束条件怎么写 sql语句性别约束_算法_42


sql server性别设置只允许男或女约束条件怎么写 sql语句性别约束_学习_43


这里的聚集函数需要加在属性前,不可以像all一样加在选出来的列前.

sql server性别设置只允许男或女约束条件怎么写 sql语句性别约束_算法_44