MySQL 基礎 (三) 表聯結

2021-09-11 18:53:24 字數 3830 閱讀 5993

一、mysql別名

使用mysql別名來提高查詢的可讀性。

mysql支援兩種別名,稱為列別名和表別名。

1.表別名

有時,列的名稱是一些表示式,使查詢的輸出很難理解。要給列乙個描述性名稱,可以使用列別名。

用法:如果別名包含空格,則必須引用:

select

[column_1 | expression] [as] 『descriptive name』 #因為as關鍵字是可選的,可以在語句中省略它。

from table_name;

2.列別名

查詢選擇員工的名字和姓氏,並將其組合起來生成全名。 concat_ws函式用於連線名字和姓氏。

select

concat_ws(』, ', lastname, firstname) [as] 『full name』

from

employees;

二、inner join

滿足on條件表示式,內連線是取滿足條件表示式的兩個表的交集(即兩個表都有的資料)

select column_name(s)

from table_name1

inner join table_name2

on table_name1.column_name=table_name2.column_name

三、left join

滿足on條件表示式,左外連線是以左表為準,返回左表所有的資料,與右表匹配的則有值,沒有匹配的則以空(null)取代。

select column_name(s)

from table_name1

left join table_name2

on table_name1.column_name=table_name2.column_name

四、cross join

cross join又稱為笛卡爾乘積,實際上是把兩個表乘起來。

select * from [table 1] cross join [table 2]

五、自連線

select * from student s1,student s2

where s1.s_height=s2.s_height

and s1.s_stuno<>s2.s_stuno

六、union

請注意,union 內部的 select 語句必須擁有相同數量的列。列也必須擁有相似的資料型別。同時,每條 select 語句中的列的順序必須相同。

sql union 語法

select column_name(s) from table_name1

union

select column_name(s) from table_name2

作業專案五:組合兩張表 (難度:簡單)

在資料庫中建立表1和表2,並各插入三行資料(自己造)

表1: person

±------------±--------+

| 列名 | 型別 |

±------------±--------+

| personid | int |

| firstname | varchar |

| lastname | varchar |

±------------±--------+

personid 是上表主鍵

表2: address

±------------±--------+

| 列名 | 型別 |

±------------±--------+

| addressid | int |

| personid | int |

| city | varchar |

| state | varchar |

±------------±--------+

addressid 是上表主鍵

編寫乙個 sql 查詢,滿足條件:無論 person 是否有位址資訊,都需要基於上述兩表提供 person 的以下資訊:firstname, lastname, city, state

建立**:

create table person(

personid int primary key,

firstname varchar(20) not null,

secondname varchar(20) not null

);insert into person values(1,『zhang』,『san』);

insert into person values(2,『li』,『si』);

insert into person values(3,『wang』,『wu』);

create table address(

addressid int primary key,

personid int,

city varchar(20),

state varchar(20)

);insert into address values(1,2,『haidian』,『beijing』);

insert into address values(2,1,『dongcheng』,『beijing』);

insert into address values(3,3,『taiyuan』,『shanxi』);

insert into address values(4,4,『baoding』,『heibei』);

**為:

select p.firstname,p.secondname,a.city,a.state from person p left join

address a on p.personid=a.personid;

執行結果為:

專案六:刪除重複的郵箱(難度:簡單)

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

±—±--------+

| id | email |

±—±--------+

| 1 | [email protected] |

| 2 | [email protected] |

| 3 | [email protected] |

±—±--------+

id 是這個表的主鍵。

例如,在執行你的查詢語句之後,上面的 email表應返回以下幾行:

±—±-----------------+

| id | email |

±—±-----------------+

| 1 | [email protected] |

| 2 | [email protected] |

±—±-----------------+

建立表create table email(

id int primary key,

email varchar(50) not null

);– 插入資料

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

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

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

**為:

delete e1

from email e1,email e2

where e1.email =e2.email

and e1.id>e2.id;

select * from email;

結果為:

MySQL 基礎 (三) 表聯結

3.聯結方式的區別和聯絡 4.例項 別名 alias 是乙個欄位或值的替換名,別名用as關鍵字賦予,mysql支援列別名,計算字段別名,表別名。使用別名可以縮短sql語句並在一條語句中多次使用相同的表。select column name as alias from table name selec...

MySQL基礎(三) 表聯結

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

MySQL 基礎 (三) 表聯結

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