SQL基础语句整理

SQL语句整理

[ ]表示,该部分可以选择是否使用,可选

< >表示,该部分必须使用,不使用的话会违反语法规则,必选

表操作

1.创建表

CREATE TABLE <tablename>
(<列名> <数据类型>[列级约束条件],)
(<列名> <数据类型>[列级约束条件],
[表级约束条件])

例如:
CREATE TABLE Student(
Sno CHAR(9) PRIMARY KEY,
Sname CHAR(20) UNIQUE,
Ssex Char(2))

2.修改表

ALTER TABLE <表名>//修改表
[ADD [COLUMN] <新列名><数据类型>[完整性约束]]//增加列
[ADD [<表级完整性约束>]//增加表约束
[DROP [COLUMN] <列名>[CASCADE|RESTRICT]]//删除列,
//如果指定CASCADE, 自动删除引用该列的其他对象
//如果指定RESTRICT,如果该列被其他对象引用则拒绝删除

ALTER COLUMN <列名><数据类型>//修改原有的列定义

3.删除表

DROP TABLE <表名>[CASCADE|RESTRICT]
如果指定CASCADE,则无限制删除该表,强制删除
如果指定RESTRICT,则有限制删除该表,该表不能有索引,视图等,不能被其他表的约束所引用

例如:
CREATE VIEW Is_Student
AS
Select Sno,Sname,Sage
from Student where Sdept='IS'

DROP TABLE Student RESTRICT//删除Student表,报错

DROP TABLE Student CASCADE//直接删除,不报错

索引操作

1.创建索引

CREATE [UNIQUE] [CLUSTER] INDEX <索引名> ON <表名>(<列名>[<次序>])

UNIQUE:表示此索引的每一个索引值都对应唯一的元素记录

CLUSTER:表示建立的是聚簇索引

ASC:升序排序,在排序中,默认使用升序排序
DESC:降序排序

例如:

CREATE UNIQUE INDEX Student ON Student(Sno ASC,Cno DESC)

创建基于表Student的唯一索引Student,按学号升序和课程号降序创建索引

2.修改索引

ALTER INDEX <旧索引名> RENAME TO <新索引名>

3.删除索引

DROP INDEX <索引名>

数据查询

SELECT [ALL|DISTINCT]<目标列形式>[,<目标列形式>,...]

FROM <表或视图名>
[WHERE <条件表达式>]

[GROUP BY <列名1> [HAVING <条件表达式>]]

//如果有GROUP BY语句,则将结果按 列名1的值进行分组,该属性列值相等的元组为一个组
//如果GROUP BY带有HAVING语句,则只有满足指定条件的语句才可以输出

[ORDER BY <列名2> [ASC|DESC]//ASC升序,DESC降序,不选的话,默认升序ASC

1.select查询列

选择的列名可以重命名,可以用as 也可以直接在列名后面加上空格,格式如下:
select <旧列名> as <新列名>
select <旧列名> <新列名>
select的列名可以为字符串,所查询的数据的内容等于列名

2.select查询条件

1.select查询某一个范围的值,可以用between…and…

2.**确定集合:**查询指定属性可以用IN和NOT IN,例如
select sname,ssex from student where sdept in ('cs','ma')
查询学生姓名,性别,专业是计算机和数学
select sname,ssex from student where sdept not in ('cs','ma')
查询学生姓名,性别,专业不是计算机和数学

3.字符匹配:
[NOT] like '<匹配串>' [ESCAPE '<换码字符>']
查找指定的属性列值与<匹配串>相匹配的元组,匹配穿可以是一个完整的字符串,也可以含有通配符%和_。其中:
%:表示任意长度的字符串。例如a%b,表示以a开头,以b结尾的字符串
_:表示任意单个字符。例如a_b,表示以a开头,以b结尾的长度为3的字符串
ECSAPE ''表示\之后的符号不具有特殊意义,比如_这个_不再是匹配符,而是普通的符号

3.select聚合函数

聚合函数                                                         作用
COUNT(*)                                                       统计元组个数
COUNT([DISTINCT|ALL] <列名>)                  统计某一列中值的个数
SUM([DISTINCT|ALL] <列名>)                       统计某一列中值的总和(此列必须是数值型)
AVG([DISTINCT|ALL] <列名>)                        统计某一列中值的平均值(此列必须是数值型)
MAX([DISTINCT|ALL] <列名>)                        统计某一列中值的最大值
MIN([DISTINCT|ALL] <列名>)                         统计某一列中值的最小值
其中DISTINCT表示计算时去掉指定列中的重复值,ALL表示不去除,默认值是ALL

4.select连接查询

4.1等值连接

**例子:**查询选修2号课程且成绩在90分以上的所有学生的学号和姓名
select student.sno,sname
from student,sc
where student.sno=sc.sno and sc.cno='2' and sc.grade>90

4.2自身连接

**例子:**查询每一门课的先修课的先修课
select first.cno,second.cpno//cno为课程号,cpno为先修课程号
from course first ,course second//将自身重命名为first和second,用于自连接
where first.cpno=second.sno

4.3外连接

以外部连接的表为主表,显示信息,空信息则为NULL
左外连接

select student.sno,sname,ssex,sage,sdept,cno,grade

from student left join sc on student.sno=sc.sno

右外连接

select student.sno,sname,ssex,sage,sdept,cno,grade

from student right join sc on student.sno=sc.sno

4.4多表查询

select student.sno,sname,cname,grade

from student,sc,course

where student.sno=sc.sno and sc.cno=course.cno

4.5嵌套查询

1.带有IN谓词的子查询
select sname from student where sno IN
(select sno from sc where cno='2')
2.带有比较字符的子查询
select sno,cno from sc x//把sc重命名为x
where grade>=(select avg(grade) from sc y where y.sno=x.sno)
3.带有ANY(SOME)或ALL谓词的子查询
ANY:任意
ALL:全部
select sname,sage from student where sage<ANY
(select sage from student where sdept='cs')
4.带有EXIST谓词的子查询(不返回结果,只返回一个true 或者false)
select sname from student where EXIST
(select * from sc where sno=student.sno and cno='1')
若内层查询结果非空,则外层的where语句返回真值,否则返回假值

数据更新

1.插入数据

INSERT
INTO <表名>[(<属性列1>[,<属性列2>]·····)]
VALUES (<常量1>[,<常量2>]·····)

1.1插入元组

例1:
INSERT INTO student(sno,sname,ssex,sdept,sage)
values('201215128','陈东','男','IS',18)
//字符串需要用单引号包起来

例2:
INSERT INTO sc(sno,cno)
values('201215128','1')
//grade列会自动地赋空值

INSERT INTO sc
values('201215128','1',null)
//没有指出sc的列名,在grade列上要明确的给出空值

1.2插入子查询的结果

INSERT
INTO <表名>[(<属性列1>[,<属性列2>]·····)]
子查询

2.修改数据

UPDATE<表名>
SET <列名1>=<表达式1>[,<列名2>=<表达式2>····]
WHERE <条件>

2.1修改某一个元组的值

UPDATE student
SET sage=22
WHERE sno='201215121'

2.2修改多个元组的值

UPDATE student
SET sage=sage+1
//使所有人的年龄增加一岁

2.3带子查询的修改语句

UPDATE sc
SET grade=0
WHERE sno in(select sno from student where sdept='CS')
//将所有专业为CS的人的成绩修改成0

3.删除数据

DELETE FROM <表名> [WHERE <条件名>]

3.1删除一个元组的值

delete student from student where sno='201215128'

3.2删除多个元组的值

delete student from student
//删除整个student表

3.3带子查询的删除语句

delete from sc where sno in (select sno from student where sdept='CS')
//删除sc表中所有专业是CS的人

下载地址:https://download.csdn.net/download/weixin_43308622/12093255

发布了19 篇原创文章 · 获赞 2 · 访问量 2092

猜你喜欢

转载自blog.csdn.net/weixin_43308622/article/details/103915277