DDL -- 操作表
查询表:
SHOW TABLES;
查询表结构:
DESC 表名称;
创建表:
CREATE TABLE 表名(
creat table user( 字段名 数据类型,
id int, ... ...
username vachar(20), 字段名 数据类型
password vachar(32) #最后一行不要"," );
数据类型
MySQL支持多种类型,分为:数值、日期、字符串
分类 数据类型 大小 描述
TINYINT 1 byte 小整数值
数 SMALLINT 2 bytes 大整数值 值 MEDIUMINT· 3 bytes 大整数值 类 INT或INTEGER 4 bytes 大整数值 型 BIGINT 8 bytes 极大整数值 FLOAT 4 bytes 单精度浮点数值 DOUBLE 8 bytes 双精度浮点数值 DECIMAL 小数值
日 期 DATE 3 日期值 和 TIME 3 时间值或持续时间 时 YEAR 1 年份值 间 DATETIME 8 混合日期和时间值 类 TIMESTAMP 4 混合日期和时间值,时间戳 型
CHAR 0-255 bytes 定长字符串(字符长度设置多少储存多少 存储性能高 浪费空间) VARCHAR 0-65535 bytes 变长宇符串(字符长度用多少设置多少 存储性能低 节约空间)
字 TINYBLOB 0-255 bytes 不超过 255 个字符的二进制字符串 符 TINYTEXT 0-255 bytes 短文本宇符串 串 BLOB 0-65 535 bytes 二进制形式的长文本数据 类 TEXT 0-65 535 bytes 长文本数据 型 MEDIUMBLOB 0-16 777 215 bytes 二进制形式的中等长度文本数据 MEDIUMTEXT 0-16 777 215 bytes 中等长度文本数据 LONGBLOB 0-4 294 967 295 bytes 二进制形式的极大文本数据 LONGTEXT 0-4 294 967 295 bytes 极大文本数据
/*案例:需求设计一张学生表,请注重数据类型,长度的合理性 编号、姓名长度不超过10个汉字、性别一个汉字、生日取年月日、入学成绩小数点保留两位、邮件地址不超过64、 联系电话可能出现非数字、学生状态(用还是数字表示,正常、休学、毕业) create table student ( id int, name varchar(10), gender char(1), birthday date(3), grades double(5,2), email varchar(64), phoneNumber varchar(15), style TINYINT(1) )
删除表
DROP TABLE 表名; DROP TABLE IF EXISTS 表名; #删除表时判断表是否存在
修改表
修改表名: ALTER TABLE 表名 TENAME TO 新的表名; 添加一列: ALTER TABLE 表名 ADD 列名 数据类型; 修改数据类型: ALTER TABLE 表名 MODIFY 列名 新的数据类型; 修改列名和数据类型: ALTER TABLE 表名 CHANGE 列名 新列名 新数据类型;
删除列
ALTER TABLE 表名 DROP 列名;
DML
添加数据(以上面student表为基础)
给指定的列添加数据: INSERT INTO 表名(列名1,列名2,...)VALUES(值1,值2,...); 如:INSERT INTO student (id,name) VALUES(1,'张三'); 给全部列添加数据: INSERT INTO 表名 VALUES(值1,值2,...); 如:INSERT INTO student(id,name,gender,birthday,grades,email,phoneNumber,style) VALUES(1,'张三', '男', '1999-11-11', 88.88, '2323@232', '138888888', 1); 简单方法:INSERT INTO student VALUES(1,'张三', '男', '1999-11-11', 88.88, '2323@232', '138888888', 1);
批量添加数据:
INSERT INTO 表名 (列名1,列名2,...)VALUES(值1,值2,...),(值1,值2,...),(值1,值2,...)...; INSERT INTO 表名 VALUES(值1,值2,...),(值1,值2,...),(值1,值2,...)...;
修改数据
修改表中数据: UPDATE 表名 SET 列名1=值1, 列名2=值2,... [WHERE 条件]; 如将张三的性别为女,生日改成1999-12-12: UPDATE student set SET = '女',birthday = '1999-12-12' where name = '张三'; 注意:修改语句中如果不添加条件,则将所有数据修改
删除数据
DELETE FROM 表名 [WHERE 条件]; 如:delete from studunt where name = '张三'; 注意:删除语句中如果不添加条件,则将所有数据修改
DQL
查询语法
SELECT 1.基础查询 字段列表 FROM 2.条件查询(WHERE) 表名列表 GROUP BY 3.分组查询(GROUP BY) 分组字段 HAVING 分组后条件 ORDER BY 排列字段 4.排列查询(GROUP BY) LIMIT 分页限定 5.分页查询(LIMIT)
1.基础查询
查询多个字段:
SELECT 字段列表 FROM 表名; SELECT * FROM 表名; #查询所有数据 去除重复记录:
SELECT DISTINCT 字段列表 FROM 表名; 起别名:AS: AS 也可省略
2.条件查询
条件查询语法:SELECT 字段列表 FROM 表名 WHERE 条件列表; 条件: 符号 功能
> 大于 < 小于 >= 大于等于 <= 小于等于 = 等于 <> ro != 不等于 BETWEEN...AND... 在某个范围之内(都包含) IN(...) 多选一
LIKE占位符 模糊查询 _单个任意宇符 %多个任意宇符 IS NULL 是NULL IS NOT NULL 不是NULL AND ro && 并且 OR or || 或者 NOT or ! 非,不是
3.排序查询
排序查询语法:
SELECT 字段列表 FROM 表名 ORDER BY 排序字段名1[排序方式1],排序字段名2[排序方式2]...;
排序方式:
ASC:升序排列(默认值)
DESC:降序排列
注意:如果有多个排序条件,当前的条件值一样时,才会根据第二条件进行排序
4.分组查询
分组查询语法:
SELECT 字段列表 FROM 表名 [WHERE 分组前条件限定] GROUP 分组字段名 [HAVING 分组后条件过滤];
注意: 分组之后,查询的字段为聚合函数和分组字段,查询其它字段无任何意义
where和having区别
1.执行时机不一样:where是分组之前进行限定,不满足where条件,则不参与分组,而baving是分组之后对结果进行过滤
2.可判断的条件不一样:where不能对聚合函数进行判断,having可以
执行顺序:where>聚合函数>having
聚合函数:
1.概念:将一列数据作为一个整体,进行纵向计算
2.聚合函数分类:
函数名(列名) 功能
count 统计数量
max 最大值
min 最小值
sum 求和
avg 平均值
3.聚合函数语法:
SELECT 聚合函数名(列名) FROM 表;
注意:null值不参与所有的聚合函数运算
5.分页查询
分页查询语法:
SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询条目数;
(起始索引:从0开始)
计算公式:起始索引=(当前页码-1) * 每页显示的条数
tips:
1.分页查询limit是MySQL数据库的方言
2.Oracle分页查询使用rownumber
3.SQL Server分页查询使用top