基础查询

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
use SCT --SCT数据库
select C# from sc --从sc表中查询C#
select distinct C# from sc --从sc表中查询C#并且过滤掉重复行
select top 3 * from sc --从sc表中查询前三行的数据
select top 50 percent * from sc --从sc表中查询前50%的数据
select s# as 学号,score as 分数 from sc --从sc表查询s#作为“学号”输出,score作为“分数”输出
select s#,C#,Score*1.50 from sc --从sc中查询s#,c#,和score的1.5倍,注意此时score没有列名
select s#,C#,Score150 = score *1.50 from sc --此时score*1.50的列名为Score150
select * from sc where score>=60 --查询sc中score>=60的元组
select * from sc where score>=60 and s#='123' --and查询sc中score>=60并且s#为123的元组
select * from sc where score>=60 or score<=20 --or查询
select * from sc where score between 20 and 60
select * from sc where score>=20 and score<=60 --等效
select Cname,Chours from sc where Cname in('数据库','C语言')
select Cname,Chours from sc where Cname not in('数据库','C语言')
select * from sc where sname like '张%'
select * from sc where sname not like '张%' --%任意长的任意字符,_任意单个字符,[]指定范围内的单个字符,如[a-f]或者[abfr],[^]指定不在范围内的单个字符
select * from sc where sname is NULL --[not] is对空值判断
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
select avg(sage) as 平均年龄 from student where ssex = '男'
avg():返回列的数据平均值
sum():返回列数据的和
max():返回列数据中的最大值
min():返回列数据中的最小值
count():返回数据的个数
use SCT
select C#,avg(score) from SC
group by C#
--group by 后面的必须按照前面筛选的C#进行分组
having avg(score)>=60
--对group by进行筛选
SELECT s#,sname
FROM student
WHERE ssex='女'
ORDER BY sname ASC --升序
--ORDER BY sname DESC 降序
SELECT student.sname, sc.c#, sc.score
FROM student INNER JOIN sc ON student.s#=sc.s#

也可用
SELECT sname, sc.c#, sc.score
FROM student,sc
WHERE student.s#=sc.s#
select * from subject
left join score --left join表示subject全部输出,score取交集
right join score --right join 表示score全部输出,subject取交集
on subject.id = score.id

imgimgimg

1
2
3
UNION --并
EXCEPT --差
INTERSECT --交

数据库、表的操作

数据库的创建

1
create database **DATABASE_NAME**

删除数据库

1
drop database **DATABASE_NAME**

表的创建

1
2
3
4
5
create table TABLE_NAME
(
属性1 数据类型,
属性2 数据类型,
)

表的修改

1
2
3
4
5
6
alter table TABLE_NAME
[
alter column 属性 数据类型 --修改表属性的数据类型
add 属性 数据类型 --新增表属性
drop column 属性 --删除表属性
]

添加元组

1
2
insert into TABLE_NAME values('','','')
insert into TABLE_NAME(属性1,属性2,....) values('','',''...)

修改表中数据

1
2
3
update 表名TABLE_NAME
set ssex='男'
where sno = '10011'

删除元组

如果不加where则删除全部元组

1
2
delete 表名TABLENAME
where ssex='男'

not null

1
2
3
4
5
6
7
8
9
10
USE SCT
CREATE TABLE STUDENT
( Sno char(7) not null,
Sname char(10),
SFZ char(18),
Sage tinyint )
=============================
USE SCT
ALTER TABLE student
ALTER COLUMN Sname char(10) not null

primary key主键约束

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
USE SCT
CREATE TABLE SC
( Sno char(7) ,
Cno char(3),
Score tinyint,
Primary key (Sno,Cno)
)
================================
USE SCT
CREATE TABLE STUDENT1
( Sno char(7) primary key,
Sname char(10),
SFZ char(18),
Sage tinyint
)
================================
USE SCT
ALTER TABLE STUDENT1
add primary key(sno) --不指定约束名称
add constraint pk1 primary key(sno) --指定约束名称
================================
use sct
alter table STUDENT1
drop constraint pk1 --删除pk1约束

foreign key外键约束

1
2
3
4
5
6
7
8
9
10
USE SCT
CREATE TABLE SC
( Sno char(7) CONSTRAINT sc_k foreign key refernces student(sno),
Cno char(3),
Score tinyint )
=================================
USE SCT
ALTER TABLE SC
ADD CONSTRAINT SC3_K
foreign key(Cno) references Course(Cno)
img

注意:references指向的必须是主键

check 条件约束

1
2
3
4
5
6
7
8
9
10
11
USE SCT
CREATE TABLE STUDENT
( Sno char(7) PRIMARY KEY,
Sname char(10),
SFZ char(18) UNIQUE,
Sage tinyint CHECK(Sage>=15 and Sage<=40 ) )
================================================
USE SCT
ALTER TABLE student
ADD CONSTRAINT St4_K
CHECK(Sage>=15 and Sage<=40 )

default默认约束

1
2
3
4
5
6
7
8
9
10
USE SCT
CREATE TABLE STUDENT
( Sno char(7) PRIMARY KEY,
Sname char(10),
Major char(10) DEFAULT‘电计’)
==============================
use SCT
alter table STUDENT
add constraint pk1
defalut '电计' for Major