SQL多表查询

多表查询

 

1.交叉连接查询

基本不会使用,因为得到的是两个表的乘积

       语法:select * from A,B;

2.内连接查询

使用的关键字 inner join ,其中inner可以省略

1)隐式内连接:select * from A,B where 条件;

比如:SELECT * FROM category ,product WHERE category.cid=product.category_id;

使用别名:SELECT * FROM category c,product p WHERE c.cid=p.category_id;

 

2)显示内连接:select * from A inner join B on 条件;

比如:SELECT * FROM category INNER JOIN product ON cid=category_id;

3.外连接查询

              使用关键字 outer join,其中outer可以省略

1)左外连接:left outer join

       select * from A left outer join B on 条件;

2)右外连接:right outer join

       select * from A right outer join B on 条件;

 

insert into category values('c004',null);

insert into product values('p012','三星',999,null);

注意:

1)使用左外连接发现左表有,右边没有

SELECT * FROM category LEFT OUTER JOIN product ON cid=category_id;

2)使用有右外连接发现右表有,左表没有

SELECT * FROM category RIGHT OUTER JOIN product ON cid=category_id;

      

4.子查询

       一条select语句结果作为另一条select语句一部分(查询条件、查询结果,表等)。

例如:查询“化妆品”分类上架商品详情

select * from product where category_id = (select cid from category where cname='化妆品');

练习:

(1)工资高于JONES的员工。

SELECT * FROM emp WHERE sal > (SELECT sal FROM emp WHERE ename='JONES')

(2)工资高于30号部门所有人的员工信息

       SELECT * FROM emp WHERE sal > ALL (SELECT sal FROM emp WHERE deptno=30)

(3)查询工作和工资与MARTIN(马丁)完全相同的员工信息

       SELECT * FROM emp WHERE (job,sal) IN (SELECT job,sal FROM emp WHERE ename='MARTIN')

(4)有2个以上直接下属的员工信息

       SELECT * FROM emp WHERE empno IN(

SELECT mgr FROM emp GROUP BY mgr HAVING COUNT(mgr)>=2);

(5)查询员工编号为7788的员工名称、员工工资、部门名称、部门地址

       SELECT e.ename, e.sal, d.dname, d.loc

FROM emp e, (SELECT dname,loc,deptno FROM dept) d

WHERE e.deptno=d.deptno AND e.empno=7788;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值