国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

MySQL多表聯合查詢sql語句

2024-07-24 12:37:58
字體:
來源:轉載
供稿:網友

本文章來給各位朋友介紹PHP MySQL多表聯合查詢sql語句總結,有需要了解的同學可參考.

最簡的一種聯合查詢,代碼如下:

SELECT * FROM table1 n, table2 i WHERE n.itemid = i.itemid

例:

推廣地點表promotion_addr字段:name,id

電話報竣表unicom_record字段:date, sheet_id(關聯sheet表id)

報單表sheet字段:id,promotion_addr_id(關聯promotion_addr表id)

要求統計某個月已報竣各推廣地點的推廣個數,代碼如下:

  1. SELECT 
  2. p.namecount(*) 
  3. FROM 
  4. unicom_record AS ur 
  5. Left Join sheet AS s ON ur.sheet_id = s.id 
  6. Left Join promotion_addr AS p ON s.promotion_addr_id = p.id 
  7. WHERE 
  8. ur.status =? ‘COMPLETE’ AND 
  9. ur.`date` >=? ’2010-03-01′ AND 
  10. ur.`date` <? ’2010-04-01′ 
  11. GROUP BY 
  12. p.id 

或使用between and語句.

內連接INNER JOIN,代碼如下:

join_table: table_reference [INNER | CROSS] JOIN table_factor [join_condition]

MySQL中的外連接,代碼如下:

select id, name, action from user as u  left join user_action a on u.id = a.user_id

還是先 Create table 吧,代碼如下:

  1. create table emp( 
  2. id int not null primary key
  3. name varchar(10) 
  4. ); 
  5. create table emp_dept( 
  6. dept_id varchar(4) not null
  7. emp_id int not null
  8. emp_name varchar(10), 
  9. primary key (dept_id,emp_id)); 
  10. insert into emp() values 
  11. (1,”Dennis-1″), 
  12. (2,”Dennis-2″), 
  13. (3,”Dennis-3″), 
  14. (4,”Dennis-4″), 
  15. (5,”Dennis-5″), 
  16. (6,”Dennis-6″), 
  17. (7,”Dennis-7″), 
  18. (8,”Dennis-8″), 
  19. (9,”Dennis-9″), 
  20. (10,”Dennis-10″); 
  21. insert into emp_dept() values 
  22. (“R&D”,1,”Dennis-1″), 
  23. (“DEv”,2,”Dennis-2″), 
  24. (“R&D”,3,”Dennis-3″), 
  25. (“Test”,4,”Dennis-4″), 
  26. (“Test”,5,”Dennis-5″); 
  27. >> left join 
  28. ————- 

代碼如下:

select a.id,a.name,b.dept_id from emp a left join emp_dept b on (a.id=b.emp_id);

挑出左邊的 table emp 中的所有資料,即使 emp_dept 中沒有的資料也挑出來,沒有的就用 NULL來顯示,也即顯示資料是以左邊的 table emp 中的資料為基礎,代碼如下:

  1. mysql> select a.id,a.name,b.dept_id 
  2. -> from emp a left join emp_dept b on (a.id=b.emp_id); 
  3. +—-+———–+———+ 
  4. | id | name      | dept_id | 
  5. +—-+———–+———+ 
  6. |  1 | Dennis-1  | R&D     | 
  7. |  2 | Dennis-2  | DEv     | 
  8. |  3 | Dennis-3  | R&D     | 
  9. |  4 | Dennis-4  | Test    | 
  10. |  5 | Dennis-5  | Test    | 
  11. |  6 | Dennis-6  | NULL    | 
  12. |  7 | Dennis-7  | NULL    | 
  13. |  8 | Dennis-8  | NULL    | 
  14. |  9 | Dennis-9  | NULL    | 
  15. | 10 | Dennis-10 | NULL    | 
  16. +—-+———–+———+ 

挑出 table emp 中有而 table emp_dept 中沒有的人員資料,代碼如下:

  1. select a.id,a.name,b.dept_id 
  2. from emp a left join emp_dept b on (a.id=b.emp_id) 
  3. where b.dept_id IS NULL
  4. mysql> select a.id,a.name,b.dept_id 
  5. -> from emp a left join emp_dept b on (a.id=b.emp_id) 
  6. -> where b.dept_id IS NULL
  7. +—-+———–+———+ 
  8. | id | name      | dept_id | 
  9. +—-+———–+———+ 
  10. |  6 | Dennis-6  | NULL    | 
  11. |  7 | Dennis-7  | NULL    | 
  12. |  8 | Dennis-8  | NULL    | 
  13. |  9 | Dennis-9  | NULL    | 
  14. | 10 | Dennis-10 | NULL    | 
  15. +—-+———–+———+ 

