1.0聚合函数

本次全文全是用oracle 9经典样表,下载链接。

函数 说明
COUNT([DISTINCT] expr) 返回查询到的数据的数量
SUM([DISTINCT] expr) 返回查询到的数据的总和,前提数据是数字
AVG([DISTINCT] expr) 返回查询到的数据的平均值
MAX([DISTINCT] expr) 返回查询到的数据的最大值
MIN([DISTINCT] expr) 返回查询到的数据的最小值

举例

在数据库里使用mysql文件
\. 文件的绝对路径(点与文件的绝对路径之间存有空格)

统计员工有多少个

select count(*) from emp;

统计职位有多少个

select count(distinct job) from emp;

找出最高薪资的人

select max(sal) from emp;

找出最低薪资的人

select min(sal) from emp;

ground by子句的使用

  • 在select中使用ground by之句可以对指定的列进行分组查询
select column1,column2,column3…… from table group by column;

案例

  • 显示每个部门的平均薪水,和最高工资
select deptno,avg(sal),max(sal) from emp group by deptno;

  • 显示每个部门里每种岗位的平均工资和最低工资
select avg(sal),min(sal),job,deptno from emp group by deptno,job;

  • 显示平均工资低于2000的部门和它的平均工资

统计各个部门的平均工资

select avg(sal) from emp group by deptno;

having 与group by配合使用,对group by结果进行过滤

select avg(sal) 平均工资,deptno from emp group by deptno having 平均工资<2000;

having经常和group by搭配使用,作用是对分组进行赛选,作用有点类似于where

日期函数

函数名称 描述
current_date 当前日期
current_time 当前时间
date(datetime) 返回datetime参数的日期部分
date_add(date,interval d_value_type) 在date中添加时间或日期
interval 后的数值单位可以是yeat minute second day
date_sub(date,interval d_value_type) 在date中减去日期或者时间,
interval后的数值单位可以是year minute second day
now() 当前时间日期

日期函数的运用

  • 获取年月日
select current_date();

  • 获取时分秒
select current_time();

  • 获取当前的时间戳
select current_timestamp();

  • 在当前的时间的基础上增加两天
select date_add(current_timestamp,interval 2 day);

  • 计算两个日期直接相差多少天
select datediff(now(),date_add(now(),interval 2 day));

案例

  • 创建一张表,记录生日
create table tmp(
id int primary key,
birthday date
);
insert tmp values(1,current_date());
insert tmp value(2,current_timestamp());

  • 创建一个留言表
create table msg(
id int primary key auto_increment,
content varchar(30) not null,
sendtime datetime
);

插入数据

insert into msg(content,sendtime) values('hello',now());
insert into msg(content,sendtime) values('hello',now());
select * from msg;

字符串函数

charset(str) 返回字符串字符集
concat(string2[,……]) 连接字符串
instr(string,substring) 返回substring在string中出现的位置,没有则返回0
ucase(string2) 转换成大写
lcase(string2) 转换成小写
left(string2,length) 从string2中的左边起读取length个字符
repalce(str,search_str,replace_str) 在str中用repace_str替换成search_str
strcmp(str1,str2) 逐字符比较两字符串的大小
length(str) str的长度
substring(str,position[,……]) 从str的position开始,取length个字符
ltrim(string) strim(string) trim(string) 去除前空格或后空格

案例

  • 获取emp表的ename列的字符集
select charset(ename) from emp;
  • 要求显示emp表中的信息,显示格式:"XXX的职位是XXX,薪水是XXX。
select concat(ename,'的职位是',job,'薪水是',sal) 信息 from emp;

切记使用concat连用时,里面的符号都要为英文符号,进制出现中文符号

数学函数

函数名称 描述
abs(number) 绝对值函数
bin(decimal_number) 十进制转换成二进制
hex(decimal_number) 转换成十六进制
conv(number,from_base,to_base) 进制转换
ceiling 向上取整
floor 向下取整
hex(decimalNumber) 转换成十六进制
rand() 返回随机浮点数,范围(0.0,1.0)
mod(number,denominator) 取模,求余
format(number,decimal_places) 格式化,保留小数位数
  • 绝对值
select abs(-100.2);

*向上取整

select ceiling(23.04);
  • 向下取整
select floor(23.7);
  • 保留两位小数位(小数四舍五入)
select format(12.345,2);

其他一些函数

  • md5函数

