MYSQL必知必会读书笔记第十和十一章之使用函数处理数据,mysql第十和

mysql简介

MYSQL必知必会读书笔记第十和十一章之使用函数处理数据,mysql第十和

 mysql简介

MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),MySQL数据库系统使用最常用的数据库管理语言–结构化查询语言(SQL)进行数据库管理。

澳门金沙vip 1

拼接字段

存储在数据库表中的数据一般不是应用程序所需要的格式。我们需要直接从数据库中检索出转换、计算或格式化过的数据;而不是检索出数据,然后再在客户机应用程序或报告程序中重新格式化。

计算字段(字段 =
列,不过数据库列一般称为列,而字段通常用于计算字段中)并不实际存在于数据库表中,计算字段是运行时在select语句内创建的。

拼接 concatenate 将值联结到一起构成单个值

在MySQL的select语句中,可使用Concat()函数来拼接两个列。

如创建由两列组成的标题:生成一个供应商报表,需要在供应商的名字中按照name(location)这样的格式列出供应商的位置。此报表需要单个值,而表中数据存储的两个列vend_name和vend_country中。还需要用括号将vend_country括起来。

澳门金沙vip 2

新创建的列用AS赋一个别名

澳门金沙vip 3

去除空白

Ltrim() RTrim() Trim()

执行算术计算

比如物品单单表存储物品的价格和数量,但是不需要存储每个物品的总价格(用价格乘以数量即可)。
为打印发票,需要物品的总价格。即需要增加一列,根据已有的列计算出来。

澳门金沙vip 4

文本函数

left() 串左边字符
length() 串长度
locate() 找出串的一个子串
lower() 转为小写
ltrim() 去掉左边空格
right() 返回串右边字符
rtrim() 去掉串右边空格
soundex() 返回字符串soundex值
upper() 大写

将选择的文本转换成大写

select Upper(vend_name)from vendors;

澳门金沙vip 5

Soundex()函数:将任何文本传转换为描述其语音表示的字母数字模式的算法。(语音匹配?对发音比较而不是对字幕比较)

澳门金沙vip 6

日期函数

日期和时间函数

adddate() 增加一个日期-天或周

addtime() 增加一个时间

curdate() 返回当前日期

curtime() 返回当前时间

date() 返回日期时间的日期部分

datediff() 计算两个日期差

date_add() 高度灵活的日期运算函数

date_format() 返回一个格式化的日期或时间串

day() 返回一个日期的天数部分

dayofweek() 对于一个日期,返回对应的星期几

hour()

minute()

month()

now() 当前日期和时间

second()

time() 当前日期时间的时间部分

year()

一般,应用程序不使用用来存储日期和时间的格式,因此日期和时间函数总是被用来读取,统计和处理这些值。

MySQL的日期格式:yyyy-mm-dd。 比如 2005-09-01

澳门金沙vip 7

但是这样的where order_date =
‘2005-09-01’不可靠。因为order_date存储的数据类型是datatime.
这种类型存储日期及时间值。比如存储的order_date值为2005-09-01
11:30:05,则where order_date = ‘2005-09-01’就会匹配失败。

澳门金沙vip 8

所以最安全的方法是Date()函数,Date(order_date)指示MySQL提取列的日期部分。

select cust_id, order_num
from orders
where Date(order_date) = '2005-09-01';

再比如想要检索出2005年9月下的所有订单。

select cust_id, order_num
from orders
where Year(order_date) = 2005 and Month(order_date) = 9;

聚集函数

我们经常需要汇总函数,而不是把它们实际检索出来。

这种类型的检索例子:

  1. 确定表中行数

  2. 获得表中行组的和

  3. 找出表列(or 所有行某些特定的行)的最大值,最小值和平均值

聚集函数(aggregate function) 运行在行组上,计算和返回单个值的函数。

AVG() 返回某列的平均值

COUNT() 返回某列的行数

MAX() 返回某列的最大值

MIN() 返回某列的最小值

SUM() 返回某列值的和

求某一列的平均值

复制代码 代码如下:
select avg(prod_price) as avg_pricefrom products;

