当前位置: 56net亚洲必嬴 > 数据库 > 正文

mysql基础收拾

时间:2019-10-31 20:25来源:数据库
第六章《过滤数据》 (豆蔻梢头)多少个数据库相关的定义 大器晚成、汇总量据 5.排序检索数据 P35 1.数据库 做事中平常须要聚集数据实际不是将它们整个探寻出来(实际多少笔者:重

第六章《过滤数据》

(豆蔻梢头)多少个数据库相关的定义

大器晚成、汇总量据

5.排序检索数据

P35

1.数据库

做事中平常须要聚集数据实际不是将它们整个探寻出来(实际多少笔者:重临实际数据是对时间和拍卖能源的萧疏),那种类型的搜寻有以下特征:

5.1排序数据

  1. select prod_name,prod_price from products where prod_price=2.5;

数据库: 保存有集体数据的容器。

鲜明表中的行数(或然满意有个别条件或满含有些特定值的行数)

ORDER BY

2.select prod_name,prod_price from products where prod_price='2.5';

数码的有着存款和储蓄、检索、管理和拍卖实际上是有数据库软件DBMS达成的。

获得表中央银行组的和

SELECT prod_name FROM products ORDER BYprod_name; //排序检索

#多个语句获得的结果一样,因为钦赐的是数值。

我们经过数据库软件DBMS来成立和操纵容器。

寻觅表列(或具有行或少数特定的行)的最大值、最小值和平均值

SELECT prod_id,prod_price,prod_name

图片 1

2.表

群集函数(aggregate function):运营在行组上,总结和重临单个值的函数(MySQL还协理部分列的行业内部不是聚焦函数);

FROM products ORDER BYprod_price,prod_name;//按多少个列排序

P36

某种特定项目数据的结构化清单。表名是唯风度翩翩的,用来标志本人。

SQL聚焦函数如下表:

5.2点名排序方向

select prod_name,prod_price from products where prod_name='fuses'; #当内定的是文字时候,则要用引号(‘ ’)。

表具备部分特性,定义了多少在表中哪些的蕴藏,存款和储蓄什么样的数据,数据怎么样分解,各部分新闻怎么着命名等。描述那组消息叫做方式(schema),它是关于数据库和表的布局及特点消息。

图片 2

DESC降序排序

图片 3

3.列和数据类型

 

SELECT prod_id,prod_price,prod_name FROMproducts ORDER BY prod_price DESC;//降序排序

select prod_name,prod_price from products where prod_price <10; #检索prod_price小于或等于10(<=不是=<)的,读取prod_name,prod_price列。

列:表中的多个字段

1、avg()函数

SELECT prod_id,prod_price,prod_name FROMproducts ORDER BY prod_price DESC,prod_name;//多个列独有钦点的列为降序

图片 4

数据类型:各样列都有对应的数据类型

avg()通过对表中央银行数计数并图谋特定列值之和,求得该列的平均值;avg()可用来回到全数列平均值,也可用来回到特定列的平均值;

5.3OHighlanderDE陆风X8 BY与LIMIT的咬合能找寻最高或最低值

 select prod_name,prod_price from products where prod_price <10; #检索prod_price小于10的,读取prod_name,prod_price列。

4.行

select avg(prod_price) as avg_price from pfoducts;

SELECT prod_price FROM products ORDER BYprod_price DESC LIMIT 1;//获取最值钱的价位

图片 5

表中的一条记下

此select语句重临值avg_price,它包罗producs表中装有产品的平均价值,avg_price是一个小名;

6.过滤数据

P37 不相称检查(不等于某些值)

5.主键

avg()也得以用来规定特定列或行的平均值,例子如下:

6.1使用WHERE子句

  1. select vend_id,prod_name from products where vend_id <>1003; #vend_id不等于1003# 

一列依旧风流洒脱组列,能够唯风流洒脱区分表中的各种行。

select avg_(prod_price) as avg_price from products where vend_id = 1003;

SELECT prod_name FROM products WHEREprod_price = 2.5;//只返回prod_price值为2.5的行

2.1. select vend_id,prod_name from products where vend_id !=1003; #vend_id不等于1003# 1和2的抒发的情致是相通的# 

习认为常上:不校正主键列中的值,不录用主键列的值,不在主键列中使用大概变动的值。

那条SQL语句包括了where子语句,仅过滤出vend_id为1003的产品,avg_price中回到该代理商的产品的平均值;

WHERE子句的岗位:应该在O奇骏DEMurano BY在此以前

图片 6

6.外键

PS:avg()只好用来分明特定数值列的平均值,并且列名必需作为函数参数给出,为了拿走多少个列的平均值,必须选用四个avg()函数{avg()函数忽视列值为NULL的行};

6.2WHERE子句操作符:

P38

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

 

=,<>(不等于),!=(不对等), <,<=, >, >=, BETWEEN(在钦赐的七个值期间)

 select prod_name,prod_price from products where prod_price between 5 and 10; #检索prod_price在节制5到10之内的。注意:数值加上引号与否并不会影响结果#

(二)mysql使用情势

2、count()函数

SELECT prod_name,prod_price FROM productsWHERE prod_price BETWEEN 3 AND 10;

图片 7

1.mysql是什么?

count()函数进行计数,可应用count()明显表中央银行的数额或切合特定条件的行的多少;

6.3空值检查

select prod_name from products where prod_price is null ; #意味着检索prod_price是空值的#回到未有结果,因为prod_price未有空值#

mysql是风流浪漫种DBMS,便是风姿洒脱种数据库软件。它是生机勃勃种基于客商机-服务器的数据库。

count()函数有三种采纳方法:

在成立表时,表设计人士能够钦命在那之中的列是不是足以不满含值。在多少个列不包罗值时,称其为带有空值NULL。IS NULL子句来检查有着NULL值的列

图片 8

2.mysql的优点:

使用count(*)对表中央银行的数额举行计数,不管表列中包蕴的是空值(null)依然非空值;

输入SELECT prod_name FROM products WHERE prod_price IS NULL;

P39

(1)因为开源,开支低

运用count(column)对特定列中具有值的行开展计数,忽视null值;

输出Empty set (0.00 sec) //表达价格必得非空

select cust_id from customers where cust_email is null ;#检索cust_email是空值#

(2)实行进程快,质量好

select count(*) as num_cust from customers;

输入mysql> SELECT cust_id FROM customers WHERE cust_email IS NULL;

图片 9

(3)可信赖

这条SQL语句利用count(*)对customers表中持有行计数,计数值在num_cust中返回;

输出: +---------------+

 

(4)易于安装和利用

select count(cust_email) as cum_cust from customers;

| cust_id |

3.老是好数据库后,就能够访谈数据库并做操作,个中use是用来采摘数据库的,show是用来查看mysql数据库、表、每部音信的。

那条SQL语句使用count(cust_email)对cust_email列中有值的行开展计数;

+---------------+

(1)use + database name;

PS:倘使钦命列名,则钦定列的值为空的行被count()函数忽视,但意气风发旦count()函数中用的是星号(*),则不忽视; 

| 10002 |

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

 

| 10005 |

      用use展开数据库,才具读取个中的数据。

3、max()函数

+---------------+

(2)show database;

max()重临钦命列中的最大值,max()必要钦赐列名,例子如下:

2 rows in set (0.01 sec)

      再次来到数据库的列表

select max(prod_price) as max_price from products;

说明cust_email列有空值的行,那个行对应的cust_id为10002和10005。

(3)show tables;

那条SQL语句中中原人民共和国归来products表中price列的最大值;

7.数目过滤

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

PS:MySQL允许max()用来回到放肆列中的最大值,包罗再次来到文本列的最大值;但用于文书数据时,借使数量按对应的列排序,则max()再次回到最终风流洒脱行(max()函数忽视列值为null的行)

7.1组合WHERE子句

(4)show columns from customers;

 

MySQL允许给出四个WHERE子句,这个子句以二种方法结合:AND和O福特Explorer

      显示每列的音信,前边用的超级多的是 desc customers;

4、min()函数

7.1.1 AND操作符

(三)用select检索数据

min()再次回到钦点列的纤维值,min()也供给钦点列名,例子如下:

SELECT prod_id,prod_price,prod_name FROM products

1.select:

select min(prod_price) as min_price from products;

WHERE vend_id=1003 AND prod_price <=10;//七个标准都要满意

用途:从表中检索三个要么多少个数据列。

这条SQL语句中min()再次来到products表中price列最小值;

7.1.2 OR操作符

select语句中须求反映三种新闻:选什么样,从如哪儿方选。

PS:MySQL允许min()用来回到放肆列中的最小值,包蕴再次回到文本列的纤维值;但用于文书数据时,假使数额按对应的列排序,则min()再次回到最前方的行(min()函数忽视列值为null的行)

SELECT prod_id,prod_price,prod_name FROM products

2.招来单列

 

WHERE vend_id=1003 OR vend_id = 1002;//五个原则满足八个就能够

例如:select prod_name from products;

5、sum()函数

7.1.3妄想次序

解说:从products表中追寻出来prod_name列

sum()函数用来回到钦点列值的和(总计);例子如下:

SELECT prod_id,prod_price,prod_name FROM products

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

select sum(quantity) as items_ordered from orderitems where order_num = 20005;

WHERE vend_id=1003 OR vend_id = 1002 AND prod_price>=10;//AND操作符优先级高于O冠道

3.物色多列

函数sum()再次回到orderitems中有所quantity列的值之和,where子句保险只计算有些钦命列的数值;

就此地点清楚为:由承包商1003塑造的别的价位为30日币以上的成品,只怕由承包商1002制作的其余产品,而随意价格怎样

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

PS:选用标准的算数操作符,全数聚焦函数都可用来实践多少个列上的总结(sum()函数忽视列值为null的行)

SELECT prod_id,prod_price,prod_name FROM products

4.追寻全部列

 

WHERE (vend_id=1003 OR vend_id = 1002) AND prod_price>=10;//()优先级最高

select * from product;

6、distinct与聚焦函数

下边语句掌握为:价格在10法郎以上且有由1002或1002营造的全体产品

可取:不明朗列名的时候利用。

MySQL5.0.3以至未来的版本,聚焦函数和distinct能够搭配使用,例如:

7.2 IN操作符

5.distinct关键字

对富有的行试行总结,钦赐all参数或不给参数(all是暗中认可全体行为,无需钦赐,如果不钦定distinct,则只要为all);

IN操作符用来内定条件节制,其成效于OEvoque操作符极其,但更清楚直观,而且能够分包别的SELECT语句,是的能够改造态的确立where子句。

功效:提示mysql只回去差别的值的行

只含有分化的值,钦定distinct参数;

SELECT prod_price,prod_name FROM products

例如:select distinct vend_id from products;

设若钦点列名,则distinct只好用于count();distinct无法用来count(*),由此不允许使用count(distinct);distinct必得利用列名,无法用来计算如故表明式;

WHERE vend_id IN(1001,1002,1003) ORDER BY prod_name;

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

select avg(distinct prod_price) as avg_price from products where vend_id = 1003;

7.3 NOT操作符

6.limit

那条SQL语句中,使用avg()函数重临vend列中vend_id=1003的附和的price平平均价值值,因为运用了distinct参数,由此平均值只驰念不相同的值(唯大器晚成值)

NOT操作符:否定它今后所跟的别的条件。

效果与利益:重临结果的前几行

 

SELECT prod_price,prod_name FROM products

例如:select prod_name from products limit 5;

7、组合聚焦函数

WHERE vend_id NOT IN(1002,1003,1001) ORDER BY prod_name;

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

select语句能够包含八个汇聚函数,举个例子:

8.通用配符实行过滤

小心:检索出来第风流罗曼蒂克行是行0。假设行数相当不足,能重回多少就赶回多少。

select count(*) as num_items,

8.1 LIKE操作符

7.完全约束的表名

          min(prod_price) as price_min,

通配符(wildcard):用来匹配值的风流罗曼蒂克局地的特殊字符

select products.prod_name from product;

          max(prod_price) as price_max,

找出格局(searchpattern):由字票面价值、通配符或双方结合构成的查找条件

(四)用where实行数量过滤

          avg(prod_price) as price_avg

LIKE只是MySQL,后跟的搜寻形式应用通配符相配并不是平素相等相配实行相比

1、where子句

from products;

8.1.1 百分号(%)通配符

职能:钦命搜索条件,因为相符数据库表都包括多量的多少,少之甚少大家须求全数的行,平常会基于特定供给来领取数额的子集。where语句就是来钦点搜索条件(过滤条件)

那条SQL语句,使用了单条select语句推行4个聚众总计,再次来到多个值(products表中items的数据、price的参天、最低甚至平均值)

%表示其他字符现身自便次数,但不能够相配NULL

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

PS:在钦赐别称以带有某些集中函数的结果时,不应该利用表中实际的列名;这样有扶持使用SQL特别轻易和明白,以至衰亡方便消亡错误。

SELECT prod_price,prod_name FROM products WHERE prod_name LIKE'JET%';

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

 

SELECT prod_price,prod_name FROM products WHERE prod_name LIKE'%ANVIL%';
8.1.2下划线(_)通配符

解释:这里运用了格外测量检验,只回去prod_price为2.5的行,还能有等于、不对等、小于、小于等、大于、大于等、between操作符。

二、分组数据

下划线相配单个字符

增加:依据那一个操作符,可以做单个值极度(=)、不匹配检查(!=只怕<>)、范围值检查(between)、空值检查(is null)

1、group by创立分组

8.2通配符才能

事例1:between用法,它须要八个值。

在MySQL中,分组是在select语句中的group by子句中国建工业总群集团立的,举例:

1)不要过度施用通配符

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

