分类:一、按条件表达式筛选简单条件运算符:> < = != <> >= <=二、按逻辑表达式筛选逻辑运算符:作用:用于连接条件表达式&& || !and or not&&和and:两个条件都为true,结果为true,反之为false||或or: 只要有一个条件为true,结果为true,反之为false!或not: 如果连接的条件本身为false,结果为true,反之为false三、模糊查询likebetween andinis null1.like①一般和通配符搭配使用通配符:% 任意多个字符,包含0个字符_ 任意单个字符#案例1:查询员工名中包含字符a的员工信息select * from employees where last_name like '%a%';#abc#案例2:查询员工名中第三个字符为e,第五个字符为a的员工名和工资select salary FROM employees WHERE last_name LIKE '__e_a%';#2.between and①使用between and 可以提高语句的简洁度②包含临界值③两个临界值不要调换顺序#案例1:查询员工编号在100到120之间的员工信息SELECT * FROM employees WHERE employee_id BETWEEN 120 AND 100;#3.in判断某字段的值是否属于in列表中的某一项(也可以判断某列是否在另一个列里)①使用in提高语句简洁度②in列表的值类型必须一致或兼容③in列表中不支持通配符#案例:查询员工的工种编号是 IT_PROG、AD_VP、AD_PRES中的一个员工名和工种编SELECT last_name,job_id FROM employees WHERE job_id IN('AD_VP','AD_PRES');#判断region_tmp表里region_name在region表里的region_name列里select * from wufan.region_tmp where region_name in (select region_name from wufan.region)分类:1、单行函数如 concat、length、ifnull等2、分组函数功能:做统计使用,又称为统计函数、聚合函数、组函数常见函数:一、单行函数字符函数:length:获取字节个数(utf-8一个汉字代表3个字节,gbk为2个字节)concatsubstrinstrtrimupperlowerlpadrpadreplace数学函数:roundceilfloortruncatemod日期函数:nowcurdatecurtimeyearmonthmonthnamedayhourminutesecondstr_to_datedate_format其他函数:versiondatabaseuser控制函数ifcase#3.upper、lower
SELECT UPPER('john'); #JOHN
SELECT LOWER('JOB');  #job#4.substr、substring
注意:索引从1开始
#截取从指定索引处后面所有字符
SELECT SUBSTR('李莫愁爱上了陆展元',7)  out_put; #陆展元#截取从指定索引处指定字符长度的字符
SELECT SUBSTR('李莫愁爱上了陆展元',1,3) out_put; #李莫愁#5.instr 返回子串第一次出现的索引,存在返回1,不存在返回0
SELECT INSTR('杨不侠悔爱上了殷六侠','殷八侠') AS out_put; #1#6.trim
SELECT TRIM('    张翠山    ') AS out_put; #张翠山
//以aa为单位去掉
SELECT TRIM('aa' FROM 'aaaaa张翠山aaaaaaaaaa')  AS out_put; #a张翠山#7.lpad 用指定的字符实现左填充指定长度
SELECT LPAD('殷素素',2,'*') AS out_put;#8.rpad 用指定的字符实现右填充指定长度
SELECT RPAD('殷素素',7,'ab') AS out_put; #殷素素abab#9.replace 替换
SELECT REPLACE('张无忌爱上了周芷若','周芷若','赵敏') AS out_put; #张无忌爱上赵敏#二、数学函数
#round 四舍五入
SELECT ROUND(-1.55); #-2
SELECT ROUND(1.567,2); ##ceil 向上取整,返回>=该参数的最小整数
SELECT CEIL(-1.02); #-1#floor 向下取整,返回<=该参数的最大整数
SELECT FLOOR(-9.99); #-9#mod取余(hive不支持)
SELECT MOD(10,-3);
SELECT 10%3; (hive支持)#三、日期函数
#返回当前系统日期+时间mysql:SELECT NOW();hive:select from_unixtime(unixtimestamp(),'yyyy-MM-dd HH:mm:ss')#返回当前系统日期,不包含时间
SELECT CURDATE();#curtime 返回当前时间,不包含日期
SELECT CURTIME();#可以获取指定的部分,年、月、日、小时、分钟、秒
SELECT YEAR(NOW()) 年;
SELECT YEAR('1998-1-1') 年;SELECT  YEAR(hiredate) 年 FROM employees;SELECT MONTH(NOW()) 月;
SELECT MONTHNAME(NOW()) 月;#str_to_date 将字符通过指定的格式转换成日期
SELECT STR_TO_DATE('1998-3-2','%Y-%c-%d') AS out_put;#date_format 将日期转换成字符
SELECT DATE_FORMAT(NOW(),'%y年%m月%d日') AS out_put;#查询有奖金的员工名和入职日期(xx月/xx日 xx年)
SELECT last_name,DATE_FORMAT(hiredate,'%m月/%d日 %y年') 入职日期
FROM employees
WHERE commission_pct IS NOT NULL;#五、流程控制函数
#1.if函数:如果表达式成立返回第一个值,不成立返回第二个值
#1.nvl函数:nvl(str1,str2) str1为null返回str2,若str1不为null则返回str1SELECT IF(10<5,'大','小');
SELECT last_name,commission_pct,IF(commission_pct IS NULL,'没奖金,呵呵','有奖金,嘻嘻') 备注
FROM employees;select nvl(null,nihao)#2.case函数
SELECT salary 原始工资,department_id,
CASE department_id
WHEN 30 THEN salary*1.1
WHEN 40 THEN salary*1.2
WHEN 50 THEN salary*1.3
ELSE salary
END AS 新工资
FROM employees;select case when 10>5 then True else FALSE end from 表六、排序order bySELECT * FROM employees ORDER BY salary DESC;#按工资降序SELECT * FROM employees ORDER BY salary asc; #默认升序,asc可以省略七、数学聚合函数SELECT SUM(salary) FROM employees;SELECT AVG(salary) FROM employees;SELECT MIN(salary) FROM employees;SELECT MAX(salary) FROM employees;SELECT COUNT(salary) FROM employees;#八、关联查询
/*
分类:
内连接(★):inner
外连接左外(★):left 【outer】右外(★):right 【outer】全外:full【outer】
交叉连接:cross
*/#一)内连接
/*
分类:
等值
非等值
自连接
*/#1、等值连接
#案例1.查询员工名、部门名SELECT last_name,department_name
FROM departments dJOIN  employees e
ON e.`department_id` = d.`department_id`;#3. 查询部门个数>3的城市名和部门个数,(添加分组+筛选)
#①查询每个城市的部门个数
#②在①结果上筛选满足条件的
SELECT city,COUNT(*) 部门个数
FROM departments d
INNER JOIN locations l
ON d.`location_id`=l.`location_id`
GROUP BY city
HAVING COUNT(*)>3;#案例4.查询哪个部门的员工个数>3的部门名和员工个数,并按个数降序(添加排序)
#①查询每个部门的员工个数
SELECT COUNT(*),department_name
FROM employees e
INNER JOIN departments d
ON e.`department_id`=d.`department_id`
GROUP BY department_name#② 在①结果上筛选员工个数>3的记录,并排序
SELECT COUNT(*) 个数,department_name
FROM employees e
INNER JOIN departments d
ON e.`department_id`=d.`department_id`
GROUP BY department_name
HAVING COUNT(*)>3
ORDER BY COUNT(*) DESC;#二)非等值连接 #查询工资级别的个数>20的个数,并且按工资级别降序SELECT COUNT(*),grade_level
FROM employees eJOIN job_grades gON e.`salary` BETWEEN g.`lowest_sal` AND g.`highest_sal`GROUP BY grade_levelHAVING COUNT(*)>20ORDER BY grade_level DESC;#三)自连接#查询员工的名字、上级的名字SELECT e.last_name,m.last_nameFROM employees eJOIN employees mON e.`manager_id`= m.`employee_id`;#查询姓名中包含字符k的员工的名字、上级的名字SELECT e.last_name,m.last_nameFROM employees eJOIN employees mON e.`manager_id`= m.`employee_id`WHERE e.`last_name` LIKE '%k%';#二、外连接/*应用场景:用于查询一个表中有,另一个表没有的记录特点:1、外连接的查询结果为主表中的所有记录如果从表中有和它匹配的,则显示匹配的值如果从表中没有和它匹配的,则显示null外连接查询结果=内连接结果+主表中有而从表没有的记录2、左外连接,left join左边的是主表右外连接,right join右边的是主表3、左外和右外交换两个表的顺序,可以实现同样的效果 4、全外连接=内连接的结果+表1中有但表2没有的+表2中有但表1没有的*/#引入:查询男朋友 不在男神表的的女神名SELECT * FROM beauty;SELECT * FROM boys;#左外连接SELECT b.*,bo.*FROM boys boLEFT OUTER JOIN beauty bON b.`boyfriend_id` = bo.`id`WHERE b.`id` IS NULL;#案例1:查询哪个部门没有员工#左外SELECT d.*,e.employee_idFROM departments dLEFT OUTER JOIN employees eON d.`department_id` = e.`department_id`WHERE e.`employee_id` IS NULL;#右外SELECT d.*,e.employee_idFROM employees eRIGHT OUTER JOIN departments dON d.`department_id` = e.`department_id`WHERE e.`employee_id` IS NULL;#全外USE girls;SELECT b.*,bo.*FROM beauty bFULL OUTER JOIN boys boON b.`boyfriend_id` = bo.id;九、子查询
/*
含义:
出现在其他语句中的select语句,称为子查询或内查询
外部的查询语句,称为主查询或外查询分类:
按子查询出现的位置:select后面:仅仅支持标量子查询from后面:支持表子查询where或having后面:★标量子查询(单行) √列子查询  (多行) √行子查询exists后面(相关子查询)表子查询
按结果集的行列数不同:标量子查询(结果集只有一行一列)列子查询(结果集只有一列多行)行子查询(结果集有一行多列)表子查询(结果集一般为多行多列)
*/#一、where或having后面
/*
1、标量子查询(单行子查询)
2、列子查询(多行子查询)
3、行子查询(多列多行)特点:
①子查询放在小括号内
②子查询一般放在条件的右侧
③标量子查询,一般搭配着单行操作符使用
> < >= <= = <>
in、any/some、all
④子查询的执行优先于主查询执行,主查询的条件用到了子查询的结果
*/#1.标量子查询★
#案例1:谁的工资比 Abel 高?#①查询Abel的工资
SELECT salary
FROM employees
WHERE last_name = 'Abel'#②查询员工的信息,满足 salary>①结果
SELECT *
FROM employees
WHERE salary>(SELECT salaryFROM employeesWHERE last_name = 'Abel');#案例2:返回job_id与141号员工相同,salary比143号员工多的员工 姓名,job_id 和工资#①查询141号员工的job_id
SELECT job_id
FROM employees
WHERE employee_id = 141#②查询143号员工的salary
SELECT salary
FROM employees
WHERE employee_id = 143#③查询员工的姓名,job_id 和工资,要求job_id=①并且salary>②SELECT last_name,job_id,salary
FROM employees
WHERE job_id = (SELECT job_idFROM employeesWHERE employee_id = 141
) AND salary>(SELECT salaryFROM employeesWHERE employee_id = 143);#案例3:返回公司工资最少的员工的last_name,job_id和salary#①查询公司的 最低工资
SELECT MIN(salary)
FROM employees#②查询last_name,job_id和salary,要求salary=①
SELECT last_name,job_id,salary
FROM employees
WHERE salary=(SELECT MIN(salary)FROM employees
);#案例4:查询最低工资大于50号部门最低工资的部门id和其最低工资#①查询50号部门的最低工资
SELECT  MIN(salary)
FROM employees
WHERE department_id = 50#②查询每个部门的最低工资SELECT MIN(salary),department_id
FROM employees
GROUP BY department_id#③ 在②基础上筛选,满足min(salary)>①
SELECT MIN(salary),department_id
FROM employees
GROUP BY department_id
HAVING MIN(salary)>(SELECT  MIN(salary)FROM employeesWHERE department_id = 50);#2.列子查询(多行子查询)★
#案例1:返回location_id是1400或1700的部门中的所有员工姓名#①查询location_id是1400或1700的部门编号
SELECT DISTINCT department_id
FROM departments
WHERE location_id IN(1400,1700)#②查询员工姓名,要求部门号是①列表中的某一个SELECT last_name
FROM employees
WHERE department_id  <>ALL(SELECT DISTINCT department_idFROM departmentsWHERE location_id IN(1400,1700)
);#案例2:返回其它工种中比job_id为‘IT_PROG’工种任一工资低的员工的员工号、姓名、job_id 以及salary#①查询job_id为‘IT_PROG’部门任一工资SELECT DISTINCT salary
FROM employees
WHERE job_id = 'IT_PROG'#②查询员工号、姓名、job_id 以及salary,salary<(①)的任意一个
SELECT last_name,employee_id,job_id,salary
FROM employees
WHERE salary<ANY(SELECT DISTINCT salaryFROM employeesWHERE job_id = 'IT_PROG') AND job_id<>'IT_PROG';#或
SELECT last_name,employee_id,job_id,salary
FROM employees
WHERE salary<(SELECT MAX(salary)FROM employeesWHERE job_id = 'IT_PROG') AND job_id<>'IT_PROG';#案例3:返回其它部门中比job_id为‘IT_PROG’部门所有工资都低的员工   的员工号、姓名、job_id 以及salarySELECT last_name,employee_id,job_id,salary
FROM employees
WHERE salary<ALL(SELECT DISTINCT salaryFROM employeesWHERE job_id = 'IT_PROG') AND job_id<>'IT_PROG';#或SELECT last_name,employee_id,job_id,salary
FROM employees
WHERE salary<(SELECT MIN( salary)FROM employeesWHERE job_id = 'IT_PROG') AND job_id<>'IT_PROG';#3、行子查询(结果集一行多列或多行多列)
#案例:查询员工编号最小并且工资最高的员工信息
SELECT *
FROM employees
WHERE (employee_id,salary)=(SELECT MIN(employee_id),MAX(salary)FROM employees
);#①查询最小的员工编号
SELECT MIN(employee_id)
FROM employees#②查询最高工资
SELECT MAX(salary)
FROM employees#③查询员工信息
SELECT *
FROM employees
WHERE employee_id=(SELECT MIN(employee_id)FROM employees)AND salary=(SELECT MAX(salary)FROM employees);#二、select后面
/*
仅仅支持标量子查询
*/
#案例:查询每个部门的员工个数SELECT d.*,(SELECT COUNT(*)FROM employees eWHERE e.department_id = d.`department_id`) 个数FROM departments d;#案例2:查询员工号=102的部门名SELECT (SELECT department_name,e.department_idFROM departments dINNER JOIN employees eON d.department_id=e.department_idWHERE e.employee_id=102) 部门名;#三、from后面
/*
将子查询结果充当一张表,要求必须起别名
*/#案例:查询每个部门的平均工资的工资等级
#①查询每个部门的平均工资
SELECT AVG(salary),department_id
FROM employees
GROUP BY department_idSELECT * FROM job_grades;#②连接①的结果集和job_grades表,筛选条件平均工资 between lowest_sal and highest_salSELECT  ag_dep.*,g.`grade_level`
FROM (SELECT AVG(salary) ag,department_idFROM employeesGROUP BY department_id
) ag_dep
INNER JOIN job_grades g
ON ag_dep.ag BETWEEN lowest_sal AND highest_sal;#四、exists后面(相关子查询)/*
语法:
exists(完整的查询语句)
结果:
1或0
*/SELECT EXISTS(SELECT employee_id FROM employees WHERE salary=300000);#案例1:查询有员工的部门名
#in
SELECT department_name
FROM departments d
WHERE d.`department_id` IN(SELECT department_idFROM employees)#exists
SELECT department_name
FROM departments d
WHERE EXISTS(SELECT *FROM employees eWHERE d.`department_id`=e.`department_id`
);#案例2:查询没有女朋友的男神信息
SELECT bo.*
FROM boys bo
WHERE bo.id NOT IN(SELECT boyfriend_idFROM beauty
)#exists
SELECT bo.*
FROM boys bo
WHERE NOT EXISTS(SELECT boyfriend_idFROM beauty bWHERE bo.`id`=b.`boyfriend_id`
);

