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 INSelect 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数据操作/
作者
Mint
发布于
2025-04-21
许可协议
CC BY-NC-SA 4.0