sql基础操作总结

本文主要根据自己的学习过程总结的文章,可能并不全面,牛人请绕过~

show create table user \G; 查看创建user表的sql

修改表结构:

alter  table tablename modify[culumn] column_definition [first|after col_name]
例子:
修改emp的字段数据类型
alter table  emp modify ename varchar(20);
表首增加字段
alter table emp add column id int(10) first;
删除字段
alter table emp drop [column]  id;
字段改名 
alter table tablename change [column] old_name column_definition [first/after col_name]
更改表名
alter table emp rename [to] test;

注释: modify只能修改字段数据类型,不能修改字段名称,first/after 表示修改字段的顺序

插入操作:

insert into table emp(f1,f2,f3) values(v1,v2,v3);
insert into table  emp values(v1,v2,v3);
一次插入多条记录
insert into table emp(f1,f2,f3)
values
(r1_v1,r2_v1,r3_v1),
(r1_v2,r2_v2,r3_v3);

查询:

1.查询不重复记录 distinct

select distinct deptno from emp;

2.条件查询 where
where字段比较 >、<、>=、<=、!= 等,多条件用or、and等
3.排序和限制 order by
排序关键字(默认是升序排列):

  DESC 表示按照字段进行降序排列

  ASC 表所升序排列

  limit n显示前N条记录
4.聚合操作

语法: select [fidled1,field2,...,fieldn] fun_name
from  tablename
[where where_contition]
[group by  field1,field2,...fieldn]
[with rollup]
[having where_contition]

fun_name :表示做聚合操作的函数,比如:sum、count(*)、max、min
group by  :表示要进行分类聚合的字段
with follup :可选,表示是否对分类聚合后的结果进行在汇总
having  :表示在对分类后的结果在进行条件的过滤

having和where的区别

  having是对聚合后的结果进行条件的过滤,而where是在聚合前就对记录进行过滤,如果逻辑允许,我们尽可能用where先过滤记录,这样因为结果集减小,将对聚合的效率大大提高,最后在根据逻辑看是否用having进行再过滤

例如:
 统计各个部门的人数:
 select deptno,count(1) from emp group by deptno;
 统计各个部门的人数,又要统计总人数:
 select deptno,count(1) from emp group by deptno with rollup;
 统计人数大于1的部门:
 select deptno,count(1) from emp group by deptno having count(1)>1;
 统计公司所有员工的薪水总额、最高和最低薪水
 select sum(sal),max(sal),min(sal) from emp;

5.表连接

  表连接分为:内连接和外连接;内连接:仅选出两张表中互相匹配的记录;外连接:选出其他不匹配的记录

例如:
 查询雇员的名字和所在部门名称(雇员和部门分属于两个表)
 select ename,deptname from emp,dept where emp.deptno=dept.deptno;
   外连接分为: 
   左连接:包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录
   右连接:包含所有的右边表中的记录甚至是左边表中没有和它匹配的记录

例如:查询emp中所有用户和所在部门名称
select ename,deptname from dept right join emp on dept.deptno=emp.deptno;
或可用左连接代替
select ename,deptname from emp left join dept on emp.deptno=dept.deptno;

表连接的好文章:
http://coolshell.cn/articles/3463.html

MySQL的联结(Join)语法:
http://www.blogjava.net/chenpengyi/archive/2005/10/17/15747.html
6.子查询
用于子查询的关键字包括in、not in、=、!=、exits、not exits等

例如:
从emp表中查询出所有部门在dept表中的所有记录
select * from emp where deptno in(select deptno from dept);
可以使用表连接替换:
select emp.*  from emp,dept where emp.deptno=dept.deptno;

查询记录数唯一,可用=代替in
select * from emp where deptno = (select deptno from dept limit 1);

6.记录联合(union、union all)
场景:将两个表的数据按照一定的查询条件查询出来后,在合并显示
union和union all的区别在于union all把结果集直接合并在一起,而union是将union all后的结果进行了去重DISTINCT后的结果


查看帮助:

显示可供查询的分类
mysql>? contents

针对某个分类查看帮助
mysql>? data types

查看int数据类型介绍
mysql>? int

查看关键字的语法
mysql>? show
mysql>? create table

你可能感兴趣的:(SQL基础,MySQL基础)