2019年12月18日 | 标签:

标题:mysql学习第9 天 where和from子查询的用法

——————————————————————————————————————————-

时间:2012/4/26 1:04:30

——————————————————————————————————————————-

内容:

首先看一个数据吧

 name  score
 cotine  53
 cotine  43
 stephen  75
 stephen  63

很简单很普通的分数表

cotine的人 有门功课是53有门是43

stephen的人 有门75 有门63

我想知道分数低于50的人的平均分

再解决这个问题之前 我们要学习下from的子查询

select * from  where表达式 大家都知道

其实这个表达式可以是一个子句

就是 select * from student where score between 0 and 50,

where就是里面的查询结果是作为外面的选择条件

from 就是里面的零时表就是外面的调用的 然后使用from 一定要小心 嵌套的时候 零时表一定要起个别名 要不然不能调用的

 

首先看一个数据吧

 name  score
 cotine  53
 cotine  43
 stephen  75
 stephen  63

很简单很普通的分数表

cotine的人 有门功课是53有门是43

stephen的人 有门75 有门63

我想知道分数低于50的人的平均分

再解决这个问题之前 我们要学习下from的子查询

select * from  where表达式 大家都知道

其实这个表达式可以是一个子句

就是 select * from student where score between 0 and 50,

where就是里面的查询结果是作为外面的选择条件

from 就是里面的零时表就是外面的调用的 然后使用from 一定要小心 嵌套的时候 零时表一定要起个别名 要不然不能调用的

标题:mysql 学习第10天 exist用户和where in的区别

——————————————————————————————————————————-

时间:2012/4/26 18:08:17

——————————————————————————————————————————-

内容:

有一个表1 叫TA 记录汶川地震时候捐款信息放着捐款人民和金额和名字

 name  donate
 stephen  100
 hou  200
 zhang  200
 zheng  200
xiao  200

有一个表2 叫TB 记录玉树地震时候捐款信息放着捐款人民和金额和名字

 name  donate
 xiao  100
 hou  200
 zhu  200
 ben  200
wu  200

现在我需要知道在玉树地震捐款的名单中 谁在汶川地址的时候已经捐过了

可以用where in来做

select * from TB where name in (select name from TA),

where in执行方法是先做内查询的  得到零时表的结果集

然后对tb表中每一户数据进行判断 是否在这个结果集中

那么计算方法是加入a表有a行 b表有b行 计算量是

1,取出经过筛选的a行数据—-2,对b行的每一行数据在a行数据中对比 找到就复合条件 比较A*B次  就得到结果

总的计算量是  读取(A)次+比较(A*B)次

也可以用 exists 做

select * from TB where exists (select 1 from TA TB.name=TA.name)

exists执行方法是 取出外表的每行数据 代入到 内部中进行比较, 如果存在 就得到结算

那么我门来算下这种方法的计算量

读取B行+ 比较(A*B)次

那么很明显 如果a比较小的时候 用in 也就是说先计算的表比较小时候用in

如果b小的时候用exists  也是读取小表用

 

那么简单了 什么时候用exists 什么使用用in呢

 

当我手上拿着一张小表 我要去大表里找小表中重复的数据我用exsit

如果手上是大表 我要小表中找重复的数据我用in

 

 

有一个表1 叫TA 记录汶川地震时候捐款信息放着捐款人民和金额和名字

 name  donate
 stephen  100
 hou  200
 zhang  200
 zheng  200
xiao  200

有一个表2 叫TB 记录玉树地震时候捐款信息放着捐款人民和金额和名字

 name  donate
 xiao  100
 hou  200
 zhu  200
 ben  200
wu  200

现在我需要知道在玉树地震捐款的名单中 谁在汶川地址的时候已经捐过了

可以用where in来做

select * from TB where name in (select name from TA),

where in执行方法是先做内查询的  得到零时表的结果集

然后对tb表中每一户数据进行判断 是否在这个结果集中

那么计算方法是加入a表有a行 b表有b行 计算量是

1,取出经过筛选的a行数据—-2,对b行的每一行数据在a行数据中对比 找到就复合条件 比较A*B次  就得到结果

总的计算量是  读取(A)次+比较(A*B)次

也可以用 exists 做

select * from TB where exists (select 1 from TA TB.name=TA.name)

exists执行方法是 取出外表的每行数据 代入到 内部中进行比较, 如果存在 就得到结算

那么我门来算下这种方法的计算量

读取B行+ 比较(A*B)次

那么很明显 如果a比较小的时候 用in 也就是说先计算的表比较小时候用in

如果b小的时候用exists  也是读取小表用

 

那么简单了 什么时候用exists 什么使用用in呢

 

当我手上拿着一张小表 我要去大表里找小表中重复的数据我用exsit

