1.前言
数据查询是SQL的核心。其大体框架如下:
SELECT ...... FROM ...... [WHERE ......] [GROUP BY ......] [ORDER BY ......];
其中SELECT后面接查询的内容,FROM确定从表或者视图里查询;WHERE后面接条件,GROUP BY进行分组,ORDER BY进行排序。
以下是一些详细介绍:
2.SELECT
SELECT常见操作:
SELECT Sno,Grade //查询指定列 SELECT * //查询所有列 SELECT 2004-Sage Sage //将Sage那列的结果改为2004减去年龄的算术值 SELECT 'Years of Birth:' Sage//将Sage那列的结果改为Years of Birth: SELECT DISTINCT Sno //查询指定列,并去掉重复行 SELECT COUNT(*)//利用聚焦函数统计元祖个数 SELECT AVG(Grade)//利用聚焦函数统计成绩平均分
以上几乎涵盖SELECT语句的所有应用,注意的是在从多个表中查询时,列名相同要通过表前缀区分开。
在聚焦函数的应用中,还有SUM,MIN,MAX等函数,意思如字面。
3.FROM
FORM后面接表名或者视图名,还可以为表命别名(多用于嵌套查询或连接查询)。
FORM Student //从Student表中查询 FORM Student s1,Student s2 //从Student表中查询,其别名是s1,s2(即Student)
4.WHERE
WHERE后面接条件语句,常见的查询条件谓词有:
比较:<,>,=,!=等基本同c++
确定范围:BETWEEN AND
确定集合:IN
字符匹配:LIKE
空值:NULL
逻辑条件:AND ,OR, NOT(可以用在上述五种中表否定)
了解这些查询条件之后,可以通过实例看其具体应用:
WHERE cno='1' WHERE Sdept='CS' AND Sage<20//逻辑条件查询 WHERE Sage BETWEEN 18 AND 20//范围查询 WHERE Sname LIKE '刘%'//字符匹配 WHERE Student.Sno=SC.Sno//两边连接查询(也可以同表自身连接) WHERE Sno IN(SELECT ... FROM ... WHERE ...)//嵌套查询
以上可以挑两个细节来详述,一是字符匹配中_示一个字符,%表示任意字符,必要时用后面加上ESCAPE <字符>进行转义;二是嵌套查询时,子查询结果是单值可以用比较运算符,是多值可以用比较运算符 ANY|ALL的形式,ANY(表示一些),ALL表示所有,此外子查询块外还可以使用EXISTS,此时返回值只是真假,不是具体值。
5.GROUP BY
该子句是将查询结果按某列或某些列分组,值相同为一组,若还需要对这些组进行筛选,可以加上HAVING短语指定筛选条件(针对组)。
SELECT Sno FROM SC GROUP BY Sno HAVING COUNT (*)>3//查询选修了3门以上课程的学生学号
上述语句在学生课程表中,按学号分组,并对这些分组的元祖技术并筛选,在最后得到修了3门以上课程的学生学号。
6.ORDER BY
起排序用,如ORDER BY Grade DESC;就是按成绩降序排序。