当前位置:操作系统 > Unix/Linux >>

单表查询理论实践

单表查询理论实践
 
【实验目的】
1. 掌握单表的列的查询
2. 掌握单表的行的查询
 
【实验内容】
1. 实验前准备,SC数据库的创建。   (见参考资料1)
 
2. 查询的理论基础
命令:
1) Select  [all | distinct] <目标列>
2) From <表>
3) [where <对元组的筛选条件> ]
4) [group by <分组列> [having <对组的筛选条件>]]
5) [order by 排序列 [DESC | ASC]]
功能: 
1) 第一行命令,对目标列做出要求。决定了查询结果的格式。
2) 第二行命令指定操作对象。
3) 第三行命令:从表中查询满足条件的元组。
4) 第四行命令用于需要分组统计时使用。Having条件用于对分组后的筛选。Where用于在分组前元组的筛选。
5) 第五行命令是对查询结果的一个排序操作。
6) 第三行、第四行和第五行是可选的命令行。不需要时,不需要。
 
3. 单个表的列的查询
1 )选择指定的列 
【例1】 查询全体学生的学号和姓名
命令:select sno,sname
          from student
结果:
 
 
 
2 )查询全部列 (用*或列出所有列的名称)
【例2】 查询全体学生的详细信息 
 
3 )对查询后的指定列进行命名 
【例3】 查询全部学生的 “ 姓名 ” 及其 “ 出生年 ” 两列 
 
4 )消除取值重复的行 (distinct)
【例4】 查询选修了课程的学生学号 
 
4. 查询满足条件的行
选择表中若干元组(满足条件的) 
    ( I)大小比较 
   【例5】 查询计算机系( IS )全体学生名单
   【例6】 查询全体 20 岁以下的学生姓名和年龄
    ( II)确定范围 
    【例7】 查询所有在 20 到 23 岁(含 20 和 23 )的学生姓名、系别和年龄
    ( III) in 和 not in 确定集合 
    【例8】 查询 IS 系和 CS 系的全体学生姓名和性别
    【例9】 查询既不属于 IS 系,也不属于 MA 系的学生姓名和年龄
    ( IV)字符匹配( like % _ ) 
    【例10】 查询所有姓李的学生姓名和性别
    【例11】 查询所有 “2002” 年入学的学生学号、姓名和系别
    【例12】 查询所有不姓 “ 刘 ” 的学生信息
    【例13】 查询名称含有 “ 数据 ” 的课程号、课程名及学分
    ( V)涉及空值的查询( is null )
    【例14】 查询没有先修课的课程号和课程名。
    【例15】 查询所有有成绩的学生学号、课程号及成绩
5. 查询结果排序( order by ) 
    【例16】 查询选修了 3 号课程的学生学号和成绩,结果按成绩降序排列。 
  注:
       排序是对查询后的结果排序。所以应该放在最后。
 
6.  聚集函数 
聚集函数有count 、 sum 、 avg 、 max 、 min 
    【例17】 查询学生总数
    【例18】 查询所有课程的总学分
    【例19】 查询全体学生平均年龄
    【例20】 查询 1 号课程的最高分
7. 分组统计( group by )
    【例21】 查询男女学生各有多少人。
    【例22】 查询每个课程的课程号和平均分。
    【例23】查询选修了3门课程以上(含3门)的学生学号和选修课程数。
    【例24】查询选修了2门课程以上(含2门,但不含1号课程),学生学号和选修课程数。
    【例25】查询不及格门数2门以上的学生学号。
    【例26】查询有2名以上(含2名)学生选修了的课程号和选修人数。
 
 注:1.分组查询的目标列可以出现分组的列及含在聚集函数中的其他列;
        2.where条件用于分组前的选择条件;having子句,用于分组后选择的条件。
 
【参考资料】
1. SC数据库创建代码
[sql] 
--**************************  
--***    1.建立数据库SC   ***  
--**************************  
create database SC  
go  
  
----------------------------  
--使用、定位数据库SC  
----------------------------  
use SC  
go  
  
--**************************  
--***    2.创建数据表    ***  
--**************************  
----------------------------  
--1)创建表Student  
----------------------------  
create table Student     
(     
  Sno char(9) primary key,  /*Sno是主码 列级完整性约束条件 实体完整性*/    
  Sname char(10) unique,    /*Sname取唯一值,不重复*/    
  Ssex char(2),     
  Sage smallint,        /*类型为smallint*/    
  Sdept char(20)        /*所在系*/    
);              /*;要加*/    
  
----------------------------  
--2)创建表Course  
----------------------------  
create table Course     
(     
  Cno char(4) primary key,  /*列级完整性约束条件,Cno是主码*/    
  Cname char(20),     
  Cpno char(4),         /*Cpno的含义是先行课*/    
  Ccredit smallint,     
  foreign key (Cpno) references Course(Cno)     
  /*表级完整性约束条件,Cpno是外码,被参照表是Course,被参照列是Cno*/      
);     
----------------------------  
  
----------------------------  
--3)创建表SC  
----------------------------  
create table SC     
(     
  Sno char(9),     
  Cno char(4),     
  Grade smallint,     
  primary key (Sno,Cno),     
    /*主码有两个属性构成,必须作为表级完整性进行定义*/    
  foreign key (Sno) references Student(Sno),     
    /*表级完整性约束条件,Sno是外码,被参照表是Student*/    
  foreign key (Cno) references Course(Cno)    
    /*表级完整性约束条件,Cno是外码,被参照表示Course*/    
);     
----------------------------  
go    
  
  
--**************************  
--***    3.插入数据      ***  
--**************************  
    
----------------------------  
---1)插入Student数据       
----------------------------     
insert into Student values('200215121','李勇','男',20,'CS')    /*向表Student中插入一个元组*/    
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,