1. 基礎的查詢操作 #簡單查詢 select * from emp; //查詢emp中所有的記錄 select empno, job,ename from emp; //查詢emp表中的某些字段 select ename as 名字 from emp; //使用字段別名 去重 distinct
select distinct deotno from emp; //去除重復的行(針對字段而言) 排序 order by
#默認是升序(asc),降序(desc) select * from emp order by sal desc; //以工資按降序排序 select * from epm order by sal , deptno //多字段排序 select sal*12 annsal from epm order by annsal //別名排序 條件查詢 where
select * from emp where sal>1000; //工資大于1000的 select * from emp where sal>1000 and sal<2000; select * from emp where sal>5000 or sal<1000 select * from emp where sal<>2500 //工資不等于2500 select * from emp where sal is null //工資不空的 select * from emp where sal>0 or 1=1; //恒等式 ps:運算符的優先級:算術>連接>比較>邏輯
分組查詢(group by) 描述:將表中的數據分成若干個小組 語法:select 字段 from where 條件 group by 字段 order by 字段
#例: select 字段 from where 條件 group by 字段 order by 字段 ps:在group by 分組,select 子句,不能寫group by沒有的字段。除非這些字段用在聚合函數中 過濾 having 描述:過濾分組之后的結果,只能出現在group by 的后面
#例: select deptno , count(1),avg(sal) from emp group by deptno having avg(sal) >2000 select avg(sal) avg_sal,deptno from emp group by deptno having avg_sal>2000; 執行過程:from –where –group by --- having –select ---order by 分頁
#例: select * from emp limit 0 , 5 ; //從第1行開始取,取5行 模糊查詢
例: select * from emp where ename like 's%' ps: %:表示0~多個任意字符 _:表示1個任意字符 2. 內連接與外連接 (1)內連接: #語法: select table1.column,table2.column from table1,table2 where table1.column= table2.column select dept.DEPTNO,ename ,dname from emp inner join dept on emp.DEPTNO =dept.DEPTNO select emp.ename,dept.dname from emp inner join dept using(deptno) 注意:一般的如果兩張表示通過外鍵連接的,使用第1,2種查詢方法,如果不是外鍵連接的使用1種查詢方法。第3中方式的using中填入,兩張表中字段名稱相同的字段,而且通用列字段只出現一次(即去除重復的字段) 內連接的特點:
關聯表中都出現的字段值最終才能出現在結果集中 內連接與順序無關 (2)外連接: 左外連接 描述:兩個表在連接的過程中除了返回滿足條件的行以外,還返回左表中不滿足條件的行,這種連接叫左外連接。 #例: select deptno ,dname,empno,ename from dept left join emp using(deptno) //左外連接 右外連接 描述:兩個表在連接的過程中除了返回滿足條件的行以外,還返回右表中不滿足條件的行,這種連接叫右外連接。 #例: select deptno ,dname,empno,ename from dept right join emp using(deptno) //右外連接 全外連接 描述:兩個表在連接的過程中除了返回滿足條件的行以外,還返回兩個表中不滿足條件的行,這種連接叫做全外連接。(笛卡爾積) #例: select deptno ,dname,empno,ename from dept full join emp using(deptno) //全外連接 自然連接 描述:特殊的等值連接:不需要聲明相等的字段,會自動匹配 #例: select * from emp natural join dept; (等值連接) 外連接的特點 有主從之分,與連接順序有關 哪一個 是主表,就遍歷哪一個表,然后與從表匹配相應的記錄,合并,沒有匹配到的用null填充 3. 子查詢 語法:select 字段 from table where 表達式 operator (子查詢字段)。 特點:子查詢在主查詢前執行一次,主查詢使用子查詢的結果 使用: - 單行子查詢:如果使用子查詢的結果是1行,可以使用比較運算符(> < <>) - 多行子查詢:如果使用子查詢的結果是多行,則 all 、any in - exists:select from dept e where exists (select from emp e1 where sal>2000 and e1.deptno=e.deptno) in和exists的區別: - in:先執行子查詢,將結果返回給主查詢,主查詢繼續執行 - 先執行主查詢,將主查詢的值依次在子查詢進行匹配,根據是否匹配返回true或者false,如果是true連接展示,否則不展示。 子查詢和關聯查詢的使用時機 - 子查詢:查詢條件和結果放在同一張表中 - 關聯查詢,查詢條件和結果分布在多張表中
3. 聯合查詢 關鍵字:union、union all。 區別: - union:會發生去重 - union all:不會發生去重 用法:
#例: select * from emp where sal>2000 union select * from emp where deptno>20 select * from emp where sal>2000 union all select * from emp where deptno>20 使用要求:聯合的結果集必須一致(兩張表一致,查詢的字段也一致),不然會發生錯誤。 |
免責聲明:本站部分文章和圖片均來自用戶投稿和網絡收集,旨在傳播知識,文章和圖片版權歸原作者及原出處所有,僅供學習與參考,請勿用于商業用途,如果損害了您的權利,請聯系我們及時修正或刪除。謝謝!
始終以前瞻性的眼光聚焦站長、創業、互聯網等領域,為您提供最新最全的互聯網資訊,幫助站長轉型升級,為互聯網創業者提供更加優質的創業信息和品牌營銷服務,與站長一起進步!讓互聯網創業者不再孤獨!
掃一掃,關注站長網微信