select vend-id,count(*) as num_prods from products group by vend_id;

2)把通配符放在开头处,寻觅速度最慢

事例2:空值检查

这条SQL语句钦定了2个列,group by提醒MySQL依据vend_id排序并且分组(如若选用group by,则不用钦命要总结的各种组)

9.用正则表明式实行搜寻

select cust_id from customers where cust_email is null;

group by子句提示提示MySQL分组数据,然后都各种组实际不是任何结果集举行联谊;关于group by使用,请在乎以下法规:

正则表达式是用来协作文本的特级护理的串(字符集和)。

2.组合where子句

group by子句能够蕴涵自由数目标列(使得对分组实行嵌套,为数量分组提供更细心的决定);

9.1采用mysql正则表明式

指标:为了拓展越来越强的过滤调控,mysql允许给出多少个where自居,以逻辑操作符and也许or的方式接受。

如果在group by子句中嵌套分组,数据将在结尾鲜明的分组上拓宽汇总,即:创建分组时,钦点的拥有列都一同总结(所以不能够从各自列取回数据);

9.1.1主导字符相配

and例子:

group by子句中列出的各类列都必需是探求列或有效的表明式(但不能够是聚众函数),假设在select中运用表明式,则必得在group by子句中钦命相仿的表明式(不能够动用小名);

