SQL语句分为四大类:

  1:DDL(Data Definition Language)数据定义语言,用来定义数据库对象:数据库、表、列等

    ¤  对数据库的操作命令

     •  查询数据库:show databases;

     •  创建数据库:create database 要创建的数据库名字;

     •  创建数据库容错判断:create database if not exists 要创建的数据库名字;

     •  删除数据库:drop database 要删除的数据库名字;

     •  删除数据库容错判断:drop database if exists 要删除的数据库名字;

     •  使用数据库:use 要使用的数据库名字;

     •  查询当前使用的数据库:select database();

    ¤  对表的操作命令

     •  查询当前数据库下所有表名称:show tables;

     •  查询表结构:desc 表名字;

     •  创建表:create table ge 表名字(字段名字1 数据类型1,  字段名字2 数据类型2,  字段名字n 数据类型n); 最后一个字段末尾不能有逗号

     •  数据类型:

      ♦  数值

       tinyint      1byte

       smallint      2bytes

       mediumint    3bytes

       int/integer    4bytes

       bigint      8bytes

       float       4bytes

       double     8bytes       定义时需要参数,例如:score double(5, 2)  0-100 小数两位

       decimal     

      ♦  日期

       date      3          日期值

       time      3          时间值或持续时间

       year      1          年份

       datetime    8          混合日期和时间值

       timestamp    4            混合日期和时间值,时间戳

      ♦  字符串

       char      0-255bytes      存储时定长字符串    定义时需要参数规定长度,例如:name char(10)

       varchar      0-65535bytes       存储时动态长度字符串  定义时需要参数规定长度,例如:name varchar(10)

       tinyblob     0-255bytes       不超过255个字符的二进制字符串

       blob      0-65535bytes     二进制形式的长文本数据

       mediumblob   0-16777215bytes     二进制形式的中等长度文本数据

       longblob    0-4294967295bytes  二进制形式的极大文本数据

       tinytext      0-255bytes      短文本字符串

       text      0-65535bytes     长文本数据

       mediumtext   0-16777215bytes       中等长度文本数据

       longtext    0-4294967295bytes   极大文本数据

    •  修改表名:alter table 表名 rename to 新表名;

    •  添加1列:alter table 表名 add 字段名字 数据类型;

    •  修改数据类型:alter table 表名 modify 列名 新数据类型;

    •  修改列名和数据类型:alter table 表名 change 列名 新列名 新数据类型;

    •  删除列:alter table 表名 drop 列名;

    •  删除表:drop table 表名字;

    •  删除表容错判断:drop table if exists 表名字;

  2:DML(Data Manipulation Language)数据操作语言,用来对数据库中表的数据进行增删改

    ¤  添加:

     •  给指定的列添加数据:insert into 表名(列名1, 列名2, ...) values(值1, 值2, ...);

     •  给全部列添加数据:insert into 表名 values(值1, 值2, ...);

     •  批量添加数据:

      ♦  insert into 表名(列名1, 列名2, ...) values(值1, 值2, ...), (值1, 值2, ...), ...;

      ♦  insert into 表名 values(值1, 值2, ...), (值1, 值2, ...), ...;

    ¤  修改:update 表名 set 列名1=值1, 列名2=值2, ... [where 条件];  注:如果没有写条件,那么表中所有行的对应列的数据将会全部修改

    ¤  删除:delete from 表名 [where 条件];  注:如果没有写条件,那么表中所有行将会全部删除

  3:DQL(Data Query Language)数据查询语言,用来查询数据库中表的数据

    ¤  基础查询:

     •  select 字段1, 字段2, ... from 表名;          查询指定数据

     •  select * from 表名;                  查询所有数据

     •  select distinct 字段1, 字段2, ... from 表名;        去除重复记录

     •  select 字段1 as 别名, 字段2 as 别名, ... from 表名;     给字段起别名  as可以省略用空格代替

    ¤  条件查询:

     •  select 字段1, 字段2, ... from 表名 where 条件列表;

     •  条件类型:

      ♦  >           大于

      ♦  <           小于

      ♦  >=            大于等于

      ♦  >=            小于等于

      ♦  =            等于

      ♦  <>/!=          不等于

      ♦  between...and...      在某个范围之内(都包含)

      ♦  in(...)           多选一

      ♦  like           模糊查询  _单个任意字符  %多个任意字符  例:select * from stu where name like '马%';

      ♦  is null           是null

      ♦  is not null        不是null

      ♦  and/&&         并且

      ♦  or/||             或者

      ♦  not/!            非 不是

    ¤  分组查询:

     •  聚合函数:select 聚合函数名(列名) from 表名;         注:null值不参与所有聚合函数运算

      ♦  count(列名)                       统计数量(一般选用不为null的列)  这个参数一般为主键:非空且唯一  或*

      ♦  max(列名)                         最大值

      ♦  min(列名)                          最小值

      ♦  sum(列名)                         求和

      ♦  avg(列名)                          求平均值

     •  分组查询:select 字段列表, [聚合函数] from 表名 [where 分组前条件] group by 分组字段名 [having 分组后条件过滤]

      ♦  例:select sex, avg(math), count(*) from stu where math > 70 group by sex having count(*) > 2;

      ♦  分组之后,查询的字段为聚合函数和分组字段,查询其它的字段没有意义

      ♦  where和having的区别:执行时机不一样,where是分组前进行限定,不满足条件不参与分组。having是分组之后对结果进行过滤

                  可判断条件不一样,where不能对聚合函数进行判断,having可以

      ♦  执行顺序:where > 聚合函数 > having

    ¤  排序查询:

     •  select 字段1, 字段2, ... from 表名 order by 排序字段1 [排序方式1], 排序字段2 [排序方式2], ...;  注:多个条件排序时,只有前面的值一样时,后面的条件才会起作用

     •  asc:升序  默认排序

     •  sedc:降序

    ¤  分页查询:select 字段列表 from 表名 limit 起始索引, 查询条目数;

     •  起始索引从0开始,索引计算公式:每页条目数 * (当前页 - 1)

     •  limit是MySQL的方言,Oracle使用rownumber,SQL Sever使用top

 

  4:DCL(Data Control Language)数据控制语言,用来定义数据库的访问权限和安全级别,及管理用户