Mysql内置函数、复合查询和内外连笔记

目录

一、mysql内置函数

1.1.日期函数

1.2.字符串函数

1.3.数学函数

1.4.其他函数

二、复合查询

2.2 自连接

2.3 子查询

2.3.1单行自查询

2.3.2 多行子查询

 2.3.3 多列子查询

2.3.4在from子句中使用子查询

2.3.5合并查询

三、表的内连和外连

3.1内连接

3.2外连接

3.2.1 左外连接

3.2.2右外连接

一、mysql内置函数

1.1.日期函数

Mysql内置函数、复合查询和内外连笔记_第1张图片

 获得时间:

获得年月日:select current_date();

获得时分秒:select current_time();

获得时间戳:select current_timestamp();

在日期的基础上加日期:

Mysql内置函数、复合查询和内外连笔记_第2张图片

在日期的基础上减去时间:

 Mysql内置函数、复合查询和内外连笔记_第3张图片

计算两个日期之间相差多少天:

 Mysql内置函数、复合查询和内外连笔记_第4张图片

案例:

创建一个留言表:

Mysql内置函数、复合查询和内外连笔记_第5张图片

插入数据:

Mysql内置函数、复合查询和内外连笔记_第6张图片

显示所有留言信息,发布日期只显示日期,不用显示时间:

 Mysql内置函数、复合查询和内外连笔记_第7张图片

查询在五分钟内发布的贴子:

 :select *from msg where date_add(sendtime,interval 5 minute)>now();

或:select *from msg where date_sub(now(),interval 5 minute)

理解:

Mysql内置函数、复合查询和内外连笔记_第8张图片

1.2.字符串函数

Mysql内置函数、复合查询和内外连笔记_第9张图片

 案例:

sql获取:码云

案例:

获取emp表的ename列的字符集:

Mysql内置函数、复合查询和内外连笔记_第10张图片

要求显示exam_result表中的信息,显示格式:“XXX的语文是XXX分,数学XXX分,英语XXX分”

Mysql内置函数、复合查询和内外连笔记_第11张图片

求学生表中学生姓名占用的字节数:

Mysql内置函数、复合查询和内外连笔记_第12张图片

注意:length函数返回字符串长度,以字节为单位。如果是多字节字符则计算多个字节数;如果是单字节字符则算作一个字节。比如:字母,数字算作一个字节,中文表示多个字节(与字符集编码有关)。

将emp表中所有名字中有S的替换为‘北京’

Mysql内置函数、复合查询和内外连笔记_第13张图片

截取emp表中ename字段的第二个到第三个字符

 Mysql内置函数、复合查询和内外连笔记_第14张图片

以首字母小写的方式显示所有员工的姓名:

select concat(lcase(substring(ename,1,1)),substring(ename,2)) from emp;

1.3.数学函数

Mysql内置函数、复合查询和内外连笔记_第15张图片

绝对值:select abs();

向上取整:select ceiling();

Mysql内置函数、复合查询和内外连笔记_第16张图片

向下取整: select floor();

Mysql内置函数、复合查询和内外连笔记_第17张图片

理解:

向上取整简单来说,就是向大的整数方向取整,舍弃小数部分。比如23.04向上取整就是24,-5.9向上取整就是-5.

同理,向下取整是朝着小的整数取整,舍弃小数部分。3.7向下取整是3.-1.3向下取整是-2.

向0取整,是朝0靠拢,5.6向零取整是5,-6.6向0取整是-6

Mysql内置函数、复合查询和内外连笔记_第18张图片

保留n位小数位数:select format(小数,n);

产生随机数:select rand();

mysql中,产生随机数,产生的是0-1的小数。

Mysql内置函数、复合查询和内外连笔记_第19张图片

如果要得到0-100的随机数:

Mysql内置函数、复合查询和内外连笔记_第20张图片

1.4.其他函数

user()查询当前用户

select user();

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

Mysql内置函数、复合查询和内外连笔记_第21张图片

通常用于加密。

password()函数,mysql数据库使用该函数对用户进行加密

Mysql内置函数、复合查询和内外连笔记_第22张图片

ifnull(val1,val2)如果val1为null,返回val2,否则返回val1的值。

Mysql内置函数、复合查询和内外连笔记_第23张图片