如果手上是大表 我要小表中找重复的数据我用in

 

标题:mysql学习第10天union用法和左链接

——————————————————————————————————————————-

时间:2012/4/28 0:37:01

——————————————————————————————————————————-

内容:

union用法

讲一个和多个表联合在一个新表中

默认有去除重复行的特点 加上union all可以加快速度 不让合并

union 后排序主要要加括号 要求union的2个或者多个表列的数量相同即可 类型可以不同

但是行的元素完全一样 后面的省略

 

左链接用法

类是excel的vlookup

左边是我的主表 我对主表某一行的数据需要到右边去查找对应的值 所以要

select biao1.lie1,biao1.lie2, from biao1 left join biao2 on biao1.lie1.biao2.lie1

 

用途就是表1列的一个数值 去表而中查询找到了就返回这一行的整个数据

union用法

讲一个和多个表联合在一个新表中

默认有去除重复行的特点 加上union all可以加快速度 不让合并

union 后排序主要要加括号 要求union的2个或者多个表列的数量相同即可 类型可以不同

但是行的元素完全一样 后面的省略

 

左链接用法

类是excel的vlookup

左边是我的主表 我对主表某一行的数据需要到右边去查找对应的值 所以要

select biao1.lie1,biao1.lie2, from biao1 left join biao2 on biao1.lie1.biao2.lie1

 

用途就是表1列的一个数值 去表而中查询找到了就返回这一行的整个数据

没有评论 (338 views)
2019年12月18日 | 标签:

标题:mysql学习第7天查询子句详解where 和group详解

——————————————————————————————————————————-

时间:2012/4/22 18:03:57

内容:

select * from table where

where 后面是表达式
在这以后上表达式是不是诚意
select * from table where 1=1 就全部行
select * from table where id>100
select * from table where id>parentid
where 配合算术表达式
<,>,>=,<=,<>,!=,=,
在值的范围内大于100小于10
between 10 and 100,
具体值举例 值是a,b,c,d都算复合
包含in (a,b,c,d)
也可以用逻辑表达式
大于10小于100
where id<100 and id<10
where id between 10 and 100;
not !
and  &&
or  ||
模糊查询
like
%任意字符
_ 单个字符
比如查ab开头的
ab%
比如查3位字符a开头的
a__
group语法
max min sum count 总行数
avg
max(price)
把列名字当参数看

select * from table where

where 后面是表达式
在这以后上表达式是不是诚意
select * from table where 1=1 就全部行
select * from table where id>100
select * from table where id>parentid
where 配合算术表达式
<,>,>=,<=,<>,!=,=,
在值的范围内大于100小于10
between 10 and 100,
具体值举例 值是a,b,c,d都算复合
包含in (a,b,c,d)
也可以用逻辑表达式
大于10小于100
where id<100 and id<10
where id between 10 and 100;
not !
and  &&
or  ||
模糊查询
like
%任意字符
_ 单个字符
比如查ab开头的
ab%
比如查3位字符a开头的
a__
group语法
max min sum count 总行数
avg
max(price)
把列名字当参数看

标题:mysql学习第8天having用法以where区别

——————————————————————————————————————————-

时间:2012/4/24 18:41:05

——————————————————————————————————————————-

内容:

前面已经学会了利用select from where 表达式

例如我要选成绩不及格的学生名单
select name,score from class where sroce<60
我们还可以进行多条件查询
例如在上面的再加个限制条件只要男学生的不及格的名单 必经女生爱面子嘛
select name,score from class where sroce<60 and sex like ‘f%’
但是如果先进行了计算先生成了一列 再对这个新生成的列进行赛选 where就力不从心了
例如
select name,avg(math_score,yuwen_sroce,english_sorcre) as  avg_score from class where avg_score<60
这句话就是错的 报错是 avg_score是不知道的列,原因是 where的执行顺序优先与avg,所以当我们用where avg_score还没诞生  因为我们一旦使用了where 语句先会对每行进行判断 是不是符合
如果符合 在进行后面的运算,所以没法 就要用having ,这样我们直接对结果进行筛选 而不是先筛选 再计算
where和having的区别是
where是先从硬盘读取数据在赛选 再结算 列出
having是先计算 在再选
对一行数据进行计算 新生成一列 需要用列名加符号例如语文分数+数学分数+英语分数
对一列数据记性计算就可以用公式 sum(语文分数+数学分数+英语分数)甚至是
select socre<100,name,id 这样也可以的

前面已经学会了利用select from where 表达式

