日期:2014-05-18  浏览次数:20453 次

请教有没有比这更好的SQL语句?有空进来看看

班级表:Class

classcode classname
1001 一班
1002 二班
1003 三班

学生表:Student
code name classcode
2007001 张三 1001
2007002 李四 1001
2007003 王五 1002
2007004 马六 1003

要求查询结果:

一班  
  张三
  李四
二班
  李四
三班
  马六

现在的查询SQL:
Select classcode As code,'0' As parentcode,classname As name From Class
Union
Select code,classcode As parentcode,name From Student s,Class c Where s.classcode=c.classcode

问:由于数据较多,这样查询较慢,请问有没有更简洁,快速的SQL语句。谢

------解决方案--------------------
SQL code

这样?
select a.classname,b.name from class a,student b where a.classcode=b.classcode

------解决方案--------------------
班级表:Class 

classcode classname 
1001 一班 
1002 二班 
1003 三班 

学生表:Student 
code name classcode 
2007001 张三 1001 
2007002 李四 1001 
2007003 王五 1002 
2007004 马六 1003 

---------------
select a.classname ,b.name
from Class a left join Student b
on a.classcode =b.classcode
------解决方案--------------------
SQL code
  select classname , name = '' , classcode from class
  union all
  select classname = '', name , classcode from student
  order by classcode,name

------解决方案--------------------
不对,要多出一行。用来表示上下属关系 

不只是关联查询

-------------------
如果你要显示这种层次关系,在oracle 有一个命令出来的结果就是这个样子的
------解决方案--------------------
显示问题交给前台程序处理
------解决方案--------------------
SQL code
create table Class (classcode varchar(10),classname varchar(10))
insert into Class values('1001',        '一班') 
insert into Class values('1002',        '二班') 
insert into Class values('1003',        '三班') 
create table Student (code varchar(10),name varchar(10),classcode varchar(10))
insert into student values('2007001', '张三',     '1001') 
insert into student values('2007002', '李四',     '1001') 
insert into student values('2007003', '王五',     '1002') 
insert into student values('2007004', '马六',     '1003') 
go

  select classname , name = '' , classcode from class
  union all
  select classname = '', name , classcode from student
  order by classcode,name 
drop table class,student

/*
classname  name       classcode  
---------- ---------- ---------- 
一班                    1001
           李四         1001
           张三         1001
二班                    1002
           王五         1002
三班                    1003
           马六         1003

(所影响的行数为 7 行)
*/