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