一、函数

1、if函数

if(exp1, exp2, exp3)     判断exp1是否为true(不为0,并且不为nlll),如果为true,返回 exp2的值,否则返回exp3的值。

select if(5 > 3, 100, 200);
select if(5 < 3, 100, 200);
select if(true, 100, 200);

MySQL中,true与1是同义词,false与0是同义词。

select 1 = true, 0 = false;

ifnull(exp1, exp2)  如果exp1不为null,返回exp1的值,否则,返回exp2的值。

select ifnull(100, 200);
select ifnull(null, 200);

select ifnull(name, '无名氏') from student

#nullif(exp1, exp2)
#如果exp1=exp2,则返回null,否则返回exp1的值。

select nullif(5, 5);
select nullif(5, 6);

2、case函数

#case的第一种形式,类似于Java中的switch-case
select age 年龄,
case age
when 10 then '小孩,10岁'
when 20 then '弱冠之年'
when 30 then '而立之年'
else '其他年龄'
end 年龄说明
from student;

#case的第二种形式,类似于Java中的if-else if
select
case
when age <= 10 then '小孩,10岁'
when age <= 20 then '弱冠之年'
when age <= 30 then '而立之年'
else '其他年龄'
end 年龄说明
from student;

#可以使用第二种case代替第一种case。
select
case
when age = 10 then '小孩,10岁'
when age = 20 then '弱冠之年'
when age = 30 then '而立之年'
else '其他年龄'
end 年龄说明
from student;

3、#abs 返回绝对值

select abs(-2);

4、ceil / ceiling 返回大于等于参数的最小整数。(向上取整)

select ceil(3.2), ceiling(3.2)

5、floor 返回小于等于参数的最大整数。(向下取整)

select floor(3.5);

    6、mod 取余数

select mod(5, 2);

    7、pow / power 求指数

select pow(2, 5), power(2, 5);

rand 返回0-1随机小数,包括0,包括1。
select rand();

round 返回最接近的整数值。(四舍五入)
select round(5.5), round(5.2)

#round函数也可以指定一个参数,参数用来指定保留几位小数。
select round(2.222, 1), round(2.888, 2);

一个参数的round可以使用两个参数的round函数来表示(第   二个参数为0)。

select round(2.5), round(2.5, 0);
#round的第二个参数还可以是负值。
select round(1234.5678, -1), round(1256.789, -2);

sqrt 求平方根(开方)
select sqrt(3);

length 返回字符串的长度,以字节为单位
select length('abcdefg');

在utf8编码下,一个中文要占用3个字节。
select length('ab中文');

char_length 返回字符串的长度,以字符为单位。
select char_length('abcd');

select char_length('ab中文');

#concat 进行字符串的连接,返回连接之后的结果。
#concat函数是可变参数。
select concat('ab', 'cd');
select concat('ab', 'cd', 'e', 'fg');
#concat_ws 使用分隔符连连接字符串。第一个参数指定分隔符。
#concat_ws函数是可变参数。
select concat_ws('-', 'a', 'bc', 'def');
select concat_ws('多个字符', 'a', 'bc', 'def');
#insert(str, pos, len, newStr)
#str待插入的字符串 pos开始的位置, len长度 newStr插入的字符串
#返回str字符串从pos位置开始,len个长度的字符,使用newStr进行
#替换后的结果。
#MySQL中,索引从1开始。
select insert('abcdefg', 2, 3, '12345');
#instr(str, substr) 返回substr在str中首次出现的位置。
#如果没有出现,返回0。
select instr('abcdabcd', 'cd');
select instr('abcdabcd', 'ef');
#left(str, len) 返回str最左侧的len个字符
select left('12345678', 5);
#right(str, len) 返回str最右侧的len个字符
select right('12345678', 5);
#lower / lcase 返回字符串的小写形式
select lower('ABCde'), lcase('ABCde');
#upper / ucase 返回字符串的大写形式
select upper('abc'), ucase('abc');
#replace(str, from, to) 返回str中出现的from使用to
#进行替换后的结果。
select replace('abcdabcd', 'ab', 'xy');

