mysql练习1

1.用一条SQL 语句 查询出每门课都大于80 分的学生姓名

name   kecheng   fenshu
张三    语文       81
张三     数学       75
李四     语文       76
李四     数学       90
王五     语文       81
王五     数学       100
王五     英语       90

法1:select distinct name from t where name not in (select name from t where fenshu<=80)

法2:select name group by name having min(fenshu)>80


2. 学生表 如下:
自动编号   学号   姓名 课程编号 课程名称 分数

1        2005001 
张三 0001     数学    69
2        2005002 
李四 0001      数学
    89
3        2005001 
张三 0001      数学
    69
删除除了自动编号不同, 其他都相同的学生冗余信息

delete from t where 自动编号 not in (select min(自动编号) from t group by 学号,姓名,课程编号,课程名称, 分数)


3..一个叫 team 的表,里面只有一个字段name, 一共有4 条纪录,分别是a,b,c,d, 对应四个球对,现在四个球对进行比赛,用一条sql 语句显示所有可能的比赛组合.

select t1.name, t2.name  from team t1,team t2 where t1.name<t2.name


4.请用SQL 语句实现:从TestDB 数据表中查询出所有月份的发生额都比101 科目相应月份的发生额高的科目。请注意:TestDB 中有很多科目,都有1 -12 月份的发生额。
AccID
 :科目代码,Occmonth :发生额月份,DebitOccur :发生额。
数据库名:JcyAudit ,数据集:Select * from TestDB

select distinct t1.AccID 

from TestDB t1 

whereAccID not in (select AccID

 from TestDB t2,(select Occmonth, DebitOccur

from TestDB 

  where AccID = 101) t3 

where t2.Occmonth = t3.Occmonth and t2.DebitOccur <= t3.DebitOccur)


5.怎么把这样一个表儿

year   month amount
1991   1     1.1
1991   2     1.2
1991   3     1.3
1991   4     1.4
1992   1     2.1
1992   2     2.2
1992   3     2.3
1992   4     2.4
查成这样一个结果
year m1   m2   m3   m4
1991 1.1 1.2 1.3 1.4
1992 2.1 2.2 2.3 2.4 

select t2.year 

(select amount from t t1 where t1.month = 1 and t1.year =t2.year ) as m1,

(select amount from t t1 where t1.month = 2 and t1.year =t2.year )as m2,

(select amount from t t1 where t1.month = 3 and t1.year =t2.year )as m3,

(select amount from t t1 where t1.month = 4 and t1.year =t2.year )as m4

from t t2

group by year


6.复制表(包括结构和数据)

create table t1

as 

select * from t2 where 1=1;

复制表(只是表的结构)

1.create table t1 like t2

2.create table t1

as 

select * from t2 where 1<>1


7.两张关联表,删除主表a中已经在副表b中没有的信息

1.delete from a where a.id not in (select b.id from b)

2.delete from a where not exists (select * from b where a.id = b.id)


8.有两个表A 和B ,均有key 和value 两个字段,如果B 的key 在A 中也有,就把B 的value 换为A中对应的value
1.update b set b.value = (select a.value from a where a.key=b.key) where b.key in (select a.key from a)

2.update b set b.value = (select a.value from a where a.key=b.key) where exists(select * from a where a.key = b.key)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值