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)?
轉載于:https://www.cnblogs.com/cjaaron/p/9205351.html
總結
以上是生活随笔為你收集整理的sql语句之where子句的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于Docker + Consul +
- 下一篇: Android Studio中mac上面