第三章 多表操作3(多表查询)

多表查询的方式

  1. 子查询
  2.  内连接
  3.  左连接
  4.  右连接
  5. 全连接连接
  6.  交叉连接
  7. 自连接

-- 子查询效率没有连接查询高  ,能用连接查询的,就尽量不要用子查询
SELECT c_name FROM class WHERE c_id =(SELECT c_id FROM student WHERE s_name ='张三2');

-- 连接查询
SELECT a.`a_id`,a.`a_name`,b.`b_id`,b.`b_name` FROM a,b WHERE a.`a_id`=b.`b_id`;

--  内连接
SELECT a.`a_id`,a.`a_name`,b.`b_id`,b.`b_name` FROM a  JOIN b ON a.`a_id`=b.`b_id` WHERE b_name='aa';   

-- 左连接
SELECT a.`a_id`,a.`a_name`,b.`b_id`,b.`b_name` FROM a LEFT JOIN b ON a.`a_id`=b.`b_id`

-- 右连接
SELECT a.`a_id`,a.`a_name`,b.`b_id`,b.`b_name` FROM a RIGHT JOIN b ON a.`a_id`=b.`b_id`;

-- 全连接  mysql 不支持   ,但是可以用其他的方式来实现
-- select a.`a_id`,a.`a_name`,b.`b_id`,b.`b_name` from a full join b on a.`a_id`=b.`b_id`;

SELECT a_id FROM a
UNION ALL
SELECT b_id FROM b;

--  mysql中全连接
SELECT a.`a_id`,a.`a_name`,b.`b_id`,b.`b_name` FROM a LEFT JOIN b ON a.`a_id`=b.`b_id`
UNION
SELECT a.`a_id`,a.`a_name`,b.`b_id`,b.`b_name` FROM a RIGHT JOIN b ON a.`a_id`=b.`b_id`;

-- 交叉连接
select * from emp,dept where emp.`d_id`= dept.`d_id` and emp.`e_name`="张三";;

-- 自连接
-- 电器下面的子分类
select * from category where p_id = 
(select a_id from category where c_name="电器");

-- 两张表以上联查
方式一
SELECT a.`a_id`,a.`a_name`,b.`b_id`,b.`b_name`,c..c_id FROM a,b,c WHERE a.`a_id`=b.`b_id` and b.b_id=c.c_id;

方式二
SELECT A.*,B.*,C.*
FROM A
inner join  B on A.a_id=B.b_id
inner join  C on B.b_id=C.c_id

-- 注意后面可以接
where
group by
having 
order by 
limit


   -- 注意  a.id  b_id  c_id 一般是主外键的 关系。

猜你喜欢

转载自blog.csdn.net/yipianfeng_ye/article/details/89888390