pre:以前總是不喜歡記這些概念和具體的用法,總是用的時候去找度娘或谷哥,直到面試的時候問到這些,才覺得有必要做做筆記,便於回憶。
連線的分類
1、內連線;
包括自然連線和等值連線;
2、外連線;
包括左外連線、右外連線和全連線;
3、交叉連線;
也稱作笛卡爾積;
建表:drop table if exists `student`;
create table `student` (
`id` int(10) not null auto_increment,
`name` varchar(20) default null,
`gender` varchar(10) default null,
`age` int(10) default null,
`classid` int(10) default null,
primary key (`id`)
) engine=innodb auto_increment=5 default charset=utf8;
drop table if exists `class`;
create table `class` (
`id` int(10) not null auto_increment,
`name` varchar(20) default null,
primary key (`id`)
) engine=innodb default charset=utf8;
插入測試資料:
1、內連線
內連線使用比較運算子根據每個表共有的列的值匹配兩個表中的行。
其中,自然連線和等值連線的區別:自然連線(naturaljoin)是一種特殊的等值連線,它要求兩個關係中進行比較的分量必須是相同的屬性組,並且在結果中把重複的屬性列去掉。而等值連線並不去掉重複的屬性列。
上面語句的執行結果與下面語句的執行結果相同,而且下面的語句平時用得更多:
2、外連線
2.1左外連線
左外連線的結果集包括left(outer)join子句中指定左表的所有行,而不僅僅是連線列所匹配的行。如果左表的某行在右表中沒有匹配行,則在關聯的結果集行中右表的所有選擇列表列均為空值。
2.2右外連線
右外連線是左外連線的反向連線。將返回右表的所有行。如果右表的某行在左表中沒有匹配行,則將左表的行為空值。
2.3全連線
完整外部連線返回左表和右表中的所有行。當某行在另乙個表中沒有匹配行時,則另乙個表的選擇列表列包含空值。如果表之間有匹配行,則整個結果集行包含基表的資料值。
select * from student full join class on student.classid=class.id order by student.id;(mysql中不支援全連線)
3、交叉連線
交叉連線返回左表中的所有行,左表中的每一行與右表中的所有行組合。交叉連線也稱作笛卡爾積。 cross join 不帶條件where。
sql怎麼使用外連線
表3的姓名中應該包括所有出現在表1和表2姓名中的記錄,如果某人在表1中沒出現,則相當於創收為0 同樣如果某人在表2中沒出現,則相當於花費為0.再舉例table1 姓名 創收 a 2000 c 300 a 200 table2 姓名 花費 a 400 b 20 d 200 現在想得到乙個綜合結果,如下...
sql表連線查詢使用方法 sql多表連線查詢
實際的專案,存在多張表的關聯關係。不可能在一張表裡面就能檢索出所有資料。如果沒有表連線的話,那麼我們就需要非常多的操作。比如需要從a表找出限制性的條件來從b表中檢索資料。不但需要分多表來操作,而且效率也不高。比如書中的例子 複製 如下 select fid from t customer where...
sql中的連線
一般基於 ansi 標準的 sql 列出了五種 join 方式 內連線 inner join 全外連線 full outer join full join 左外連線 left outer join left join 右外連線 right outer join right join 交叉連線 cro...