澳门金沙vip 9

– 计数

使用count(*)对表中行的数目进行计数(whether null or not)

澳门金沙vip 10

澳门金沙vip 11

使用count(column)对特定列具有值的行进行计数,忽略null

澳门金沙vip 12

求和

使用sum()返回指定列值的和

澳门金沙vip 13

以上所述是小编给大家介绍的MYSQL必知必会读书笔记第十和十一章之使用函数处理数据的相关知识,希望对大家有所帮助!

mysql简介
MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),…

(一)几个数据库相关的概念

MySQL是一种开放源代码的关系型数据库管理系统,MySQL数据库系统使用最常用的数据库管理语言–结构化查询语言进行数据库管理。

1.数据库

拼接字段

数据库: 保存有组织数据的容器。

存储在数据库表中的数据一般不是应用程序所需要的格式。我们需要直接从数据库中检索出转换、计算或格式化过的数据;而不是检索出数据,然后再在客户机应用程序或报告程序中重新格式化。

数据的所有存储、检索、管理和处理实际上是有数据库软件DBMS完成的。

计算字段并不实际存在于数据库表中,计算字段是运行时在select语句内创建的。

我们通过数据库软件DBMS来创建和操纵容器。

拼接 concatenate 将值联结到一起构成单个值

2.表

在MySQL的select语句中,可使用Concat()函数来拼接两个列。

某种特定类型数据的结构化清单。表名是唯一的,用来标识自己。

如创建由两列组成的标题:生成一个供应商报表,需要在供应商的名字中按照name(location)这样的格式列出供应商的位置。此报表需要单个值,而表中数据存储的两个列vend_name和vend_country中。还需要用括号将vend_country括起来。

表具有一些特性,定义了数据在表中如何的存储,存储什么样的数据,数据如何分解,各部分信息如何命名等。描述这组信息叫做模式(schema),它是关于数据库和表的布局及特性信息。

新创建的列用AS赋一个别名

3.列和数据类型

去除空白

列:表中的一个字段

Ltrim() RTrim() Trim()

数据类型:每个列都有相应的数据类型

执行算术计算

4.行

比如物品单单表存储物品的价格和数量,但是不需要存储每个物品的总价格。
为打印发票,需要物品的总价格。即需要增加一列,根据已有的列计算出来。

表中的一条记录

文本函数

5.主键

left() 串左边字符length() 串长度locate() 找出串的一个子串lower()
转为小写ltrim() 去掉左边空格right() 返回串右边字符rtrim()
去掉串右边空格soundex() 返回字符串soundex值upper() 大写

一列或者一组列,能够唯一区分表中的每个行。

将选择的文本转换成大写

习惯上:不更新主键列中的值,不重用主键列的值,不在主键列中使用可能更改的值。

select Upper(vend_name)from vendors;

6.外键

Soundex()函数:将任何文本传转换为描述其语音表示的字母数字模式的算法。

外键为某个表的一列,它包含另一个表的主键值。

日期函数

(二)mysql使用方法

日期和时间函数

1.mysql是什么?

adddate() 增加一个日期-天或周

mysql是一种DBMS,即是一种数据库软件。它是一种基于客户机-服务器的数据库。

addtime() 增加一个时间

2.mysql的优点:

curdate() 返回当前日期

(1)因为开源,成本低

curtime() 返回当前时间

(2)执行速度快,性能好

date() 返回日期时间的日期部分

(3)可信赖

datediff() 计算两个日期差

(4)易于安装和使用

date_add() 高度灵活的日期运算函数

3.连接好数据库后,就可以访问数据库并做操作,其中use是用来选择数据库的,show是用来查看mysql数据库、表、每部信息的。

date_format() 返回一个格式化的日期或时间串

(1)use + database name;

day() 返回一个日期的天数部分

      表示切换使用哪个数据库。

dayofweek() 对于一个日期,返回对应的星期几

      用use打开数据库,才能读取其中的数据。

hour()

(2)show database;

minute()

      返回数据库的列表

month()

(3)show tables;

now() 当前日期和时间

      获取一个数据库内的表的列表

