mysql取最大值_MySQL学习之路(四)

16b434914b6c9ee340e60600bf401bb4.png

1.查询数据表记录

select 字段1,字段2,字段3... from 数据表 查询所选字段

0de26c66966543855af7b8784be74914.png

或者

select * from 数据表 查询所以数据

ad1d78d1485b6138dac1f34c6872d020.png

PS:这里的sbirth字段是datetime型得符合标准

2.为列取别名

列名 as 别名

给sno起别名为学生学号,并显示记录

822212a764b53b270f7817b906b05bbc.png

列名 别名

426be341bec279177dc1a14a3747dffe.png

now() 指的是当前查询时间

3.使用distinct关键字取消查询重复结果

82ecd041a3c97a497e44aa3d1cef7654.png

distinct

查询不重复sgender

772188fdf380ded8f7ce1638ad744615.png

套用别名

02db3ea6b0e8e356c2ff1b7b6bfa07f0.png

4.where限定查询条件

where

例:查询性别为男的学生

f74d40ed4e68518dbfbd719add86374d.png

5.模糊查询

列名 (not)like '模式字符串'

通配符

%:匹配任意长度字符串

_:匹配任意单个字符

beed8df7c20e22bec62137c8905c7f72.png

下面举个例子

查询sno前面为2218的记录

d409955988b0aefe94ec65e2aa9d22e5.png

查询sno前面为2218且性别为嬲的记录

c422cf783928567d8e0a1c7c56ef6677.png

6.order by 子句

对结果进行重新排序,放在语句最后

select [all|distinct] 要查询的内容

from 表名

[where 条件表达式]

order by 列名[asc|desc];

asc 使用升序排列

desc 使用降序排列

order by子句一定写在where子句后

栗子:查询性别为男且按照学号降序排序

404f52ce044f98962f6087e40a861755.png

7.使用集合函数

count([distinct|all]列表达式):计算一列值的个数

count(*):返回有多少行,包括有空值的行

sum([distinct|all]列表达式):计算一列数据总和(此列为数值型,如果为“1234”也可以)

avg([distinct|all]列表达式):计算一列数据平均值(此列为数值型)

max([distinct|all]列表达式):计算一列最大值(此列为数值型)

min([distinct|all]列表达式):计算一列最小值(此列为数值型)

栗子1:下列表示最小学号

c5ae0a55b1d0fc318a0dffa79c362a3e.png

栗子2:

e543831d57162676933c2b1d668afda6.png

8.group by 子句

对查询结果按列的值进行分组,列值相同的放在同一组。这一组里面该列的值都相同,其他的列的信息也有

当group by和集合函数配合使用时,将对各组分别运用集合函数

select [all|distinct] 要查询的内容

from 表名

[where 条件]

group by 列名

[having 条件];

下列两个栗子:

fb87e0919e3a12fb2ee2221fe1b4c728.png

5142dee6714b3ded6b99e58e5a1f5729.png

count(*) 是集合函数,所以不必要

having子句只能出现在group by子句后面,对于分组后的结果进行条件筛选

ed216bcba618195cdf9b2994dcb97f8f.png

9.内连接查询

df0103706bd82074fe6b0a25b4c88747.png

将符合条件的两个表相应的记录连接起来形成一个新的表。

select 列名

from 表名1[inner] join 表名2

[on 表名1.列名 比较运算符 表名2.列名]

或者

select 列名

from 表1,表2

where 表名1.列名 比较运算符 表名2.列名

/*

02729d735a3c38c773f8d98408d91a7f.png

bef9bdb5590d4540f8a901e609948ec8.png

cc07e4fcfabe06b58e3d9e3d38e5305c.png

*/

输出在学生信息表sno和studentinfo中sno一样的记录并连接起来,且输出成绩为90的记录

fdc3eddc0a918c7d920da0ed72476f11.png

另一种方法

46a47f79035a6e5a7c652c3db47ec40c.png

别名只要取了,在这个全局皆可使用

f73328aaf78bb14db8d42c1715384d7e.png

10.外连接

将两个表根据条件连接起来合成一个表,又分成下列三种情况:

左外连接 关键字left join

ca655e94d73ed7b96996552177e6e1cb.png

关键字左边的表的信息会被全部打印出来,并且接上右边表符合条件的记录,而如果左边的表中记录不含右边表字段的信息,那么就打印为null。

我先打印出两个表的信息便于观察

25df19076d48e38f07fb220577808825.png

例子:

3e009b82a81c3267155dbd3a406653a4.png

右外连接 right join

74c757bea2dfb5826e02a1e09fc7f6a9.png

关键字右边的表的信息会被全部打印出来,并且接上左边表符合条件的记录,而如果右边的表中记录不含左边表字段的信息,那么就打印为null。

86d2cf5feaa91fa66331e955d836d400.png

select 字段

from 表1 left|right join 表2

on 表名1.列名 比较运算符 表名2.列名

全连接 full join

两表的全部信息都被打印,并且连成一个表

ecafb9f85f5b1ca3b55186143e39b728.png

在mysql中没有full join用下面语句模拟

707996d0b0f0808d03567c28946a642d.png

union关键字表示对两个相同的记录合并,不相同的独立,并构成一个表。

运用union所以下面自己实现

2f431b98e3232b294ff5015b15055c30.png

求笛卡尔积表

[a1,a2,a3...an][b1,b2,b3...,bn]=a1*b1+a2*b2+a3*b3...+an *bn

42facdd8b80c90cfe523db6b2291bd78.png

11.自连接

由于是自己和自己连接,所以要起别名

下面举个栗子

选择与22185556同性别的学生信息

aab7b699d1cb638d78885663fec8f3d9.png

这个时候打印s2的字段就行了

12.子查询

(1)any

可以理解为对于每一个父子句中的记录和每一个子句中的记录得到的结果比较,只要有一个符合条件那么就返回true;

any(子句)

查询sgrade等于90的学生的性别

法1

2a27ad891e204c914703628f8542a0fc.png

法2:

f805ee414b956f01b490ed86b18cf1c5.png

f377691340bf6ec37332e9833cf141b3.png

但不可

1a4d0011a6a128a0affcb2b293547e11.png

法1和法2比法1更快

法1是用studentinfo的记录和学生信息中sgrade=90的记录比较,比较并选出sno一样的记录

法2是先内连接,然后从合并的表中选择符合条件的记录

(2)all

可以理解为对于每一个父子句中的记录和每一个子句中的记录得到的结果比较,只有全部符合条件才就返回true;

/*

b33ceff9df886fda73091e301a527ad8.png

f7c9fc55489133c75a5e8ac4fa305ae9.png

18566e3921b06be5e048c55d217bb3e2.png

*/

接下来查询表studentinfo中符合sclass等于学生信息每一条符合sgrade=90记录的sclass的记录

dd423a86870dc567916320dd2ab63056.png

(3)[not]in

和=any(子句)类似,但any可以<any(...) 或 >any(...)等等

616f417f525c3fe3c4c347414ce3a918.png

not in 和 <>any !=any都等价

(4)(not)exists

exist如果存在子句得出结果的表中不为空的话,返回为true

not exist如果存在子句得出结果的表中不为空的话,返回为false

栗子:如果studentinfo表中存在sgender='嬲',那么就输入studentinfo表的全部记录

c0d945dcc263f43d09e05d5eda63785b.png

如果studentinfo表中不存在sgender='嬲',那么就输入studentinfo表的全部记录

981db2a21f40f22d533bcb94692d4cd9.png

如果studentinfo表中不存在sgender='女',那么就输入studentinfo表的全部记录

78bd35b502411ea7759174014d1ee58d.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值