MySQL(四) 基础查询操作-算术、比较和逻辑运算符

MySQL数据库语句根据功能可以分为三类,DDL(data definition language)、DML(data manipulation language)和DCL(data control language)。DDL数据定义类语句,主要是针对库表结构进行的操作,CREATE/DROP/ALTER。DML数据操纵类语句,主要是针对表中数据进行增删查改的,INSERT/DELETE/SELECT/UPDATE,本文重点介绍的就是SELECT,查询操作在数据库的使用中的比重很高。DCL数据控制类语句,主要是确认和取消数据库的数据变更已经一些用户权限相关的操作,COMMIT/ROLLBACK/GRANT/REVOKE。

1.查询基础

1.1 SELECT语句基础

select column_name as COLUMN_NAME from table_name where restrict_clause;
select end_time as Time,accuracy_level as Level from history where end_time >= '2021-03-01';
select distinct end_time as Time,accuracy_level as Level from history where end_time >= '2021-03-01';

以上的语句结构和示例就是由三个子句组成的,select、from和where,分别是指定想要查询的列名column_name,可以用*代替,代表查询所有列,from指定想要查询的表名table_name,where是限制条件语句,这里需要用算术运算符、比较运算符和逻辑运算符。distinct可以除重,这里需要注意的是如果有多个查询列名时,distinct必须在第一个列名之前,这时候distinct除重,是对多个列组合除重,只有各个列的值都完全一样才算重复行。

1.2 算术运算符和比较运算符

算术运算符主要是四则运算"+","-","*","/"加减乘除,这里有个需要注意的是NULL相关的计算,任意和NULL相关的计算结果都是NULL,可以省略from子句进行计算,但是并不是所有RDBMS都允许的,oracle就不存在这种没有from子句的情况。

select softA_coretime+softB_coretime as sum,softB_coretime-softA_coretime as diff from history;
select softA_coretime/softB_coretime as pr,softB_coretime/softA_coretime as ex from history;
select 3+null as sum,3-null as diff,3*null as pr,3/null as ex1,null/0 as ex2;

比较运算符比较简单=(等于)、<>(不等于)、>=(大于等于)、>(大于)、<=(小于等于)、<(小于),这里对数值及时间就行大小比较的时候和我们常规的认识一致,但是用于字符串的比较的时候会出现不一样的情况,在字符串中是按照编码顺序进行比较的,2要比其他1头的数字优先,在一个字符串列中有11 13 123 2这四个数据,执行“where chr > '123'”语句的时候结果是13和2。另一个需要注意的点是NULL不能用于以上符号比较,会报错,用is或者is not。

select chr from chr_test where chr > '121';

1.3 逻辑运算符NOT/AND/OR

select distinct accuracy_level from history where not accuracy_level = 'A';

select accuracy_level,end_time from history where accuracy_level = 'A' and end_time >= '2021-03-01';

select distinct accuracy_level from history where accuracy_level = 'A' or accuracy_level = 'D';

以上为NOT/AND/OR的单独使用,逻辑关系是很简单的数学关系,在进行多重组合的时候需要注意优先顺序,AND的优先级要高于OR,有时候可能会查询出我们不想要的结果,这时候需要用()进行强化,示例如下,我想查询3.9号以后和3.1号以前等级是A的数据,查询结果却出现了B,这是因为条件的逻辑被识别为【accuracy_level= 'A ' and end_time > '2021-03-09'】or 【end_time < '2021-03-01'】,or后面的条件太宽泛了。

select accuracy_level,end_time from history where accuracy_level = 'A' and end_time > '2021-03-09' or end_time < '2021-03-01';

select accuracy_level,end_time from history where accuracy_level = 'A' and (end_time > '2021-03-09' or end_time < '2021-03-01');

AND/OR/NOT的逻辑关系比较简单,就TRUE真和FALSE假两种状态,AND(真真=真,真假=假,假真=假,假假=假),OR(真真=真,真假=真,假真=真,假假=假),NOT(真=假,假=真),这时候如果有NULL参与逻辑计算,就会出现第三个状态UNKOWN不确定,这时候判断结果的复杂度就会大大提升,这就是为什么MySQL在设置表结构的时候建议添加NOT NULL的限制条件原因了,大大降低了查询的复杂度。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