SELECT prod_name FROM products WHERE prod_name REGEXP '.000' ORDERBY prod_name;

select prod_id,prod_price,prod_name

除开聚焦总括语句外,select中各类列都必需在group by子句中提交;

+--------------+

from products

假定分组列中具有null值,则null将作为一个分组重回(假诺列中有多行null值,他们将分成意气风发组);

| prod_name |

where vend_id =1003 and prod_price <=10;

group by子句必得出现在where子句之后,order by子句早先;

+--------------+

解说:必需同有时间知足四个条件

PS:利用with rollup关键字,能够获得各类分组以致各样分组集中等级(针对每一种分组)的值。

| JetPack 1000 |

or例子:

 

| JetPack 2000 |

select prod_id,prod_price,prod_name

2、having过滤分组

+--------------+

from products

where子句都能够用having替代,差异在于where过滤行,having过滤分组;having支持具备的where操作符,举个例子:

上边语句使用了泽正表明式.000。.是正则表明式语言中二个奇特的字符。他代表相当任意八个字符,由此,1000和2002都相称且重回。

where vend_id =1003 or vend_id =1002;

select cust_id,count(*) as orders from orders group by cust_id having count(*) >= 2;

正则表明式相称不区分轻重缓急写,要不一样轻重缓急写能够在REGEXP后边使用BINA冠道Y关键字。

