現在的登錄都是把信息存在數據庫,然后把輸入的與數據庫內容進行匹配,一樣就登錄成功,否則不成功。驗證碼是為了防止暴力破解,因為計算機能夠自動匹配密碼,但是不能識別圖片上的字母,只有人能識別,所以匹配的速度會減慢。還有的會記錄登錄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)
