SQL总结1

SQL总结

1、          数据定义(create  table

Alter  table)

     请先新建并打开某个数据库,再做如下操作

例1:create table student(学号 c(8) not null primary key,;  &&将学号设置成主索引,非空

姓名 c(6) ,;

性别 c(2)  check 性别$”男女” error “性别必须是男或女”),;

     &&设置性别的有效性规则

是否团员 L default  .t. ,;    &&将“是否团员”字段的缺省值设置为.t.

简历 m,照片 g ;

出生日期 d)

Create table score(学号 c(8), 语文 n(5,1),数学 n(5,1),外语 n(5,1),总分 n(4,1);

Foreign key 学号 tag 学号 references student)

    为score表建立一个普通索引”学号”,并与student的主索引建立联系。

例2:修改score表的“总分”字段为n(5,1)

     Alter table score alter 总分 n(5,1)

     为score表增加一个字段”政治 n(5,1)”

    Alter table score add政治 n(5,1)

    删除score表的字段”政治 n(5,1)”

    Alter table score drop政治 n(5,1)

    设置score表的语文字段有效性规则为“成绩在0到100之间”,出错提示信息为 “语文成绩不符合要求,须在0到100之间”

    Alter table score alter 语文 set check 语文>0 and 语文<100 error “语文成绩不符合要求,须在0到100之间”

2、          数据修改:delete ,insert,update

Delete from student where 性别=’男’   &&做逻辑删除标记,不参与统计

Pack     &&物理删除

Insert into student values(“”,””,,.t. ,”abc” ,{^1989/12/03},)    &&一一对应

Insert into student(学号,姓名) values(“”,””)

Insert into student(姓名,是否团员) values()  &&必须有主码

Update score set 总分=总分+10

Update score set 总分=总分+10 where 性别=”男”

非sql语句实现该功能

Use score

Replace 总分 with 总分+10 for性别=”男”

Replace all 总分 with 总分+10

3、          查询

简单:select * from student

嵌套:查询“平时成绩”比所有001课程都高分的记录

      Any :满足任意一个即可(以最小的为参照),与some

      All:所有,取决于前面的运算符(>时取最大值,<取最小值)

      In:

      Exists:

连接:所得结果来源于几个表,或者表达式计算的结果

 select student.学号,姓名,avg(考试成绩) as 平均成绩;

from student,score;

where student.学号=score.学号;

group by student.学号

select student.学号,姓名,avg(考试成绩) as 平均成绩;

from student inner join score;

on student.学号=score.学号;

group by student.学号

理解“内连接,全连接,左连接,右连接”

内连接:两个表同时有的,且相同才连接

全连接:左表和右表的总和,即先左连接,再右连接

左连接:以左表为准,左表中有的记录都与右表连接,若右表无,则假想成右表有空记录

4、          视图

Open database 学生数据库名

Create view 视图名 as select ……

注:必须在数据库中建立视图。即先打开数据库,才能建立视图。

    是一个虚表,只是查询结果,关闭数据库后,相应视图也关闭。

 

第二篇:sql总结

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36 alter table 表名 [add 子句] [drop 子句] 创建表: create table 表名( 列名 数据类型 [default 缺省值] [not null] [,列名 数据类型 [default 缺省值] [not null]] . . . . . . [,primary key(列名 [,列名] …)]主键(多个值作为联合主键) [,foreign key (列名 [,列名] …) 外键 references 表名 (列名 [,列名] …)]外间关联表 [,unique(列名 [,列名] …)]不允许重复列 [,check(条件)])约束条件 如: create domain person_name char(20)(定义域) create table PROF ( PNO char(10),--职工编号 PNAME person_name not null, --职工姓名 SAL int, --工资 AGE int, --年龄 DNO char(10), --主任职工编号 primary key (PNO), --主键 foreign key (DNO) references DEPT(DNO),外键关联 简单定义表: create table CIA ( NAME varchar(50) primary key, ) REGION varchar(50) not null default ‘region not formalized yet', AREA int null, POPULATION long null, GDP long not null 修改表: 增加新列 删除列 [modify 子句] 修改列定义 Add列不为空是需加默认值(缺省值) 修改列定义时先建一修改后的新列,复制要修改的原列,删除修改的原列 37

38 索引的定义 create [unique|distinct] [cluster] index 索引名

40

41

42

43

44

45

46

47

48

49

50

51

52 unique(distinct):唯一性索引,不允许表中不同的行在索引列上取相同值。若已有相同值存在,则系统给出相关信息,不建此索引。系统并拒绝违背唯一性的插入、更新。 cluster:聚簇索引,表中元组按索引项的值排序并物理地聚集在一起。一个基本表上只能建一个聚集索引。 asc|desc:索引表中索引值的排序次序,缺省为asc。 ? 示例: create cluster index g-index on CIA(REGION) 删除索引: drop index 索引名 sql查询 1、 sum 总和 avg平均 distinct/unique 去重 asc 升序| desc降序 2、 select name case when age>60 then 1 when age<60 then 2 end age from table1. 3、 SELECT last_name +' is a ‘+ job_id AS "Employee Details" FROM employees; 53 54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72 4、 escape 转义字符的使用:db2,oracle均可用 例:select * from rpt_plain_define where rpt_id like '%\_%' escape '\'; 5、 order by 排序: order by age asc 升序 order by desc 降序 order by 2 按select查询第三个字段排序 6、集合 集合并:union ? 求选修了001或002号课程的学生号。 (select SNO from SC where CNO = 001) union all (select SNO from SC where CNO = 002) 默认去重 集合交:intersect 集合差: except Table1 except table2 得到table1中有,而table2中没有的记录 求选修了001和002号而没有选003号课程的学生号。 (select SNO from SC where CNO = 001 or CNO = 002 ) except (select SNO from SC

74

75

76

77

78

79

80

81 § 聚集函数 ? 平均值:avg ? 最小值:min ? 最大值:max ? 总和:sum ? 记数:count 聚集函数后跟group by …having… (单个字段查询不需要:SELECT MAX(SALARY) FROM EMPLOYEES) 82

83

84

85

相关推荐