国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

MySQL的查詢操作

2024-07-24 12:31:24
字體:
來源:轉載
供稿:網友
        MySQL的查詢操作:

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
使用要求:聯合的結果集必須一致(兩張表一致,查詢的字段也一致),不然會發生錯誤。

(編輯:武林網)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 县级市| 迁安市| 象州县| 罗江县| 宿州市| 崇信县| 清丰县| 恭城| 松溪县| 武定县| 普陀区| 商城县| 罗江县| 铅山县| 秭归县| 岐山县| 西和县| 眉山市| 武陟县| 洮南市| 昂仁县| 新蔡县| 区。| 武平县| 彭泽县| 儋州市| 海伦市| 灵寿县| 文成县| 鄄城县| 常宁市| 绥化市| 磐安县| 石林| 景泰县| 即墨市| 泽普县| 鄯善县| 兰州市| 定结县| 富宁县|