md5(str)对一个字符串进行md5摘要,摘要后得到一个32位字符串

select md5('abcd');

  • ifnull函数

ifnull(val1,val2),如果val1为空,则返回val2,否则返回val1

select ifnull('abc','123');
select ifnull(null,'123');

多表查询

  • 多表查询的基本语法

select 字段1,字段2… from 表1,表2… [where……]……
多表查询,不加过滤,得到的结果称为笛卡尔积

  • 案例 :此时我们那salgrade表进行多表查询
select * from salgrade a,salgrade b;---使用同一个表的多表查询需要起别名
  • 显示雇员名,雇员工资以及所在部门的名字
select emp.ename,emp.sal,dept.dname from emp,dept where emp.deptno=dept.deptno;

  • 显示部门号为10的部门名,员工名和工资
select ename,sal,dname from emp,dept where emp.deptno=dept.deptno and dept.deptno=10;

  • 显示各个员工的姓名,工资,及工资级别
select ename,sal,grade from emp,salgrade where emp.sal between losal and hisal;

自连接

自连接是指在同一张表连接查询

  • 显示员工 FORD 的上级领导的编号和姓名
select empno,ename from emp where emp.empno=(select mgr from emp where ename='FORD');

  • 使用多表查询(自查询)
select leader.empno,leader.ename from emp leader,emp worker where leader.empno=worker.mgr and worker.ename='FORD';

自查寻

单行自查询

  • 返回一行记录的子查询
select * from emp where deptno=(select deptno from emp where ename='smith');

多行自查询

  • in关键字的运用
select ename,job,sal,deptno from emp where job in(select distinct job from emp where deptno=10) and deptno<>10;

  • all关键字:显示工资比部门30的所有员工的工资高的员工的姓名,工资和部门号
select ename,sal,deptno from emp where sal>all(select sal from emp where deptno=30);

  • any关键字;显示工资比部门30的任意员工的工资高的员工的姓名、工资和部门号(包含自己部门的员工)
select ename, sal, deptno from emp where sal > any(select sal from emp where deptno=30);

多列子查询

单行子查询是指子查询只返回单列,单行数据;多行子查询是指返回单列多行数据,都是针对单列而言的,而多列子查询则是指查询返回多个列数据的子查询语句

  • 案例:查询和SMITH的部门和岗位完全相同的所有雇员,不包含SMITH本人
select ename from emp where (deptno,job)=(select deptno,job from emp where ename='smith') and ename<>'smith';

在from子句中使用子查询

子查询语句出现在from子句中。这里要用到数据查询的技巧,把一个子查询当做一个临时表使用。

  • 案例
  • 显示每个高于自己部门平均工资的员工的姓名,部门,工资,平均工资
select ename,emp.deptno,sal from emp,(select avg(sal) asl,deptno from emp group by deptno) tmp where emp.sal>tmp.asl and emp.deptno=tmp.deptno;
  • 找出每个部门工资最高的人的姓名,工资,部门,最高工资
    原理?:打印姓名,工资,部门,最高工资
    表?:员工表 ,分组部门
    条件 部门编号,薪资相等
select ename,sal,job,max from emp,(select max(sal) max,deptno from emp group by deptno) tmp where emp.deptno=tmp.deptno and emp.sal=tmp.max;

合并查询

union

该操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中的重复行。

  • 案例:将工资大于2500或职位是MANAGER的人找出来
select ename,sal,job from emp where sal>2500 union select ename,sal,job from emp where job='manager';


使用or语句的结果??

select ename,sal,job from emp where job='manager'or sal>2500;

union all

该操作符用于取得两个结果集的并集。当使用该操作符时,不会去掉结果集中的重复行。

  • 案例:将工资大于2500或职位为
select ename,sal,job from emp where sal>2500 union all select ename,sal,job from emp where job='manage';

表的内外连接

表的连接分为内连接和外连接

内连接

内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我们前面学习的查询都是内连接,也是在开发过程中使用的最多的连接查询。
语法:select 字段 from 表1 inner join 表2 on 连接条件 and 其他条件
前面我们所学的都是内连接

外连接

外连接分为左外连接和右外连接

左外连接

语法:select 字段名 from 表名1 left join 表2 on 连接条件

  • 当左表和右边表没有匹配时,也会显示左边表的数据

右外连接

语法:select 字段名 from 表名1 right join 表2 on 连接条件

  • 当左表和右边表没有匹配时,也会显示右边表的数据

