1、算术运算符
#一、算术运算符 #+,-,*,/(div),%(mod) #筛选出eid是偶数的员工 SELECT * FROM t_employee WHERE eid % 2 = 0; SELECT * FROM t_employee WHERE eid MOD 2 = 0;
#查看每天的基本工资值,每个月按22天算 SELECT eid,basic_salary/12 AS “日薪” FROM t_salary;
#div也表示除,但是只保留整数部分 SELECT eid,basic_salary DIV 12 AS “日薪” FROM t_salary;
#关于+,在Java中,+的左右两边如果有字符串,那么表示字符串的拼接,但是在MySQL中+只表示数值相加, #如果遇到非数值类型,先尝试转成数值,如果转失败,就按0计算 SELECT eid+ename FROM t_employee; SELECT eid+birthday FROM t_employee;
#MySQL中字符串拼接要使用字符串函数实现 SELECT CONCAT(eid,”:”,ename) AS result FROM t_employee; |
2、比较运算符
#二、比较运算符 #=,>, <,>=, <=, !=(不等于<>),<=>(安全等于) #查询basic_salary!=10000 SELECT eid,basic_salary FROM t_salary WHERE basic_salary != 10000; SELECT eid,basic_salary FROM t_salary WHERE basic_salary <> 10000;
#查询basic_salary=10000,注意在Java中比较是== SELECT eid,basic_salary FROM t_salary WHERE basic_salary = 10000;
#查询commission_pct等于0.40 SELECT eid,commission_pct FROM t_salary WHERE commission_pct = 0.40; SELECT eid,commission_pct FROM t_salary WHERE commission_pct <=> 0.40;
#查询commission_pct等于NULL SELECT eid,commission_pct FROM t_salary WHERE commission_pct IS NULL; SELECT eid,commission_pct FROM t_salary WHERE commission_pct <=> NULL;
#查询commission_pct不等于NULL SELECT eid,commission_pct FROM t_salary WHERE commission_pct IS NOT NULL; SELECT eid,commission_pct FROM t_salary WHERE NOT commission_pct <=> NULL; |
3、逻辑运算符
#三、逻辑运算符 #与&&,或||,非! #与 AND,或 OR ,非 NOT,异或 XOR
#查询性别男,并且在90以前出生的员工 SELECT * FROM t_employee WHERE gender=’男’ AND birthday<‘1990-01-01’;
#查询职位编号job_id是1或2的员工 SELECT * FROM t_employee WHERE job_id =1 OR job_id = 2;
#查询基本薪资是在9000-12000之间的员工编号和基本薪资 SELECT eid,basic_salary FROM t_salary WHERE basic_salary >=9000 AND basic_salary<=12000;
#查询基本薪资不在9000-12000之间的员工编号和基本薪资 SELECT eid,basic_salary FROM t_salary WHERE NOT (basic_salary >=9000 AND basic_salary<=12000); SELECT eid,basic_salary FROM t_salary WHERE basic_salary <9000 OR basic_salary>12000;
|
4、范围和集合
#四、表示区间范围和集合范围 #between … and … 和 not between … and … #in(集合) 和 not in(…)
#查询基本薪资是在9000-12000之间的员工编号和基本薪资 SELECT eid,basic_salary FROM t_salary WHERE basic_salary BETWEEN 9000 AND 12000;
#查询eid是1,3,5的基本工资 SELECT eid,basic_salary FROM t_salary WHERE eid IN (1,3,5); |
5、模糊查询
#五、模糊查询 #like 和 通配符 一起使用 #like _ 匹配单个字符 #like % 匹配任意个字符
#查询名字中有’冰’字的员工信息 SELECT * FROM t_employee WHERE ename LIKE ‘%冰%’;
#查询姓李的员工信息 SELECT * FROM t_employee WHERE ename LIKE ‘李%’;
#查询姓李,名字就一个字的员工信息 SELECT * FROM t_employee WHERE ename LIKE ‘李_’;
#查询李冰冰的信息 SELECT * FROM t_employee WHERE ename LIKE ‘李冰冰’; |
通常情况,可以使用FIND_IN_SET()函数或LIKE操作符搜索SET值:
mysql> SELECT * FROM tbl_name WHERE FIND_IN_SET(‘value’,set_col)>0;
mysql> SELECT * FROM tbl_name WHERE set_col LIKE ‘%value%’;
第1个语句找出SET_col包含value set成员的行。第2个类似,但有所不同:它在其它地方找出set_col包含value的行,甚至是在另一个SET成员的子字符串中。
下面的语句也是合法的:
mysql> SELECT * FROM tbl_name WHERE set_col & 1;
mysql> SELECT * FROM tbl_name WHERE set_col = ‘val1,val2’;
第1个语句寻找包含第1个set成员的值。第2个语句寻找一个确切匹配的值。应注意第2类的比较。将set值与’val1,val2’比较返回的结果与同’val2,val1’比较返回的结果不同。指定值时的顺序应与在列定义中所列的顺序相同。
如果想要为SET列确定所有可能的值,使用SHOW COLUMNS FROM tbl_name LIKE set_col并解析输出中第2列的SET定义。 有什么实际应用呢?
比如我们设定用户的权限控制,一个用户可能会有多种权限,我们使用所有权限创建一个SET类型的字段,我们不需要用一系列int来定义各种权限了,直接使用一个SET字段即可:
/* 用户权限permission表 */ create table user_permission( id int UNSIGNED not null auto_increment, user_id int not null , permission set(‘阅读’,’评论’,’发帖’) not null, primary key(id), unique (user_id) ); desc user_permission; insert into user_permission values (0,1,’阅读’),(0,2,’阅读’),(0,3,’阅读,评论’); insert into user_permission values (0,4,’阅读,评论,发帖’); select *,permission+0 from user_permission; select permission from user_permission where user_id=1; select * from user_permission where permission & 10; SELECT * FROM user_permission WHERE FIND_IN_SET(‘评论’,permission)>0; |
6、NULL值判断与计算处理
#NULL值判断与处理 #查询奖金百分比不为空的员工编号 SELECT eid,commission_pct FROM t_salary WHERE commission_pct IS NOT NULL;
#查询奖金百分比为空的员工编号 SELECT eid,commission_pct FROM t_salary WHERE commission_pct IS NULL;
#关于null值计算 #所有运算符遇到null都是null
#计算实际的薪资: basic_salary + salary * 奖金百分比 #函数:IFNULL(表达式,用什么值代替) SELECT eid,basic_salary + performance_salary *(1+ commission_pct) FROM t_salary;#错误的 SELECT eid,basic_salary + performance_salary *(1+ IFNULL(commission_pct,0)) FROM t_salary;
#<=>安全等于 #查询奖金百分比为空的员工编号 SELECT eid,commission_pct FROM t_salary WHERE commission_pct <=> NULL;
|
7、位运算符
#七、位运算符 #>> << & | ~ ^(异或) SELECT 2^3,2&3,2|3,2>>3,2<<3,~3; |
上一篇: Java培训课程之数据查询
下一篇: web前端面试题汇总