例如我要选成绩不及格的学生名单
select name,score from class where sroce<60
我们还可以进行多条件查询
例如在上面的再加个限制条件只要男学生的不及格的名单 必经女生爱面子嘛
select name,score from class where sroce<60 and sex like ‘f%’
但是如果先进行了计算先生成了一列 再对这个新生成的列进行赛选 where就力不从心了
例如
select name,avg(math_score,yuwen_sroce,english_sorcre) as  avg_score from class where avg_score<60
这句话就是错的 报错是 avg_score是不知道的列,原因是 where的执行顺序优先与avg,所以当我们用where avg_score还没诞生  因为我们一旦使用了where 语句先会对每行进行判断 是不是符合
如果符合 在进行后面的运算,所以没法 就要用having ,这样我们直接对结果进行筛选 而不是先筛选 再计算
where和having的区别是
where是先从硬盘读取数据在赛选 再结算 列出
having是先计算 在再选
对一行数据进行计算 新生成一列 需要用列名加符号例如语文分数+数学分数+英语分数
对一列数据记性计算就可以用公式 sum(语文分数+数学分数+英语分数)甚至是
select socre<100,name,id 这样也可以的标题:mysql学习第9天order by limit用法

——————————————————————————————————————————-

时间:2012/4/25 1:09:05

——————————————————————————————————————————-

内容:

排序就不用多说了

order by 字段名 asc降序 默认是升序desc
可以多字段排序 前面的优先
limit是限制结果数量 limit 2,4 是省略前面2个 开始限制4个
这个是分页用的比较多 直接省略前面n页*每行个数
order by可以进行计算 先select 再order by 和where不一样的
所以可以用order by colo A减clo b
不像前面用where不行要用having

排序就不用多说了

order by 字段名 asc降序 默认是升序desc
可以多字段排序 前面的优先
limit是限制结果数量 limit 2,4 是省略前面2个 开始限制4个
这个是分页用的比较多 直接省略前面n页*每行个数
order by可以进行计算 先select 再order by 和where不一样的
所以可以用order by colo A减clo b
不像前面用where不行要用having
没有评论 (678 views)
2019年12月17日 | 标签:

标题:mysql 学习第4天 字符串和日期

——————————————————————————————————————————-

时间:2012/4/19 1:44:51

——————————————————————————————————————————-

内容:

视频78 字符串的学习