mysql查询+函数语句基本运用相关推荐

  1. mysql查询性别语句_MySQL查询语句简单操作示例

    本文实例讲述了MySQL查询语句简单操作.分享给大家供大家参考,具体如下: 查询 -- 创建数据库 create database python_test_1 charset=utf8; -- 使用数 ...

  2. mysql 查询字段语句_mysql查询语句常用字段操作函数

    一.concat()函数 1.功能:将多个字符串连接成一个字符串. 2.语法:concat(str1, str2,...) 返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为nu ...

  3. mysql 查询if语句执行顺序_MySQL 语句的执行顺序

    (1)SQL语句的语法顺序: SELECT[DISTINCT] FROM JOIN ON WHERE GROUP BY HAVING UNION ORDER BY LIMIT (2)SQL的执行顺序 ...

  4. mysql和sqlserver分页的区别_关于SQLServer和MySQL 查询分页语句区别

    首先来定义几个要用到的参数(例子) t_user数据表 int currentPage ; //当前页 int pageRecord ; //每页显示记录数 关于SqlServer数据库 分页SQL语 ...

  5. MySQL查询select语句详解

    1.查询记录 select*from 表名 [where 条件];eg:select*from students;//查询 students 表中所有记录,所有字段的值都显示出来select fiel ...

  6. mysql查询低效语句_MySQL数据库中查找执行从命慢的SQL语句

    MySQL数据库中查找执行从命慢的SQL语句 (2011-09-15 08:21:35) 标签: 杂谈 去历:赛迪网 做者:Alizze 启动Mysql时减参数--log-slow-queries去挤 ...

  7. mysql查询数量语句_mysql语句统计总数_一条sql语句实现统计查询_MySQL

    bitsCN.com 一条sql语句实现统计查询 如图:程序员在进行如下的统计时,现在提供两种实现方案: 方案一:运用 SEKECT CASE WHEN EXPLAIN SELECT count(*) ...

  8. mysql查询死锁语句_MYSQL查询数据库死锁和事务的语句

    查看进程信息 SHOW FULL PROCESSLIST ; 查询事务信息 SELECT * FROM information_schema.INNODB_TRX t -- WHERE t.trx_q ...

  9. mysql查询性别语句_mysql 语句根据身份证查询年龄,地址,性别

    select  case left(idcard,2) when '11' then '北京市' when '12' then '天津市' when '13' then '河北省' when '14' ...

最新文章

  1. webpack dev server 和 sublime text 配合时需要注意的地方
  2. rhino4.0安装教程
  3. mysql 备份_MySQL数据库备份实操
  4. Django apache2 安装配置
  5. (一)nodejs循序渐进-nodejs环境安装(基础篇)
  6. linux系统下定时备份,在Linux系统中简单地实现定时备份的方法 -电脑资料
  7. VMWare虚拟机下为Windows Server 2012配置静态IP(NAT方式)
  8. 数据库:MySQL(单表的表记录的操作)(二)
  9. kernel下msm的版本信息
  10. 一篇项目开发进度周报
  11. javascript 高级程序设计(第三版)读后归纳
  12. 单台电脑jmeter压力测试最大值
  13. 数据库同步利器 otter 双A同步配置
  14. 人月神话是神话嘛?嗯!
  15. 【51 Nod 1326】遥远的旅途
  16. 10本好书,助企业赢在数字化转型起跑线
  17. FBI树--字符二叉树
  18. 被360删除的文件怎么恢复?轻松get恢复技巧
  19. 【2018年11月16日】绩优超跌个股排名
  20. Linux服务5:Linux高级网络控制

热门文章

  1. 新手如何理解一个Web应用的构建(2021.07.29更新)
  2. 【SSL1762】工厂的烦恼【floyed最长路】
  3. 智能锁方案的软硬件开发简述
  4. 解决Mac电脑显示的系统时间不准确的方法
  5. idea strus html项目创建,搭建struts2 项目开发环境——(使用Intellij IDEA+Maven+struts2 )...
  6. 微信小程序如何通过js操作wxmll的wxss属性
  7. 海康威视:AI 芯片很难被管制,海外市场值得期待
  8. 软件学报--一个很好的论文参考网站
  9. 虫趣:当NV显卡驱动碰上Verifier
  10. 微信公众号开发之如何将本机IP映射成外网域名