sql语法

一、创建
create table 表名 (
列名 数据类型 列级完整性约束,

);

eg:
create table Student(
Sno CHAR(9) primary key,

);

二、修改表
1.

alter table 表名
add add 新列名 数据类型 完整性约束 // 添加新的列
alter column 列名 数据类型 列级完整性约束 //修改已有属性的数据类型或者添加列级完整性约束
add 表级完整性约束 // 添加表级完整性约束
drop column 【cascade/restrict】列名 // 删除表中的列
drop constraint 【cascade/restrict】完整性约束名 // 删除指定的完整性约束
cascade是会自动删除引用该列的其他对象,
restrict如果该列被其他对象引用,rdbms将拒绝删除该列

2.删除整个表
drop table 表名 [cascade/restrict]
如果表上有视图,选择restrict但删除失败,选择cascade就会把视图也删除
加菜知识:视图删除会把与视图有关的视图也删除,但是不会把数据表的数据也删除

三、 索引
1.建立索引
creat [unique] [cluster] index 索引名
on 表名(列名…)

unique 表明此索引的每一个索引值只对应唯一的数据记录
cluster表明要建立的索引的聚簇索引

eg:
create unique index Stusno on Student(Sno)
create unique index Coucno on Course(Cno)
create unique index SCno on SC(Sno ASC,Cno DESC);
ASC升序 DESC降序

2.修改索引
alter index 久索引名 rename to 新索引名

3.删除索引
drop index 索引名
删除索引时,系统会同时从数据字典中删去有关该索引的描述

四、数据查询

1.select

select * 查询所有
select A 查询属性A
select 2017-Sage // Sage是出生日期 2017-Sage就是年龄,说明select后可以加表达式
select ‘占一个属性‘ // select后可以加字符,然后这个字符串可以做为一个属性,其列的内容就都是这些字符串
select 2017-Sage birthday,这个birthday就是2017-Sage表达式的别名
distinct用法:消除取值重复的行
select Sno
from SC;
结果
Sno
20170103
20170103
20170104

select distinct Sno
from SC;
结果
Sno
20170103
20170104

由以上可以总结出select的语法
select [all/distinct] 属性/*/表达式/字符串
如果不写distinct就默认all

2.where

select Sname
from Student
where Sdept=’CS’
where Sage<20

// between
where Sage between 20 and 30
where Sage not between 20 and 30

// in
where Sdept in (‘CS’,’MA’)

// like
通配符 %和_
%:代表任意长度的字符串(包括0)
_:代表任意单个字符

like拥有=的功能
比如:
select *
from student
where Sno like ‘3114002595’;
等价于
where Sno = ‘3114002595’;
特点功能:like加通配符
where Sname like ‘陈%’

‘\’转换字符,‘_’就单单表示字符_

// order by子句
排序
select Sno,Grade
from SC
where Cno=’3’
order by Grade Desc;
默认是ASC升序

// 聚集函数只能用于select子句和group by中的having子句

GROUP BY子句
分组,值相等的为一组
// 求各课程号及相应的选课人数
select Cno,COUNT(Sno)
from SC
group by Cno;
分组后,聚集函数将作用于每一个分组

查询选修了三门以上课程的学生学号
select Sno
from SC
group by Sno
having count(*)>3;
如果分组后还要求按一定的条件对这些组进行筛选,最终只输出满足指定条件的组,则可以用having

having和where的区别
where在group by前,且不可以用聚集函数
having在group by后,可以用聚集函数

in和=的区别
in后可以是一个值也可以是一个集合
=后只能是一个值

any和all
any all (这几个比较简单不写了,自行百度)

exists代表存在量词
查询所有选修了1号课程的学生姓名
select Sname
from Student
where EXISTS
(
select *
from SC
where Sno=Student.Sno and Cno=’1’
);
若内层查询结果非空,则外层的where子句返回真值

not exists代表全程量词

3.集合查询
并操作UNION
交操作INTERSECT
差操作except

比如
select Sno
from SC
where Cno = ‘1’
union
select Sno
from SC
where Cno = ‘2’

select*
from Student
where Sdept = ‘CS’
intersect
select *
from Student
where Sage <= 19;

总结:select、from、where、between、in、like、order by、desc、ASC、having、group by、any、all、exists、union、intersect、except

四、数据更新
1.插入
insert
into 表名(属性列)
values (常量)

比如:
insert
into Student(Sno,Sname,Ssex,Sage)
values(‘3114002595’,’陈东’,’男’,’18’);

values子句对新元组的个属性赋值,字符串常数要用单引号括起来

2.修改
update 表名
set 列名 = 表达式
where

3.删除
delete
from 表名
where 条件

五、视图
视图是虚表
1.创建视图
create view 视图名(列名)
as
子查询
with check option

with check option 表示对视图进行update、insert、delete操作时要保证更新、插入或删除的行满足视图定义中的谓词条件(即子查询中的条件表达式)

比如
create view IS_Student
as
select Sno,Sname,Sage
from Student
where Sdept = ‘IS’
with check option;
以后对该视图进行插入、修改、删除操作时,关系数据库管理系统会自动加上Sdept = ‘IS’的条件

2.删除视图
drop view 视图名 [cascade]
删除视图,如果用cascade的话,就会连跟视图有关系的视图也删除
基本表删除后,由该表导出的所有视图均无法使用,但是视图的定义没有从字典中清除,也就是说删除视图只能同股哟drop View子句

3.查询视图

4.更新视图
并不是所有视图都可以更新,因为有些视图的更新不能唯一的有意义的转换成相应基本表的更新

发布了38 篇原创文章 · 获赞 10 · 访问量 11万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章