把 table emp_dept 放在左邊的情形(當然以 emp_dept 中的數據為基礎來顯示資料,emp 中比emp_dept 中多的資料也就不會顯示出來了),代碼如下:

  1. select a.id,a.name,b.dept_id 
  2. from emp_dept b left join emp a on (a.id=b.emp_id); 
  3. mysql> select a.id,a.name,b.dept_id 
  4. -> from emp_dept b left join emp a on (a.id=b.emp_id); 
  5. +——+———-+———+  --Vevb.com 
  6. | id   | name     | dept_id | 
  7. +——+———-+———+ 
  8. |    2 | Dennis-2 | DEv     | 
  9. |    1 | Dennis-1 | R&D     | 
  10. |    3 | Dennis-3 | R&D     | 
  11. |    4 | Dennis-4 | Test    | 
  12. |    5 | Dennis-5 | Test    | 
  13. +——+———-+———+ 
  14. >> right join 
  15. ————— 

代碼如下:

select a.id,a.name,b.dept_id from emp a right join emp_dept b on (a.id=b.emp_id);

挑資料時以右邊 table emp_dept 中的資料為基礎來顯示資料,代碼如下:

  1. mysql> select a.id,a.name,b.dept_id 
  2. -> from emp a right join emp_dept b on (a.id=b.emp_id); 
  3. +——+———-+———+ 
  4. | id   | name     | dept_id | 
  5. +——+———-+———+ 
  6. |    2 | Dennis-2 | DEv     | 
  7. |    1 | Dennis-1 | R&D     | 
  8. |    3 | Dennis-3 | R&D     | 
  9. |    4 | Dennis-4 | Test    | 
  10. |    5 | Dennis-5 | Test    | 
  11. +——+———-+———+ 
  12. rows in set (0.00 sec) 

我們再把 table 的位置交換一下,再用 right join 試試,代碼如下:

  1. select a.id,a.name,b.dept_id 
  2. from emp_dept b right join emp a on (a.id=b.emp_id); 
  3. mysql> select a.id,a.name,b.dept_id 
  4. -> from emp_dept b right join emp a on (a.id=b.emp_id); 
  5. +—-+———–+———+ 
  6. | id | name      | dept_id | 
  7. +—-+———–+———+ 
  8. |  1 | Dennis-1  | R&D     | 
  9. |  2 | Dennis-2  | DEv     | 
  10. |  3 | Dennis-3  | R&D     | 
  11. |  4 | Dennis-4  | Test    | 
  12. |  5 | Dennis-5  | Test    | 
  13. |  6 | Dennis-6  | NULL    | 
  14. |  7 | Dennis-7  | NULL    | 
  15. |  8 | Dennis-8  | NULL    | 
  16. |  9 | Dennis-9  | NULL    | 
  17. | 10 | Dennis-10 | NULL    | 
  18. +—-+———–+———+ 

是不是和 left join 一樣了?

>> direct join

如果用right join 同不用 Join 直接挑資料是相同的,它等介於以下的指令,代碼如下:

  1. select a.id,a.name,b.dept_id 
  2. from emp a ,emp_dept b 
  3. where a.id=b.emp_id; 
  4. mysql> select a.id,a.name,b.dept_id 
  5. -> from emp a ,emp_dept b 
  6. -> where a.id=b.emp_id; 
  7. +—-+———-+———+ 
  8. | id | name     | dept_id | 
  9. +—-+———-+———+ 
  10. |  2 | Dennis-2 | DEv     | 
  11. |  1 | Dennis-1 | R&D     | 
  12. |  3 | Dennis-3 | R&D     | 
  13. |  4 | Dennis-4 | Test    | 
  14. |  5 | Dennis-5 | Test    | 
  15. +—-+———-+———+ 

怎樣,弄明白了嗎?Enjoy it!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 寿宁县| 德惠市| 阿图什市| 万年县| 昌都县| 镇安县| 天峨县| 葫芦岛市| 长顺县| 青海省| 唐河县| 左贡县| 静宁县| 灌阳县| 临湘市| 新密市| 淮北市| 通榆县| 永胜县| 建平县| 彝良县| 玉林市| 宁安市| 镇雄县| 保山市| 都安| 孙吴县| 濮阳县| 公主岭市| 鄱阳县| 苍南县| 大悟县| 金乡县| 武平县| 阜新市| 腾冲县| 巫山县| 澜沧| 盈江县| 安达市| 峨边|