SQL高级查询技巧(两次JOIN同一个表,自包含JOIN,不等JOIN)

掌握了这些,就比较高级啦

Using the Same Table Twice

如下面查询中的branch字段

SELECT a.account_id, e.emp_id, b_a.name open_branch, b_e.name emp_branch FROM account AS a INNER JOIN branch AS b_a ON a.open_branch_id = b_a.branch_id INNER JOIN employee AS e ON a.open_emp_id = e.emp_id INNER JOIN branch b_e ON e.assigned_branch_id = b_e.branch_id WHERE a.product_cd = 'CHK';

 

Self-Joins

因为employee中自引用了自己的上级,所以存在这个可能性,django example里也有这样的CASE

SELECT e.fname, e.lname, e_mgr.fname mgr_fname, e_mgr.lname mgr_lname FROM employee AS e INNER JOIN employee AS e_mgr ON e.superior_emp_id = e_mgr.emp_id;

 

Non-Equi-Joins

在JOIN语句的ON条件中,不一定非要用等号,也可以不等号

 SELECT e1.fname, e1.lname, 'VS' vs, e2.fname, e2.lname FROM employee AS e1 INNER JOIN employee AS e2 ON e1.emp_id < e2.emp_id WHERE e1.title = 'Teller' AND e2.title = 'Teller';

时间: 2024-09-24 21:06:42

SQL高级查询技巧(两次JOIN同一个表,自包含JOIN,不等JOIN)的相关文章

(转载)SQL高级查询技巧

1.UNION,EXCEPT,INTERSECT运算符 A,UNION 运算符 UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表. 当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行.两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2. B, EXCEPT 运算符 EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表

sql 高级查询运算词 UNION EXCEPT right及外部连接

sql 高级查询运算词 union except right及外部连接 a: union 运算符 union 运算符通过组合其他两个结果表(例如 table1 和 table2)并消去表中任何重复行而派生出一个结果表.当 all 随 union 一起使用时(即 union all),不消除重复行.两种情况下,派生表的每一行不是来自 table1 就是来自 table2. sql union 语法 select column_name(s) from table_name1 union selec

sql高级查询语句 麻烦大家了

问题描述 sql高级查询语句 麻烦大家了 --28)查询选修了课程名为"数据库"的学生的学号和姓名. select sname,sno from course,student where course.cno in( select cno from course where cname='sql') and course.cname=student.sno group by sname having count(cname)='sql' 显示错误 出不来 解决方案 sql高级查询语句

sql查询-sql判断查询一个数是否在数据表两个字段的范围内要怎么写

问题描述 sql判断查询一个数是否在数据表两个字段的范围内要怎么写 大手求教,范围表 字段3个 name startnum endnum (end比start大 是bigint类型,name text型 数据:张三 101 200李四 201 300王五 301 400------省略 然后要查询一个值 如250是在那条数据的范围里这样要怎么写 解决方案 直接写就可以select name from tablename where startnum<=yournum and endnum>=y

mysql-请问数据库表中可以在一个表里面有两个关联同一个表的外键吗?

问题描述 请问数据库表中可以在一个表里面有两个关联同一个表的外键吗? 具体是这样的: 我有一个用户表user,一个好友表fans. fans中有三个字段 id,user_id,fans_id,其中user_id和fans_id都是跟user表的id关联的外键,我发现这样会报错. 可是用户跟好友的信息又要与用户表的信息关联,请问各位大神,怎样才不会报错或者有什么好一点的解决办法吗? 解决方案 可以的 FOREIGN KEY (user_id) REFERENCES user(id), FOREIG

SQL Server维护技巧两则

确实,数据库的维护常常交给那些专业的数据库管理员,但是作为一个开发者,你也许偶尔需要暂时从事这个工作.所以,试一试这两个SQL服务器维护技巧:轻松改变数据库拥有者.整理索引碎片.谁会想到你甚至可以给那些数据库管理员教上一两个新技巧呢? 重指定数据库拥有者 当回复或者新建数据库时,你有没有注意到SQL Server把数据库的拥有者置为你的NT登录名?仅仅为了确保不同数据库间的一致性(更别提安全性因素了),你也许考虑用系统过程sp_changedbowner来把数据库拥有者改为其它用户如系统管理员(

SQL Server SQL高级查询语句小结_MsSql

Ø 基本常用查询 --select select * from student; --all 查询所有 select all sex from student; --distinct 过滤重复 select distinct sex from student; --count 统计 select count(*) from student; select count(sex) from student; select count(distinct sex) from student; --top

SQL Server SQL高级查询语句小结

Ø 基本常用查询 --select select * from student; --all 查询所有 select all sex from student; --distinct 过滤重复 select distinct sex from student; --count 统计 select count(*) from student; select count(sex) from student; select count(distinct sex) from student; --top

SQL高级查询

  t_tudent(sid,sname,sage,ssex,sdept) 学生表 t_course(cid,cname,tid) 课程表 t_score( scid,sid,cid,grade) 成绩表 t_teacher(tid,tname) 教师表 问题: 1.查询"001"课程比"002"课程成绩高的所有学生的学号; select t1.sid from (select sid,grade from t_score where cid = '001') t1