数据库系统概论第五版学习笔记数据查询 第三章(二)

来源:互联网 发布:如何手机秒杀淘宝商品 编辑:程序博客网 时间:2024/06/03 13:01

一、查询基本结构

  一定要use数据库

  Select   输出项

  From    必选项(涉及到的表)  

  Where   可选项(筛选条件)

二、查询变形

  1. 输出所有列

      Select *

      From student

  2. 输出可以是表达式

      Select sname,2016 - age

      From student

  3. 别名输出

      Select sname as 姓名  /*别名*/

      Select 姓名 = sname

  4. 去掉重复行

      Select distinct sno from sc

  5. 输出常数列

      Select sno,sname,学校=“大学”

      From student

  6. 限制输出行

      Select top 3 sno,cno 限制输出前三行

      From sc

      Select top 20 percent sno,cno限制输出前20%

      From sc

  7. 输出结果排序

      Order by 默认值为升序

      ASC  升序  DESC  降序

  8. 输出聚集函数

     COUNT( * ) = COUNT(主码)  统计元组个数

     COUNT([DISTINCT | ALL] <列名>)

     SUM([DISTINCT | ALL] <列名>)计算一列值的总和(此列必须是数值型)

     AVG([DISTINCT | ALL]) <列名>) 计算一列值的平均值(此列必须是数值型)

     MAX([DISTINCT | ALL]) <列名>) 求一列值中的最大值

     MIN([DISTINCT | ALL]) <列名>求一列值中的最小值

   例:

     1)查询学生总人数

        Select COUNT(DISTINCT Sno

        From SC

     2)查询选修3课程的学生人数

        Select COUNTDISTINCT Sno

        From SC

     3)计算选修1号课程的学生平均成绩

        Select AVG(Grade

        From SC

        Where Cno=1

     4)查询学生201215012选修课程的总学分数

        Select SUMCredit

        From SCCourse

        Where Sno='201215012' AND SC.Cno = Course.Cno

  注意:WHERE 子句中是不能用聚集函数作为条件表达式的,聚集函数只能用于SELECT子句和GROUP BY中的HAVING子句。

9. GROUP BY子句

  GROUP BY子句将查询结果按某一列或多列的值分组,值相等的为一组

  1)求各个课程号及相应的选课人数

     SELECT CnoCOUNTSno

     FROM SC

     GROUP BY Cno

    注:可以使用HAVING短语指定筛选条件

  2)查询选修了三门以上课程的学生学号

     SELECT Sno

     FROM SC

     GROUP BY Sno

     HAVING COUNT(*)>3

  3)查询至少有一门课程在80分以上的学号

     SELECT Sno

     FROM SC

     GROUP BY Sno

     HAVING MAX(Score)>80

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

  4)查询平均成绩大于等于90分的学生学号和平均成绩

     SELECT Sno, AVGGrade

     FROM SC

     GROUP BY Sno

     HAVING AVG(Grade)>= 90

 

WHERE子句不能含有聚集函数成分,有HAVING一定分组,不能单独使用

  若输出项有分组字段又有聚集项,一定要分组

  建议分组字段做输出项

  HAVING 短语与 WHERE 子句互斥)

 

三、条件的表达

  1. 比较条件:>  !=

  2. 逻辑条件:and  or  not

查询计算机系年龄在20岁以下的学生姓名

Select sname

From student

Where sdept=CS and age<20

  3. 范围条件:between and (只是闭区间)

  4. 集合条件:IN  NOT IN

     Select sname,sex

     From student

     Where sdept IN (CS,MA,IS )

  5. 模糊条件: LIKE    

      通配符 % <=> * 全通配

       _   <=> ?  特定通配

     Sname LIKE %,_%,%[建,勇]%

     NOT  LIKE

  6. 空值条件:IS NULL  IS NOT NULL

  7. 修改基本表

    1) ALTER TABLE 表名 ADD新列名 数据类型  增加新列

      ALERT TABLE Student ADD Age int

2) ALTER TABLE 表名 DROP COLUMN列名   删除某列

      ALTER TABLE Student DROP COLUMN Sname

3) ALTER TABLE 表名 ALTER COLUMN列名,数据类型  修改列名

      ALTER TABLE Student ALTER COLUMN Age int

0 0
原创粉丝点击