天天看点

Sybase数据库测试例题(轻松掌握sql server内外连接)

作者:无花只有寒

====查看所有表、表结构、库等数据====

exec sp_help //查询所有表

exec sp_help t_student //查看具体表结构

select name from sysobjects where type = 'U' //查询用户表

Create database student_info; --创建库

use student_info; --使用库

sp_helpdb student_info --查看库

alter table t_student modify ssex char(3) //修改表字段类型

exec sp_rename 't_score.sorce','score' //修改表列名

exec sp_help t_student //查看表结构

drop table t_teaher //删除表

=======================================

数据源

Create database student_info; --创建库

use student_info; --使用库

1.建表语句

--学生表

create table t_student(

sid varchar(10),

sname varchar(10),

sage date,

ssex char(3)

)

--教师表

create table t_teacher(

tid varchar(10),

tname varchar(10)

)

--课程表

create table t_course(

cid varchar(10),

cname varchar(10),

tid varchar(10)

)

--分数表

create table t_score(

sid varchar(10),

cid varchar(10),

score float

)

exec sp_help t_teacher --查看表数据

2.测试源数据及例题

================工具Interactive SQL==============================

--学生表

insert into t_student values('01' , '赵雷' , '1990-01-01' , '男')go

insert into t_student values('02' , '钱电' , '1990-12-21' , '男')go

insert into t_student values('03' , '孙风' , '1990-12-20' , '男')go

insert into t_student values('04' , '李云' , '1990-12-06' , '男')go

insert into t_student values('05' , '周梅' , '1991-12-01' , '女')go

insert into t_student values('06' , '吴兰' , '1992-01-01' , '女')go

insert into t_student values('07' , '郑竹' , '1989-01-01' , '女')go

insert into t_student values('09' , '张三' , '2017-12-20' , '女')go

insert into t_student values('10' , '李四' , '2017-12-25' , '女')go

insert into t_student values('11' , '李四' , '2012-06-06' , '女')go

insert into t_student values('12' , '赵六' , '2013-06-13' , '女')go

insert into t_student values('13' , '孙七' , '2014-06-01' , '女')go

select * from t_student go

-- 教师表

insert into t_teacher values('01' , '张三') go

insert into t_teacher values('02' , '李四') go

insert into t_teacher values('03' , '王五') go

select * from t_teacher go

-- 课程表

insert into t_course values('01' , '语文' , '02') go

insert into t_course values('02' , '数学' , '01') go

insert into t_course values('03' , '英语' , '03') go

select * from t_course go

-- 成绩表

insert into t_score values('01' , '01' , 80) go

insert into t_score values('01' , '02' , 90) go

insert into t_score values('01' , '03' , 99) go

insert into t_score values('02' , '01' , 70) go

insert into t_score values('02' , '02' , 60) go

insert into t_score values('02' , '03' , 80) go

insert into t_score values('03' , '01' , 80) go

insert into t_score values('03' , '02' , 80) go

insert into t_score values('03' , '03' , 80) go

insert into t_score values('04' , '01' , 50) go

insert into t_score values('04' , '02' , 30) go

insert into t_score values('04' , '03' , 20) go

insert into t_score values('05' , '01' , 76) go

insert into t_score values('05' , '02' , 87) go

insert into t_score values('06' , '01' , 31) go

insert into t_score values('06' , '03' , 34) go

insert into t_score values('07' , '02' , 89) go

insert into t_score values('07' , '03' , 98) go

select * from t_score go

==========================================

3.例题

01)查询" 01 "课程比" 02 "成绩高的学生的信息及课程分数(即查询某人语文成绩比数学成绩高)

02)查询同时存在" 01 "课程和" 02 "课程的情况(即选课同时存在语文和数学)

03)查询存在" 01 "课程但可能不存在" 02 "课程的情况,02不存在时显示为 null (即查询存在语文成绩但可能不存在数学成绩的信息)

04)查询不存在" 01 "课程但存在" 02 "课程的情况(不存在语文但存在数学课程)

05)查询平均成绩大于等于 60 分的同学的学生编号和学生姓名和平均成绩

06)查询在t_score表存在成绩的学生信息,没有成绩的不显示/显示 null

======================解析(附有多种解法)==========================

01)查询" 01 "课程比" 02 "成绩高的学生的信息及课程分数(即查询某人语文成绩比数学成绩高)

select stu.*,s.score 语文成绩,s2.score 数学成绩

from t_student stu

inner join t_score s

on s.sid=stu.sid

inner join t_score s2

on s2.sid=stu.sid

where s.cid='01' and s2.cid='02' and s.score>s2.score

go

Sybase数据库测试例题(轻松掌握sql server内外连接)

02)查询同时存在" 01 "课程和" 02 "课程的情况(即选课同时存在语文和数学)

select stu.*,s.score 语文,s2.score 数学

from t_student stu inner join t_score s

on s.sid=stu.sid

inner join t_score s2

on s2.sid=stu.sid

where s.cid='01' and s2.cid='02'

go

Sybase数据库测试例题(轻松掌握sql server内外连接)

select s1.sid,s1.cid,s2.cid ,s1.score 语文分数,s2.score 数学分数

from t_score s1

inner join t_score s2

on s1.sid=s2.sid

where s1.cid='01' and s2.cid='02'

go

Sybase数据库测试例题(轻松掌握sql server内外连接)

select s1.sid,s1.score 语文分数,s2.score 数学分数,s1.cid,s2.cid

from t_score s1,t_score s2

where s1.sid=s2.sid and s1.cid='01' and s2.cid='02'

go

Sybase数据库测试例题(轻松掌握sql server内外连接)

03)查询存在" 01 "课程但可能不存在" 02 "课程的情况,02不存在时显示为 null (即查询存在语文成绩但可能不存在数学成绩的信息)

select s1.sid,s1.cid 课程ID1,s1.score 语文成绩,s2.cid 课程ID2,s2.score 数学成绩

from t_score s1

left join t_score s2

on s2.sid =s1.sid and s2.cid='02'

where s1.cid='01'

go

Sybase数据库测试例题(轻松掌握sql server内外连接)

04)查询不存在" 01 "课程但存在" 02 "课程的情况(不存在语文但存在数学课程)

--反向查询:先查询存在01课程的学生id,再排除存在01课程的学生id(not in)

select *

from t_score

where sid not in

(select sid from t_score where cid='01')

and cid='02'

go

Sybase数据库测试例题(轻松掌握sql server内外连接)

select *

from t_score s1

where s1.cid='02'

and sid not in

(select sid from t_score where cid in ('01'))

go

Sybase数据库测试例题(轻松掌握sql server内外连接)

05)查询平均成绩大于等于 60 分的同学的学生编号和学生姓名和平均成绩

select stu.sid,stu.sname,avg(s.score) avg_score

from t_student stu

inner join t_score s

on stu.sid=s.sid

group by stu.sid

having avg(s.score)>=60

order by avg_score desc

go

Sybase数据库测试例题(轻松掌握sql server内外连接)

select stu.sid,stu.sname,s.avg_score

from t_student stu,

(select avg(score) avg_score,sid

from t_score

group by sid

having avg(score) >=60)s

where s.sid=stu.sid

order by avg_score desc

go

Sybase数据库测试例题(轻松掌握sql server内外连接)

06)查询在t_score表存在成绩的学生信息,没有成绩的不显示/显示 null

--不显示没有成绩的学生(不包含没有成绩的)

select stu.*,s.sum_score 总成绩,s.avg_score 平均成绩,ct 课程数 from t_student stu

inner join

(

select sid,sum(score) sum_score,avg(score) avg_score,count(cid) ct

from t_score

where score >=0 --此条件可省略

group by sid

)s

on s.sid=stu.sid

go

Sybase数据库测试例题(轻松掌握sql server内外连接)

--显示所有学生的成绩(包含没有成绩的)

select stu.*,s.sum_score 总成绩,s.avg_score 平均成绩,ct 课程数 from t_student stu

left join

(

select sid,sum(score) sum_score,avg(score) avg_score,count(cid) ct

from t_score

group by sid

)s

on s.sid=stu.sid

go

Sybase数据库测试例题(轻松掌握sql server内外连接)

================篇幅过长,待续=====================

================附:常见问题处理====================

/*

1.sybase数据库解决中文乱码问题(中文显示问号问题-?)

解决办法:

修改locales.dat

找到[NT]

最后一行的后缀编码修改为 utf8,然后重启sybase数据库

2.表字段无法修改

解决办法:

use master go

sp_dboption 'student_info','select into/bulkcopy/pllsort',true go

*/

=================================================

继续阅读