#mid / substr / substring
#substr(str, pos) 截取子字符串,从str的pos开始,一直到字符串结束。
select mid('abcdefg', 3), substr('abcdefg', 3), substring('abcdefg', 3);
#substr(str, pos, len)
#第二个参数指定开始点,第三个参数指定截取的长度。
select substr('abcdefg', 3, 3);
#mid / substr / substring 另外一种表示方式
select substr('abcdefg', 3);
select substr('abcdefg' from 3);
select substr('abcdefg', 3, 3);
select substr('abcdefg' from 3 for 3);
#pos(开始点也可以去负值,表示从倒数的位置开始截取。
select substr('abcdefg', -3);
#ltrim 删除字符串左侧的空格
select ltrim(' abc');
#rtrim 删除字符串右侧的空格
select rtrim(' abc '), length(rtrim('abc '));
#trim 删除掉字符串两端的空格
select trim(' abc ');
#trim 可以指定删除掉字符串两点指定的字符
select trim('X' from 'XXXabcXXX')
#删除前端指定的字符
select trim(leading 'X' from 'XXXabcXXX');
#删除后端指定的字符
select trim(trailing 'X' from 'XXXabcXXX');
#删除两端指定的字符
select trim(both 'X' from 'XXXabcXXX');

8、聚合函数

#avg 求平均值
select avg(age) from student
#count(字段) 返回该字段值非null的记录条数
select count(age) from student;
select age from student
#count(*) 返回记录条数
select count(*) from student;
#max最大值
select max(age) from student;
#min最小值
select min(age) from student;
#sum求和
select sum(age) from student;

#分组统计 group by
#当使用group by进行分组统计时,我们查询的字段要么使用聚合函数,
#要么出现在group by的分组统计中。
select sex, max(age), min(age) from student group by sex;

#错误
#select name, max(age) from student group by sex;

  

#having
#错误,where是对记录进行过滤,不能对组进行过滤。
#因此,在where中不能使用聚合函数。
#如果需要对组进行过滤,使用having,having中可以使用聚合函数。

select sex, max(age), min(age) from student
group by sex having min(age) > 12;

#排序 order by
#asc 升序排列, desc降序排列,默认为升序排列。
select * from student order by age asc
select * from student order by age desc
#排序可以指定多个字段,当第一个字段相同时,会依次根据
#后续的字段进行排序。
select * from student order by age asc, id desc

#当where,group by, order by,limit同时出现时,
#顺序必须为:where -> group by -> order by -> limit

#错误
#select sex, max(age) from student order by id group by sex

  

二、连接

create table stay (
id int primary key,
room varchar(10),
stay_time date
)
insert into stay(id, room, stay_time)
values (1, '1001', '2016-03-05');
insert into stay(id, room, stay_time)
values (2, '1002', '2016-04-11');
insert into stay(id, room, stay_time)
values (3, '1003', '2016-05-02'); select stu.id id1, stu.name, sy.id id2, sy.room, sy.stay_time
from student stu, stay sy where stu.id = sy.id;

1、内连接

交叉连接([cross] join ) 笛卡尔积连接,可以使用on指定连接 条件。
内部连接([inner] join) MySQL中等同于交叉连接。
自然连接(natural join) 以表中的同名字段作为连接条件。不 能使用on。
说明:自然连接会以表中所有的同名字段作为连接条件。
如果想把指定的同名字段作为连接条件,可以在连接中使用 using子句。

#MySQL中cross join与inner join是等价的。
#使用on来指定连接条件。
#交叉连接 cross可以省略

select stu.id id1, stu.name, sy.id id2, sy.room, sy.stay_time
from student stu cross join stay sy on stu.id = sy.id
#内部连接 inner可以省略
select stu.id id1, stu.name, sy.id id2, sy.room, sy.stay_time
from student stu inner join stay sy on stu.id = sy.id

自然连接 natural join
#自然连接是使用两张表中所有的同名字段进行等值连接。
select stu.id id1, stu.name, sy.id id2, sy.room, sy.stay_time
from student stu natural join stay sy
#using 指定等值连接的字段
select stu.id id1, stu.name, sy.id id2, sy.room, sy.stay_time
from student stu join stay sy using(id)

select stu.id id1, stu.name, sy.id id2, sy.room, sy.stay_time
from student stu inner join stay sy on stu.id = sy.id
where stu.age > 10

2、外链接

左外连接(left [outer] join)
右外连接(right [outer] join)
全外连接(full [outer] join)
说明:外连接同样使用on作为连接条件,与内连接不同的是, 外连接即使不满足on指定的连接条件,也会保留相应的结果集。
说明: MySQL不支持全外连接。

外连接 [outer可以省略]
select stu.id, stu.name, sy.room, sy.stay_time
from student stu left outer join stay sy on stu.id = sy.id

内连接与外连接
对于内连接,不满足连接条件的记录一律不会在结果集中显示。
对于外连接,不满足连接条件的记录也可能会在结果集中显示。
以左外连接为例,左表的记录一定会在结果集中显示,如果右表
有符合连接条件的记录,则正常显示相关字段值,如果右表没有
符合连接条件的记录,则相关字段显示为null。

MySQL中不支持全外连接。

Mysql(二)函数与连接的更多相关文章

  1. MySQL concat函数的使用

    MySQL concat函数是MySQL数据库中众多的函数之一,下文将对MySQL concat函数的语法和使用进行说明,供您参考和学习. MySQL concat函数使用方法:CONCAT(str1 ...

  2. [转载]MySQL concat函数的使用

    MySQL concat函数是MySQL数据库中众多的函数之一,下文将对MySQL concat函数的语法和使用进行说明,供您参考和学习. MySQL concat函数使用方法:CONCAT(str1 ...

  3. MySQL中concat函数(连接字符串)

    MySQL中concat函数使用方法:CONCAT(str1,str2,…) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL. 注意:如果所有参数均为非二进制字符串 ...

  4. MySQL之多表查询一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习

    MySQL之多表查询 阅读目录 一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习 一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 首先说一下,我们写项目一般都会建 ...

  5. mysql常用函数参考

    mysql常用函数参考   对于针对字符串位置的操作,第一个位置被标记为1. ASCII(str) 返回字符串str的最左面字符的ASCII代码值.如果str是空字符串,返回0.如果str是NULL, ...

  6. [转载]MySQL UUID() 函数

    目录 目录 一 引子 二 MySQL UUID() 函数 三 复制中的 UUID()四 UUID_SHORT() 函数 3.1 实验环境介绍 3.2 搭建复制环境 3.3 基于 STATEMENT 模 ...

  7. python Mysql (二)

    Mysql (二) 一. 事务 a.数据库开启事务命令 1 2 3 4 #start transaction 开启事务 #Rollback 回滚事务,即撤销指定的sql语句(只能回退insert de ...

  8. MySQL 约束、表连接、表关联、索引

    一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复的,不允许为空,用来保证数据完整性. 外键:是另一表的唯一性 ...

  9. MySQL常用函数介绍

    MySQL常用函数介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.操作符介绍 1>.操作符优先级 mysql; +----------+ | +----------+ ...

随机推荐

  1. 2017-2018-2 20155224『网络对抗技术』Exp7:网络欺诈防范

    基础问题回答 问:通常在什么场景下容易受到DNS spoof攻击? 同一局域网下,以及各种公共网络. 问:在日常生活工作中如何防范以上两攻击方法? 答:DNS欺骗攻击是很难防御的,因为这种攻击大多数本 ...

  2. 2017-2018-2 《网络对抗技术》 20155302 第二周 Exp1 PC平台逆向破解(5)M

    2017-2018-2 <网络对抗技术> 20155302 第二周 Exp1 PC平台逆向破解(5)M 1-实践目标 1.1-实践介绍 本次实践的对象是一个名为pwn1的linux可执行文 ...

  3. ElasticSearch入门 第三篇:索引

    这是ElasticSearch 2.4 版本系列的第三篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...

  4. 重置Oracle配置

    经常被ORACLE坑,作为一个只需要开发时候连连ORACLE的程序员,在经历了一次又一次的折腾之后,决定还是把这些琐碎的事情写下来. 经常在虚拟机中使用ORACLE,ORACLE的网络配置有一些变化就 ...

  5. setBit testBit权限管理

    1.jdk7文档解释 public boolean testBit(int n) Returns true if and only if the designated bit is set. (Com ...

  6. 初级字典树查找在 Emoji、关键字检索上的运用 Part-2

    系列索引 Unicode 与 Emoji 字典树 TrieTree 与性能测试 生产实践 在有了 Unicode 和 Emoji 的知识准备后,本文进入编码环节. 我们知道 Emoji 是 Unico ...

  7. mongodump备份小量分片集群数据

    1.使用mongodump备份小量分片集群数据 如果一个分片集群的数据集比较小,可以直接使用mongodump连接到mongos实例进行数据备份.默认情况下,mongodump到非primary的节点 ...

  8. 异步编程之asyncio简单介绍

    引言: python由于GIL(全局锁)的存在,不能发挥多核的优势,其性能一直饱受诟病.然而在IO密集型的网络编程里,异步处理比同步处理能提升成百上千倍的效率,弥补了python性能方面的短板. as ...

  9. unity ray和line射线检测

    RaycastHit 光线投射碰撞 Struct Structure used to get information back from a raycast. 用来获取从raycast函数中得到的信息 ...

  10. Unity3d Transform.forward和Vector3.forward的区别!

    在Unity中有两个forward,一个是Transform.forward一个是Vector3.forward. 对于Vector3来说,它只是缩写.没有其它任何含义. Vector3.forwar ...