DB2中SQL基本语句的操作
阅读原文时间:2023年07月08日阅读:1

完全转载自:http://blog.sina.com.cn/s/blog_67aaf4440100v01p.html

--创建数据库

create database Etp;

--连接数据库

connect to Etp;

--断开连接

disconnect Etp;

--查看当前数据库下有哪些表

list tables;

--建表

create table studentInfo(

 stuno char(5) not null,

 stuname varchar(8),

 stubirth date

);

--查看表结构

describe table studentinfo;

--新增表字段

alter table studentinfo add stutel int;

alter table studentinfo add abc int;

--修改字段类型

alter table studentinfo alter column stutel set data type
char(11);

--删除字段

alter table studentinfo drop column abc;

--增加一个非空约束

alter table studentinfo alter column stuname set not null;

--重构表

reorg table studentinfo;

--增加一个唯一约束

alter table studentinfo alter column stutel set not null;

alter table studentinfo add constraint un_stutel
unique(stutel);

--添加检查约束

alter table studentinfo add column stuAge int;

alter table studentinfo add constraint ch_stuAge check(stuAge
> 0 and stuAge <150);

--添加主键约束

alter table studentinfo add constraint pk_stuno primary
key(stuno);

--删除表

drop table studentinfo;

--创建表的同时添加约束方式1

create table studentinfo(

 stuNo int not null,

 stuName varchar(8) not null,

 stuAge int,

 stuTel char(8),

 constraint pk_stuNo primary key(stuNo),

 constraint un_stuName unique(stuName),

 constraint ch_stuAge check(stuAge
>=0 and stuAge <150)

);

--创建表的同时添加约束方式2

create table studentinfo(

 stuNo int not null primary key,

 stuName varchar(8) not null unique,

 stuAge int check(stuAge >=0 and
stuAge <150),

 stuTel char(8)

);

--添加主外键

--新增班级表

create table classInfo(

 classId int not null primary key,

 className varchar(20)

);

--建表的同时添加外键

create table studentinfo(

 stuNo int not null,

 stuName varchar(8) not null,

 stuBirth date not null,

 stuAge int,

 stuTel char(8),

 fclassId int,

 stuBirth date not null,

 constraint pk_stuNo primary key(stuNo),

 constraint un_stuName unique(stuName),

 constraint ch_stuAge check(stuAge
>=0 and stuAge <150),

 constraint fk_fcalssId foreign key(fclassid)
references classInfo(classId)

);

-- 自增

create table studentinfo(

 stuNo int not null generated always as
identity(start with 1 ,increment by 1),

 stuName varchar(8) not null,

 stuAge int,

 stuTel char(8),

 fclassId int,

 stuBirth date not null,

 constraint pk_stuNo primary key(stuNo),

 constraint un_stuName unique(stuName),

 constraint ch_stuAge check(stuAge
>=0 and stuAge <150),

 constraint fk_fcalssId foreign key(fclassid)
references classInfo(classId)

);

--先建表再添加外键

alter table studentinfo add constraint fk_classId foreign
key(fclassid) references classInfo(classId);

--从系统表中查询约束名

select constname, tabname, refkeyname, reftabname, colcount,
deleterule, updaterule from syscat.references;

--插入

insert into classinfo values(1,'ETP-1');

insert into studentInfo
values(1,'xy',20,'12345',1,'1990-02-28');

--不是全部插入则需要写列名

insert into studentinfo(stuNo,stuName,stuTel)
values(2,'wj','111');

-- 有自增长的列要写清楚列名

insert into studentinfo(stuName,stuAge,stuTel,fclassid,stuBirth)
values('xy',20,'12345',1,'1990-02-28');

insert into studentinfo(stuName,stuAge,stuTel,fclassid,stuBirth)
values('tom',22,'12345',2,'1990-02-28');

--更新

update studentinfo set stuBirth = '1990-02-21' where
stuName='xy';

update studentinfo set stuBirth = '1990-02-21',stuAge = 21 where
stuName='xy';

--删除

deleted from studentinfo where stuName='xy';

--查询

select * from studentinfo where stuName='xy';

select stuName,stuAge from studentinfo;

--别名查询

select stuName as 姓名,stuAge as 年龄 from studentinfo;

select s.stuName as 姓名,s.stuAge as 年龄 from studentinfo s;

--运算查询

select s.stuName as 姓名,s.stuAge+5 as 年龄 from studentinfo s;

--串联运算查询

select stuName||stuAge from studentinfo;

--and 和 or

select s.stuName as 姓名,s.stuAge+5 as 年龄 from studentinfo s where
s.stuName='xy' and s.stuAge=20;

select s.stuName as 姓名,s.stuAge+5 as 年龄 from studentinfo s where
s.stuName='xy' or s.stuAge=20;

--null

select * from studentinfo where stuAge is
null; 

select * from studentinfo where stuAge is not
null;

--between and 包括边界 相当于>=和<=s

select s.stuName as 姓名,s.stuAge+5 as 年龄 from studentinfo s where
s.stuAge between 10 and 20

--in

select * from studentinfo  where stuName in
('xy','wj');

select * from studentinfo  where stuName not in
('xy','wj');

--模糊查询 like%,%表示多个字符

select * from studentinfo where stuName like 'x%'

--模糊查询 like_ , _表示单个字段

select * from studentinfo where stuName like 'x_';

--排序 order by

select * from studnetinfo order by fclassid desc;

select * from studnetinfo order by fclassid asc;

--distinct去掉重复

select distinct stuAge as 年龄 from studentinfo;

--group by,使用的时候,select 后面只能加2种字段: 1.group by 后面出现的,2.聚合函数

select fclassId as 班级号,count(stuName) as 学生个数 from studentinfo
group by fclassid;

-having 在分组的基础上过滤,出现顺序where-group by-having

select fclassId as 班级号,count(stuName) as 学生个数 from studentinfo
group by fclassid having count(StuName)>=2