面试准备之SQL 4—— 数据查询

ExpandedBlockStart.gif 代码
use  master
go
-- ---------创建数据库------------

if   exists  ( select   *   from  sysdatabases  where  name = ' stuDB ' )
drop   database  stuDB
create   database  stuDB
on   primary
(
name
= ' stuDB_data ' ,
filename
= ' D:\stuDB_data.mdf ' ,
size
= 3mb,
maxsize
= 10mb,
filegrowth
= 1mb
)
log   on
(
name
= ' stuDB_log ' ,
filename
= ' D:\stuDB_data.ldf ' ,
size
= 1mb,
filegrowth
= 1mb
)

-- ---------创建数据库表------------
use  stuDB
go
if   exists  ( select   *   from  sysobjects  where  name = ' stuInfo ' )
drop   table  stuInfo
create   table  stuInfo
(
    stuId 
int   identity ( 1 , 1 primary   key   not   null ,
    stuName 
varchar ( 20 not   null ,
    stuNo 
varchar ( 20 not   null ,
    stuSex 
char ( 6 not   null ,
    stuAge 
int   not   null ,
    stuAddress 
text   null
)
go

if   exists  ( select   *   from  sysobjects  where  name = ' stuMarks ' )
drop   table  stuMarks
create   table  stuMarks
(
    marksId 
int   identity ( 1 , 1 primary   key   not   null ,
    ExamNo 
varchar ( 50 not   null -- 考号
    stuNo  char ( 6 not   null , -- 学号
    writtenExam  int    null , -- 笔试成绩
    LabExam  int   null -- 机试成绩
)
go
-- 向学员信息表stuInfo插入数据--
INSERT   INTO  stuInfo(stuName,stuNo,stuSex,stuAge,stuAddress) VALUES ( ' 张秋丽 ' , ' s25301 ' , ' ' , 18 , ' 北京海淀 ' )
INSERT   INTO  stuInfo(stuName,stuNo,stuSex,stuAge,stuAddress)  VALUES ( ' 李斯文 ' , ' s25303 ' , ' ' , 22 , ' 河南洛阳 ' )
INSERT   INTO  stuInfo(stuName,stuNo,stuSex,stuAge)  VALUES ( ' 李文才 ' , ' s25302 ' , ' ' , 31 )
INSERT   INTO  stuInfo(stuName,stuNo,stuSex,stuAge,stuAddress)  VALUES ( ' 欧阳俊雄 ' , ' s25304 ' , ' ' , 28 , ' 威武哈 ' )

-- 向学员成绩表stuMarks插入数据--
INSERT   INTO  stuMarks(ExamNo,stuNo,writtenExam,LabExam)  VALUES ( ' E2005070001 ' , ' s25301 ' , 80 , 58 )
INSERT   INTO  stuMarks(ExamNo,stuNo,writtenExam)  VALUES ( ' E2005070002 ' , ' s25302 ' , 50 )
INSERT   INTO  stuMarks(ExamNo,stuNo,writtenExam,LabExam)  VALUES ( ' E2005070003 ' , ' s25303 ' , 97 , 82 )

-- 查看数据--
select   *   from  stuInfo
select   *   from  stuMarks

/* =======查询数据练习========= */  
-- 1.查询两表的数据--
select   *   from  stuInfo
select   *   from  stuMarks
 
-- 2.查询男学员名单-- 
select   *   from  stuInfo  where  stuSex = ' '
 
-- 3.查询笔试成绩优秀的学员情况(成绩在75~100之间)-- 
select   *   from  stumarks  where  writtenexam  between   75   and   100
 
-- 4.查询参加本次考试的学员成绩,包括学员姓名,笔试成绩,机试成绩-- 
select  i.stuName,m.writtenExam,m.LabExam  from  stuInfo  as  i  inner   join  stuMarks  as  m  on  m.stuNo  =  i.stuNo
 
-- 5.统计笔试考试平均分和机试考试平均分-- 
select   avg (writtenExam)  as  笔试平均成绩, avg (LabExam)  as  机试平均成绩  from  stuMarks
select   avg (writtenExam) 笔试平均成绩, avg (LabExam) 机试平均成绩  from  stuMarks
 
-- 6.统计参加本次考试的学员人数 
select   count (stuno)  from  stumarks 
 
-- 7.查询没有通过考试的人数(笔试或机试小于60分)-- 
select   count (stuno)  from  stumarks  where  writtenExam  <=   60   or  labexam <= 60
select   *   from  stumarks  where  writtenExam  is   null   or  labexam  is   null   -- 查询为全部参加考试的信息
  -- 8.查询学员成绩,显示学号,笔试成绩,机试成绩,平均分-- 
select  stuno  as  学号,writtenExam 笔试,labexam 机试,(writtenExam + labexam) / 2  平均成绩  from  stumarks
 
-- 9.排名次(按平均分从高到低排序),显示学号、平均分--  
select  stuno  as  学号,(writtenExam + labexam) / 2  平均成绩  from  stumarks  order   by  (writtenExam + labexam) / 2   desc

select  stuno  as  学号,(writtenExam + labexam) / 2  平均成绩  from  stumarks  order   by  平均成绩  desc
 
-- 10.排名次(按平均分从高到低排序),显示姓名,笔试成绩,机试成绩,平均分--
select  i.stuno  as  学号,writtenExam 笔试,labexam 机试,(writtenExam + labexam) / 2  平均成绩  
from  stumarks  as  m  inner   join  stuinfo  as  i  on  m.stuno  =  i.stuno  order   by  平均成绩  desc
-- 根据以上SQL语句总结:凡是两个表中有同名的列名就需要用别名却分开来,如果没用别名可以直接查询列明

 
-- 11.根据平均分,显示前两名信息,包括姓名、笔试成绩、机试成绩、平均分-- 
select   top   2  i.stuno  as  学号,writtenExam 笔试,labexam 机试,(writtenExam + labexam) / 2  平均成绩  
from  stumarks  as  m  inner   join  stuinfo  as  i  on  m.stuno  =  i.stuno  order   by  平均成绩  desc
/* =======修改数据练习========= */  
-- 都提5分--
--
100分封顶(加分后超过100分的,按100分计算)--

update  stumarks  set  writtenExam  =  writtenExam  +   5
update  stumarks  set  writtenExam  =   100   where  writtenExam > 100
 

 

转载于:https://www.cnblogs.com/Simcoder/archive/2010/04/15/1712911.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值