813 字
4 分钟
数据库系统工程师—8.2数据操作
数据操作
SELECT
查询基本格式
select * from table_namewhere 条件表达式group by 列名 [having 条件表达式]order by 列名 [asc] | [desc];where可用的运算符

连接查询
如果涉及两个以上的表,则称为连接查询
Select S.Sno,Snamefrom S,SCwhere S.Sno=SC.Sno and SC.Cno='C1';子查询
- 子查询也称嵌套查询
- 嵌套查询是指一个SELECT-FROM-WHERE查询块中可以嵌入另一个查询块之中。在SQL中允许多重嵌套。
IN、NOT IN
Select Sno,Snamefrom Swhere Sno IN ( Select Sno from SC Where Cno='C1');EXISTS 、NOT EXISTS
Select Cno,Cname from Cwhere NOT EXISTS ( select * from SC where SC.Cno=C.Cno);聚集函数


分组查询
GROUP BY
对元组进行分组,此时的聚集函数只用于每个分组
Select Sno,AVG(Grade) from SC GROUP BY Sno;HAVING
在GROUP BY子句后面加上HAVING子句,对分组后做一个选择,去掉不满足HAVING后面的 那个条件的分组
Select Sno,AVG(Grade) from SC GROUP BY Sno HAVING AVG(Grade)>85;字符串操作
字符串常用LIKE来进行匹配操作,区分大小写
-
“%”匹配任意长度字符串
-
Select Snamefrom SWhere Addr LIKE '%科技路%';
-
-
“_”匹配任意一个字符
-
Select Sname,Sage,SDfrom SWhere Sname LIKE '__国庆';
-
为了使模式中包含特殊字符,即%和_,允许使用ESCAPE关键词来定义转义符,LIKE语句后面紧跟“ESCAPE’\‘”表明转义符’\’ 后面的特殊字符为普通字符。
- LIKE ‘ab\%cd%‘escape’\’
- 匹配所有以ab%cd开头的字符串
- LIKE ‘ab\\cd%‘escape’\’
- 匹配所有以ab\cd开头的字符串
集合操作
- UNION(并)、UNION ALL(不去掉重复行)
- INTERSECT(交)
- EXCEPT(差)

外连接
*** JOIN ? ON exp
- LEFT JOIN(左外连接)
- RIGHT JOIN(右外连接)
- FULL JOIN(全外连接)
SELECT S.Sno,Sname,SC.Cno,Grade FROM S FULL JOIN SC ON S.Sno=SC.Sno;INSERT INTO语句
-
insert into 表名 values(值1,值2)
-
insert into SCVALUES ('3001', 'C1', '84');
-
-
insert into 表名(列名) values(值1)
-
INSERT INTO SC(SNO,CNO)VALUES ('3001', 'C2');
-
DELETE语句
delete from 表名 where exp;delete from 表名; # 删除全部数据,保留表结构UPDATE语句
update 表名 set 列名=新值 where exp;视图的查询与更新
视图的查询
建立计算机系(CS表示计算机系)学生的视图,并要求进行修改、插入操作时保证该视图只有计算机系的学生
CREATE VIEW CS_STUDENTAS SELECT Sno,Sname,Sage,SexFROM StudentWhere SD='CS'WITH CHECK OPTION;此时要查询计算机系年龄小于20岁的学生的学号及年龄的SQL语句如下
SELECT Sno,Sage FROM CS_Student WHERE Sage<20系统执行该语句时,通常先将其转换成等价的对基本表的查询,然后执行查询语句。也就是查询视图时,系统先从数据字典中取出视图的定义,然后将定义中的查询语句和对该视图的查询语句结合起来,形成一个修正的查询语句。对上例修正之后的查询语句为:
SELECT Sno,Sage FROM Student WHERE SD='CS' AND Sage<20;视图的更新
SQL对视图的更新必须遵循以下规则:
(1)从多个基本表通过连接操作导出的视图不允许更新。
(2)对使用了分组、聚集函数操作的视图不允许进行更新操作。
(3)如果视图是从单个基本表通过投影、选取操作导出的则允许进行更新操作,且语法同基本表。
数据库系统工程师—8.2数据操作
https://minthana.github.io/blog/posts/数据库系统工程师-8-2数据操作/