编写SQL查询的关键—SQL语句的执行顺序
作者 佚名技术
来源 数据库编程
浏览
发布时间 2012-03-22
; 对于第 5 行 5 Bobby 21 Age=21>20, 符合条件 由上述的 (1)(2)(5) 可知,最终符合条件的记录为下表 2 ID Name Age 1 Tom 23 2 Jack 25 5 Bobby 21 表 2 4. 计算所有的表达式,即 Select name 部分,针对表 2 中的数据,最终符合条件的是 3 行,分别从每一行挑选出需要的字段值 name ,最终的结果如下表 3 Name Tom Jack Bobby 表 3 下面举一般比较复杂的例子,有 3 个表 teacher 表, student 表, tea_stu 关系表: teacher 表 teaID name age student 表 stuID name age teacher_student 表 teaID stuID 要求用一条 sql 查询出这样的结果 1. 显示的字段要有老师 name, 每个老师所带的学生人数 2 只列出老师 age 为 45 以下,学生 age 为 12 以上的记录 先准备测试数据: drop table if exists tea_stu; drop table if exists teacher; drop table if exists student; create table teacher(teaID int PRimary key,name varchar(50),age int); create table student(stuID int primary key,name varchar(50),age int); create table tea_stu(teaID int references teacher(teaID),stuID int references student(stuID)); insert into teacher values(1,'' Tom'',46), (2,'' Jack'',35) , (3,'' Tony'',36) , (4,'' Lucy'',37); insert into student values(1,'' Lili'',11), (2,'' Anay'',15) , (3, ''Bobby'',16) , (4, ''Jeff'',17); insert into tea_stu values(1,1), (1,2), (1,3),(2,2), (2,3), (2,4),(3,3), (3,4), (3,1),(4,4), (4,1), (4,2) , (4,3); 题目要求是列出 老师所带的学生数,条件是 老师 age 为 45 以下,学生 age 为 12 以上,最理想的情况是有下面的一个表 , 如图 1 图 1 如果能构造一个图 1 的表,那么实现题目要求的 SQL 语句用下面的简单 SQL 查询就行: select teacher.name, count(student.name) from table where teacher.age<45 and student.age>12 group by teacher.name; 数据库中学生的信息和老师的信息是分别存放在 student, teacher 表中的,信息的关联只能依靠 tea_stu ,那么怎么构造图 1 的表呢?这时候可以用到表的关联,把这三个表的数据关联起来, 注意:只要是表的关联就会产生笛卡尔积,所以务必把笛卡尔积去掉。 关联表的最小粒度关联可以 去掉 笛卡尔积,具体的查询语句为: select teacher.name, teacher.age,student.name,student.age from teacher,student,tea_stu where teacher.teaID=tea_stu.teaID |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: SQL Server 2008在商务智能上的三个优化下一篇: 经典SQL语句大全
关于编写SQL查询的关键—SQL语句的执行顺序的所有评论