我们先把数据表建好
use test; create table `employee`( emp_no int unsigned,emp_name varchar(30),emp_sex varchar(3),emp_age tinyint unsigned,sal double,history datetime ); insert into employee values(1,'张三','男',18,5000,'2012-04-23'),(2,'李四',27,4500,'2013-05-23'),(3,'王五',23,4700,'2012-04-21'),(4,'子龙',19,3800,'2011-03-04'),(5,'李白',15,6200,'2015-09-09'),(6,'刘备',28,2500,'2016-02-11'),(7,'吕布',21,6000,'2010-10-18'),(8,'尚香','女',16,'2011-09-26'),(9,'小乔',null,'2013-07-05'),(10,'大乔','2017-09-01');
常用的运算符:
1: 等于( = )
select * from employee where sal = 3800; select * from employee where sal = null; --这里查询不到为null的数据
2: 等于( <=> )
select * from employee where sal <=> 3800; select * from employee where sal <=> null; --这里可以查询到为null的数据
3: is判断(null)
select * from employee where sal is null; select * from employee where sal is not null;
4: null值判断还可以使用isnull();
select * from employee where isnull(sal); select * from employee where !isnull(sal);
5: 在区间(between)内 between min and max ps:这里是一个闭区间
select * from employee where sal between 4500 and 5000;
6: 不在区间内
select * from employee where sal not between 4500 and 5000;
--null不为包括进去
7: and 和 or
select * from employee where sal not between 4500 and 5000 or sal is null; select * from employee where sal = 4500 and emp_sex = '女';
8: 小于(<),大于(>),小于等于(<=),大于等于(>=)
select * from employee where sal >= 4500;
***************************************************************************************************************
数学函数
1: rand();
select rand() from dual; --dual是一个伪表 select 1+1 from dual; select rand(); --可以简写
2: least(value1,value2,...) 返回最小值
select least(54,76,4,65,87,56,654,45,1,76); select least(54,76) as min_value; --列名可以起一个别名
3: greatest(value1,...) 返回最大值
select greatest(54,76);
4: round(M,D); 返回M的四舍五入的值,D表示要保留几们小数,默认值是0
select round(1.69); select round(1.69,1);
5: abs() 绝对值
select 5-10; select abs(5-10);
***************************************************************************************************************
汇总函数
1: avg();
select * from employee where sal >= 6000; select avg(sal) from employee where sal >= 6000;
2: count()
select count(*) from employee; select count(emp_name) from employee; select count(sal) from employee; --打印9 这里会忽略null值 select count(*) from employee where sal >= 4000; select count(*) from employee where sal <= 4000 or sal is null;
3: sum()
select sum(sal) from employee where sal >= 6000;
4: min()
select min(sal) from employee;
5: max()
select max(sal) from employee;
***************************************************************************************************************
日期函数
1: 获取当前的日期时间
select now(),sysdate(),current_timestamp(); select now(6),sysdate(6),current_timestamp(6); ps: now(),current_timestamp();没有区别,表示sql开始执行时的时间 sysdate()表示这个函数开始时间
2: 获取当前日期
select curdate();
--只有年月日
3: 获取当前时间
select curtime();
--只有时分秒
4: 日期的加运算date_add
select history,date_add(history,interval '1 12:10' day_minute) from employee; --date_add(history,interval '1 12:10' day_minute) select history,interval '1-1' year_month) from employee; --date_add(history,interval '1-1' year_month) select history,interval '1' second) from employee; --date_add(history,interval '1' second)
5: 日期的减运算data_sub
select history,date_sub(history,interval '1-1' year_month) from employee;
6: 计算日期差
select history,datediff(sysdate(),history) from employee; --以天数来表示
7: 获取日期的指定部分(把日期转换为指定的格式) date_format()
select history,date_format(history,'%Y年%m月%d号') from employee; select history,'%d号') from employee; select history,'%Y年%m月%d号 %H时%i分%s秒') from employee;
8: 计算出一个日期是星期几
select history,dayname(history) from employee;
9: 中文日期字符串转换日期str_to_date()
insert into employee values(11,'张飞',22,3000,'2017年02月01号'); --报错 insert into employee values(11,str_to_date('2017年02月01号','%Y年%m月%d号 %H时%i分%s秒'));
insert into employee values(12,'二哥',str_to_date('2017年02月01号 23时02分02秒','%Y年%m月%d号 %H时%i分%s秒'));
insert into employee values(12,str_to_date('2017年02月01号 11时02分02秒','%Y年%m月%d号 %h时%i分%s秒'));
ps: 如果是h则表示12小制,如果是大H则表示24小明制;
字符串函数
1: left(str,len) 返回字符串str的左端len个字符
select left('abcdefg',5);
2: length()
select length('abcdefg');
3: lower(str) 返回小写的字符串str
select lower('HELLO');
4: substring() 取子字符串,第二个参数是截取的起始位置,第三个参数是要截取的长度
select substring('helloworld',2,3);
5: concat() 字符串拼接
select concat(emp_name,'员工') from employee;
6: replace(替换
select replace(emp_name,'李','老') from employee where emp_name = '李四';