解释:满足率性三个准绳就能够

这条SQL语句中的having子句过滤count(*)>=2(2个以上的分组)的那多少个分组;

9.1.2进行or匹配

在乎:总计次序用圆括号约束,要不轻易模糊。

having和where的区别:

SELECT prod_name FROM products WHERE prod_name REGEXP '1000 | 2000';

3、in操作

where在多少分组前行行过滤,having在数据分组后开展过滤;where消亡的行不包罗在分组中(那说不定会退换总括值,进而影响having子句中基于那个值过滤掉的分组)

此处的|是正则表明式的OR操作符

功效:钦赐条件限定

having和where能够同一时间利用,比如:

9.1.3相配多少个字符之后生可畏

例子:select prod_name,prod_price

select vend_id, count(*) as num_prods from products where prod_price>=10 group by vend_id having count(*)>= 2;

SELECT prod_name FROM products

from products

这条SQL语句中,where子句过滤掉全部prod_price最少为10的行,然后根据vend_id分组数据;having子句过滤本领为2或2以上的分组;

WHERE prod_name REGEXP '[123] Ton' ORDER BY prod_name;

where vend_id in (1002,1003);

 

这里的[123]代表相配1或2或3。

释疑:检索经销商1002和1003创制的具备产品。in操作符后边随着的是法定值得清单。

3、分组和排序

9.2.4相配范围

另生龙活虎种写法:

group by和order by的区别:

SELECT prod_name FROM products WHERE prod_name REGEXP '[1-5] Ton';

select prod_name,prod_price

