数据查询语句 SELECT

一、数据查询操作
    查询是使用 SELECT 语句对数据库进行探究。我们利用查询,根据需要从数据库里以一种可理解的格式提取数据。举例来说,假设我们有一个学生成绩表,就可以利用查询返回最高成绩、哪个学生取得最高成绩。这种获取有用信息的请求是关系型数据库里典型的查询操作。


    语法:SELECT [ * | ALL | DISTINCT ]  查询项, . . .
          FROM 表名 [, . . . ]
         [ WHERE 查询条件 ] 
         [ GROUP BY 列名, . . . ] 
         [ HAVING . . . ]
         [ ORDER BY . . . ]
         [ LIMIT 行数 ]
        叙述:FROM 子句:查询数据的表,指定数据的来源。
              WHERE 子句:查询数据的过滤条件。
              GROUP BY 子句:对匹配 WHERE 子句的查询结果进行分组。
              HAVING 子句:对分组后的结果进行条件限制。
              ORDER BY 子句:对查询结果结果进行排序,后面跟 DESC 降序或 ASC 升序(默认)。  
              LIMIT 子句:对查询的显示结果限制行数。   
    在查询里,关键字 SELECT 后面是字段列表,它们是查询输出的组成部分。星号(*)表示输出结果里包含表里的全部字段;选项 ALL 用于显示全部行的值,包括重复值;选项 DISTINCT 禁止在输出结果里包含重复的行。选项 ALL 是默认的操作方式。
       例1:我们有 Store_Information 表,显示表的全部内容:
         SELECT * FROM Store_Information;
         结果: store_name  Sales  Date
 ----------------------------------------------------------
        Los Angeles  1500  1999-01-05
          San Diego  250  1999-01-07
        Los Angeles  300  1999-01-08
            Boston   700  1999-01-08
 提示:星号(*)是选取所有列的快捷方式。
二、字段选择
        前面讲了,星号(*)表示表里的全部字段,是选取所有列的快捷方式。但是,如果我们想查询选定的字段,可以在 SELECT 之后列出字段名称。
        语法:SELECT [ ALL | DISTINCT ] 列名 FROM 表名;
        例2:若要选出 Store_Information 表里所有的店名(store_Name) ,我们就列出字段名称: SELECT store_name FROM Store_Information;
        结果:store_name
 -----------------
         Los Angeles
        San Diego
      Los Angeles
       Boston 
       下面的语句使用选项 ALL,其结果会展示出 ALL 完全是多余的,它是默认选项,不需要明确指定。
       SELECT ALL store_name FROM Store_Information; 
       结果:store_name
 -----------------
           Los Angeles
           San Diego
           Los Angeles
           Boston
三、DISTINCT 的使用
    SELECT 指令让我们能够读取表里一列或数列的所有数据。这将把所有的数据都找出,无论数据值有无重复。在数据处理中,我们会经常碰到需要找出表里不同数据值的情况。换句话说,我们需要知道这个表格/字段里有哪些不同的值,而每个值出现的次数并不重要。这要如何达成呢?在SQL 中,这是很容易做到的。我们只要在 SELECT 后加上一个 DISTINCT 就可以了。
        关键词 DISTINCT 用于返回唯一不同的值。
        语法:SELECT DISTINCT 列名 FROM 表名;
        例3:使用 DISTINCT 选项,显示中去除了重复记录,Los Angeles 只显示一次。
        SELECT DISTINCT store_name FROM Store_Information;
        结果:store_name
 ----------------
            Los Angeles
            San Diego
            Boston

【参考资料】
   W3SChool 在线SQL教程   http://www.w3SChool.com.cn/sql/sql_select.asp  SQL SELECT 语句
   http://www.w3SChool.com.cn/sql/sql_distinct.asp  SQL SELECT DISTINCT 语句

课后练习:
        有学生表 Student(Sno, Sname, Sage, Sdept),包括字段学号、姓名、年龄、系名;
        及成绩表 SC(studentid, course,grade),包括字段学号、课程、成绩。
        完成以下查询:
         1. 查询全体学生的详细记录。
         2. 查询全体学生的学号与姓名。
         3. 查询全体学生的姓名及其出生年份。
         4. 查询选修了课程的学生学号(去掉重复的记录)