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
id 是這個表的主鍵。 例如,在執行你的查詢語句之後,上面的 email表應返回以下幾行:
idemail
**:
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是主鍵 列名 型別...