格式:SELECT [ALL | DISTINCT]<目标列...>
FROM <表名或视图名>,<表名或视图名>...
WHERE <条件表达式>
GROUP BY<列名> HAVING <条件表达式>
ORDER BY<列名2>[ASC | DESC]
操作:
SELECT 子句目标列表达式可以是字符串常量或者表达式,或者函数。
SELECT Sname ,’Year of Birth’ ,2004-Sage,LOWER(Sdept) FROM Student ;
改变查询结果列标题通过在列后面定义别名的方式:格式:列名 别名
当投影到指定的某些列上后,可以用DISTINCT消除某些重复列。
WHERE:
确定范围BETWEEN ...AND,NOT BETWEEN ...AND
确定集合IN,NOT IN
SELECT Sname,Ssex FROM Student WHERE Sdept IN(‘CS’,’MA’,’IS’)
字符匹配[NOT] LIKE ‘<字符串>’ [ESCAPE ‘<换码字符>’] %表示任意长度的字符串,_表示任意单个字符
换码字符-SELECT Cno,Ccredit FROM Course WHERE Cname LIKE ‘DB\_’ ESCAPE ‘\’;
ESCAPE’\’表示’\’为换码字符。这样匹配串中紧跟在“\”后面的字符“_”不在具有通配符的含义,转义为普通字符。
涉及空值的查询IS NULL,IS NOT NULL
其次AND 或OR
ORDER BY 列名 ASC | DESC
SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*)>3
外连接
SELECT Studnet,Sno,Sname,Ssex,Sdept,Cno,Grade
FROM Student LEFT [OUT] JOIN IN SC ON (Student.Sno = SC.Sno)
左连接回列出左边关系中所有的元组。
嵌套查询:
将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件的查询称为嵌套查询。
带有IN谓词的子查询
SELECT Sname FROM Student WHERE Sno IN(SELECT Sno FROM SC WHERE Cno)
带有比较运算符的子查询:
SELECT Sno,Sname,Sdept FROM Student WHERE Sdeot=(SELECT Sdept FROM Student WHERE Sname=’刘晨’)
相关子查询:
例:找出每个学生超过他选秀课程平均成绩的课程号
SELECT Sno,Cno FROM SC x WHERE Grade >= (SELECT AVG(Grade) FROM SC y WHERE y,Sno=x,Sno);
在内层查询中查那个学生的平均成绩由外层决定。
其他:
插入操作:插入子查询结果
INSERT INTO Dept_age(Sdept,Avg_age) SELECT Sdept ,AVG(Sage) FROM Student GROUP BY Sdept;
修改数据:
UPDATE Student SET Sage = Sage+1;
UPDATE SC SET Grade=0 WHERE 子查询