一、常见函数: 字符函数:length concat substr instr trim upper lower lpad rpad replace 数学函数: round ceil floor truncate mod 日期函数:now curdate curtime year month monthname day hour minute second str_to_date date_format 1、 字符函数 #length 获取参数值的字节个数 SELECT LENGTH('john');#4 SELECT LENGTH('张三丰hahaha');#15,utf8一个汉字占3个字节 #concat 拼接字符串(用下划线拼接) SELECT CONCAT(last_name,'',first_name) FROM manba; #upper,lower SELECT UPPER('john');#变大写SELECT LOWER('JOHN');#变小写 #示例:将姓变大写,名变小写,拼接 SELECT CONCAT(UPPER(last_name),LOWER(first_name)) AS 姓名 FROM manba; #substr,substring #注意索引从1开始,下语句输出:和李四 #截取从指定索引处后面所有字符 SELECT SUBSTR('张三和李四',3) out_put; #截取从指定索引处指定字符长度的字符 #下面语句输出:张三 SELECT SUBSTR('张三和李四',1,2) out_put; #案例:姓名中首字符大写,其他字符小写,用_拼接,显示出来 SELECT CONCAT(UPPER(SUBSTR(last_name,1,1)),'',LOWER(SUBSTR(last_name,2))) output FROM manba; #instr #返回子串的起始索引,找不到返回0 SELECT INSTR('杨不悔爱上了殷六侠','殷六侠') AS out_put #trim 去掉首尾的 #输出张翠山 SELECT LENGTH(TRIM(' 张翠山 ')) AS out_put; #输出张aaaa翠山 SELECT TRIM('a' FROM 'aaaa张aaaa翠山aaaaaaaa') AS out_put; #lpad 用指定的字符实现左填充指定长度 #输出*****殷素素 SELECT LPAD('殷素素',10,'') AS out_put; #输出:殷素 SELECT LPAD('殷素素',2,'') AS out_put; #rpad 用指定的字符实现右填充指定长度 #输出:殷素素ababababa SELECT RPAD('殷素素',12,'ab') AS out_put; #replace 替换 SELECT REPLACE('张无忌爱上了周芷若','周芷若','赵敏') AS out_put;

2、 数字函数 #round四舍五入 SELECT ROUND(1.65);#2 SELECT ROUND(-1.45);#-1 SELECT ROUND(1.567,2);#1.57,小数点后保留2位 #ceil向上取整(返回>=该参数的最小整数) SELECT CEIL(-1.02);#-1 SELECT CEIL(1.00);#1 #floor 向下取整,返回<=该参数的最大整数 SELECT FLOOR(-9.99);#-10 #truncate 截断 SELECT TRUNCATE(1.65,1);#1.6; #mod 取余 mod(a,b) : a-a/bb mod(-10,-3) : -10-(-10)/(-3)(-3)=-1; SELECT MOD(10,-3);#1

3、 日期函数 #now:返回当前系统日期加时间 SELECT NOW(); #curdate 返回当前系统日期,不包含时间 SELECT CURDATE(); #curtime() 返回当前时间,不包含日期 SELECT CURTIME(); #可以获取指定的部分,年,月,日,小时,分,秒 SELECT YEAR(NOW()) AS 年; SELECT YEAR('1998-1-1') 年; SELECT YEAR(hiredate) 年 FROM employees; SELECT MONTH(NOW()) 月; SELECT MONTHNAME(NOW()) 月;#显示英文月份 #str_to_date 将日期格式的字符转换成指定格式的日期 %Y 四位的年份 %y 2位的年份 %m 月份 (01,02,...12) %c 月份(1,2,..., 12) %d 日 %H小时(24)%h(12) %i 分钟 %s秒 SELECT STR_TO_DATE('9-13-1999','%m-%d-%Y') 日期;#1999-09-13 SELECT STR_TO_DATE ('2020-4-17','%Y-%c-%d') AS output;#2020-4-17 #查询入职日期为1992-4-3的员工信息 SELECT * FROM employees WHERE hiredate='1992-4-3'; SELECT * FROM employees WHERE hiredate=STR_TO_DATE('4-3 1992','%c-%d %Y'); #date_format 将日期转换成字符 SELECT DATE_FORMAT(NOW(),'%y年%m月%d日') AS output;#20年4月17日 #查询有奖金的员工名和入职日期(xx月/xx日 xx年) SELECT last_name,DATE_FORMAT(hiredate,'%m月/%d日 %Y年') 入职日期 FROM employees WHERE commission_pct IS NOT NULL;