Mysql:常用函数方法大全相关推荐

  1. MySQL常用函数大全(面试篇)

    本篇文章讲解是是MySQL的函数方法,涵盖所有的MySQL常见的方法.主要介绍了面试常问函数. 一.数字函数 二.字符串函数 三.日期函数 四.MySQL高级函数 (一)数字函数 1.ABS(x) 返 ...

  2. Mysql常用命令行大全

    Mysql常用命令行大全 第一招.mysql服务的启动和停止 net stop mysql net start mysql 第二招.登陆mysql 语法如下: mysql -u用户名 -p用户密码 键 ...

  3. MySQL - 常用函数收集

    1.应用场景 主要用于了解和学习MySQL的常用函数,能尽快帮助解决开发中遇到的问题. 2.学习/操作 1.文档阅读 mysql之常用函数 - 随风行云 - 博客园 MySQL常用函数大全讲解 - 星 ...

  4. C语言常用排序方法大全

    C语言常用排序方法大全 /* ============================================================================= 相关知识介绍( ...

  5. JS常用属性方法大全

    JS常用属性方法大全 1.输出语句:document.write(""); 2.JS中的注释为: 3.传统的HTML文档顺序是:document->html->(hea ...

  6. mysql ceil,MySQL常用函数介绍

    前言: MySQL数据库中提供了很丰富的函数,比如我们常用的聚合函数,日期及字符串处理函数等.SELECT语句及其条件表达式都可以使用这些函数,函数可以帮助用户更加方便的处理表中的数据,使MySQL数 ...

  7. mysql 常用函数

    欢迎z1988316我的:空间博客网摘资源设置|帮助|退出 CSDN首页 资讯 论坛 博客 下载 搜索 更多CTO俱乐部 学生大本营 培训充电 移动开发 软件研发 云计算 程序员 TUP the bl ...

  8. PythonStock(13):使用stockstats计算股票中的16个常用指标方法大全

    前言 使用Python开发一个股票项目. 项目地址: https://github.com/pythonstock/stock 相关资料: http://blog.csdn.net/freewebsy ...

  9. ipad php mysql_PHP中的MYSQL常用函数

    PHP中的MYSQL常用函数 1.mysql_connect()-建立数据库连接 格式: resource mysql_connect([string hostname [:port] [:/path ...

最新文章

  1. MySQL 数据库常用命令
  2. hadoop启动页面_轻松搞定Windows下的Hadoop环境安装
  3. python画笑脸-python 利用turtle库绘制笑脸和哭脸的例子
  4. 手机开启apache_微信否认“年终奖人均280万”;MySQL 8.0.14 稳定版发布;支付宝集五福昨开启,一天29万人集齐......
  5. Python Day11
  6. datetimepicker弹出窗在iframe中部分遮挡_美军下一代班组武器项目,NGSW中的小秘密,你了解多少?...
  7. CF16A Flag
  8. 【好文链接】什么是开环控制?什么是闭环控制?区别在哪里?
  9. 国内人气设计师交流平台集设
  10. UNIX环境高级编程之第4章:文件和文件夹-习题
  11. 循环下标_【转】【Python效率】五种Pandas循环方法效率对比
  12. 【渝粤教育】国家开放大学2018年春季 0653-21T机电控制与可编程控制技术 参考试题
  13. 突然决定要记笔记,于是就来到了博客园,希望自己能够坚持下去
  14. POJ-3267 The Cow Lexicon---删除字符匹配单词
  15. 2008年IT日历 02
  16. 【OpenCV】基于Qt的“破产版”全能扫描王
  17. google书签删除了怎么恢复?谷歌浏览器删除的书签怎么恢复?
  18. OpenNLP入门实验
  19. 关于如何设计网站首页
  20. %几.几//C语言(闲的没事,记录下)

热门文章

  1. 红橙黄绿青蓝紫的html代码,红橙黄绿青蓝紫
  2. 调用百度地图出现的自动创建完成对象会清空输入框值的问题
  3. python语言运行出现ValueError: empty vocabulary; perhaps the documents only contain stop words
  4. linux内核入门之创建sys文件夹及文件读写
  5. OpenLDAP中如何禁用账户,启用账户
  6. Linux截图和屏幕视频录制软件Kazam
  7. 英特尔中国研究院深度学习领域最新成果——“动态外科手术”算法
  8. 学习大数据的都是什么人,究竟适不适合学习大数据?
  9. 【软件测试】一位流水线工作者,从月4K到月12K的涅槃重生......
  10. 月薪从10k到30k,一个普通测试工程师的3年涨薪之路...