second()

(4)show columns from customers;

time() 当前日期时间的时间部分

      显示每列的信息,后面用的比较多的是 desc customers;

year()

(三)用select检索数据

一般,应用程序不使用用来存储日期和时间的格式,因此日期和时间函数总是被用来读取,统计和处理这些值。

1.select:

MySQL的日期格式:yyyy-mm-dd。 比如 2005-09-01

用途:从表中检索一个或者多个数据列。

但是这样的where order_date =
‘2005-09-01’不可靠。因为order_date存储的数据类型是datatime.
这种类型存储日期及时间值。比如存储的order_date值为2005-09-01
11:30:05,则where order_date = ‘2005-09-01’就会匹配失败。

select语句中需要体现两种信息:选什么,从什么地方选。

所以最安全的方法是Date()函数,Date(order_date)指示MySQL提取列的日期部分。

2.检索单列

select cust_id, order_numfrom orderswhere Date(order_date) = '2005-09-01';

例如:select prod_name from products;

再比如想要检索出2005年9月下的所有订单。

解释:从products表中检索出来prod_name列

select cust_id, order_numfrom orderswhere Year(order_date) = 2005 and Month(order_date) = 9;

注意:返回结果是未排序的。

聚集函数

3.检索多列

我们经常需要汇总函数,而不是把它们实际检索出来。

例如:select prod_id,prod_name,prod_price from products;

这种类型的检索例子:

4.检索所有列

  1. 确定表中行数

  2. 获得表中行组的和

  3. 找出表列的最大值,最小值和平均值

select * from product;

聚集函数 运行在行组上,计算和返回单个值的函数。

优点:不明确列名的时候使用。

AVG() 返回某列的平均值

澳门金沙vip,5.distinct关键字

COUNT() 返回某列的行数

作用:指示mysql只返回不同的值的行

MAX() 返回某列的最大值

例如:select distinct vend_id from products;

MIN() 返回某列的最小值

使用:它必须放在列名前面

SUM() 返回某列值的和

6.limit

求某一列的平均值

作用:返回结果的前几行

复制代码 代码如下:select avg(prod_price)
as avg_pricefrom products;

例如:select prod_name from products limit 5;

– 计数

如果是 select prod_name from products limit
5,5;则表示从行5开始,检索5行.

使用count(*)对表中行的数目进行计数

注意:检索出来第一行是行0。如果行数不够,能返回多少就返回多少。

使用count(column)对特定列具有值的行进行计数,忽略null

7.完全限定的表名

求和

select products.prod_name from product;

使用sum()返回指定列值的和

(四)用where进行数据过滤

以上所述是小编给大家介绍的MYSQL必知必会读书笔记第十和十一章之使用函数处理数据的相关知识,希望对大家有所帮助!

1、where子句

作用:指定搜索条件,因为一般数据库表都包含大量的数据,很少我们需要所有的行,通常会根据特定需要来提取数据的子集。where语句就是来指定搜索条件(过滤条件)

位置:放在from之后,order by之前

例子:select prod_name,prod_price from products where prod_price =
2.50

解释:这里采用了相等测试,只返回prod_price为2.5的行,还可以有等于、不等于、小于、小于等、大于、大于等、between操作符。

扩展:根据这些操作符,可以做单个值匹配(=)、不匹配检查(!=或者<>)、范围值检查(between)、空值检查(is
null)

例子1:between用法,它需要两个值。

select prod_name,prod_price from products where prod_price between 5
and 10;

例子2:空值检查

select cust_id from customers where cust_email is null;

2.组合where子句

目的:为了进行更强的过滤控制,mysql允许给出多个where自居,以逻辑操作符and或者or的方式使用。

and例子:

select prod_id,prod_price,prod_name

from products

where vend_id =1003 and prod_price <=10;

解释:必须同时满足两个条件

or例子:

select prod_id,prod_price,prod_name

from products

where vend_id =1003 or vend_id =1002;

解释:满足任意一个条件即可

注意:计算次序用圆括号界定,要不容易混淆。

3、in操作

作用:指定条件范围

例子:select prod_name,prod_price

