• <nav id="wkkge"><strong id="wkkge"></strong></nav>
  • <menu id="wkkge"></menu>
  • MySQL數據庫概述及數據準備
    MySQL數據庫常用命令
    MySQL數據庫查看表結構
    MySQL查詢字段
    MySQL條件查詢
    MySQL排序
    MySQL函數
    MySQL分組函數/聚合函數/多行處理函數
    MySQL分組查詢
    MySQL連接查詢
    MySQL子查詢
    MySQL UNION
    MySQL中limit的用法
    MySQL表
    MySQL存儲引擎
    MySQL事務
    MySQL索引
    MySQL視圖
    MySQL DBA命令
    MySQL數據庫設計的三大范式
    MySQL數據庫練習題

    MySQL條件查詢

     

     

    條件查詢需要用到where語句,where必須放到from語句表的后面。

     

    支持如下運算符:

     

    運算符

    說明

    =

    等于

    <>或!=

    不等于

    <

    小于

    <=

    小于等于

    >

    大于

    >=

    大于等于

    between … and ….

    兩個值之間,等同于 >= and <=

    is null

    為null(is not null 不為空)

    and

    并且

    or

    或者

    in

    包含,相當于多個or(not in不在這個范圍中)

    not

    not可以取非,主要用在is 或in中

    like

    like稱為模糊查詢,支持%或下劃線匹配

    %匹配任意個字符

    下劃線,一個下劃線只匹配一個字符

     

     

     

    等號操作符

     

    ● 查詢薪水為5000的員工

     

    select empno, ename, sal from emp where sal=5000;

     

     

    ● 查詢job為MANAGER的員工

     

    select empno, ename from emp where job=manager;

     

     

    以上查詢出現錯誤,因為job為字符串,所以出現了以上錯誤

     

    select empno, ename from emp where job="manager";

     

     

    select empno, ename from emp where job=’manager’;

     

     

    也可以使用單引號

     

    select empno, ename from emp where job='MANAGER';

     

     

    以上輸出正確,Mysql默認情況下大小寫是不敏感的。

     

    注意:

     

    MySQL在windows下是不區分大小寫的,將script文件導入MySQL后表名也會自動轉化為小寫,結果再 想要將數據庫導出放到linux服務器中使用時就出錯了。因為在linux下表名區分大小寫而找不到表,查了很多都是說在linux下更改MySQL的設置使其也不區分大小寫,但是有沒有辦法反過來讓windows 下大小寫敏感呢。其實方法是一樣的,相應的更改windows中MySQL的設置就行了。

     

    具體操作:

     

    在MySQL的配置文件my.ini中增加一行:

     

    lower_case_table_names = 0;

     

    其中 0:區分大小寫,1:不區分大小寫;

     

    MySQL在Linux下數據庫名、表名、列名、別名大小寫規則是這樣的:

     

    ● 數據庫名與表名是嚴格區分大小寫的

     

    ● 表的別名是嚴格區分大小寫的

     

    ● 列名與列的別名在所有的情況下均是忽略大小寫的

     

    變量名也是嚴格區分大小寫的;   

     

    ● MySQL在Windows下都不區分大小寫

     

     

    <>操作符

     

    ● 查詢薪水不等于5000的員工

     

    select empno, ename, sal from emp where sal <> 5000;

     

     

    以下寫法等同于以上寫法,建議使用第一種寫法;

     

    select empno, ename, sal from emp where sal != 5000;

     

    數值也可以采用單引號引起來,如一下語句是正確的(不建議這么寫):

     

    select empno, ename, sal from emp where sal <> '5000';

     

    ● 查詢工作崗位不等于MANAGER的員工

     

    select empno, ename, sal from emp where sal <> '5000';

     

     

    between … and …操作符

     

    ● 查詢薪水為1600到3000的員工(第一種方式,采用>=和<=)

     

    select empno, ename, sal from emp where sal >= 1600 and sal <= 3000;

     

     

    ● 查詢薪水為1600到3000的員工(第一種方式,采用between … and …)

     

    select empno, ename, sal from emp where sal between 1600 and 3000;

     

     

    關于between … and …,它是包含最大值和最小值的。

     

     

    is null

     

    ● Null為空,但不是空串,為null可以設置這個字段不填值,如果查詢為null的字段,采用is null。


    ● 查詢津貼為空的員工

     

    select * from emp where comm=null;

     

     

    以上也無法查詢出符合條件的數據,因為null類型比較特殊,必須使用 is來比較。

     

    select * from emp where comm is null

     

     

    以上查詢正確。

     

     

    and

     

    and表示并且的含義,表示所有的條件必須滿足;

     

    工作崗位為MANAGER,薪水大于2500的員工;

     

    select * from emp where job='MANAGER' and sal > 2500;

     

     

     

    or

     

    or,只要滿足條件即可,相當于包含;

     

    查詢出job為manager或者job為salesman的員工;

     

    select * from emp where job='MANAGER' or job='SALESMAN';

     

     

     

    表達式的優先級

     

    ● 查詢薪水大于1800,并且部門代碼為20或30的員工(錯誤的寫法)

     

    select * from emp where sal > 1800 and deptno = 20 or deptno = 30;

     

     

    以上輸出不是預期結果,薪水小于1800的數據也被查詢上來了,原因是表達式的優先級導致的,首先過濾sal > 1800 and deptno = 20,然后再將deptno = 30員工合并過來,所以是不對的。

     

    ● 查詢薪水大于1800,并且部門代碼為20或30的(正確的寫法)

     

    select * from emp where sal > 1800 and (deptno = 20 or deptno = 30);

     

     

    關于運算符的問題:不用記,沒有把握盡量采用括號。

     

     

    in

     

    in表示包含的意思,完全可以采用or來表示,采用in會更簡潔一些。

     

    ● 查詢出job為manager或者job為salesman的員工

     

    select * from emp where job in ('manager','salesman');

     

     

    ● 查詢出薪水包含1600和薪水包含3000的員工

     

    select * from emp where sal in(1600, 3000);

     

     

     

    not

     

    ● 查詢出薪水不包含1600和薪水不包含3000的員工(第一種寫法)

     

    select * from emp where sal <> 1600 and sal <> 3000;

     

     

     

    ● 查詢出薪水不包含1600和薪水不包含3000的員工(第二種寫法)

     

    select * from emp where not (sal = 1600 or sal = 3000);

     

     

    ● 查詢出薪水不包含1600和薪水不包含3000的員工(第三種寫法)

     

    select * from emp where sal not in (1600, 3000);

     

     

    ● 查詢出津貼不為null的所有員工

     

    select * from emp where comm is not null;

     

     

     

    like

     

    Like可以實現模糊查詢,like支持%和下劃線匹配;

     

    ● 查詢姓名以M開頭所有的員工

     

    select * from emp where ename like 'M%';

     

     

    ● 查詢姓名以N結尾的所有的員工

     

    select * from emp where ename like '%N';

     

     

    ● 查詢姓名中包含O的所有的員工

     

    select * from emp where ename like '%O%';

     

     

    ● 查詢姓名中第二個字符為A的所有員工

     

    select * from emp where ename like '_A%';

     

     

    Like中%和下劃線的差別?

     

    ● %匹配任意字符出現的個數

     

    ● 下劃線只匹配一個字符

     

    ● Like 中的表達式必須放到單引號中|雙引號中,以下寫法是錯誤的:

     

    select * from emp where ename like _A%

     

    全部教程
  • <nav id="wkkge"><strong id="wkkge"></strong></nav>
  • <menu id="wkkge"></menu>
  • 面对面棋牌游戏