SQL的数据操纵功能包括SELECT(查询)、INSERT(插入)、DELETE(删除)和UPDATE(修改)这4条语句。SQL语言对数据库的操纵十分灵活、方便、原因在于SELECT语句中成分丰富多样的元组有许多可选形式,尤其是目标列和条件表达式。
1、SELECT 基本结构
数据库查询是数据库的核心操作,SQL语言提供了SELECT语句进行数据库的查询。
语句格式:
SELECT[ALL|DISTINCT]<目标列表达式>[,<目标列表达式>]….FROM<表名或视图名>[,<表名或视图名>]
[WHERE<条件表达式>]
[GROUP BY<列名1>][HAVING<条件表达式>]]
[ORDER BY<列名2>][ASC|DESC]….]
SQL查询中的子句顺序为SELECT、FROM、WHERE、GROUP BY、HAVING和ORDER BY。
其中,SELECT、FROM是必须的,HAVING条件子句只能与GROUP BY搭配起来使用。
(1)SELECT子句对应的是关系代数中的投影运算,用来列出查询结果中的属性。其输出可以是列名、表达式、集函数(AVG、COUNT、MAX、MIN、SUM),DISTINCT选项可以保证查询的结果集中不存在重复元组。
(2)FROM子句对应的是关系代数中的笛卡尔积,它列出的是表达式求职过程中需扫描的关系,即在FROM子句中出现多个基本表或视图时,系统首先执行笛卡尔积操作。
(3)WHERE 子句对应的是关系代数中的选择谓词。WHERE子句的条件表达式中可以使用的运算符如下所示:
集合运算符 IN 在集合中
NOT IN 不在集合中
字符串匹配元素运算符 LIKE 与_和%进行单个、多个字符匹配
空值比较运算符 IS NULL 为空
IS NOT NULL 不能为空
逻辑运算符 AND 与
OR 或
NOT 非
算数运算符
一个典型的SQL查询具有以下形式:
SELECT A1,A2,…….,An
FROM r1,r2,…….rm
WHERE p
2、 简单查询
SQL最简单的查询是找出关系中满足特定条件的元组,这些查询与关系代数中的选择操作类似。简单查询只需要使用3个保留字,即SELECT、FROM和WHERE。
查询学生——课程数据库中计算机系CS学生的学号、姓名及年龄。
SELECT Sno,Sname,Age
FROM S
WHERE SD=’CS’
注意,为了便于理解查询语句的结构,通常在写SQL语句时要保留字(如FROM或WHERE)作为每一行的开头。但是,如果一个查询或子查询非常短,可以直接将它们写在一行上,这种风格使得查询语句很紧凑,也具有很好的可读性。如上例也可以写成如下形式:
SELECT Sno,Sname,Age FROM S WHERE SD=’CS’
若当前年份为2008,查询学生的出生年份。
SELECT Sno,2008-Age FROM S;
3、连接查询
若查询涉及及两个以上的表,则称为连接查询。
检索选修了课程号”C1”的学生的学号和姓名,可以用连接查询和嵌套查询实现,方法如下:
SELECT Sno,Sname
FROM S,SC
WHERE S.Sno=SC.Sno AND SC.Cno=’C1’