4、 聚合函数 #简单的使用 SELECT SUM(salary) FROM manba; SELECT SUM(salary) 和,ROUND(AVG(salary),2) 平均 FROM manba; SELECT MAX(salary) 最高,MIN(salary) 最低 FROM manba; SELECT MIN(salary) FROM manba; SELECT COUNT(salary) FROM manba; #参数支持哪些类型 SELECT SUM(last_name),AVG(last_name) FROM manba; SELECT SUM(hiredate),AVG(hiredate) FROM manba; #无意义,不这样用 SELECT MAX(last_name),MIN(last_name) FROM manba; SELECT MAX(hiredate),MIN(hiredate) FROM manba; #支持 SELECT COUNT(last_name) FROM manba;#计算非空的值 107 SELECT COUNT(commission_pct) FROM manba;#35 #是否忽略null SELECT SUM(commission_pct),AVG(commission_pct) FROM manba; #和distinct搭配 SELECT SUM(DISTINCT salary), SUM(salary) FROM manba; SELECT COUNT(DISTINCT salary), COUNT(salary) FROM manba;
#count函数的详细介绍 SELECT COUNT(salary) FROM manba; SELECT COUNT(*) FROM manba;#统计每一列的数目,即所有行数 SELECT COUNT(1) FROM manba;#和上一语句效果一样 #6、和分组函数一同查询的字段有限制 SELECT AVG(salary),manba _id FROM manba;#这个员工id查出来没有意义

二、分组查询 语法select分组函数(max,min等),列(要求出现在group by后面)fro表 【where 筛选条件】group by 分组的列表【order by】子句 注意:查询列表必须特殊,要求是分组函数和group by后出现的字段 #简单的分组查询 #案例1:查询每个工种的最高工资 SELECT MAX(salary),job_id FROM manba GROUP BY job_id; #案例2:查询每个位置上的部门个数 SELECT COUNT(),location_id FROM departments GROUP BY location_id; #添加分组前筛选条件 #案例1:查询邮箱中包含a字符的,每个部门的平均工资 SELECT AVG(salary),department_id FROM manba WHERE email LIKE '%a%' GROUP BY department_id; #案例2:查询有奖金的每个领导手下员工的最高工资 SELECT MAX(salary),manager_id FROM manba WHERE commission_pct IS NOT NULL GROUP BY manager_id; #添加分组后的筛选条件 #案例1:查询哪个部门的员工个数大于2 #①查询每个部门的员工个数 SELECT COUNT(),department_id FROM manba GROUP BY department_id; #②根据1的结果进行筛选 SELECT COUNT(),department_id FROM manba GROUP BY department_id HAVING COUNT()>2; #案例2:查询每个工种有奖金的员工的最高工资>12000的 工种编号和其最高工资 #①查询每个工种有奖金的员工的最高工资 SELECT MAX(salary),job_id FROM manba WHERE commission_pct IS NOT NULL GROUP BY job_id; #②根据1的结果继续筛选,最高工资>12000 SELECT MAX(salary),job_id FROM manba WHERE commission_pct IS NOT NULL GROUP BY job_id HAVING MAX(salary)>12000; #案例3:查询领导编号>102的每个领导手下的最低工资>5000的领导编号 #①查询领导编号>102的每个领导手下的最低工资 SELECT MIN(salary),manager_id FROM manba WHERE manager_id>102 GROUP BY manager_id; #②在1的基础上,最低工资>5000 SELECT MIN(salary),manager_id FROM manba WHERE manager_id>102 GROUP BY manager_id HAVING MIN(salary)>5000 #按表达式或函数分组 #案例:按员工姓名的长度分组,查询每一组的员工个数,筛选员工个数>5的 SELECT COUNT(),LENGTH(last_name) len_name FROM manba GROUP BY len_name HAVING COUNT()>5; #按多个字段分组 #案例:查询每个部门每个工种的员工的平均工资 SELECT AVG(salary),department_id,job_id FROM manba GROUP BY department_id,job_id; #添加排序 ##案例:查询每个部门每个工种的员工的平均工资,并将>10000的按高低排序 SELECT AVG(salary) a,department_id,job_id FROM manba GROUP BY department_id,job_id HAVING a>10000 ORDER BY AVG(salary) DESC; 三、链接查询(又称多表查询,当查询的字段来自多个表,就会用到连接查询) 语法:select 查询列表 from 表1 别名 【连接类型】 join 表2 别名 on 【连接条件】 on 连接条件 【where 筛选条件】 【group by 分组】 【having 筛选条件】 【order by 排序列表】 分类:内连接:inner 外连接:左外 left 【outer】 右外 right 【outer】 全外 full 【outer】 交叉连接:cross 1、 内连接(等值连接、非等值连接、自连接) #等值连接 #案例1:查询哪个部门的部门员工个数>3的部门名,和员工个数,并按个数进行降序 SELECT COUNT(),department_name FROM manba e INNER JOIN departments d ON e.department_id=d.department_id GROUP BY department_name HAVING COUNT()>3 ORDER BY COUNT() DESC; #案例2:查询员工名、部门名、工种名,并按部门名降序(三表连接) SELECT last_name,department_name,job_title FROM manba e INNER JOIN departments d ON e.department_id=d.department_id INNER JOIN jobs j ON e.job_id=j.job_id ORDER BY department_name DESC; #非等值 #查询工资的个数>20的级别个数,并且按工资级别降序 SELECT COUNT(),grade_level FROM manbae INNER JOIN job_grades g ON e.salary BETWEEN g.lowest_sal AND g.highest_sal GROUP BY grade_level HAVING COUNT()>20 ORDER BY grade_level DESC; #自连接 #查询员工的名字,上级的名字 SELECT e.last_name,m.last_name FROM manba e JOIN manba m ON e.manager_id=m.manba_id; #加筛选:姓名中包含字符k的员工名字、上级名字 SELECT e.last_name,m.last_name FROM manba e JOIN manba m ON e.manager_id=m.manba _id WHERE e.last_name LIKE '%k%'; 2、外连接 #查询男朋友不在男生表的女生名 #左外连接 SELECT ,bo. FROM beauty be LEFT OUTER JOIN boys bo ON be.boyfriend_id= WHERE bo.id IS NULL; #右外连接 SELECT ,bo.* FROM boys bo RIGHT OUTER JOIN beauty be ON be.boyfriend_id= WHERE bo.id IS NULL;

