sql語句之where子句


現在的登錄都是把信息存在數據庫,然后把輸入的與數據庫內容進行匹配,一樣就登錄成功,否則不成功。驗證碼是為了防止暴力破解,因為計算機能夠自動匹配密碼,但是不能識別圖片上的字母,只有人能識別,所以匹配的速度會減慢。還有的會記錄登錄IP,如果IP頻繁變化就會進行提示。還有銀行會限制輸入次數。

作用

限制表中的數據返回  符合where后面的條件的數據就會被選中,不符合where條件的語句會被過濾掉

兩個極限條件

/*這是永真條件*/   (數據庫里可以有注釋,這里是多行注釋)
where  1 = 1 ; (用一個等號判斷相不相等,因為這里是不存在賦值的,沒有“= =”)
- -  這是永假條件(數據庫里可以有注釋,這里是單行注釋,注釋符和注釋之間要有空格)
where  1 = 2 ;

 

演示:列出每個員工的id 和salary   要求顯示符合salary等於1400的員工

select id, salary from s_emp where salary=1400

字符串條件的表達

演示:要求顯示first_name 是Carmen的員工,列出id  first_name salary 

select id, first_name, salary from s_emp where first_name='Carmen'

注意:一定要加’ ‘代表這是字符串值

常見的運算符

= 等於   != 不等於    >大於   < 小於    <= 小於等於   ................

 sql提供的運算符

表達一個閉區間[a , b] 

where  字段  between a  and  b ;  (字段在閉區間a到b內)

a  b的順序不能錯

演示:寫程序查詢,把s_emp表中id  first_name salary  顯示;要求salary在[1450,2500 ] 中。

select id, first_name, salary from s_emp where salary between 1450 and 2500

      注意:不可以把2500和1450調換位置,編譯不會有錯,但邏輯有錯)

where  字段  in(值1,值2,值3)

這個字段的值等於其中的一個值(只要有一個等於就返回), 交換值的順序可能有影響,也可能沒有影響。若值的概率都一樣就沒有影響(就按一個規律寫(比如從小到大),這樣不容易遺漏)。若不一樣,則把概率高的值放在前面(人為的),這樣查詢效率高(因為每個數據都要挨個和給的值比較,只要有一個一樣就返回)

演示:寫一個查詢,把s_emp表中部門標號是31或者32或者50 部門的員工id first_name  dept_id顯示出來

select idm first_name, dept_id from s_emp where dept_id in(31, 32, 50)

 

模糊查詢  like(像)+ 通配符

數據庫里:

    • “%”為通配符,代表0 - n個任意字符
    •  “-”代表一個任意字符

e.g.  李四 李斯  李思  李世民 (查找出姓李的)

Where  name  like  ‘李%’;

e.g.  李小龍 小龍女  龍貓  (查找出所有帶龍的)

Where  name  like  ‘%龍%;
(找出中間帶龍的)where  name like  ‘_龍%’;

演示:查詢s_emp表中first_name,找出所有帶a(小寫a)的

select first_name from s_emp where first_name like '%a%'

 

數據庫中有一張表user_tables(數據字典,存的都是大寫)存了所有表的信息。例如s_emp  s_dept 等

desc user

演示:從user_tables中找出所有以‘S_’開頭的表名

注意:要對‘_’進行轉義處理,用‘\_’表示下划線,再加escape  ‘ \ ’  代表是‘\’ 后面的內容進行轉義處理

select table_name from user_tables where table_name like 'S\_%'

NULL值的判斷

where  字段  is NULL ;

演示:把s_emp表中提成是10的員工的id  first_name commission_pct顯示出來

select id, first_name, commission_pct from s_emp where commission_pct=10

  

演示:把s_emp表中提成不是10的員工的id first_name  commission_pct顯示出來。

select id, first_name, commission_pct from s_emp where commission_pct!=10

按理來說,一共有25人,不為10的人應該是20個的,但是這里只有3個。這是因為,基本的判定對空值是無效的,必須引入is  NULL對控制進行判定所以要:

select id, first_name, commission_pct from s_emp where commoission_pct is NULL

      當然也可以結合nvl,但是用is NULL是標准用法。

條件連接符號

  • and  邏輯與
  • or   邏輯或
  • not  

演示:(1)寫程序查詢,把s_emp表中id  first_name salary  顯示;要求salary在[1450,2500 ] 中。(between 。。。and。。。)

select id, first_name ,salary from s_emp where salary>=1450 and salary<=2500

用這個更加具有通用性,可以是開區間。

(2)寫一個查詢,把s_emp表中部門標號是31或者32或者50 部門的員工id first_name  dept_id顯示出來(5.6.2里的in(。。,。。,。。))

select id, first_name, dept_id from s_emp where dept_id-31 or dept_id-32 or dept_id=50

這里三個都是等價的,不存在順序問題。

  • >  的對立面是  <=
  •  <  的對立面是  >=
  •  =  的對立面是  !=   ^=   < >  (都是不等於)
  •  between a  and  b  的對立面是  not between  a  and  b
  •  in  的對立面是  not  in
  •  like  的對立面是  not like
  •  is  null  的對立面是  is not  null(只有最后一個不用注意空值,上面的都要注意空值)

 演示:找出manager_id不是空的員工,列出id  first_name manager_id

select id, first_name, manager_id from s_emp where manager_id is not null

條件優先的問題  要優先的部分加括號

演示:(1)顯示員工salar  dept_id;

    要求工資大於1000且部門標號為41的員工,或者部門標號為42的員工  

select salary, dept_id from s_emp where salary>1000 and dept_id=41 or dept_id=42

(2)顯示員工salar  dept_id;

       要求部門標號為41的員工,或者為42的員工里工資大於1000的

select salary, dept_id from s_emp where salary>1000 and (dept_id=41 or dept_id=42)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM