日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql sql联合查询语句_MySQL多表联合查询sql语句

發布時間:2023/12/2 数据库 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql sql联合查询语句_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)

要求統計某個月已報竣各推廣地點的推廣個數;

代碼如下

SELECT

p.name, count(*)

FROM

unicom_record AS ur

Left Join sheet AS s ON ur.sheet_id = s.id

Left Join promotion_addr AS p ON s.promotion_addr_id = p.id

WHERE

ur.status =? ‘COMPLETE’ AND

ur.`date` >=? ’2010-03-01′ AND

ur.`date` ’2010-04-01′

GROUP BY

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 吧

create table emp(

id int not null primary key,

name varchar(10)

);

create table emp_dept(

dept_id varchar(4) not null,

emp_id int not null,

emp_name varchar(10),

primary key (dept_id,emp_id));

insert into emp() values

(1,”Dennis-1″),

(2,”Dennis-2″),

(3,”Dennis-3″),

(4,”Dennis-4″),

(5,”Dennis-5″),

(6,”Dennis-6″),

(7,”Dennis-7″),

(8,”Dennis-8″),

(9,”Dennis-9″),

(10,”Dennis-10″);

insert into emp_dept() values

(“R&D”,1,”Dennis-1″),

(“DEv”,2,”Dennis-2″),

(“R&D”,3,”Dennis-3″),

(“Test”,4,”Dennis-4″),

(“Test”,5,”Dennis-5″);

>> left join

————-

代碼如下

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 中的資料為基礎

代碼如下

mysql> select a.id,a.name,b.dept_id

-> from emp a left join emp_dept b on (a.id=b.emp_id);

+—-+———–+———+

| id | name????? | dept_id |

+—-+———–+———+

|? 1 | Dennis-1? | R&D???? |

|? 2 | Dennis-2? | DEv???? |

|? 3 | Dennis-3? | R&D???? |

|? 4 | Dennis-4? | Test??? |

|? 5 | Dennis-5? | Test??? |

|? 6 | Dennis-6? | NULL??? |

|? 7 | Dennis-7? | NULL??? |

|? 8 | Dennis-8? | NULL??? |

|? 9 | Dennis-9? | NULL??? |

| 10 | Dennis-10 | NULL??? |

+—-+———–+———+

# 挑出 table emp 中有而 table emp_dept 中沒有的人員資料

代碼如下

select a.id,a.name,b.dept_id

from emp a left join emp_dept b on (a.id=b.emp_id)

where b.dept_id IS NULL;

mysql> select a.id,a.name,b.dept_id

-> from emp a left join emp_dept b on (a.id=b.emp_id)

-> where b.dept_id IS NULL;

+—-+———–+———+

| id | name????? | dept_id |

+—-+———–+———+

|? 6 | Dennis-6? | NULL??? |

|? 7 | Dennis-7? | NULL??? |

|? 8 | Dennis-8? | NULL??? |

|? 9 | Dennis-9? | NULL??? |

| 10 | Dennis-10 | NULL??? |

+—-+———–+———+

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

代碼如下

select a.id,a.name,b.dept_id

from emp_dept b left join emp a on (a.id=b.emp_id);

mysql> select a.id,a.name,b.dept_id

-> from emp_dept b left join emp a on (a.id=b.emp_id);

+——+———-+———+

| id?? | name???? | dept_id |

+——+———-+———+

|??? 2 | Dennis-2 | DEv???? |

|??? 1 | Dennis-1 | R&D???? |

|??? 3 | Dennis-3 | R&D???? |

|??? 4 | Dennis-4 | Test??? |

|??? 5 | Dennis-5 | Test??? |

+——+———-+———+

>> right join

—————

代碼如下

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 中的資料為基礎來顯示資料

代碼如下

mysql> select a.id,a.name,b.dept_id

-> from emp a right join emp_dept b on (a.id=b.emp_id);

+——+———-+———+

| id?? | name???? | dept_id |

+——+———-+———+

|??? 2 | Dennis-2 | DEv???? |

|??? 1 | Dennis-1 | R&D???? |

|??? 3 | Dennis-3 | R&D???? |

|??? 4 | Dennis-4 | Test??? |

|??? 5 | Dennis-5 | Test??? |

+——+———-+———+

5 rows in set (0.00 sec)

# 我們再把 table 的位置交換一下,再用 right join 試試

代碼如下

select a.id,a.name,b.dept_id

from emp_dept b right join emp a on (a.id=b.emp_id);

mysql> select a.id,a.name,b.dept_id

-> from emp_dept b right join emp a on (a.id=b.emp_id);

+—-+———–+———+

| id | name????? | dept_id |

+—-+———–+———+

|? 1 | Dennis-1? | R&D???? |

|? 2 | Dennis-2? | DEv???? |

|? 3 | Dennis-3? | R&D???? |

|? 4 | Dennis-4? | Test??? |

|? 5 | Dennis-5? | Test??? |

|? 6 | Dennis-6? | NULL??? |

|? 7 | Dennis-7? | NULL??? |

|? 8 | Dennis-8? | NULL??? |

|? 9 | Dennis-9? | NULL??? |

| 10 | Dennis-10 | NULL??? |

+—-+———–+———+

# 是不是和 left join 一樣了?

>> direct join

————–

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

代碼如下

select a.id,a.name,b.dept_id

from emp a ,emp_dept b

where a.id=b.emp_id;

mysql> select a.id,a.name,b.dept_id

-> from emp a ,emp_dept b

-> where a.id=b.emp_id;

+—-+———-+———+

| id | name???? | dept_id |

+—-+———-+———+

|? 2 | Dennis-2 | DEv???? |

|? 1 | Dennis-1 | R&D???? |

|? 3 | Dennis-3 | R&D???? |

|? 4 | Dennis-4 | Test??? |

|? 5 | Dennis-5 | Test??? |

+—-+———-+———+

怎樣,弄明白了嗎?

Enjoy it!

總結

以上是生活随笔為你收集整理的mysql sql联合查询语句_MySQL多表联合查询sql语句的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。