一、聯結(使用 where(早) 和 join(晚) 都可以完成聯結)
1.1 從 teacher 表和 profession 表中,查詢出老師的名字和所屬專業的名稱。
select t.`l_name`,t.`f_name`,p.`name` from `teacher` as t,`profession` as p where t.`profession_id`=p.`id`;
1.2 內聯結
1.2.1 inner join (內聯結:返回滿足條件得所有行)
內連線,也叫等值連線,inner join 產生同時符合a和b的一組資料。
select t.`l_name`,t.`f_name`,p.`name` from `teacher` as t inner join `profession` as p on t.`profession_id`=p.`id`;
1.2.2 nature join (自然聯結:也是返回滿足條件得所有行)
1.3 外聯結
1.3.1 left join (左聯結:等價於 left outer join)
返回左表中所有的行,如果左表中的行沒有匹配右表中的行,就會返回 null。
1.3.2 right join (右聯結)
與左聯結相反。
1.3.3 full join (全聯結:返回左表右表中所有的行,如果在另乙個表中無匹配,則該錶的行顯示 null)
1.3.4 cross join (交叉聯結:兩個表中所有可能的組合)
cross join:交叉連線,得到的結果是兩個表的乘積,即笛卡爾積
笛卡爾(descartes)乘積又叫直積。
假設集合a=,集合b=,
則兩個集合的笛卡爾積為。
可以擴充套件到多個集合的情況。
類似的例子有,如果a表示某學校學生的集合,b表示該學校所有課程的集合,則a與b的笛卡爾積表示所有可能的選課情況。
1.3.5 union join (聯合聯結:返回只有乙個表有值,另乙個表為空的資料組合。)
實際用的很少,很多 dbms 不支援該查詢。
1.4 自聯結(兩個表都是自己,使用較少)
二、子查詢
查詢條件巢狀的查詢。
三、集合操作(連線兩個查詢語句)
3.1 union 返回兩個查詢的所有行,但是會刪除相同行
如:查詢老師和學生都來自哪些城市。
3.2 intersect 返回兩個查詢所有的共同行
如:查詢哪些城市同時是老師和學生的故鄉。
3.3 except 返回第乙個查詢中存在,但是第二個查詢中不存在的所有行,會刪除相同行。
如:列出所有不是學生家鄉,但是教師的家鄉的城市。
四、索引
在資料庫表中,對欄位建立索引可以大大提高查詢速度。
--選擇資料
select * from test where name="王五";
--建立索引
create index name_index on test(name);
--刪除索引
drop index name_index on test;
MySQL高階 索引優化案例4
1 員工表的建表語句 create table emps id int primary key auto increment,name varchar 20 not null default comment 姓名 age int not null default 0 comment 年齡 pos v...
mysql 4 基礎 mysql 開發基礎系列4
字串型別 1.1 char 和varchar 型別 char 列的長度固定為建立表時宣告的長度,varchar 列中的值為可變長字串。在檢索的時候,char 列刪除了尾部的空格,而varchar 則保留這些空格。在sqlserver裡都是長度2 create table vc v varchar 4...
4 MySql高階之觸發器
1.介紹觸發器是與表有關的資料庫物件,指在insert update delete 之前或之後,觸發並執行觸發器中定義的sql語句集合。觸發器的這種特性可以協助應用在資料庫端確保資料的完整性 日誌記錄 資料校驗等操作 使用別名 old 和 new 來引用觸發器中發生變化的記錄內容,這與其他的資料庫是...