Yojo网页设计

yojoPHP.NETPhotoshopCSSaSPPhotoshopDreamweaverFlashFireworksCoreldrawillustratorJSPSEOSQL
·ASP基础·ASP技巧·ASP实例·Asp.Net基础·Asp.Net技巧·Asp.Net实例·PHP·JSP·编程杂谈·数据库编程

热门点击

more...
您现在的位置: yojo网页设计 >> 编程开发 >> 数据库编程 >> 正文

SQL的简单查询

更新时间:2007-11-19 23:36:03 文章来源:互联网 点击:

    ② 确定范围
    例14 查询年龄在20至23岁之间的学生的姓名、系别、和年龄
    SELECT Sname, Sdept, Sage  FROM Student WHERE Sage BETWEEN 20 AND 23; 

    与BETWEEN...AND...相对的谓词是NOT BETWEEN...AND...。 


    例15 查询年龄不在20至23岁之间的学生姓名、系别和年龄
    SELECT Sname, Sdept, Sage  FROM  Student WHERE Sage NOT BETWEEN 20 AND 23; 

    ③确定集合
    例16 查询信息系、数学系和计算机系的学生的姓名和性别
    SELECT Sname, Ssex FROM Student WHERE  Sdept IN ('信息系', '数学系', '计算机系'); 

    与IN相对的谓词是NOT IN,用于查找属性值不属于指定集合的元组。 
    例17 查询既不是信息系、数学系,也不是计算机科学系的学生的姓名和性别
    SELECT Sname, Ssex  FROM Student  
    WHERE Sdept NOT IN ('信息系', '数学系', '计算机系'); 
 
    ④字符匹配
    谓词LIKE可以用来进行字符串的匹配。其一般语法格式如下: 
    [NOT] LIKE '<匹配串>'其含义是查找指定的属性列值与<匹配串>相匹配的元组。<匹配串>可以是一个完整的字符串,也可以含有以下通配符。 
    %(百分号) 代表任意长度(长度可以为0)的字符串。
    _(下横线) 代表任意单个字符。 
    [ ]:匹配[ ]中的任意一个字符。
    [^]:不匹配[ ]中的任意一个字符。
    例18 查所有姓刘的学生的姓名、学号和性别
    SELECT Sname, Sno, Ssex FROM Student  WHERE  Sname  LIKE '刘%'; 

    例19 查名字中第二字为“大”或“小”的学生的姓名和学号
    SELECT  Sname,  Sno   FROM  Student  WHERE Sname LIKE  '__[大小]%'; 

    例20 查询所不姓刘的学生姓名
    SELECT  Sname, Sno, Ssex FROM Student WHERE Sname NOT LIKE '刘%';

    例21 查询学号中最后一位不是2、3、5的学生情况
    SELECT  *   FROM  Student  WHERE   Sno     LIKE  ‘%[^235]’;

    ⑤ 涉及空值的查询
    例23 某些学生选修某门课程后没有参加考试,所以有选课记录,但没有考试成绩,下面我们来查一下缺少成绩的学生的学号和相应的课程号
    SELECT Sno, Cno  FROM SC WHERE Grade IS NULL; 
    注意这里的'IS'不能用等号('=') 代替。 

    例24 查所有有成绩的记录的学生学号和课程号
    SELECT Sno, Cno  FROM SC  WHERE Grade IS NOT NULL; 

    ⑥多重条件查询
    逻辑运算符AND和OR可用来联结多个查询条件。如果这两个运算符同时出现在同一个WHERE条件子句中,则AND的优先级高于OR,但用户可以用括号改变优先级。

    例25 查询计算机系年龄在20岁以下的学生姓名
    SELECT  Sname  FROM Student  WHERE Sdept='计算机系' AND Sage<20; 

    例12 中的IN谓词实际上是多个OR运算符的缩写,因此例12中的查询也可以用OR运算符写成如下等价形式:
    SELECT Sname, Ssex   FROM   Student
    WHERE Sdept='信息系' OR Sdept='数学系' OR Sdept='计算机系'; 

    3.对查询结果排序 
    如果没有指定查询结果的显示顺序,DBMS将按其最方便的顺序(通常是元组在表中的先后顺序)输出查询结果。用户也可以用ORDER BY子句指定按照一个或多个属性列的升序(ASC)或降序(DESC)重新排列查询结果,其中升序ASC为缺省值。
    例26 查询选修了3号课程的学生的学号及其成绩,查询结果按分数的降序排列
    SELECT Sno, Grade  FROM  SC   WHERE Cno='3'  ORDER  BY  Grade DESC;

    前面已经提到,可能有些学生选修了3号课程后没有参加考试,即成绩列为空值。用ORDER BY子句对查询结果按成绩排序时,若按升序排,成绩为空值的元组将最后显示,若按降序排,成绩为空值的元组将最先显示。 
    例27 查询全体学生情况,查询结果按所在系升序排列,对同一系中的学生按年龄降序排列
    SELECT  *  FROM Student  ORDER BY Sdept, Sage DESC; 

    4.使用集函数 
    为了进一步方便用户,增强检索功能,SQL提供了许多集函数,主要包括: 
    COUNT([DISTINCT|ALL] *) 统计元组个数 
    COUNT([DISTINCT|ALL] <列名>) 统计一列中值的个数 
    SUM([DISTINCT|ALL] <列名>) 计算一列值的总和(此列必须是数值型)
    AVG([DISTINCT|ALL] <列名>) 计算一列值的平均值(此列必须是数值型)


    MAX([DISTINCT|ALL] <列名>) 求一列值中的最大值 
    MIN([DISTINCT|ALL] <列名>) 求一列值中的最小值
    如果指定DISTINCT短语,则表示在计算时要取消指定列中的重复值。如果不指定DISTINCT短语或指定ALL短语(ALL为缺省值),则表示不取消重复值。
    例29 查询学生总人数 
    SELECT COUNT(*)  FROM Student; 

    例30 查询选修了课程的学生人数
    SELECT COUNT(DISTINCT Sno)  FROM SC;

    学生每选修一门课,在SC中都有一条相应的记录,而一个学生一般都要选修多门课程,为避免重复计算学生人数,必须在COUNT函数中用DISTINCT短语。
    例31 计算1号课程的学生平均成绩 
    SELECT AVG(Grade) FROM SC WHERE Cno='1'; 

    例32 查询选修1号课程的学生最高分数
    SELECT  MAX(Grade) FROM SC WHERE Cno='1'; 

    例33 查询选修1号课程的学生最高分、最低分及平均分
    SELECT  MAX(Grade),MIN(Grade),AVG(Grade) FROM SC WHERE Cno='1';

    5.对查询结果分组 
    GROUP BY子句可以将查询结果表的各行按一列或多列取值相等的原则进行分组。   
    对查询结果分组的目的是为了细化集函数的作用对象。如果未对查询结果分组,集函数将作用于整个查询结果,即整个查询结果只有一个函数值。否则,集函数将作用于每一个组,即每一组都有一个函数值。 
    例34 查询各个课程号与相应的选课人数
    SELECT Cno, COUNT(Sno) FROM SC  GROUP BY Cno;
    该SELECT语句对SC表按Cno的取值进行分组,所有具有相同Cno值的元组为一组,然后对每一组作用集函数COUNT以求得该组的学生人数。查询结果为:
      Cno  COUNT(Sno) 
    ------ ---------- 
       1       22
       2       34
       3       44 
       4       33 
       5       48 
    如果分组后还要求按一定的条件对这些组进行筛选,最终只输出满足指定条件的组,则可以使用HAVING短语指定筛选条件。
    例35 查询信息系选修了3门以上课程的学生的学号
    SELECT Sno  FROM SC  WHERE  Sdept=‘信息系’ GROUP BY Sno  HAVING COUNT(*)>3;
    选修课程超过3门的信息系学生的学号,首先需要通过WHERE子句从基本表中求出信息系的学生。然后求其中每个学生选修了几门课,为此需要用GROUP BY子句按Sno进行分组,再用集函数COUNT对每一组计数。如果某一组的元组数目大于3,则表示此学生选修的课超过3门,应将他的学生号选出来。HAVING短语指定选择组的条件,只有满足条件(即元组个数>3)的组才会被选出来。

    WHERE子句与HAVING短语的根本区别在于:作用对象不同,WHERE子句作用于基本表或视图,从中选择满足条件的元组。HAVING短语作用于组,从中选择满足条件的组

上一页  [1] [2] 


文章地址:http://www.518web.net/bckf/dbbc/15029.html

友情链接首页文字链接要求:PR≥3,搜索引擎正常收录,开通一年以上,内容健康充实的站点!申请...

Copyright(C) 2005-2008 518web.net,All Rights Reserve
Email:yojo.x@msn.com | 在线QQ:2306380 53614197| [浙ICP备08009643号]