来自 首页 2019-11-14 17:26 的文章
当前位置: 澳门太阳娱乐手机登录 > 首页 > 正文

mysql基础整理,mysql必知必会

第六章《过滤数据》

(意气风发卡塔 尔(英语:State of Qatar)多少个数据库相关的定义

P35

1.数据库

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

数据库: 保存有团体数据的器皿。

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

多少的全数存款和储蓄、检索、管理和拍卖实际上是有数据库软件DBMS实现的。

#三个语句得到的结果豆蔻梢头致,因为钦点的是数值。

大家通过数据库软件DBMS来创造和操纵容器。

图片 1

2.表

P36

某种特定项目数据的结构化项目清单。表名是天下无双的,用来标识自身。

select prod_name,prod_price from products where prod_name='fuses'; #当内定的是文字时候,则要用引号(‘ ’卡塔 尔(英语:State of Qatar)。

表具备部分风味,定义了数量在表中如何的蕴藏,存款和储蓄什么样的数量,数据如何讲明,各部分音信怎样命名等。描述那组消息叫做方式(schema),它是关于数据库和表的布局及特色信息。

图片 2

3.列和数据类型

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

列:表中的三个字段

图片 3

数据类型:每一个列都有照顾的数据类型

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

4.行

图片 4

表中的一条记下

P37 不合作检查(不等于有些值卡塔尔

5.主键

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

一列或许黄金时代组列,能够唯意气风发区分表中的每种行。

2.1. select vend_id,prod_name from products where vend_id !=1003; #vend_id不等于1003# 1和2的表达的情趣是千篇一律的# 

习认为常上:不更新主键列中的值,不录取主键列的值,不在主键列中使用或然变动的值。

图片 5

6.外键

P38

外键为有些表的一列,它蕴含另八个表的主键值。

 select prod_name,prod_price from products where prod_price between 5 and 10; #检索prod_price在约束5到10之内的。注意:数值加上引号与否并不会潜移暗化结果#

(二卡塔尔mysql使用形式

图片 6

1.mysql是什么?

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

mysql是生机勃勃种DBMS,正是大器晚成种数据库软件。它是生龙活虎种基于客商机-服务器的数据库。

图片 7

2.mysql的优点:

P39

(1卡塔尔因为开源,费用低

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

(2卡塔尔试行进程快,质量好

图片 8

(3)可信赖

 

(4卡塔 尔(阿拉伯语:قطر‎易于安装和动用

3.连接好数据库后,就足以访问数据库并做操作,此中use是用来采撷数据库的,show是用来查阅mysql数据库、表、每部新闻的。

(1)use + database name;

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

      用use张开数据库,技巧读取中间的数据。

(2)show database;

      重回数据库的列表

(3)show tables;

      获取多少个数据库内的表的列表

(4)show columns from customers;

      展现每列的音讯,后边用的可比多的是 desc customers;

(三卡塔 尔(英语:State of Qatar)用select检索数据

1.select:

用项:从表中检索八个恐怕多个数据列。

select语句中要求反映二种信息:选哪些,从哪些地点选。

2.查究单列

例如:select prod_name from products;

解释:从products表中查搜索来prod_name列

小心:重返结果是未排序的。

3.追寻多列

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

4.招来全数列

select * from product;

亮点:不显著列名的时候使用。

5.distinct关键字

效果与利益:提示mysql只回去不一样的值的行

例如:select distinct vend_id from products;

应用:它必需放在列名前边

6.limit

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

例如:select prod_name from products limit 5;

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

留意:检索出来第风华正茂行是行0。尽管行数远远不足,能回到多少就回去多少。

7.全然约束的表名

select products.prod_name from product;

(四卡塔 尔(阿拉伯语:قطر‎用where举办多少过滤

1、where子句

成效:内定寻觅条件,因为相符数据库表都包涵多量的多少,超级少我们要求持有的行,平时会基于特定供给来领取数据的子集。where语句正是来钦命找出条件(过滤条件卡塔 尔(英语:State of Qatar)

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

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

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

扩展:依据那一个操作符,能够做单个值至极(=卡塔尔、不匹配检查(!=大概<>卡塔尔、范围值检查(between卡塔尔国、空值检查(is null卡塔 尔(英语:State of Qatar)

事例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卡塔 尔(英语:State of Qatar)总计次序轻易明白

(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、小结:

通配符是风姿洒脱种十二分有效的搜索工具,然而不能够过度使用,不然搜索时间会十分短。

(六卡塔 尔(英语:State of Qatar)正则表明式相配

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、有哪三种相称吗?

(意气风发卡塔 尔(英语:State of Qatar)基本字符匹配

例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和二零零二都符合条件。

(二)or匹配

利用:当自己想搜索五个串之不平时,使用|

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

select prod_name

from products

where prod_name regexp '1000|2000'

order by prod_name;

(三卡塔 尔(英语:State of Qatar)相称多少个字符之生机勃勃

代表:相配任何叁个单一字符,当想相配特定字符的时候,可经过制订豆蔻年华组用[]括起来的字符来产生。

例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:

select prod_name

from products

where prod_name regexp '[^123] Ton'

order by prod_name;

分解:相称的是除这几个字符意外的别样东西。

(三卡塔尔相称范围

会集能够用来定义要合营的一个要么多少个字符,若是想匹配0到9,能够用[0123456789],也足以用[0-9],並且约束不确定是数值,也足以相称字符,[a-z]拾分狂妄的假名字符。

例1:

select prod_name

from products

where prod_name regexp '[1-5] Ton'

order by prod_name;

解说:这一个表明式的野趣是匹配1到5,譬如.5 Ton也会回到。

(四卡塔尔匹配特殊字符

为了协作特殊字符,必需运用\为前导

例如:

(1) \-匹配-,\.匹配.

(2) 匹配用\

(五卡塔 尔(英语:State of Qatar)相称字符类

(1)[:alnum:]  --  大肆字符和数字

(2)[:alpha:]  --  任性字符

(3)[:blank:]  --  空格和制表

(4)[:cntrl:]  --  ascii调控字符

(5)[:digit:]  --  大肆数字

(6)[:graph:]  --  与[:print:]同风姿浪漫,可是不带有空格

(7)[:print:]  --  任意可打字与印刷字符

(8)[:lower:]  --  任性小写字母

(9)[:punct:]  --  既不在[:alpha:]也不在[:cntrl:]中的任性字符

(10)[:space:]  --  包涵空格在内的大肆空白字符

(11)[:upper:]  --  大肆大写字母

(12)[:xdigit:]  --  放肆十一进制数字

(六卡塔 尔(阿拉伯语:قطر‎匹配多个实例

意思:此前的正则表达式师傅和入室弟子相称单词现身。可是部分时候须要对巧夺天工书目进行更加强的主宰

例1:

select prod_name

from products

where prod_name regexp '\([0-9] sticks?\)'

order by prod_name;

解释:其中\是用来相配括号的,[0-9]用来合营大肆数字,sticks?相配stick和sticks,因为?相配他眼前任何字符的0次或许1次面世。

例2:

select prod_name

from products

where prod_name regexp '[[:digit:]]{4}'

order by prod_name;

解释:[:digit:]协作任意数字,{4}确切的渴求它日前的数字现身4次,全体正则表明式般配连在一同的随便4位数字。

同理,能够写成:

select prod_name

from products

where prod_name regexp '[0-9][0-9][0-9][0-9]’

order by prod_name;

扩展:

*意味着0个要么过个门户十二分

+表示1个也许八个非常

?表示0个或者1个匹配

{n}表示钦命书目标协作

{n,}表示不菲于钦点数量的协作

{n,m}表示极其数目标限量

(七)定位符

目标:为了同盟特定岗位的文书。

事例:搜索以叁个数依旧小数点从前的富有付加物,这里需求固定符^,表示文本的起来。

select prod_name

from products

where prod_name regexp '^[0-9\.]'

order by prod_name;

注意:在集合^[123]中象征否定该集结,在那间表示的是文件的先导。

扩展:

(1卡塔 尔(阿拉伯语:قطر‎^ 文本的开首

(2卡塔尔$ 文本的末段

(七卡塔尔计算字段

--为啥供给总计字段?

因为存款和储蓄在数据库表中的数额貌似不是应用程序所必要的格式,不经常大家必要对原始数据做一些调换等必要。那正是测算字段发挥成效的时候了。

注意:

(1卡塔尔大家要求直接从数据库中找出出调换、总结依旧格式化过的多寡,实际不是搜索出多少,然后再在客户机应用程序恐怕报告前后相继中重复格式化。

(2卡塔尔国总括字段并不实际存在于数据库表中,总计字段是运转时在select语句内创立的。

正文首要介绍八个知识点,三个是拼接字段,七个是实行算数总括。

1、拼接字段

东挪西撮:将值联结到协同组成叁个单个值。在select语句中,使用concat()函数来拼接多少个列,待拼接的生机勃勃生龙活虎串用逗号分隔。

例子:

select concat(vend_name,' (',vend_country,') ')

from vendors

order by vend_name;

2、推行算数计算

例子:

select prod_id,

          quantity,

          item_price,

          quantity*item_price as expanded_price

from orderitems

where order_name = 20005;

解释:其中expanded_price是贰个乘除字段,总括为quantity*item_price。在奉行算数总括的时候,加减乘除都足以甲酸,而且用圆括号来鲜明总结顺序。

扩大:删除右边的有所空格,能够用rtrim()函数,假如是删除侧面的有着空格,可用ltrim(),去掉两边的空格是trim(),在拼接字段不时候会用到。举例:

select concat(rtrim(vend_name),' (',rtrim(vend_country),')') as

vend_title

from vendors

order by vend_name;

(八卡塔 尔(阿拉伯语:قطر‎数据管理函数

本文首要介绍mysql扶持什么的函数,以致如何利用那个函数。

1、使用函数,那么重大有啥样项目标函数呢?

(1卡塔尔用于拍卖公事串的文书函数。比方说:删除可能填充钱,转变大小写

(2卡塔尔用于在数值数据上开展算数总括,比如说:返推却对值甚至代数运算

(3卡塔尔用于拍卖日期和岁月值,而且从这几个值中领到一定的成分的日期和岁月函数,譬如说再次来到那三个值的日子之差,检查日期的得力。

(4卡塔 尔(英语:State of Qatar)重临DBMS正利用的别有风味消息的种类函数。比方再次来到客商登入音讯、检查版本细节。

2、文本管理函数

(1卡塔尔rtrim():去除列值左侧的空格

(2卡塔 尔(英语:State of Qatar)upper():将文件转变大写

(3)left():再次来到串左侧的字符

(4卡塔 尔(英语:State of Qatar)length():再次来到串的尺寸

(5卡塔 尔(阿拉伯语:قطر‎locate():寻找串的二个子串

(6卡塔尔国lower():转变为题写

(7卡塔尔soundex():重临串的soundex值,发音相像

(8卡塔尔substring():再次回到子串的字符

例子:

select cust_name,cust_contact

from customers

where soundex(cust_contact) = soundex('Y Lie');

3、日期和岁月管理函数

(1卡塔 尔(英语:State of Qatar)adddate() :扩展三个日期(天、周卡塔 尔(阿拉伯语:قطر‎

(2卡塔 尔(阿拉伯语:قطر‎addtime() :扩张一个时光(时、分卡塔尔

(3卡塔 尔(英语:State of Qatar)curdate():再次回到当今日子

(4卡塔 尔(英语:State of Qatar)date():再次回到日期时间的日期部分

(5卡塔 尔(英语:State of Qatar)datediff():计算七个日子之差

(6卡塔 尔(阿拉伯语:قطر‎day():重临叁个日期的天意部分

(7卡塔 尔(阿拉伯语:قطر‎dayofweek():对应叁个日子重临对应星期几

(8卡塔尔hour():重返四个日期的钟点有些

(9卡塔 尔(英语:State of Qatar)minute():重临多个时刻的分钟部分

(10卡塔 尔(阿拉伯语:قطر‎month():重返三个光阴的月度部分

(11卡塔尔国now():再次来到当前不久子的时间

(12)second():重返二个时日的秒部分

(13卡塔 尔(英语:State of Qatar)time():重临一个日亥时间的大运部分

(14卡塔尔year():重返二个日子的年份部分

瞩目:不管是插入表依然更新表依旧用where子句举办过滤,日期必得为yyyy-mm-dd的格式,纵然其余的日期格式大概有效,可是这是首要推荐的日子格式,它撤消了多意义性。

例如:

select cust_id,order_num

from orders

where order_date = '2015-09-01';

设若日期的花样是‘二〇一五-09-01 00:00:00’,那么就招来不出去,所以进一层可靠的样式为:

select cust_id,order_num

from orders

where date(order_date) = '2015-09-01';

假诺自身想寻找出二〇〇七年三月下的具备订单:

方法一:

select cust_id,order_num

from orders

where date(order_date) between '2005-09-01' and '2015-09-30';

方法二:

select cust_id,order_num

from orders

where year(order_date) =2005 and month(order_date)=9;

4、数值处理函数:

它平时用于代数、三角或几何运算。

abs、cos、exp、mod、pi、rand、sin、sqrt、tan

(九卡塔 尔(阿拉伯语:قطر‎汇总的数量据

那有些重大介绍聚焦函数以至哪些采用它们来汇总表的数额。

1、聚焦函数的定义:运营在行组上,计算和重回单个值的函数。

2、mysql主要的相会函数有啥?

(1卡塔 尔(英语:State of Qatar)avg:重临有个别列的平均值

(2卡塔 尔(阿拉伯语:قطر‎count:再次回到某列的行数

(3卡塔 尔(英语:State of Qatar)max:再次回到某列的最大值

(4卡塔尔国min:重返某列的最小值

(5卡塔 尔(英语:State of Qatar)sum:重回某列值之和

3、avg

概念:

(1卡塔尔通过对表中的行数计数病计算特定列值之和。求得该列的平均值。

(2卡塔 尔(阿拉伯语:قطر‎avg能够用来回到全数列的平均值,也可以用来范数特定列或行的平均值。

例子:

selelct avg(prod_price) as avg_price

from product;

说明:重返products表中具有付加物的平均价值

select avg(prod_price) as avg_price

from products

where vend_id = 1003;

解说:内定特定行恐怕特定列求平均值,它回到的是一定代理商1003所提供产物的平均价值。

注意:

(1卡塔 尔(英语:State of Qatar)avg只好明确特定数值列的平均值,何况列名必得作为函数的参数给出。假使说我们想博得更加多列的平均值,要动用四个avg()函数。

(2卡塔 尔(阿拉伯语:قطر‎avg()函数忽视列值为NULL的行

4、count

概念:

(1卡塔 尔(英语:State of Qatar)count()主倘使用来计数

(2卡塔尔国利用count()鲜明表中央银行的数目,甚至符合特定条件的行的数码

注意:

(1)使用count(*)对表中央银行的多寡举行总括,不管是表列中带有的是null和非null

(2卡塔 尔(阿拉伯语:قطر‎使用count(column)对一定的具有值的行开展计数,忽视null

例子:

select count(*) as num_cust

from customers;

分解:重回customers表中顾客的总和,这里运用count(*)对具备的行举行计数,不管各行中有怎么样值,计数值将要num_cust中返回。

select count(cust_emial) as num_cust

from customers;

表明:只对有标准邮件的客商开展计数。

5、max()

概念:max()再次回到钦赐列的最大值,可是max()要求制订列名

例子:

select max(prod_price) as max_price

from products;

释疑:再次回到products表中最贵的物料。

注意:

(1卡塔 尔(阿拉伯语:قطر‎在用来文书数据的时候,如若数量是按相应的列排序,则max()再次来到的是终极风姿洒脱行。

(2卡塔 尔(英语:State of Qatar)max()函数忽视列值为null的行

6、min()

概念:max()再次回到钦命列的小小值,不过max()须求制定列名,使用办法与max同理

7、sum

概念:用来回到钦赐列值的和(计算卡塔 尔(英语:State of Qatar)

例子:

select sum(quantity) as items_ordered

from orderitems

where order_num = 20005;

演讲:sum(quantity)用来回到订单中具有货品的数目之和,where子句值总结有个别物品订单中的货物。

同理,sum也得以用来合计计算值。比方上面的例证,能够博得总的订单金额,where子句相像保险只总计有个别货色订单中的物品。

select sum(item_price*quantity) as total_price

from orderitems

where order_num = 20005;

只顾:sum()会忽视列值为null的行。

8、在聚合函数中用distinct

事例:加了distinct参数之后,平均值只构思种种分化的标价

select avg(distinct prod_price) as avg_price

from products

where vend_id = 1003;

注意:

(1卡塔尔distinct只好用来count()

(2)不能用count(distinct)

(3)不能用distinct count(*)

9、组合集中函数,看见这些事例就能够秒懂~

例如:

select count(*) as num_items

          min(prod_price) as price_min,

          max(prod_price) as price_max,

          avg(prod_price) as price_avg

from products;

(十卡塔 尔(阿拉伯语:قطر‎排序检索数据

目标:为了明显的排序用select语句检索出来的数额,能够用order by子句,order by往往取一个照旧四个列的名字,依据此对出口举行排序。

1、如何用order by

遵照单个列排序的例证:

select prod_name

from products

order by prod_name;

借使依照四个列举办排序的话,只要列出列名,列名之间用逗号分隔。例如上边的例子,首先依照标价排序,再依据货物名字排序。

select prod_id,prod_price,prod_name

from products

order by prod_price,prod_name;

在意:对于上述例子,仅仅在多个行兼顾相符的prod_price值时才对prod_name实行排序。假若prod_price列中颇有的值都以唯意气风发的,那么就不会服从prod_name排序。

2、钦点排序方向

升序:asc,默认的

降序:desc

事例:依据价钱降序,最贵的在头里。

select prod_id,prod_price,prod_name

from products

order by prod_price desc;

意气风发经遵照八个列实行排序呢?举例:

select prod_id,prod_price,prod_name

from products

order by prod_price desc,prod_name;

演说:以降序排序产品,然后再对产物名排序。

注意:这里只对prod_price降序了,借使想在八个列上举行姜旭排序,必得对各样列内定desc关键字。

恢宏:使用order by和limit的结合,能够寻找多个列的参天和最低的值。

举例说:怎么样寻找最昂贵物品的值

select prod_price

from products

order by prod_price desc

limit 1;

(十风度翩翩卡塔尔分组数据

1、什么是分组?

分组正是汇总表内容的子集,分组允许把数量分为多个逻辑组,以便能对各个组举行联谊总计。

2、涉及的子句

group by子句和having子句

3、上边从四个部分介绍分组:

(1卡塔 尔(英语:State of Qatar)创立分组 --group by

(2卡塔 尔(阿拉伯语:قطر‎过滤分组 --having

(风流罗曼蒂克卡塔尔国成立分组

举例:

select vend_id, count(※) as num_prods

from products

group by vend_id;

解释:

对vend_id分组,而且总计个数。

group by内定要被分组的目的(vend_id卡塔 尔(阿拉伯语:قطر‎,并做计算。

注意:

(1卡塔 尔(英语:State of Qatar)group by子句能够包括自由数指标列

(2卡塔 尔(阿拉伯语:قطر‎假诺在group by子句中嵌套了分组,数据将会在结尾鲜明的分组上海展览中心开汇总。

(3卡塔 尔(英语:State of Qatar)在group by中列出的列不能够是汇聚函数

(4卡塔 尔(阿拉伯语:قطر‎若是在select中使用表明式,则必须在group by子句中钦命相近的表明式,不能够接受别称。

(5卡塔 尔(阿拉伯语:قطر‎除了聚焦计算语句之外,select语句中的没个列都必得在group by子句中付出。

(6卡塔 尔(阿拉伯语:قطر‎如若分组列中有所null,则它们将会作为叁个分组重返。

(7卡塔尔group by必需在where语句之后,order语句早前。

(二卡塔 尔(阿拉伯语:قطر‎过滤分组

意思:规定了席卷什么样分组,杀绝哪些分组

比方说:笔者想列出足足有五个订单的具有顾客,当时,必需凭仗完整的分组进行过滤,实际不是基于各自的行进行过滤。

瞩目:where过滤钦点的是行而不是分组。where未有分组的概念。

引进:having进行过滤分组,事实上,全体品种的where子句都足以用having来代替。

where和having的分别:where过滤行,having过滤分组

举例1:

select cust_id, count(※)  as orders

from orders

group by cust_id

having count(※)>2;

批注:订单数大于2的客商

举例2:

select vend_id, count(※) as num_prods

from products

where prod_price >10

group by vend_id

having count(※)>2;

演讲:同期用了where和having,表示具有2个以上,价格10以上的出品的代理商。

终极注意:

诚如在选择group by子句的时候,应该给出order by子句,这是保障数据精确排序的唯大器晚成办法。千万不要依附group by的排序数据。

总结:

select子句的依次:

select

from

where

group by

having

order by

limit

(十二)子查询

子查询日常现身的场馆:

(1卡塔尔国where子句的in操作符中

(2卡塔 尔(英语:State of Qatar)用来填充总结列

1、在那举三个事例,就知道子查询是怎么着,以至子查询怎么着运用了。

比喻:列出订购货品TNT2的装有客商。

参照:mysql必知必会样例表

关系的表:orderitems、orders、customers

查找的步调:

(1卡塔 尔(阿拉伯语:قطر‎检索包涵货物TNT2的持有订单号

select order_num

from orderitems

where prod_id = 'TNT2';

获取的结果是:order_num:20005和20007

(2卡塔尔国查询全数订单二零零三5和二〇〇四7的客商

select cust_id

from orders

where order_num in (20005,20007);

赢得的结果是:cust_id:10001和10004

(3卡塔尔国检索客商id为10001和10004的顾客音信

select cust_name,cust_contact

from customers

where cust_id in (10001,10004);

即拿到了最终的结果

将那多少个查询归并为三个:

select cust_name,cust_contact

from customers

where cust_id in (select cust_id

                            from orders

                            where order_num in (select order_num

                                                              from orderitems

                                                              where prod_id = 'TNT2'));

2、再举八个例证:以后内需展现customers表中每一种顾客的订单总额。

事关的表:customers,orders(存款和储蓄订单与相应的客户id卡塔 尔(英语:State of Qatar)

(1卡塔尔先过滤有个别特定顾客的订单数量,再松开到各样客商。

select count(※) as orders

from orders

where cust_id = 10001;

(2)对各类客户展开count计算

select cust_name,

          cust_state,

          (select count(※)

            from orders

            where orders.cust_id = customers.cust_id) as orders

from customers

order by cust_name;

备注:该子查询对寻觅出的种种客商施行三遍

子查询的利害:

优点:

在where子句中使用子查询能够编写出功效很强並且很灵巧的SQL语句

缺点:

(1卡塔尔国包括子查询的select语句难以阅读和调试。

(2卡塔尔国尽管对嵌套的子查询的数额未有约束,可是在实际应用中出于性格的界定,不可能嵌套太多的子查询。

本文由澳门太阳娱乐手机登录发布于首页,转载请注明出处:mysql基础整理,mysql必知必会

关键词: