MySQL 基礎 (三) 表聯結

2021-09-11 18:39:28 字數 3677 閱讀 9977

3.聯結方式的區別和聯絡

4.例項

別名(alias)是乙個欄位或值的替換名,別名用as關鍵字賦予,mysql支援列別名,計算字段別名,表別名。使用別名可以縮短sql語句並在一條語句中多次使用相同的表。

select column_name as alias from table_name; 

select column_name from table_name as alias;

將資料分解為多個錶能更有效地儲存,更方便地處理,並且可伸縮性更好,聯結是一種機制,用來在一條 select語句中關聯表,因此稱為聯結。

等值聯結( equijoin)結也稱為內聯結(inner join)基於兩個表之間的相

等條件,有兩種形式,返回兩個表中column列值相等的資料行。

select t1.column1,t2.column2 from t1,t2 where t1.column = t2.column;

select t1.column1,t2.column2 from t1 inner join t2 on t1.column=t2.column;

左聯結和右聯結,分別返回左邊/右邊表的所有行和聯結後的關聯行

select t1.column1,t2.column2 from t1 left outer join t2 on t1.column1=t2.column1;

select t1.column1,t2.column2 from t1 right outer join t2 on t1.column1=t2.column1;

由沒有聯結條件的表關係返回的結果為笛卡兒積(cartesian product),也稱叉聯結(cross join)。檢索出的行的數目將是第乙個表中的行數乘以第二個表中的行數。

select column1,column2 from table1,table2;
自聯結,利用別名聯結同乙個表。

select t1.c1,t1.c2,t1.c3 from table1 as t1,table1 as t2

where t1.c1=t2.c1 and t2.c3=something;

組合查詢用於執行多條select語句並將結果作為乙個結果集返回,又稱並(union)查詢或復合查詢(compound query),主要應用於:

在乙個查詢中從不同的表返回結構資料;

對乙個表執行多個查詢,按乙個查詢返回資料。

select * from t1

union

select * from t2

有以下使用規則:

union必須由兩條或兩條以上的 select語句組成,語句之間用關鍵字union分隔(因此,如果組合四條select語句,將要使用三個union關鍵字)。

union中的每個查詢必須包含相同的列、表示式或聚集函式(不過,各個列不需要以相同的次序列出)。

列資料型別必須相容:型別不必完全相同,但必須是 dbms可以隱含轉換的型別(例如,不同的數值型別或不同的日期型別)。

union返回滿足所有查詢的行,如果需要返回滿足聯結其中任一查詢的所行,需要使用union all。

在資料庫中建立表1和表2,並各插入三行資料, 表1: person

列名型別

personid

intfirstname

varchar

lastname

varchar

personid 是上表主鍵

表2: address

列名型別

addressid

intpersonid

intcity

varchar

state

varchar

addressid 是上表主鍵

**:

create table if not exists person(

personid int not null,

firstname varchar(20) not null,

lastname varchar(20) not null,

primary key(personid)

);create table if not exists address(

addressid int not null,

personid int not null,

city varchar(20) ,

state varchar(20) ,

primary key(addressid)

);insert into person

values

(1,"li","ming"),(2,"wu","qian"),(3,"su","ping");

insert into address

values

(1,1,"nan tong","jiang su"),(2,2,"wu xi","jiang su"),(3,3,null,null);

#查詢語句

select firstname,lastname,city,state

from person left outer join address

on person.personid=address.personid;

結果:

編寫乙個 sql 查詢,來刪除 email 表中所有重複的電子郵箱,重複的郵箱裡只保留 id 最小 的那個。

idemail

[email protected]

[email protected]

[email protected]

id 是這個表的主鍵。 例如,在執行你的查詢語句之後,上面的 email表應返回以下幾行:

idemail

[email protected]

[email protected]

**:

create table if not exists email ( 

id int primary key,

email varchar (20) not null );

insert into email values (1, "[email protected]");

insert into email values (2, "[email protected]");

insert into email values (3, "[email protected]");

#查詢語句

delete t1 from email as t1, email as t2

where t1.email = t2.email

and t1.id > t2.id;

select * from email;

結果:

MySQL基礎(三) 表聯結

inner join 內連線,或等值連線 取得兩個表中存在連線匹配關係的記錄。取得左表 table1 完全記錄,即是右表 table2 並無對應匹配記錄。交叉連線,得到的結果是兩個表的乘積,即笛卡爾積 在資料庫中建立表1和表2,並各插入三行資料 表1 person 列名型別 personid int...

MySQL 基礎 (三) 表聯結

一 mysql別名 使用mysql別名來提高查詢的可讀性。mysql支援兩種別名,稱為列別名和表別名。1.表別名 有時,列的名稱是一些表示式,使查詢的輸出很難理解。要給列乙個描述性名稱,可以使用列別名。用法 如果別名包含空格,則必須引用 select column 1 expression as d...

MySQL 基礎 (三) 表聯結

組合兩張表 難度 簡單 在資料庫中建立表一和表二,並插入三行資料 自己造 編寫乙個sql查詢,滿足條件 無論person是否有位址資訊,都要基於上述兩表提供的person的以下資訊 firstname,lastname,city,state 表1 person 其中personid是主鍵 列名 型別...