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)数据控制语言,用来定义数据库的访问权限和安全级别,及管理用户
 
                    
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号