溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

MySQL的查詢操作

發(fā)布時間:2020-08-11 04:26:12 來源:網(wǎng)絡(luò) 閱讀:560 作者:原生zzy 欄目:MySQL數(shù)據(jù)庫

1. 基礎(chǔ)的查詢操作

#簡單查詢
select * from emp;   //查詢emp中所有的記錄
select empno, job,ename from emp;  //查詢emp表中的某些字段
select ename as 名字 from emp;   //使用字段別名

去重 distinct

select distinct deotno from emp; //去除重復(fù)的行(針對字段而言)

排序 order by

#默認(rèn)是升序(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:運算符的優(yōu)先級:算術(shù)>連接>比較>邏輯

分組查詢(group by)
描述:將表中的數(shù)據(jù)分成若干個小組
語法:select 字段 from where 條件 group by 字段 order by 字段

#例:
select 字段 from where 條件 group by 字段 order by 字段
ps:在group  by 分組,select 子句,不能寫group by沒有的字段。除非這些字段用在聚合函數(shù)中

過濾 having
描述:過濾分組之后的結(jié)果,只能出現(xiàn)在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;

執(zhí)行過程: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. 內(nèi)連接與外連接

(1)內(nèi)連接:

#語法:
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中填入,兩張表中字段名稱相同的字段,而且通用列字段只出現(xiàn)一次(即去除重復(fù)的字段)
內(nèi)連接的特點

  • 關(guān)聯(lián)表中都出現(xiàn)的字段值最終才能出現(xiàn)在結(jié)果集中
  • 內(nèi)連接與順序無關(guān)

    (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;    (等值連接)

    外連接的特點

  • 有主從之分,與連接順序有關(guān)
  • 哪一個 是主表,就遍歷哪一個表,然后與從表匹配相應(yīng)的記錄,合并,沒有匹配到的用null填充

3. 子查詢

語法:select 字段 from table where 表達(dá)式 operator (子查詢字段)。
特點:子查詢在主查詢前執(zhí)行一次,主查詢使用子查詢的結(jié)果
使用
? - 單行子查詢:如果使用子查詢的結(jié)果是1行,可以使用比較運算符(> < <>)
? - 多行子查詢:如果使用子查詢的結(jié)果是多行,則 all 、any in
? - exists:select from dept e where exists (select from emp e1 where sal>2000 and e1.deptno=e.deptno)
in和exists的區(qū)別
? - in:先執(zhí)行子查詢,將結(jié)果返回給主查詢,主查詢繼續(xù)執(zhí)行
? - 先執(zhí)行主查詢,將主查詢的值依次在子查詢進(jìn)行匹配,根據(jù)是否匹配返回true或者false,如果是true連接展示,否則不展示。
子查詢和關(guān)聯(lián)查詢的使用時機(jī)
? - 子查詢:查詢條件和結(jié)果放在同一張表中
? - 關(guān)聯(lián)查詢,查詢條件和結(jié)果分布在多張表中

3. 聯(lián)合查詢

關(guān)鍵字:union、union all。
區(qū)別
? - union:會發(fā)生去重
? - union all:不會發(fā)生去重
用法

#例:
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

使用要求:聯(lián)合的結(jié)果集必須一致(兩張表一致,查詢的字段也一致),不然會發(fā)生錯誤。

關(guān)于sql的交集、差集、并集:
MySQL的查詢操作

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI