一、函数

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. android获取内置和外置SD卡路径 - z

    本文将介绍Android真机环境下如何获取内置和外置SD卡路径. 测试环境:三星Note3,其他手机待测试... 所需权限(AndroidManifest.xml文件里) <uses-permi ...

  2. 大数据入门第二十二天——spark(二)RDD算子(2)与spark其它特性

    一.JdbcRDD与关系型数据库交互 虽然略显鸡肋,但这里还是记录一下(点开JdbcRDD可以看到限制比较死,基本是鸡肋.但好在我们可以通过自定义的JdbcRDD来帮助我们完成与关系型数据库的交互.这 ...

  3. CF708D Incorrect Flow

    CF708D Incorrect Flow 有源汇上下界最小费用可行流.(= =) 对每条给定的边连边: 首先\(f_i\)是给定的,所以要有一条这个边而且要流满,先\(a_i-b_i\)连一条上下界 ...

  4. libgdx退出对话框

    package com.fxb.newtest; import com.badlogic.gdx.ApplicationListener; import com.badlogic.gdx.Gdx; i ...

  5. Grid布局20行代码快速生成瀑布流

    网格布局 Grid 布局,好用又简单,至少比 Flex 要人性化一点,美中不足就是浏览器支持度差点. DOM结构 中间夹层为了后续拓展. CSS .grid { display: grid; grid ...

  6. 10、Dockerfile实战-PHP

    一.镜像制作步骤 安装编译依赖包 编译安装 配置 二.编写Dockerfile FROM centos:7 MAINTAINER QUNXUE RUN yum install -y gcc gcc-c ...

  7. stl源码剖析 详细学习笔记 hashtable

    //---------------------------15/03/24---------------------------- //hashtable { /* 概述: sgi采用的是开链法完成h ...

  8. npm install —— 从一个简单例子,看本地安装与全局安装的区别

    npm的包安装分为本地安装(local).全局安装(global)两种,从敲的命令行来看,差别只是有没有-g而已,比如 npm install grunt # 本地安装 npm install -g ...

  9. Js_Eval方法

    定义和用法eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码. 语法eval(string) 其中参数string为必需.是要计算的字符串,其中含有要计算的 JavaScr ...

  10. git 报错 error: insufficient permission for adding an object to repository database ./objects

    参照:http://stackoverflow.com/questions/1918524/error-pushing-to-github-insufficient-permission-for-ad ...