目录
前言
仅为博主个人夯实基础的记录,本篇博文基于mysql5.7,工具:Navicat 15,觉得对你也有帮助的朋友可以收藏点赞。
相关数据
--职工表
CREATE TABLE emp(
empno INT,
ename VARCHAR(50),
job VARCHAR(50),
mgr INT,
hiredate DATE,
sal DECIMAL(7,2),
comm DECIMAL(7,2),
deptno INT
) ;
--部门表
CREATE TABLE dept(
deptno INT,
dname VARCHAR(14),
loc VARCHAR(13)
);
--插入数据到职工表
INSERT INTO emp VALUES(7369,'SMITH','CLERK',7902,'1980-12-17',800,NULL,20);
INSERT INTO emp VALUES(7499,'ALLEN','SALESMAN',7698,'1981-02-20',1600,300,30);
INSERT INTO emp VALUES(7521,'WARD','SALESMAN',7698,'1981-02-22',1250,500,30);
INSERT INTO emp VALUES(7566,'JONES','MANAGER',7839,'1981-04-02',2975,NULL,20);
INSERT INTO emp VALUES(7654,'MARTIN','SALESMAN',7698,'1981-09-28',1250,1400,30);
INSERT INTO emp VALUES(7698,'BLAKE','MANAGER',7839,'1981-05-01',2850,NULL,30);
INSERT INTO emp VALUES(7782,'CLARK','MANAGER',7839,'1981-06-09',2450,NULL,10);
INSERT INTO emp VALUES(7788,'SCOTT','ANALYST',7566,'1987-04-19',3000,NULL,20);
INSERT INTO emp VALUES(7839,'KING','PRESIDENT',NULL,'1981-11-17',5000,NULL,10);
INSERT INTO emp VALUES(7844,'TURNER','SALESMAN',7698,'1981-09-08',1500,0,30);
INSERT INTO emp VALUES(7876,'ADAMS','CLERK',7788,'1987-05-23',1100,NULL,20);
INSERT INTO emp VALUES(7900,'JAMES','CLERK',7698,'1981-12-03',950,NULL,30);
INSERT INTO emp VALUES(7902,'FORD','ANALYST',7566,'1981-12-03',3000,NULL,20);
INSERT INTO emp VALUES(7934,'MILLER','CLERK',7782,'1982-01-23',1300,NULL,10);
--插入数据到部门表
INSERT INTO dept VALUES(10, 'ACCOUNTING', 'NEW YORK');
INSERT INTO dept VALUES(20, 'RESEARCH', 'DALLAS');
INSERT INTO dept VALUES(30, 'SALES', 'CHICAGO');
INSERT INTO dept VALUES(40, 'OPERATIONS', 'BOSTON');
记录
1、查询数据库版本
SELECT VERSION()
2、查询表结构
DESC 表名
3、concat(str1,str2,…)
首先我这里有一张userinfo表,故意把吕布的武力值为null。
返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。
4、IFNULL(expression, alt_value) 用于判断第一个表达式是否为 NULL,如果为 NULL 则返回第二个参数的值,如果不为 NULL 则返回第一个参数的值。
5、占位符:_与% %表示任意字符,_表示一个字符 比如这里我们查找ename字段值第二位是a的
6、BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。 此时是包括临界值的
那灵活一点使用就是不在此区间内NOT BETWEEN
7、IN 操作符允许您在 WHERE 子句中规定多个值。
8、IS NULL 如果想查询不为NULL的则直接 IS NOT NULL即可
9、安全等于 <=> 可读性较差 普通的等于 =
10、不等于 != 或者 <>
11、substr() 截取字符串,记住这里下标是从1开始的 使用SUBSTRING()也是一样的
比如下面的sql,就是截取ename 从下标是2开始截取,长度为4
12、INSTR(str,substr) 查找一个字符串在另一个字符串中首次出现的位置 没找到就是0
13、TRIM ( [ [位置] [要移除的字串] FROM ] 字串):
如果我们没有列出 [要移除的字串] 是什么的话,那空白就会被移除。
14、REPLACE(str,from_str,to_str)
意为把字串string里出现地所有子字串 from 替换成子字串 to
数学函数
15、ROUND(X)、ROUND(X,D)
四舍五入
ROUND(X,D) 对X四舍五入并且小数点保留D位
16、CEIL(X)、FLOOR(X)
CEIL(X) 是向上取整,返回的是>=该参数的最小整数
FLOOR(X)是向下取整,返回的是<=该参数的最大整数
17、TRUNCATE(X,D)
对X进行小数点保留D位截断
18、MOD(N,M)
取余,效果等同 N%M
日期函数
19、NOW()
返回当前系统的日期和时间
20、CURDATE() 、 CURTIME()
CURDATE()只返回当前系统日期
CURTIME()只返回当前系统时间
21、STR_TO_DATE(str,format)、DATE_FORMAT(date,format)
STR_TO_DATE(str,format)函数是将时间格式的字符串(str),按照所提供的显示格式(format)转换为DATETIME类型的值。 %c可以把前面的0补上
这个函数非常好,假如现在拿到的日期字符串顺序不是年月日,也可以用
DATE_FORMAT(date,format) 把日期转换为对应的字符串格式
流程控制函数
22、IF(expr1,expr2,expr3)
如果表达式1成立,就返回expr2的结果,否则返回expr3的结果
23
CASE case_value
WHEN 常量 THEN
statement_list
ELSE
statement_list
END CASE;
注意: when后面跟的是具体的值,不是表达式
24
CASE
WHEN 条件1 THEN statement_list
WHEN 条件2 THEN statement_list
ELSE
statement_list
END CASE;
上一条CASE后面有字段或者条件,注意这里是没有的,那么此时WHEN后面就可以接表达式了
分组函数
又称为聚合函数或统计函数
25、SUM(expr)、AVG()、MIN()、MAX()、COUNT()
依次是求和、求平均值、最小值、最大值、计算个数。 前两个函数只适用于数值类型的,均忽略NULL值。
防止篇幅过长,一到此为止