二、复合查询

2.1.多表查询

实际开发中往往数据来自不同的表,所以需要多表查询。在此借用一个简单的公司管理系统,还是从码云下载。有三张表emp,dept,salgrade来演示如何进行多表查询。

案例:

显示雇员名、雇员工资以及所在部门的名字因为上面的数据来自emp表和dept表,因此要联合查询。

Mysql内置函数、复合查询和内外连笔记_第24张图片

这种结果称为笛卡尔积。

显示部门号为10的部门名,员工名和工资

Mysql内置函数、复合查询和内外连笔记_第25张图片

显示各个员工的姓名,工资,及工资级别

Mysql内置函数、复合查询和内外连笔记_第26张图片

2.2 自连接

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

案例:员工FORD的上级领导的编号和姓名(mgr是员工领导的编号)

使用的子查询:

Mysql内置函数、复合查询和内外连笔记_第27张图片

使用多表查询(自查询)

Mysql内置函数、复合查询和内外连笔记_第28张图片

2.3 子查询

子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询。

2.3.1单行自查询

返回一行记录的子查询

显示SMITH同一部门的员工

Mysql内置函数、复合查询和内外连笔记_第29张图片

2.3.2 多行子查询

 返回多行记录的子查询

in关键字;

查询和10号部门的工作岗位相同的雇员的名字,岗位,工资,部门号,但是不包含自己的。

Mysql内置函数、复合查询和内外连笔记_第30张图片

all关键字;

显示工资比部门30的所有员工的工资高的员工的姓名,工资和部门号

第一种方式,当然可以找出部门30最高的工资,只要比这个工资高即可:

Mysql内置函数、复合查询和内外连笔记_第31张图片

比部门30所有的员工工资高,使用all: 

Mysql内置函数、复合查询和内外连笔记_第32张图片

any关键字:显示工资比部门30的任意一个员工工资高的员工的姓名,工资和部门号

Mysql内置函数、复合查询和内外连笔记_第33张图片

 2.3.3 多列子查询

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

案例: 查询和SMITH的部门和岗位完全相同的所有雇员,不包含SMITH本人。

Mysql内置函数、复合查询和内外连笔记_第34张图片

2.3.4在from子句中使用子查询

子查询语句出现在from子句中。子查询当作一个临时表使用。

显示每个高于自己部门平均工资的员工的姓名、部门、工资、平均工资

Mysql内置函数、复合查询和内外连笔记_第35张图片

查找每个部门工资最高的人的姓名,工资,部门,最高工资。

Mysql内置函数、复合查询和内外连笔记_第36张图片

显示每个部门的信息(部门号,编号,地址)和人员数量

Mysql内置函数、复合查询和内外连笔记_第37张图片

2.3.5合并查询

union

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

案例:将工资大于2500或职位是MANAGER的人找出来

去掉了重复数据:

Mysql内置函数、复合查询和内外连笔记_第38张图片

union all

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

案例:将工资大于25000或职位是MANAGER的人找出来

Mysql内置函数、复合查询和内外连笔记_第39张图片

三、表的内连和外连

3.1内连接

内连接实际上就是利用where子句对两种表形成的笛卡尔积进行筛选,前面讲述的都是内连接,实际开发过程中使用最多的连接查询。

语法:

        select 字段 from 表1 inner join 表2 on 连接条件 and 其他条件;

案例:显示SMITH的名字和部门名称:

之前的写法:

Mysql内置函数、复合查询和内外连笔记_第40张图片

标准的内连接写法:

Mysql内置函数、复合查询和内外连笔记_第41张图片

3.2外连接

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

3.2.1 左外连接

如果联合查询时左侧的表完全显示我们就说是左外连接。

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

案例:

建两张表:

Mysql内置函数、复合查询和内外连笔记_第42张图片

查询所有学生的成绩,如果这个学生没有成绩,也要讲学生的个人信息显示出来

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

Mysql内置函数、复合查询和内外连笔记_第43张图片

3.2.2右外连接

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

案例:对stu表和exam表联合查询,把所有的成绩都显示出来,即使这个成绩没有学生与它对应,也要显示出来。

Mysql内置函数、复合查询和内外连笔记_第44张图片

你可能感兴趣的:(Mysql学习,sql,数据库)