前面学习了数字类型 都是方法计算的
整数 范围和表示格式前者是tinyint 255 smallint 3w5534 表示格式  tinyint(9) zerofill 用0补充
浮点的float不精确 用decimal(m,m) 前面是总的数字位数 后面的小数点
这次学习字符型
varchar(10)变长型 效率低 但是对节约空间作用巨大 比如文章内容有的人很短 有的人很长
char(10) 定长 效率高 用来用户名等比较小的内容
中间的10是字符数量
6w个字符 其实汉字是2w个 varchar(m)0-6w多
char(0-255)
定长的不够的在使用用空格不起 这是char的特点 所以尾部有空格就会省略
varchar 有空格也不会省略 但是多用1-2个字节
char(255) 0.25K容纳255字符 汉字打3折
VARCHAR(65535) 60K 弄让6w字符 汉字打3折
TEXT(655350 60K  容纳6w字符  但不能全文索引
时间格式
其实也是需要输入带引号的
year是年 00-69是指出20开头的年费 逼这个小就是19开头的了
date是日日
time是时间
但是一般用时间戳 方便计算从1970-0-0-计算

视频78 字符串的学习

前面学习了数字类型 都是方法计算的
整数 范围和表示格式前者是tinyint 255 smallint 3w5534 表示格式  tinyint(9) zerofill 用0补充
浮点的float不精确 用decimal(m,m) 前面是总的数字位数 后面的小数点
这次学习字符型
varchar(10)变长型 效率低 但是对节约空间作用巨大 比如文章内容有的人很短 有的人很长
char(10) 定长 效率高 用来用户名等比较小的内容
中间的10是字符数量
6w个字符 其实汉字是2w个 varchar(m)0-6w多
char(0-255)
定长的不够的在使用用空格不起 这是char的特点 所以尾部有空格就会省略
varchar 有空格也不会省略 但是多用1-2个字节
char(255) 0.25K容纳255字符 汉字打3折
VARCHAR(65535) 60K 弄让6w字符 汉字打3折
TEXT(655350 60K  容纳6w字符  但不能全文索引
时间格式
其实也是需要输入带引号的
year是年 00-69是指出20开头的年费 逼这个小就是19开头的了
date是日日
time是时间
但是一般用时间戳 方便计算从1970-0-0-计算

标题:mysql学习第5天 增删改详解

——————————————————————————————————————————-

时间:2012/4/20 1:16:52

——————————————————————————————————————————-

内容:

建表案例

姓名 char(4)

年龄  tinyint()

邮件 varchar(10)

手机号 char(11)

简介 varchar(1000)

薪水 decimal(7,2)

入学日期 date

建立表过过程就是声明每个列和每个列的值的过程

create table class (

id int primary key auto_increment,

name char(4) not null default ”,

age tinyint not null default 0 ,

email varchar(10) not null default ”,

cellphone char(11) not null default ”,

intro varchar(1000) not null default ”,

salary decimal(7,2) not null default ‘1888.88’,

riqi date  not null default ‘2012-2-4′)

;

括号要小心 不要用中文的

增加数据的时候 可以省略某些列的消息 如果全省略就是全部列以为一次只能增加一行 所以数据无法批量操作 列与值是一一对应

省略版本 insert into class values (idvalue,namevalu…..) 你省略了前面的name 就要补充全部的value

部分版本 insert into class id,name values (idvalue,namevalue)

多个行插入 insert into class id,name values (idvalue,namevalue),(idvalue,namevalue)。。。。

update是可以批量操作的

update class set name=’stephen’

这样可以批量设置一整列的值

 

 

 

 

 

建表案例

姓名 char(4)

年龄  tinyint()

邮件 varchar(10)

手机号 char(11)

简介 varchar(1000)

薪水 decimal(7,2)

入学日期 date

建立表过过程就是声明每个列和每个列的值的过程

create table class (

id int primary key auto_increment,

name char(4) not null default ”,

age tinyint not null default 0 ,

email varchar(10) not null default ”,

cellphone char(11) not null default ”,

intro varchar(1000) not null default ”,

salary decimal(7,2) not null default ‘1888.88’,

riqi date  not null default ‘2012-2-4′)

;

括号要小心 不要用中文的

增加数据的时候 可以省略某些列的消息 如果全省略就是全部列以为一次只能增加一行 所以数据无法批量操作 列与值是一一对应

省略版本 insert into class values (idvalue,namevalu…..) 你省略了前面的name 就要补充全部的value

部分版本 insert into class id,name values (idvalue,namevalue)

多个行插入 insert into class id,name values (idvalue,namevalue),(idvalue,namevalue)。。。。

update是可以批量操作的

update class set name=’stephen’

这样可以批量设置一整列的值

 

 

 

标题:mysql学习第6天 前阶段总结+增加数据快速方法-导入数据+查询5种方法

——————————————————————————————————————————-

时间:2012/4/22 16:54:49

——————————————————————————————————————————-

内容:

列的类型

视频 11 12

数字
整数 tinyint(0-255) smallint(0-65535) mediumint in bigint
属性unsigned 无符号 zerofill 格式化输出int(8)zerofill 这样不足8位用补齐
primary key not null default‘’
小数 float(m,d)m多少个数 d多少个小数点  有unsigned
decimal
字符串
char(m) 可存储字符数255 定长 不足的用空格补齐  实存m字符 所以取出来的时候空格会消失
varchar(m)可以存储实际65535字节 汉字是2w字符 有1-2个字节存放长度 实际用实际字符加2个字节
日期
year 范围 1900-2115
date  范围 9999-12-31
time -838-59-59
datatime
一般用时间撮
一般增加数据的方法是
insert into users
[id,name,sex,birhtday]
values
(1,’stephen’,’sex’,’2015-01-5′),
(1,’stephen’,’sex’,’2015-01-5′)
但是数据多的时候需要从别的表调用
所以用这样的
insert into database.1
[id,users,sex]
select [id,users,sex] from dateabase1.2
不需要再加value了
跨表的话 用database.tablename
导入数据的时候 int和decimal不兼容的
所以要注意数据属性
查询的5种子句
where
group
order by
limit

列的类型

视频 11 12

数字
整数 tinyint(0-255) smallint(0-65535) mediumint in bigint
属性unsigned 无符号 zerofill 格式化输出int(8)zerofill 这样不足8位用补齐
primary key not null default‘’
小数 float(m,d)m多少个数 d多少个小数点  有unsigned
decimal
字符串
char(m) 可存储字符数255 定长 不足的用空格补齐  实存m字符 所以取出来的时候空格会消失
varchar(m)可以存储实际65535字节 汉字是2w字符 有1-2个字节存放长度 实际用实际字符加2个字节
日期
year 范围 1900-2115
date  范围 9999-12-31
time -838-59-59
datatime
一般用时间撮
一般增加数据的方法是
insert into users
[id,name,sex,birhtday]
values
(1,’stephen’,’sex’,’2015-01-5′),
(1,’stephen’,’sex’,’2015-01-5′)
但是数据多的时候需要从别的表调用
所以用这样的
insert into database.1
[id,users,sex]
select [id,users,sex] from dateabase1.2
不需要再加value了
跨表的话 用database.tablename
导入数据的时候 int和decimal不兼容的
所以要注意数据属性
查询的5种子句
where
group
order by
limit

 

没有评论 (271 views)