SQL查询语句(一)

一、查询语句格式

    SELECT [ALL|DISTINCT] [表名.]{*|列名|表达式[AS 新列名]}

    [INTO :主变量[,:主变量]…]

    FROM 表名[表别名],

    [WHERE 条件表达式|子查询]

    [GROUP BY 列名, …

     [HAVING 分组表达式]]

    [{UNION|INTERSECT |EXCEPT}SELECT…FROM…]

    [ORDER BY 列名|列序号[ASC|DESC], …];

二、单表查询

 

    Where 子句——运算符 

    比较:<<=>>==<>not + ~

    确定范围:

       Between A and B、Not Between A and B

    确定集合:INNOT IN

    字符匹配:LIKENOT LIKE

    空值:IS NULLIS NOT NULL

    多重条件:ANDORNOT

    1—-

    SELECT Sname NAME, 'Year of Birth:' BIRTH,

           2003sage BIRTHDAY,  LOWERSdept) DEPARTMENT

    FROM    Student;  

    2— 选择表中的行

    消除重复行: DISTINCT    缺省为ALL)

    SELECT    DISTINCT Sno FROM      student 

    3—  BETWEEN  AND

    求年龄在~ , 22)之间的学生名及年龄(或不在~之间)

    SELECT Sname, Sage    FROM    Student

    WHERE   Sage BETWEEN 18 AND 22; WHERE Sage>=18 AND Sage<=22)

    4— IN or NOT IN

    SELECT    *    FROM     Student

    WHERE    Sdept IN ‘IE’, ‘CS’, ‘MA’)WHERE Sdept=‘IE’OR Sdept=‘CS’OR Sdept=‘MA’)

 

    5— Like

    格式:

       [NOT] LIKE ‘匹配串’[ESCAPE ‘换码字符’]

       %: 表示任意长度)的任意字符

       _: 表示单个的任意字符

       ESCAPE ‘换码字符’: 匹配串中‘换码字符’转义符)之后的字%,__),被定义为普通字符不作通配符用)

    列出课程名称中带有‘_’的课号及课名:

        Select cno ,cnameFrom Course  Where cname LIKE%"_%escape ‘"’

    求以‘DATA_BASE’开头且倒数第五个字符为’S’的课程名

        SELECT Cname  FROM Course  WHERE Cname LIKE ‘DATA"_BASE%S_ _ _ _’ESCAPE’"’;

     6— NULL

    SELECT   Sno, Cno  FROM  SC WHERE   Grade IS NULL;

 

 

    7— 分组与组函数

    只有出现在Group By子句中的属性,才可出现在Select子句中

    组函数的使用:

       COUNT[DISTINCT|ALL] *|列名)

       SUM[DISTINCT|ALL] 列名)

       AVG[DISTINCT|ALL] 列名)

       MAX[DISTINCT|ALL] 列名)

       MIN[DISTINCT|ALL] 列名)

    组函数可用于SELECT子句中的目标列表中,或在HAVING子句的分组表达式中用作条件。

    对分出的每一组用HAVING进行筛选,筛选条件要用到组函数。

    HavingWhere的区别:

        Where 决定哪些元组被选择参加运算,作用于关系中的元组

        Having 决定哪些分组符合要求,作用于分组

   

    例:统计各系学生的人数。

       Select sdept,count*) as stu_count

       From Student

       Group By sdept

    例:求选修了课程的学生人数

       SELECT COUNTDISTINCT Sno) FROM SC;

    例:求选修各门课的人数及平均成绩

       SELECT Cno, COUNTSno), AVGGR) FROM    SC GROUP BY Cno;

    例:求选修课程在2门以上且都及格的学生号及总平均分

       SELECT Sno, AVGGrade) FROM SC GROUP BY Sno HAVING COUNTCno)>2 AND MINGrade)>=60;

    8— 排序

    用ORDER BY子句对查询结果按照一个或多个列的值进行升/降排列输出,升序为ASC;降序为DESC,空值将作为最大值排序

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注