您的当前位置:首页正文

sql语句之where子句

2020-03-04 来源:爱站旅游
导读sql语句之where子句
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)

因篇幅问题不能全部显示,请点此查看更多更全内容