mysql经典sql语句实例

发布时间:2020-02-25编辑:脚本学堂
本文为大家介绍一些mysql经典sql语句实例,包括拷贝表、复制表、交叉查询等,供大家学习参考。

本文为大家介绍一些mysql经典sql语句实例,包括拷贝表、复制表、交叉查询等,供大家学习参考。

1. 拷贝表(拷贝数据,源表名:A(a,b,c) 目标表名:B)
   将A表中NAME,SEX字段插入B表(B表有三个字段分别是CHARNAME,CHARSEX,STAT(默认值:0))
 

复制代码 代码如下:

mysql> Select * into B from A

mysql> select * into B from A where 1<>1
mysql> insert into B from select name,sex,0 from A;

2. 复制表(只复制结构,源表名:A(a,b,c) 新表名:B) ,并向B中插入一条记录1,2,3
 

复制代码 代码如下:
mysql> create table admin as (select * from bookinfo.admin);
Insert into B values(1,2,3)

3. 有两个表A和B,均有key和value两个字段,
(1)查询A中所有key在B中对应的value(没有用0代替)
(2)如果B的key在A中也有,就把B的value换成A中对应的value
 

复制代码 代码如下:
 (1)Select A.key,isnull(B.value,0)
     From A
     Left join B on A.key=B.key
  (2)Update B set B.value=A.value
     From A,B where A.key=B.key

4. 表 A(ID,Name),查询表A中存在ID重复三次(包括三次)以上的记录
 

复制代码 代码如下:
Select * From A Where ID in (select id from A Group by ID having count(name)>=3)

5.学生成绩表A
Name kecheng fenshu
张三 语文 81
张三 数学 95
张三 英语 80
李四 语文 75
李四 数学 80
李四 英语 65
王五 语文 42
王五 数学 65
王五 英语 55
…….

(1)用一条SQL语句,查询出每门课都大于80分的学生姓名
(2)转化成以下表(60以下:不及格,60-70 及格,70-80 中,80-90良,90以上 优)
Name pingjunfen kaohe
张三 85 良
李四 73 中
王五 54 不及格
……
 

复制代码 代码如下:
(1)Select * from A where name not in (select name from A where fenshu<80)
(2)Select name,avg(fenshu) as pingjunfen,
     case when avg(fenshu)<60 then '不及格'
     when avg(fenshu)>=60 and avg(fenshu)<70 then '及格'
     when avg(fenshu)>=70 and avg(fenshu)<80 then '中'
     when avg(fenshu)>=80 and avg(fenshu)<90 then '良'
     when avg(fenshu)>=90 then '优秀' end as kaohe
     From A
     Group by name

6.学生表 A
IDX NO NAME KCNO(课程编号) KCNAME(课程名称) fenshu(分数)
1 2005001 张三 0001 数学 69
2 2005002 李四 0001 数学 89
3 2005001 张三 0001 数学 69
……
删除除了自动编号不同,其他都相同的学生冗余信息
 

复制代码 代码如下:
Delede From A
Where IDX not in (Select min(ID) group by NO,NAME,KCNO,KCNAME,FENSHU)

7.两个结构相同的表A,B(栏位a,b,c)
(1)查询同时存在A和B中的记录
(2)查询存在A中,不存在B中的记录
 

复制代码 代码如下:
(1)Select * From A,B
     Where A.a=B.a and A.b=B.b and A.c=B.c
(2)Select A.* From A
    Left join B on A.a=B.a and A.b=B.b and A.c=B.c
where B.a is null

8.玩家登陆表A,登陆一次有一条记录(Id, Logintime)
查询上周内(假设现在时间为周一0点)玩家和玩家登陆次数以及最后登陆日期
 

复制代码 代码如下:
Select ID,count(Logintime) AS count,max(Logintime) AS LastLogintime
  From A where Logintime>=convert(char(10),dateadd(dd,-7,getdate()),20)
  And Logintime<getdate()

9. 本地服务器A,数据库 ADB,表 A1(name)
远程服务器B,数据库 BDB,帐号表B1(ID, name, playtime, logintime, lastip),基本信息表B2 (id, name, lev, gd, guildno), 公会表B3(guildno, guildname),装备表B4(id, data),技能表B5(id, data)

查询出A1中玩家name含有moliyo的所有相关信息(本地数据库用户有能连接远程数据库的权限)
 

复制代码 代码如下:
Select B1.ID,A1.Name,B1.Logintime,B1.playtime,B1.LastIP,
  B2.Lev,B2.GD,B2.guildno,B3.guildname,
  B4.data AS data1,B5.data AS data2
  From A1
  Inner join B.BDB.DBO.B1 on A1.name=B1.name
  Inner join B.BDB.DBO.B2 on B1.ID=B2.ID
  Inner join B.BDB.DBO.B3 on B2.guildno=B3.guildno
  Inner join B.BDB.DBO.B4 on B1.ID=B4.ID
  Inner join B.BDB.DBO.B5 on B1.ID=B5.ID
  Where A1.name like '%moliyo%'