from products

where vend_id in (1002,1003);

解释:检索供应商1002和1003制造的所有产品。in操作符后面跟着的是合法值得清单。

另一种写法:

select prod_name,prod_price

from products

where vend_id = 1002 or vend_id = 1003;

那么为什么使用in操作符呢,优点是什么呢?

(1)清楚只管

(2)计算次序容易理解

(3)in执行比or执行的快

(4)在in中可以包含其他的select语句

4、not操作符:

作用:where子句中用来否定后跟条件的关键字。

例如:select prod_name,prod_price

from products

where vend_id not in (1002,1003);

解释:检索除了1002和1003之外的所有。

(五)通配符过滤

1、应用场景

 
之前说的数据过滤都是对已知值进行过滤的,比如说匹配一个值或者多个值,大于某个值或者是小于某个值,或者是检查某个范围的值。

 
但是如果我要搜索产品名中包含anvil的所有产品呢,这时候通配符就可以大显身手了,我们可以利用通配符搜索模式,找出产品名中任何位置出现anvil的产品。

2、什么是通配符

概念:用来匹配值得一部分的特殊字符

如何使用:为了在搜索子句中使用通配符,必须使用like操作符。

3、有哪些通配符以及如何使用呢?

(一)百分号通配符%

表示:任何字符出现任意次数,也可以是0次

例子:

(1)找到以jet开头的产品,接受jet后面为任意多个字符

select prod_id,prod_name

from products

where prod_name like ‘jet%’;

(2)匹配任何位置包含anvil,不论在之前还是之后出现什么字符。

select prod_id,prod_name

from products

where prod_name like ‘%anvil%’;

(3)找到以s起头、以e结尾的所有产品:

select prod_name

from products

where prod_name like ‘s%e’;

注意:

(1)可以用‘**%’的形式进行尾空格处理,也可以用trim函数进行处理

(2)%通配符不能匹配null

(二)下划线通配符_

表示:下划线只匹配单个字符而不是多个字符

这也是与%的区别,这里就不举例赘述了。

4、小结:

通配符是一种非常有用的搜索工具,但是不能过度使用,否则搜索时间会很长。

(六)正则表达式匹配

1、啥是正则表达式

正则表达式的作用是匹配文本,将一个正则表达式与一个文本串进行比较,mysql用where子句对正则表达式提供了初步的支持,允许指定正则表达式,过滤select检索出的数据。

2、like与regexp的区别

举个例子来看两者的差别:

(一)like统配符

select prod_name

from products

where prod_name like ‘1000’

order by prod_name;

结果:不返回数据

(二)正则表达式

select prod_name

from products

where prod_name regexp ‘1000’

order by prod_name;

结果:返回一行

原因:like匹配的是整个列,只有使用通配符的时候才会返回。而regexp是在列值中匹配,如果被匹配的文本在列值中出现regexp将会找到他,相应的行将被返回。

3、有哪几种匹配呢?

(一)基本字符匹配

例1:检索列prod_name包含文本1000的所有行

select prod_name

from products

where prod_name regexp ‘1000’

order by  prod_name;

注意:regexp后所跟的东西作为正则表达式处理。

例2:检索列prod_name包含000的所有行

select prod_name

from products

where prod_name regexp ‘.000’

order by  prod_name;

注意:.是正则表达式语言中的一个特殊的字符,它表示的匹配任意一个字符,所以1000和2000都符合条件。

(二)or匹配

使用:当我想搜索两个串之一时,使用|

例子:匹配prod_name为1000或者2000的情况

select prod_name

from products

where prod_name regexp ‘1000|2000’

order by prod_name;

(三)匹配几个字符之一

表示:匹配任何一个单一字符,当想匹配特定字符的时候,可通过制定一组用[]括起来的字符来完成。

例1:

select prod_name

from products

where prod_name regexp ‘[123] Ton’

order by prod_name;

解释:正则表达式是[123]
Ton,[123]定义了一组字符,即匹配1或者2或者3,这么看,其实[
]是另一种形式or语句,也可以看做是[1|2|3]的缩写。

例2: