文章目录

  • 第三章 MySQL数据类型和运算符
  • 3.1 MySQL数据类型
  • 3.2 MySQL运算符


第三章 MySQL数据类型和运算符

3.1 MySQL数据类型

整型系列:xxxInt

int(M),必须和unsigned zerofill一起使用才有意义

mysql舍去sum小数点_MySQL

浮点型系列:float,double

double(M,D):表示最长为M位,其中小数点后D位

例如:double(5,2)表示的数据范围[-999.99,999.99],如果超过这个范围会报错。

定点型系列:decimal

decimal(M,D):表示最长为M位,其中小数点后D位

字符串类型:char,varchar(M),text

char如果没有指定宽度,默认为1个字符

varchar(M),必须指定宽度

日期时间类型:year, date, datetime, timestamp

注意一下每一种日期时间的表示范围

mysql舍去sum小数点_运算符_02

其他类型:bit, xxBlob, 枚举,集合等

+----------------+--------------+------+-----+---------+----------------+
| Field          | Type         | Null | Key | Default | Extra          |
+----------------+--------------+------+-----+---------+----------------+
| eid            | int(11)      | NO   | PRI | NULL    | auto_increment |
| ename          | varchar(20)  | NO   |     | NULL    |                |
| tel            | char(11)     | NO   |     | NULL    |                |
| gender         | char(1)      | YES  |     | 男        |                |
| salary         | double       | YES  |     | NULL    |                |
| commission_pct | double(3,2)  | YES  |     | NULL    |                |
| birthday       | date         | YES  |     | NULL    |                |
| hiredate       | date         | YES  |     | NULL    |                |
| job_id         | int(11)      | YES  |     | NULL    |                |
| email          | varchar(32)  | YES  |     | NULL    |                |
| mid            | int(11)      | YES  |     | NULL    |                |
| address        | varchar(150) | YES  |     | NULL    |                |
| native_place   | varchar(10)  | YES  |     | NULL    |                |
| did            | int(11)      | YES  |     | NULL    |                |
+----------------+--------------+------+-----+---------+----------------+

3.2 MySQL运算符

1、算术运算符

加:+
减:-
乘:*
除:/   div(只保留整数部分)
模:%   mod

2、比较运算符

大于:>
小于:<
大于等于:>=
小于等于:>=
等于:=   不能用于null判断
不等于:!=  或 <>
安全等于:<=>  可以用于null值判断

3、逻辑运算符(建议用单词,可读性来说)

逻辑与:&& 或 and
逻辑或:|| 或 or
逻辑非:! 或 not
逻辑异或:^ 或 xor

4、范围

区间范围:between x  and  y
	    not between x  and  y
集合范围:in (x,x,x)
	    not  in(x,x,x)

5、模糊查询(只针对字符串类型,日期类型)

like 'xxx'
如果想要表示0~n个字符,用%
如果想要表示确定的1个字符,用_

6、位运算符(很少使用)

左移:<<
右移:>>
按位与:&
按位或:|
按位异或:^

7、特殊的null值处理

#(1)判断时
    xx is null
    xx is not null
    xx <=> null
    
    #(2)计算时
    ifnull(xx,代替值)  当xx是null时,用代替值计算
/*一、运算符
1、算术运算符
+:加
-:减
*:乘
/:除   可以保留小数部分
div:除  如果整数与整数相除只保留整数部分
%:求余数
mod:求余数
*/
select 1+1;
select 1/2; #0.5
select 1 div 2; #0

/*
2、比较运算符
>:大于
<:小于
=:等于  注意区别,Java中是==,mysql中是=
>=:大于等于
<=:小于等于
!=:不等于
<>:不等于
<=>:安全等于  用于判断null值的比较运算符
		null值的判断,习惯上我们用is null 和is not null
*/
#查询薪资大于20000元的员工
select * from t_employee where salary > 20000;

#查询所有男员工
select * from t_employee where gender = '男';
select * from t_employee where gender != '女';
select * from t_employee where gender <> '女';

#查询奖金比例commision_pct是null的员工
select  * from t_employee where commission_pct <=> null;
select  * from t_employee where commission_pct is null;

/*
3、逻辑运算符
&&和and:逻辑与
	两个条件同时满足
||和or:逻辑或
	两个条件满足任意一个
^和xor:逻辑异或
	两个条件只能满足其中一个
!和not:
	不满足xx条件
	*/
#查询薪资大于20000元的女员工	
select * from t_employee where salary > 20000 && gender = '女';
select * from t_employee where salary > 20000 and gender = '女';

#查询男员工
select * from t_employee where not gender = '女';
select * from t_employee where !(gender = '女');

#查询薪资大于10000  异或 性别是男的,即它俩只能满足一个
#即查询薪资大于10000的女的或薪资低于10000的男的
select * from t_employee where salary>10000 ^ gender ='男';
select * from t_employee where salary>10000 xor gender ='男';
/*
4、范围
(1)区间范围:
	在[a,b]之间,between a and b
	不在[a,b]之间,not between a and b
(2)集合范围
	in(...)
	not in(...)
*/
#查询薪资在[15000,20000]之间的员工
select * from t_employee where salary between 15000 and 20000;
select * from t_employee where salary >= 15000 and salary <=20000;

#查询薪资在9000,10000,12000
select * from t_employee where salary in(9000,10000,12000);
select * from t_employee where salary =9000 || salary =10000 || salary =12000;
 /*
5、模糊查询
like '%x%' x代表确定的字符 %表示不确定的0~n个字符
     '_x%'  x代表确定的字符 _表示确定的1个字符
*/
#查询,名字ename中包含“冰”这个字的员工
select * from t_employee where ename like '%冰%';

#查询,名字ename是张xx,三个字
select * from t_employee where ename like '张__';

#查询,名字ename是第二个字是'冰'
select * from t_employee where ename like '_冰%';