mysql高效编程阅读摘要--基础篇_MySQL
mysql高效编程阅读摘要--基础篇
一,多个表的连接
1,内连接--表间的主键与外键进行相连,只取出键值一致的数据。
select user.name,order_basic.oid from order_basic inner join user on order_basic.uid = user.uid;
添加表的别名:select u.name,o.oid form order_basic as o inner join user as u on o.uid = u.uid;
//当域名太多时,以及外表的名称本身比较长时可以可以使用别名。
2,外连接--使用外连接可以取出只在一方表中存在的数据。分为左外连接和右外连接。
select u.name,o.oid from user as u left outer join order_basic as o on u.uid = o.uid;
//没有任何订单信息的用户也会被检索出来。--左外连接
select u.name, o.oid from user as u right outer join order_basic as o on u.uid p o.uid;
//没用用户的订单信息也会被取出来--右外连接
连接向哪边,哪边的信息更全!!内连接时抽取两表间键值一致的记录,而外连接时以其中一个表的全部记录为基准进行检索!!
3,多个表之间的连接
select ob.oid,ob.odate,p.pname,p.price,od.quantity,u.name from
(
(order_basic as ob inner join order_detail as od on ob.oid = od.oid)
inner join product as p on od.pid=p.pid
)inner join user as u on ob.uid = u.uid;
二,在其他查询的基础上进行数据检索
1,基本子查询
select * from product where price > (select avg(price) from product);
2,多个返回值的子查询
select name,address from user where uid not in (select uid from order_basic where odate='2010-07-24');
//返回在这一天没有下单的用户数据
3,子查询与exists运算符
select name,address from user where exists (select * from order_basic where user.uid = order_basic.uid)
//相关子查询户对基础表的每一条记录进行子查询的动作,如果基础表的数据量太大时会给数据库服务器带来很大的负荷,使用时要特别小心
三,表的维护和改造
1,alter table 命令
alter table ...modify 修改列的定义
alter table ...add 添加列
alter table ...change 修改列的名称和定义
alter table ...drop 删除列
alter table visitor modify name varchar(20)---修改列的类型,但通常情况下如果已经存在列数据是不宜修改类型的
alter table visitor add age int;添加了一个新的age列
alter table visitor add age int after name 在任意位置添加列
alter table visitor add age int first 在表开头处加新列
alter table visitor modify age int after name 改变列的位置
alter table visitor change birth birthday DATE 修改列名称和类型
alter table visitor drop age 删除列
2,复制表和删除表
create table customH select * from custom;这样的复制将表结构和数据同时复制过来了
create table customG like custom 只复制表的列构造
insert into customG select * from custom; 将数据复制到新建的表中【可以添加where和limit限制来获取数据】
drop table customG / drop table if exists customG
bitsCN.com