数据操作
SELECT
查询基本格式
select *
from table_name
where 条件表达式
group by 列名 [having 条件表达式]
order by 列名 [asc] | [desc];
where可用的运算符
连接查询
如果涉及两个以上的表,则称为连接查询
Select S.Sno,Sname
from S,SC
where S.Sno=SC.Sno and SC.Cno='C1';
子查询
- 子查询也称嵌套查询
- 嵌套查询是指一个SELECT-FROM-WHERE查询块中可以嵌入另一个查询块之中。在SQL中允许多重嵌套。
IN、NOT IN
Select Sno,Sname
from S
where Sno IN (
Select Sno from SC Where Cno='C1'
);
EXISTS 、NOT EXISTS
Select Cno,Cname
from C
where 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 Sname
from S
Where Addr LIKE '%科技路%';
-
- “_”匹配任意一个字符
-
Select Sname,Sage,SD
from S
Where 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 SC
VALUES ('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_STUDENT
AS SELECT Sno,Sname,Sage,Sex
FROM Student
Where 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)如果视图是从单个基本表通过投影、选取操作导出的则允许进行更新操作,且语法同基本表。