日期:2014-05-16  浏览次数:20567 次

数据库查询的例子及SQL语句
drop database if exists SS;
create database SS;

use SS;

create table Student 
(
 Sno char(9) primary key,
 Sname char(20) unique,
 Ssex char(2),
 Sage smallint,
 Sdept char(20)
);

create table Course
(
  Cno char(4) primary key,
  Cname char(40),
  Cpno char(4) references Course(Cno),
  Ccredit smallint
  
);


create table SC
( 
   Sno char(9) references Student(Sno),
   Cno char(4) references Course(Cno),
   Grade smallint,
   primary key(Sno,Cno)
);


 

-------------------------------------------------------------

例一):查询全体学生的姓名及其出生年月
   问题分析:
          要查询的数据是:Sname, 出生年份(表中没有此列,不过可以用计算求得)
          从哪些表可以得到要查询的数据:Sname 是Student的属性,Sage也是Student的属性,所以说本体要查询
                      的结果在Student中就可以得到,其中出生年月用现在的年份减去年龄即可  
         查询语句: select Sname,20012 - Sage 
                           from Student;
---------------------------------------------
例二):查询选修了课程的学生的学号
     问题分析:
          要查询的数据:Sno
          分析:选修了课程,换句话说就是课程号Cno不为空的那些元祖对应的Sno,
                   SC表中已经含有了Cno信息同时包含了学号,同时要注意去掉重复的数据
                    因为多个Cno可以对应于一个Sno1
          从哪些表可以得到要查询的数据:Sno 和Cno是SC的属性列,所以在SC中即可获得所需信息
          查询语句:select distinct Sno
                          from SC;
---------------------------------------------
例三):查询院系在CS,MA,IS学生的姓名和性别
       问题分析:
             要查询的数据:Sname,Ssex
             从哪些表中可以得到要查询的数据:Sname 和Ssex 是Student的属性列,因此在Student表里查询即可
             查询语句:
                  1)select Sname,Ssex
                        from Student
                         where Sdept = 'CS' or Sdept = 'MA' or Sdept = 'IS';
                用谓词in也可以查找属性属于指定集合的元祖,所以有查询2
                 2)select Sname,Ssex
                       from Student
                       where Sdept in ('CS','MA','IS');
----------------------------------------------------------
例四):查询“各个”课程号(Cno)以及相应(也就是说课程号对应的)的选课人数
        问题分析:
               要查询的数据:Cno ,选课人数