zoukankan      html  css  js  c++  java
  • SELECT 查询

      脚本文件:http://pan.baidu.com/share/link?shareid=461107&uk=3912660076

    SELECT语句中各子句的说明

    SELECT 查询—单表查询

        单表查询指的是在一个源表中查找所需的数据。  因此,单表查询时,FROM子句中的<数据源表> 只需要给出一个源表表名

      (1)选择表中若干列

        在SELECT子句的<目标列名表>中指定整个查询结果表中出现的若干个列名,各列名之间用逗号分隔.

      (2)选择表中所有列

        可以在<目标列名表>中指定表中所有列的列名,也可以用*来代替,或用<表名>.*代表指定表的所有列

       (3)使用表达式

         表达式可以是列名、常量、函数、或用列名、常量、函数等经过+(加)、-(减)、*(乘)、/(除)等组成的公式。

      (4)设置列的别名

        所谓别名,就是另一个名字。主要是为了方便阅读。设置列别名的方法有:      原列名  [AS]  列别名 

      (5)使用DISTINCT消除结果表中完全重复的行

    FROM子句

      WHERE子句

        WHERE<查询条件>    查询体条件中没有多表连接条件,只有一个表的行筛选条件 。 

      <查询条件>中常用的运算符:比较运算符和逻辑运算符。比较运算符用于比较两个数值之间的大小是否相等。

        常用的比较运算符有:=(等于)、>(大于)、<(小于)、>=(大于等于)、<=(小于等于)、<>(不等于)。

        逻辑运算符主要有:范围比较运算符:BETWEENAND… ,NOT BETWEENAND集合比较运算符:INNOT IN字符匹配运算符:LIKENOT LIKE空值比较运算符:IS NULLIS NOT NULL条件连接运算符:ANDORNOT

     基于比较运算符的查询:

     基于逻辑运算符的查询:

    ([not] BETWEEN…AND

               注意:列名类型要与下限值或上限值的类型一致

    in)

       IN用于测试一个列值是否与常量表中的任何一个值相等。IN条件表示格式为:列名 IN (常量1, 常量2, … 常量n)

       NOT IN与IN的含义正好相反,当列值与IN中的任一常量值都不相等

    此句等价于: SELECT Sno,Sname FROM Students  WHERE Sdept! ='Math' AND Sdept! = 'Software Designing' ;

    (LIKE)

      LIKE用于测试一个字符串是否与给定的模式匹配。所谓模式是一种特殊的字符串,其中可以包含普通字符,也可以包含特殊意义的字符,通常叫通配符。

    LIKE运算符的一般形式为:列名  LIKE  <模式串>

         模式串中可包含如下通配符,它们的含义是:

          _: 匹配任意一个字符。注意,在这里一个汉字或一个全角字符也算一个字符。如 '_u_'表示第二个字符为u或U,第一、第三个字符为任意字符的字符串。

          %:匹配任意0个或多个字符。如'S%'表示以S开头的字符串

    (NULL)

       空值是尚未确定或不确定的值。判断某列值是否为NULL值,不能使用比较运算符等于和不等于,而只能使用专门的判断空值的子句,如下:   判断列值为空的语句格式为:列名IS NULL    判断列值不为空的语句格式为:列名 IS NOT NULL

    ( 6 )基于多个条件的查询   可以使用AND、OR逻辑谓词来连接多个条件,构成一个复杂的查询条件。

      使用格式为:   <条件1> AND<条件2> AND…<条件n>  <条件1> OR<条件2> OR…<条件n>

      用AND连接的所有的条件都为TRUE时,整个查询条件才为TRUE。

      用OR连接的条件中,只要其中任一个条件为TRUE, 整个查询条件就为TRUE

     使用统计函数的查询

        统计函数也称为集合函数或聚集函数,其作用是对一组值进行计算并返回一个值。 

    Count(*) 求表中或组中记录个数
    Count(Col_name) 求不是null的列值个数
    Sum(col_name) 求该列所有值的总和(必须是数值类型)
    Avg(col_name) 求该列所有值的平均值(必须是数值类型)
    Max(col_name) 求该列的最大值(必须是数值类型)
    Min(col_name) 求该列的最小值(必须是数值类型)

     

    GROUP BY 子句

         有时我们需要把FROM、WHERE子句产生的表按某种原则分成若干组,然后对每个组进行统计。GROUP BY子句在WHERE子句后边。一般形式为: GROUP BY <分组列> [,… n ]其中<分组列>是分组的依据。分组原则是<分组列>的列值相同,就为同一组。当有多个<分组列>时,则先按第一个列值分组,然后对每一组再按第二个列值进行分组,依此类推。

           求选修每门课程的学生人数

              输出每个学生的学号和他/她的各门课程的总成绩。

    HAVING子句

         HAVING子句指定GROUP BY生成的组表的选择条件。    它的一般形式为: HAVING <组选择条件>  HAVING子句在GROUP BY子句之后,并且必须与GROUP BY子句一起使用

              求选修课程大于等于2门课的学生的学号、平均成绩,选修的门数

    COUNT(*) 更加准确...

     ORDER BY子句

          指定整个SELECT语句的输出结果中记录的排序依据。ORDER BY排序子句的格式为:

    ORDER BY <列名> [ASC | DESC ] [ ,… n ]    其中<列名>指定排序的依据,ASC表示按列值升序方式排序,DESC表示按列值降序方式排序。如果没有指定排序方式,则默认的排序方式为升序排序。    

       在ORDER BY子句中,可以指定多个用逗号分隔的列名。这些列出现的顺序决定了查询结果排序的顺序。当指定多个列时,首先按最前面的列进行排序,如果排序后存在两个或两个以上列值相同的行,则对这些值相同的行再依据第二列进行排序,依此类推。

          查询选修了C1课程的学生的学号和成绩,查询结果按成绩降序排列。

          查询全体学生信息,查询结果按所在系的系名升序排列,同一系的学生按年龄降序排列。

          求选修课程大于等于2门课的学生的学号、平均成绩和选课门数,并按平均成绩降序排列。

     SELECT 查询—多表连接查询

        多表查询指的是从多个源表中检索数据 。因此,多表查询时,FROM子句中的<数据源表>要给出所有源表表名,各个表名之间要用逗号分隔,与单表查询的SELECT子句功能基本相同,也是用来指定查询结果表中包含的列名。不同的是:如果多个表中有相同的列名,则需要用:<表名>.<列名>来限定列是那个表的列。

    还可用<表名>.*,表示<表名>指定的表中的所有列。例如Students. *,表示Students表的所有列。

     多表查询中的GROUP BY、HAVING、ORDER BY子句    与单表查询中的用法相同。   

      不同的是:如果列名有重复,则要用  <表名>.<列名>来限定列是那个表的列。

     多表查询中的WHERE子句与单表查询中的用法差别较大。多表查询中往往要有多表的连接条件,当然还有表的一个或多个行选择条件,两者用AND操作符组合。 

    按连接条件的不同,连接分为:内连接、外连接。外连接又分为左外连接、右外连接。

    内连接 :

        等值连接与自然连接

    等值连接:即根据两个表的对应列值相等的原则进行连接。

       连接条件的形式往往是“主键=外键”。即按一个表的主键值与另一个表的外键值相同的原则进行连接。

        常用的等值连接条件形式:<表名1>.<列名1>=<表名2> . <列名2>

          查询每个学生的基本信息以及他/她选课的情况

        上述结果表中含有Students和Enrollment表的所有列,存在一个重复的列Sno,这说明是等值连接。如果要去掉重复列,就要用SELECT子句指定结果表中包含的列名,这样就成为自然连接。如下:

          查询每个学生的学号、姓名、选修的课程名、成绩

           查询选修了C2且成绩大于90分的学生的学号、姓名、成绩。

           求计算机系选修课程大于等于2门课的学生的学号、姓名、平均成绩, 并按平均成绩从高到低排序。

     

      自身连接

       自身连接是一种特殊的内连接,可以看作是同一个表的两个副本之间进行的连接。为了给两个副本命名,必须为每一个表副本设置不同的别名,使之在逻辑上成为两张表。表设置别名的方式:   <源表名> [ AS ] <表别名>

           查询与BugsBug在同一个系学习的所有学生的学号和姓名。

     

       说明:当给表指定了别名后,在查询语句的其他所有用到表名的地方都要使用别名,而不能再使用源表名。并且输出的列一定要加上表的别名来限定是哪个逻辑表中的列

     外连接:

       外连接不仅包括满足连接条件的行,而且还包括其中某个表中不满足连接条件的行。

     左外连接保留连接条件左边表中的非匹配行。

       右外连接保留连接条件右边表中的非匹配行。

     格式为:FROM  表1  LEFT|RIGHT   JOIN  表2  ON <连接条件>。

           查询所有学生的选修情况,要求包括选修了课程的学生和没有修课的学生,显示他们的学号、姓名、课程号、成绩。

      


  • 相关阅读:
    Eclipse中jsp、js文件编辑时,卡死现象解决汇总
    环境安装备忘录 Nginx
    环境安装备忘录 Redis redis-slave-端口号.conf
    环境安装备忘录 Redis redis-common.conf
    环境安装备忘录 Redis
    Leetcode 131 Palindrome Partitioning(DFS思路)
    排序算法之快速排序(Quick Sort) -- 适用于Leetcode 75 Sort Colors
    谈STL的重要应用与实现
    二分图匹配相关问题
    理解操作系统相关知识
  • 原文地址:https://www.cnblogs.com/wjshan0808/p/3081399.html
Copyright © 2011-2022 走看看