四、子查询(出现在其他语句内部的select语句,称为子查询或内查询 外部的查询语句,称为主查询或外查询) 1.查询和Zlotkey相同部门的员工姓名和工资 SELECT last_name,salary FROM manba WHERE department_id=( SELECT department_id FROM manba WHERE last_name='Zlotkey'); #2、查询工资比公司平均工资高的员工的员工号,姓名,工资 SELECT last_name,employee_id,salary FROM manba WHERE salary>(SELECT AVG(salary)FROM manba); #3、查询各部门中工资比本部门平均工资高的员工号,姓名,工资 SELECT employee_id,last_name,salary,e.department_id FROM manba e INNER JOIN(SELECT AVG(salary) ag,department_id FROM manba GROUP BY department_id)avg_dep ON e.department_id=avg_dep.department_id WHERE salary>avg_dep.ag;

#4、查询,和姓名中包含字母u的员工在相同部门的员工,的员工号和姓名 SELECT last_name,manba_id FROM manba WHERE department_id IN( SELECT DISTINCT department_id FROM manba WHERE last_name LIKE '%u%'); #5、查询在部门的location id为1700的部门工作的员工的员工号 SELECT employee_id FROM manba WHERE department_id=ANY( SELECT department_id FROM departments WHERE location_id=1700); #6、查询管理者是king的员工姓名和工资 SELECT last_name,salary FROM manba WHERE manager_id IN( SELECT employee_id FROM manba WHERE last_name='K_ing'); #7、查询工资最高的员工的姓名,要求first和last_name显示为一列,列名为姓名 SELECT CONCAT(first_name,last_name) "姓名" FROM manba WHERE salary=(SELECT MAX(salary) FROM manba

【编测编学】 教学内容为:

测试基础知识、项目实战、测试管理、敏捷测试、探索式测试、APP测试、Linux、数据库、测试环境搭建、Python编程、WEB端UI自动化测试、APP端UI自动化、接口功能测试、性能测试、接口自动化测试、Jenkins持续集成 等内容。

通过学习,学员能 掌握软件测试企业最新技术,对标一线互联网企业项目要求,使学员达到中高级测试工程师的水平,毕业后可快速融入企业实际工作中。

不管你是 文科生、专科生、0基础、女同学 都可以轻松学会!