标题:mysql学习第11天right join inner join用法
——————————————————————————————————————————-
时间:2012/4/28 13:03:09
——————————————————————————————————————————-
内容:
create table boy
(name varchar(10),flower varchar(10)) character set utf8;
insert into boy
values
(‘谢霆锋’,’菊花’),
(‘吴宗宪’,’梅花’),
(‘刘德华’,’桃花’),
(‘周润发’,’玫瑰’),
(‘小沈阳’,’没钱花’);
create table girl
(name varchar(10),flower varchar(10)) character set utf8;
insert into girl
values
(‘张柏芝’,’菊花’),
(‘张静初’,’玫瑰’),
(‘邱淑贞’,’桃花’),
(‘张柏芝’,’玫瑰’),
(‘空姐’,’菊花’),
(‘小泽玛莉亚’,’玫瑰’),
(‘范冰冰’,’茉莉’);
select boy.*,girl.* from boy left join girl on boy.flower=girl.flower;
select boy.*,girl.* from boy right join girl on boy.flower=girl.flower;
select boy.*,girl.* from boy inner join girl on boy.flower=girl.flower;
解读一个误区 left join不是excel的 vlookup
如果是主表在附表有2行以上匹配的时候 他会全部列出来 主表会重复
比如主表10行数据 附表10个行数 最后的表的数据大于等于10行 主表没配对上的留空
主表多配对的列出来多有配对的情况
inner join就是删掉了没有配对的情况
create table boy
(name varchar(10),flower varchar(10)) character set utf8;
insert into boy
values
(‘谢霆锋’,’菊花’),
(‘吴宗宪’,’梅花’),
(‘刘德华’,’桃花’),
(‘周润发’,’玫瑰’),
(‘小沈阳’,’没钱花’);
create table girl
(name varchar(10),flower varchar(10)) character set utf8;
insert into girl
values
(‘张柏芝’,’菊花’),
(‘张静初’,’玫瑰’),
(‘邱淑贞’,’桃花’),
(‘张柏芝’,’玫瑰’),
(‘空姐’,’菊花’),
(‘小泽玛莉亚’,’玫瑰’),
(‘范冰冰’,’茉莉’);
select boy.*,girl.* from boy left join girl on boy.flower=girl.flower;
select boy.*,girl.* from boy right join girl on boy.flower=girl.flower;
select boy.*,girl.* from boy inner join girl on boy.flower=girl.flower;
解读一个误区 left join不是excel的 vlookup
如果是主表在附表有2行以上匹配的时候 他会全部列出来 主表会重复
比如主表10行数据 附表10个行数 最后的表的数据大于等于10行 主表没配对上的留空
主表多配对的列出来多有配对的情况
inner join就是删掉了没有配对的情况
标题:mysql 学习第12天 left join嵌套使用和列操作
——————————————————————————————————————————-
时间:2012/4/30 1:18:25
——————————————————————————————————————————-
内容:
create table goods
(goods_id int primary key auto_increment,
goods_name varchar(20),cate_id int,brand_id int,price decimal(7,2) not null default 0.01);
创建一个goods表 里面的主键是goods_id 这里的auto_increment不要拼写错误
包含商品名称商品id 品牌id 产品类型id价格 基本是以数字为住 方便快速查询同类商品(where cateid=3 比where catename=手机 效率要快很多)和分类 节约空间 用数字代表长的字符串
修改商品分类信息 只用去调用的信息里修改就可以 不影响主表 特别是主表数据几万条 我只用修改id对应的名称即可 不用update几万条数据
insert into goods
(goods_name,cate_id,brand_id,price)
values
(‘联想手机’,1,1,1334.44),
(‘三星手机’,1,2,2334.44),
(‘苹果电脑’,2,3,7334.44),
(‘苹果手机’,1,3,5334.44);
给商品表信息加一些数据
create table category
(cate_id int,cate_name varchar(20));
insert into category
values
(1,’手机’),
(2,’电脑’);
创建一个类别名称表 给商品表调用
create table brand
(brand_id int,brand_name varchar(20));
insert into brand
values
(1,’联想’),
(2,’三星’),
(3,’苹果’);
创建一个品牌名称表 方便调用品牌名
select * from goods left join category on cate_id=category.cate_id;
我现在要根据商品表 主表里的信息查找对应的商品类别名称 这里面的cate-id要指明 要不会分校不清楚
select * from (select goods_id,goods_name,brand_id,goods.cate_id,category.cate_name from goods left join category on goods.cate_id=category.cate_id) as temp left join brand on temp.brand_id=brand.brand_id;
我这里要做一个2次调用 嵌套链接 把前面的结果当场一个临时表 然后用as 给他起个名字 再用这个临时的temp表和品牌表一起做左链接 调用
select * from goods left join category on goods.cate_id=category.cate_id left join brand on goods.brand_id=brand.brand_id;
或者直接在后面写 因为mysql计算顺序的时候 首先是计算from后面的得到原始数据 再安装select去除相应的列
再用where判断 所以我不用带括号直接 left join 再接一个left join
关于列修改
增加列是
alter table tablename add colomnname int after|first
来定位新增加的列
例如
alter table goods add test int first;
修改列
alter table goods test stock int;
删除
alter table goods drop stock;
create table goods
(goods_id int primary key auto_increment,
goods_name varchar(20),cate_id int,brand_id int,price decimal(7,2) not null default 0.01);
创建一个goods表 里面的主键是goods_id 这里的auto_increment不要拼写错误
包含商品名称商品id 品牌id 产品类型id价格 基本是以数字为住 方便快速查询同类商品(where cateid=3 比where catename=手机 效率要快很多)和分类 节约空间 用数字代表长的字符串
修改商品分类信息 只用去调用的信息里修改就可以 不影响主表 特别是主表数据几万条 我只用修改id对应的名称即可 不用update几万条数据
insert into goods
(goods_name,cate_id,brand_id,price)
values
(‘联想手机’,1,1,1334.44),
(‘三星手机’,1,2,2334.44),
(‘苹果电脑’,2,3,7334.44),
(‘苹果手机’,1,3,5334.44);
给商品表信息加一些数据
create table category
(cate_id int,cate_name varchar(20));
insert into category
values
(1,’手机’),
(2,’电脑’);
创建一个类别名称表 给商品表调用
create table brand
(brand_id int,brand_name varchar(20));
insert into brand
values
(1,’联想’),
(2,’三星’),
(3,’苹果’);
创建一个品牌名称表 方便调用品牌名
select * from goods left join category on cate_id=category.cate_id;
我现在要根据商品表 主表里的信息查找对应的商品类别名称 这里面的cate-id要指明 要不会分校不清楚
select * from (select goods_id,goods_name,brand_id,goods.cate_id,category.cate_name from goods left join category on goods.cate_id=category.cate_id) as temp left join brand on temp.brand_id=brand.brand_id;
我这里要做一个2次调用 嵌套链接 把前面的结果当场一个临时表 然后用as 给他起个名字 再用这个临时的temp表和品牌表一起做左链接 调用
select * from goods left join category on goods.cate_id=category.cate_id left join brand on goods.brand_id=brand.brand_id;
或者直接在后面写 因为mysql计算顺序的时候 首先是计算from后面的得到原始数据 再安装select去除相应的列
再用where判断 所以我不用带括号直接 left join 再接一个left join
关于列修改
增加列是
alter table tablename add colomnname int after|first
来定位新增加的列
例如
alter table goods add test int first;
修改列
alter table goods test stock int;
删除
alter table goods drop stock;