创建数据库:create database dbname;


[sql]  view plain  copy


1. 删除数据库:drop  database dbname;  
2. 创建表: 如createtable tablename(name varchar(10),hiredate date,sal decimal(10,2));  
3. 查看表中的数据: desc  tablename;  
4. 删除表:drop table tablename;


2:更改表的结构:

(1)     更改表中的字段属性


[sql]  view plain  copy


1. alter table tablename modify ename varchar(20);

(2)     更改表中的字段名:


[sql]  view plain  copy



    1. atler  table tablename change ename ename2 varchar(30);



    (注:change和modify都可以修改表的定义,但是change后面需要写两次列名,不方便,但change的优点是可以修改列名称)


    (3)        增加表字段:



    [sql]  view plain  copy


    1. alter table tablename add column age int(3);


    (注:

    add 增加的新字段默认加在表的最后位置,如需要确认它的位置,可以这么写, alter table tablename add column age int ( 3 ) after name; )

    (4)     删除表字段:


    [sql]  view plain  copy


    1. alter table tablename drop column age;


    (5)     移动字段名的顺序  如 


    [sql]  view plain  copy


    1. alter table tablename modify age int(3)first;


    3:DML


    [sql]  view plain  copy


    1. 插入数据:insert into tablename(name,age)values(“小红”,18);  
    2. 更新数据:update  tablename  set  字段名=‘’ where 。。  
    3. 删除数据 delete from  tablename  where  字段名=‘’;  
    4. 删除表中所有行  truncate  tablename;


    查询记录:


    [sql]  view plain  copy



    1. (1)     基本查询:select *from  tablename;  
    2. (2)     查询不重复的记录:selectdistinct deptno from tablename;  
    3. (3)     条件查询:select *from  tablename where 字段名=“”;  
    4. (4)     排序查询:如按薪水的高低排序select * from tablename order by salary(desc/asc);(注:这里括号内的(desc/asc)分别代表降序/升序,如果不写的话,默认是升序);如取薪水最高的前3位:select * from tablename order by salary limit 3;  
    5. 如按照薪水排序后,取第二条记录开始的后三条:select *from tablename order by salarylimit 1,3;  



    4:表连接:从大类上面分,主要分为内连接和外连接

           内连接:仅选出两个表中相互匹配的记录,外连接会选出其他不匹配的记录

    外连接又分为左外连接和右外连接,左连接,包含所有的左边表中的记录和共同匹配的记录;

    右连接,包含所有的右边表中的记录和共同匹配的记录。


    [sql]  view plain  copy


    1. 如:select ename ,deptname from tablename1 left join tablenamed2 on tablename1.deptno=tablename2.deptno;

    子查询:select * from tablename1 where depton in(select deptno from tablename2);

    某些情况下,子查询可以转变成表连接,如上面的sql可以写成


    [sql]  view plain  copy


    1. select * from tablename1 ,tablename2  where tablename1.diptno=tablename2.deptno;



    5:常见的命令顺序


    [sql]  view plain  copy


    1. select 字段名1,字段名2,聚合函数 from tablename   
    2. where  contition  
    3. group by  字段名  
    4. having  contition  
    5. oder by 字段名;

    注:这里的聚合函数常见的有:记录数count(*);求和 sum(字段名);max(字段名);min(字段名)

    contition:指的是条件;

    group by:指的是排序;

    having和where的区别在于:having是对聚合后的结果进行条件的过滤,而where是在聚合前就对记录进行过滤,如果逻辑允许,我们先过滤记录,这样因为结果集减少,将对聚合的效率大大提高,最后再根据逻辑看看是否需要having进行过滤。