SQL常用数据类型
- double:浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,最大值为999.99;
- char:固定长度字符串类型;char(10) 'abc ’ //空格补全
- varchar:可变长度字符串类型;varchar(10) ‘abc’ //没有空格
- blob:二进制类型;
- date:日期类型,格式为:yyyy-MM-dd;
- time:时间类型,格式为:hh:mm:ss ;
- datetime:日期时间类型 yyyy-MM-dd hh:mm:ss;
DDL(数据定义语言)
- 查看全部数据库
show databases;
- 创建数据库
CREATE database 库名;
- 打开数据库
use 数据库名;
- 删除数据库
drop database 名;
- 创建表
CREATE TABLE 表名( 列名1 列的类型 [约束],列名2 列的类型 [约束],....列名N 列的类型 约束);
//最后一行没有逗号- 查看表
DESC 表名;
- 添加一列
ALTER TABLE 表名 ADD 列名 数据类型;
- 删除表
drop table 名;
- 修改表字段类型
ALTER TABLE 表名 MODIFY 列名 数据类型;
- 删除一列
ALTER TABLE 表名 DROP 字段名;
- 查看表创建细节
show create table 表名;
- 修改编码方式
alter table 表名 character set gbk;
- 修改列名
alter table 表名 change 原始列 新列名(数据类型);
- 修改表名
rename table aaa to bbb;
大小写不区分
DML(数据操作语言)
插入操作
- 查询表全部数据
SELECT * FROM 表名;(\G切换形式)
- 插入数据
INSERT INTO 表名(列名,列名2)VALUE(列值,列值2);
- 批量插入为
INSERT INTO 表名(列名,列名2) VALUES(),();
更新操作
- 更新表内数据
UPDATE 表名 SET 列名1=列值1,列名2=列值2...WHERE列名=值
eg:UPDATE student SET age=age+1 where name ='xx';
删除操作
- 删除表中数据
DELETE FROM 表名 where 列名=值; //表结构还在,可以找回
TRUNCATE TABLE 表名;// 删除全部 无法找回,执行速度比delete快
DQL(数据查询语言)
查询操作
SELECT * FROM 表
(where and‘’ or ‘’not‘’between‘’in…)字符控制
- 去重
SELECT DISTINCT name FROM
表;- 将结果进行运算,并生成新的列
SELECT *字段1+字段2 FROM 表名;
因为null和任何相加都是null,所以这里可以使用isnull(xx,0)也就是SELECT *字段1+IFNULL(字段2,0) FROM表名;
- 对运算结果起名
SELECT *字段1+字段2 AS 起的名 FROM 表名;
排序
ORDER BY 列名
放在末尾,排序方式;ORDER BY 列名 DESC降序 默认/ASC升序
聚合函数
COUNT()
统计记录书数select count(*)from student;//非空
SUM()
某列和AVG()
平均值MIN()
最小值MAX()
最大值分组查询
GROUP BY
分组SELECT gender FROM employee GROUP BY gender;
GROUP_CONCAT()
分组 并查看分组内容SELECT gender ,GROUP_CONCAT('name') FROM employee GROUP BY gender;
//注意逗号GROUP BY + HAVING
分组 筛选
划重点
*默认的int(11)意思是 不满11用0补齐 例:00000000099
而varchar(25)是 最大限制25
*在mysql中,字符串类型和日期类型都要用单引号括起来
*GROUP BY 单独使用意义不大,只列出第一个符合要求的,使用分组时,SELECT后面的字段一般都跟在GROUP BY 后
*where和having区别
- where分组前过滤,having分组后过滤
- having后面可以使用统计函数,where不可以
*书写顺序
SELECT—>FROM—>WHERE—>GROUP BY—>HAVING—>ORDER BY—>LIMIT
*执行顺序—>FROM—>WHERE—>GROUP BY—>HAVING—>SELECT—>ORDER BY—>LIMIT