有些時候資料在不同的表中,這個時候我們就需要用到多表聯查
sql join 用於把來自兩個或多個表的行結合起來。
table_order表
create table `table_order` (
`orderid` int(11) not null auto_increment comment '訂單編號',
`userid` int(11) default null comment '使用者編號',
`ordername` varchar(32) default null comment '訂單名稱',
primary key (`orderid`)
) engine=innodb auto_increment=2 default charset=utf8mb4;
table_user表
create table `table_user` (
`userid` int(32) not null auto_increment,
`username` varchar(32) default null comment '使用者名稱',
`password` varchar(32) default null comment '密碼',
`summary` varchar(128) default null comment '簡介',
`age` int(2) default null,
primary key (`id`)
) engine=innodb auto_increment=8 default charset=utf8mb4;
,「order」 表中的 「userid」 列指向 「user」 表中的客戶。上面這兩個表是通過 「userid」 列聯絡起來的。
先來個例子,方便理解
select table_user.userid,table_order.orderid,table_user.username,table_order.ordername
from table_order
inner join table_user
on table_order.userid=table_user.userid
執行結果:
join有不同的型別
上面已經有了inner join例子
取別名的形式簡寫sql
select u.userid,o.orderid,u.username,o.ordername
from table_order o
inner join table_user u
on o.userid=u.userid
三個表inner join寫法
select .... from table_order
((inner join ...on ...=...)
inner join ...on ...=...)
左鏈結left join關鍵字返回左表(表1)中的所有行,即使在右表(表2)中沒有匹配。如果在正確的表中沒有匹配,結果是null。
sql語句
select u.userid,o.orderid,u.username,o.ordername
from table_order o
left join table_user u
on o.userid=u.userid
執行結果:
右鏈結 right join 關鍵字返回右表(table2)的所有行,即使在左表(table1)上沒有匹配。如果左表沒有匹配,則結果為null。
sql語句
select u.userid,o.orderid,u.username,o.ordername
from table_order o
right join table_user u
on o.userid=u.userid
執行結果
sql語句
mysql不支援全連線 full outer join
解決方法:left join + right join
不詳述自聯接是一種常規聯接,但表本身是連線的。
sql語句
select u.userid,o.orderid,u.username,o.ordername
from table_order o ,table_user u
where o.userid=u.userid
執行結果:
可以看出,自連線可以實現內部連線的效果 而且更加靈活
union運算子用於組合兩個或更多select語句的結果集。
select column_name(s) from table1
union
select column_name(s) from table2;
注釋:預設情況下,union 運算子選擇乙個不同的值。如果允許重複值,請使用 union all。
select column_name(s) from table1
union all
select column_name(s) from table2;
其中userid為:2113245,,32323232
id為:2113245
select a.id,a.user_name,b.userid from s_user a left join c_enterprise_info b
on b.userid like concat('%',a.id,'%')
SQL 查詢(二 多表查詢)
使用外來鍵作為橋梁連線連個表進行查詢。笛卡爾積select e.fname,e.lname,d.name from employee e join department d 在from子句中包含了兩個表,並使用join關鍵字隔開。當查詢中沒有指定兩個表如何連線時會產生笛卡爾積,即兩張表的所有置換 1...
sql語句的多表查詢方式
例如 按照 department id 查詢 employees 員工表 和 departments 部門表 的資訊。方式一 通用型 select from where select e.last name,e.department id,d.department name from employe...
SQL 語句之Join複習
left join 左聯接 返回包括左表中的所有記錄和右表中聯結字段相等的記錄 right join 右聯接 返回包括右表中的所有記錄和左表中聯結字段相等的記錄 inner join 等值連線 只返回兩個表中聯結字段相等的行 a表 id姓名1張三 2李四3王五 b表 id成績190 270480 s...