SQL数据操作🌵
🌟Select 基本语句格式:
SELECT [ALL | DISTINCT] <目标列表达式> [,<目标列表达式>]…
FROM <表名或视图名>[,<表名或视图名>]
[WHERE <条件表达式>]
[GROUP BY <列名1>[HAVING <条件表达式>]]
[[ORDER BY <列名2>[ASC | DESC]…]
简单查询
🍙基本的查询语句:
Select Sno,Sname
from S
where sex='男';
🍘使用AS可以给列和表重命名。
Select 学生表.sno as 学号, Sname as 姓名, Grade 成绩 //AS是可以省略的
from S 学生表,SC 课程表 //表也可以重命名
where 学生表.Sno=课程表.Sno and 学生表.SD='计算机'; //表重命名后,引用时一定要用 新名称、
连接查询
🍙检索选修课程名为“操作系统”的学生号和学生姓名:
Select S.Sno,Sname
from S,SC,C
where S.Sno=SC.Sno and SC.Cno=C.Cno and C.Cname='操作系统';
🍘检索至少选修了课程号为“C1”和“C3”的学生号:
Select Sno
from SC SC_X,SC SC_Y
where SC_X.Sno=SC_Y.Sno and SC_X.Cno='C1' and SC_Y.Cno='C3'
子查询
子查询也称嵌套查询。嵌套查询是指一个SELECT-FROM-WHERE查询块中可以嵌入另一个查询块之中。 在SQL中允许多重嵌套。
-
🍽IN(在……集合中) | NOT IN(不在……集合中)
🍙检索选修了课程号为'C1'的学生号和学生姓名:
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)
聚集函数
聚集函数是一个值的集合为输入,返回单个值的函数。
🌟SQL提供了5个预定义集函数:
-
平均值AVG()
-
最小值MIN()
-
最大值MAX()
-
求和SUM()
-
计数COUNT()。
分组查询
-
GROUP BY 。 对元组进行分组,此时聚集函数只用于每个分组
🍙查询每个Sno的Grade平均值
Select Sno,AVG(Grade)
from SC
GROUP BY Sno;
-
HAVING。在分组前按照某种方式加上限制,使得不需要的分组为空。
🍙查询每个Sno的Grade平均值大于85
Select Sno,AVG(Grade)
from SC
GROUP BY Sno
HAVING AVG(Grade)>85
字符串操作
字符串常用LIKE来进行匹配操作,模式是 区分大小写的。
-
“%”匹配任意长度字符串
-
“_”匹配任意一个字符。
🎁为了使模式中包含特殊字符,即%和_,允许使用ESCAPE关键词来定义转义符,LIKE语句后面紧 跟“ESCAPE''”表明转义符'' 后面的特殊字符为普通字符。
LIKE 'ab\%cd%'escape'' //匹配所有以ab%cd开头的字符串
LIKE 'ab\cd%'escape'' //匹配所有以ab\cd开头的字符串
集合操作
例:贷款(customer-no,loan-no) 存款(customer-no,account-no)
-
UNION(并)、UNION ALL(不去掉重复行)
查询在银行有贷款或者有存款的所有客户身份证号:
select customer-no from 贷款
union
select customer-no from 存款;
-
INTERSECT(交)
查询在银行既有贷款又有存款的客户身份证号:
select customer-no from 贷款
intersect
select customer-no from 存款
-
EXCEPT(差)
查询只在银行有贷款而没有存款的客户身份证号:
select customer-no from 贷款
except
select customer-no from 存款
外连接
-
LEFT JOIN(左外连接)
SELECT S.Sno,Sname,SC.Cno,Grade
FROM S
LEFT JOIN SC
ON S.Sno=SC.Sno;
-
RIGHT JOIN(右外连接)
SELECT S.Sno,Sname,SC.Cno,Grade
FROM S
RIGHT JOIN SC
ON S.Sno=SC.Sno
-
FULL JOIN(全外连接)
SELECT S.Sno,Sname,SC.Cno,Grade
FROM S
FULL JOIN SC
INSERT INTO语句
INSERT INTO 表名 VALUES (值1,值2…)
INSERT INTO 表名(列名1,列名2…) VALUES (值1,值2…)
DELETE语句
DELETE FROM 表名 WHERE 条件表达式
🎈注意:不同于DORP TABLE SC,DELETE只是删除表中的数据,但是关系模式仍然存在,表SC仍然存在于数据库中。
UPDATE语句

浙公网安备 33010602011771号