数据库sql语句快速复习(目前更新至DDL,DML,持续更新,有错请留言)

DDL:creat,alter,drop(模式的定义和删除,包括定义Database,Table,View,Index,完整性约束条)

DML:insert,delete,update,select

(各种方式的更新与检索操作,如直接输入记录,从其他Table(由SubQuery
建立)输入
各种复杂条件的检索,如连接查找,模糊查找,分组查找,嵌套查找等
各种聚集操作,求平均、求和、…等,分组聚集,分组过滤等)

DCL:grant,revoke(安全性控制:授权和撤销授权)

DDL

1.create

create databa (列名 数据类型[Primary key|Unique][Not null][,列名 数据类型 [],...]);

1.“[]”表示其括起的内容可以省略,“|”表示其隔开的两项可取其一
2.Primary key:主键约束。每个表只能创建一个主键约束。
3.Unique:唯一性约束(即候选键)。可以有多个唯一性约束。
4.Not null:非空约束。是指该列允许不允许有空值出现,如选择了Not null表明该列不允许有空值出现。
5.语法中的数据类型在SQL标准中有定义

在SQL-92标准中定义的数据类型

1.char(n):固定长度的字符串
2.varchar(n):可变长字符串
3.int:整数/有时不同系统也写作integer
4.numeric(p,q):固定精度数字,小数点左边p位,右边p-q位
5.real:浮点精度数字//有时不同系统也写作float(n),小数点后保留n位
6.date:日期(如2003-09-12)
7.time:时间(如23:15:003)

现行商用DBMS的数据类型有时和上面有些差异,请注意;
和高级语言的数据类型,总体上是一样的,但也有差异

2.alter

alter table 表名
	[add {colname datatype, ...}]    #增加新列
	[drop {完整性约束名}]        #删除完整性约束
	[modify{colname datatype, ...}]  #修改列定义

示例:在学生表Student(S#,Sname,.Ssex,Sage,D#,Sclass)基础上增加二列Saddr,PID

Alter Table Student Add
Saddr char[40],PID char[18]

示例:将上例表中Sname列的数据类型增加两个字符

Alter Table Student Modify Sname char(10);

示例:删除学生姓名必须取唯一值的约束

Alter Table Student Drop Unique(Sname )

3.drop

撤销基本表

drop table 表名

注意,SQL-delete语句只是删除表中的元组,而撤消基本表drop table的操作是撤消包含表格式、表中所有元组、由该表导出的视图等相关的所有内容,所以使用要特别注意

撤销数据库

drop database 数据库名;

指定当前数据库

use 数据库名;

关闭当前数据库

close 数据库名;

DML

1.insert

insert into 表名[(列名[,列名]...)]
		values([,],...);

1.values后面值的排列,须与into子句后面的列名排列一致
2.若表名后的所有列名省略,则values后的值的排列,须与该表存储中的列名排列一致

2.select

select 列名 [[,列名]...]
	from 表名
	[where 检索条件];

在这里插入图片描述

结果唯一性问题

1.关系模型不允许出现重复元组。但现实DBMS,却允许出现重复元组,但也允许无重复元组。

2.在Table中要求无重复元组是通过定义Primary key.或Unique来保证的;而在检索结果中要求无重复元组,是通过DISTINCT保留字的使用来实现的。

select distinct 列名 [[,列名]...]
	from 表名
	[where 检索条件];

结果排序问题

order by列名[asc|desc]

1.DBMS可以对检索结果进行排序,可以升序排列,也可以降序排列。

2.Select语句中结果排序是通过增加order by子句实现的

3.意义为检索结果按指定列名进行排序,若后跟asc或省略,则为升序;若后跟desc,则为降序。

模糊查询问题

列名 [not] like "字符串"

1."%“匹配零个或多个字符
2.”_“匹配任意单个字符
3.”\“转义字符,用于去掉一些特殊的特定含义,使其被作为普通字符看待,如用“%”去匹配字符%,用”\_"去匹配字符__

示例:检索所有姓张的学生学号及姓名

Select S#,Sname
From Student
Where Sname Like '张%';

示例:检索名字为张某某的所有同学姓名

Select S#,Sname
From Student
Where Sname Like '张____';(注意一个汉字占两个字节)

示例:检索名字不姓张的所有同学姓名

Select S#,Sname
From Student
Where Sname Not Like '张%';

多表联合查询

select 列名 [[,列名]...]
from 表名1,表名2...
where 检索条件;

在这里插入图片描述

重名处理

select 列名 as 列别名 [[,列名 as 列别名]...]
from 表名1 as 表别名1,表名2 as 表别名2,...
where 检索条件

1.连接运算涉及到重名的问题,如两个表中的属性重名,连接的两个表重名(同一表的连接)等,因此需要使用别名以便区分
2.上述定义中的as可以省略
3.当定义了别名后,在检索条件中可以使用别名来限定属性

批元组新增

insert into 表名(列名1,列名2,...)
	select 列名1,列名2 from 表名
    where 检索条件;

在这里插入图片描述

示例:新建立Table:St(S#,Sname),将检索到的满足条件的同学新增到该表中

Insert Into St (S#,Sname)
	Select S#,Sname From Student
	Where Sname like%伟’;
                
Insert Into St(S#,Sname)
	Select S#,Sname 
    From Student Order By Sname;

注意:当新增元组时,DBMS会检查用户定义的完整性约束条件等,如不
符合完整性约束条件,则将不会执行新增动作

3.Delete

delete from 表名 [where 条件表达式];

1.元组删除Delete命令:删除满足指定条件的元组
2.如果Where条件省略,则删除所有的元组

4.update

update 表名
	set 列名=表达式|(子查询)
		[[,列名=表达式|(子查询)]...]
		[where 条件表达式];

1.元组更新Update命令:用指定要求的值更新指定表中满足指定条件元组的指定列的值
2.如果Where条件省略,则更新所有的元组。

示例:将所有教师工资上调5%

Update Teacher
Set Salary=Salary*1.05;

示例:将所有计算机系的教师工资上调10%

Update Teacher
Set Salary=Salary*1.1
Where D# in(Select D# From Dept Dname='计算机');
  • 31
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值