图片 10

这里[1-5]概念了三个限量

from products

order by的严重性:日常接受group by子句时,应该也给出order by子句,那是保险数据正确性的独一格局(千万不要依附group by排序数据)。

9.2.5神工鬼斧特殊字符

where vend_id = 1002 or vend_id = 1003;

 

SELECT vend_name FROM vendors WHERE vend_name REGEXP '\.' ORDER BYvend_name;

那正是说为啥使用in操作符呢,优点是如何啊?

4、select子句顺序

为了合作特殊字符,必得用\为前导。

(1)清楚只管

图片 11

\-表示-

(2)总括次序轻易精晓

 

\.表示.

(3)in实施比or实施的快

\表示

(4)在in中能够分包别的的select语句

\f表示换页

4、not操作符:

\n表示换行

成效:where子句中用来否认后跟条件的主要性字。

\r表示回车

例如:select prod_name,prod_price

\t表示制表

from products

\v表示纵向制表

where vend_id not in (1002,1003);

9.2.6相称字符类

分解:检索除了1002和1003之外的有着。

[:alnum:] 任性字母和数字(同[a-zA-Z0-9])

(五)通配符过滤

[:alpha:] 任意字符(同[a-zA-Z])

1、应用场景

[:blank:] 空格和制表符(同[\t])

  以前说的数码过滤都是对已知值进行过滤的,比方说相称一个值或许两个值,大于某些值或许是自惭形秽有个别值,大概是检查某些范围的值。

[:cntrl:] ASCII调控字符(ACII 0到31和127)

  不过后生可畏旦小编要探寻产品名中蕴藏anvil的有所产品吗,此时通配符就足以大展宏图了,大家得以行使通配符寻觅格局,寻觅产品名中任何岗位现身anvil的制品。

[:digit:] 放肆数字(同[0-9])

2、什么是通配符

[:graph:] 与[:print:]肖似,但不包含空格

概念:用来合作值得大器晚成都部队分的特殊字符

[:lower:] 大肆小写字母

怎样使用:为了在寻觅子句中央银行使通配符,必需利用like操作符。

[:print:] 放肆可打字与印刷字符

3、有如何通配符以致怎么样利用呢?

[:punct:] 既不在[:alnum:]又不在[:cntrl:]中的大肆字符

(生龙活虎)百分号通配符%

[:space:] 富含空格在内的任意空白字符(同[\f\n\r\t\v])

表示:任何字符现身恣意次数,也得以是0次

[:upper:] 大肆大写字母(同[A-Z])

例子:

[:xdigit:] 自便十七进制数字(同[a-fA-F0-9])

(1)找到以jet早先的成品,选拔jet前边为随机四个字符

9.2.6匹配四个实例

select prod_id,prod_name

SELECT prod_name FROM products

from products

WHERE prod_name REGEXP '\([0-9] sticks?\)' ORDER BY prod_name;//结果如下

where prod_name like 'jet%';

+----------------+

(2)相称任何地方包括anvil,无论在早前依然之后现身哪些字符。

| prod_name |

select prod_id,prod_name

+----------------+

from products

| TNT (1 stick) |

where prod_name like '%anvil%';

| TNT (5 sticks) |

(3)找到以s带头、以e结尾的装有成品:

+----------------+

select prod_name

正则表明式\([0-9]sticks?\)要求验证一下。\(匹配(,[0-9]十一分任性数字(这些事例中为1和5),sticks?相称stick和sticks(s后的?使s可选,因为?相配它掐年的别的字符的0次或1次现身),\)匹配)。

from products

SELECT prod_name FROM products

where prod_name like 's%e';

WHERE prod_name REGEXP '[[:digit:]]{4}' ORDER BY prod_name;

注意:

+--------------+

(1)可以用‘**%’的花样展开尾空格管理,也能够用trim函数举办拍卖

| prod_name |

(2)%通配符不能够相称null

+--------------+

(二)下划线通配符_

| JetPack 1000 |

代表:下划线只相称单个字符并非四个字符

| JetPack 2000 |

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

+--------------+

4、小结:

2 rows in set (0.00 sec)

通配符是生龙活虎种非常低价的检索工具,可是不可能过度施用,不然寻觅时间会很短。

[[:digit:]]{4}中{4}供给它日前的字符(大肆数字)现身七遍,所以[[:digit:]]{4}表示连在一同的率性4位数

(六)正则表明式相配

9.2.8定位符

1、啥是正则表明式

^ 文本的启幕

编辑:数据库 本文来源:mysql基础收拾

关键词: