複習之SQL語句(二) 常用多表查詢語句使用

2021-08-28 16:41:54 字數 3614 閱讀 6402

有些時候資料在不同的表中,這個時候我們就需要用到多表聯查

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...