MySQL语句的基本操作
v(*゜ー゜*)小白发文,若有不足,欢迎大佬来斧正 v(๐॔˃̶ᗜ˂̶๐॓)*
![](https://i-blog.csdnimg.cn/blog_migrate/b456718581c0d1de49cb3811a367d9a2.png)
一、创建表
#格式如下:
CREATE TABLE 表名(
#如果是数字类型可选择AUTO… 说明该字段是自动递增的
字段名 字段类型[NOT NULL] [AUTO_INCREMENT],
[字段名 字段类型],
……
[字段名 字段类型],
[PRIMARY KEY(字段名)]
);
#举例:
CREATE TABLE student(
id INT AUTO_INCREMENT,
name VARCHAR(10),
class VARCHAR(8),
PRIMARY KEY(id)
);
二、修改表
1.给表添加一个字段
#格式:
ALTER TABLE 表名 ADD COLUMN 字段名 字段类型;
#举例:
ALTER TABLE student ADD COLUMN sex VARCHAR;
2.添加多个字段
#格式:
ALTER TABLE 表名 ADD 字段1名 字段1类型,……,ADD 字段名n名 字段n类型;
#举例:
ALTER TABLE student ADD age, ADD grade;
3.修改字段数据类型
#格式:
ALTER TABLE 表名 MODIFY COLUMN 字段名 字段类型;
#举例:
ALTER TABLE student MODIFY COLUMN class INT;
4.修改字段名称
#格式:
ALTER TABLE 表名 CHANGE COLUMN 原字段名 新字段名 字段类型;
#举例:
ALTER TABLE student CHANGE COLUMN class classes VARCHAR;
5.删除表的一到多个字段
#格式:
ALTER TABLE 表名 DROP COLUMN 字段名;
ALTER TABLE 表名 DROP COLUMN 字段1名,……,DROP COLUMN 字段n名;
#举例:
ALTER TABLE student DROP COLUMN grade,DROP COLUMN sex;
6.删除表
#格式:
DROP TABLE 表名;
#举例:
DROP TABLE student;
7.查看表结构
#格式:
DESCRIBE 表名;
三、简单查询表
1.查询所有列
#格式:
SELECT * FROM 表名 # *就是所有字段的缩写
2.更换别名
#未来可能很多张表一起查询,可能字段有重名,那么就可使用别名标记重名字段
#格式:
SELECT 字段1名 '字段1新名',……,字段n名 '字段n新名' FROM 表名;
#举例:
SELECT class 'classes', name 'user' FROM student;
3.查询指定列
#格式:
SELECT 字段1名,……,字段n名 FROM 表名;
4.合并列查询
#列是可以进行数值运算的
#格式:
SELECT CONCAT(字段1,'字符',字段2) '别名' FROM 表名;
#举例:
SELECT CONCAT(name,'-',class) '班级-姓名' FROM student;
5.查询常量
#格式:
SELECT 字段名,'常量' FROM 表名;
6.查询时去除重复数据
#格式:
SELECT DISTINCT 字段名 FROM 表名;
四、插入数据
/*
* 表的主键是不可以重复的
* 表的key字段是整数并且是字段增长的,如果不填,就是默认自动增长
*/
#格式:
INSERT INTO 表名 VALUES (字段1的值,……,字段n的值);
INSERT INTO 表名 VALUES (字段1的名,……,字段n的名)
VALUES (字段1的值,……,字段n的值);
#批量插入
INSERT INTO 表名 VALUES
(字段1的值,……,字段n的值),
(字段1的值,……,字段n的值),
(字段1的值,……,字段n的值);
五、修改数据
1.修改所有行
#格式:
UPDATE 表名 SET 字段1名 = 值, 字段n名 = 值;
2.有条件的修改
#格式:
UPDATE 表名 SET 字段1名 = 值, 字段n名 = 值 WHERE 条件;
#举例:
UPDATE student SET class = '三班', grade = '二年级' WHERE age > 4;
3.删除数据
#格式:
DELETE FROM 表名 WHERE 条件;
六、条件查询表
1. 比较条件
#运算符:= != > < >= <=
#文字:between and; AND; OR
#格式:
SELECT * FROM 表名 WHERE 条件;
SELECT * FROM 表名 WHERE 条件 AND 条件 OR 条件;
2.判空条件
#条件含义:
='' 是空字符串
IS NULL 是NULL值
IS NOT NULL 不是NULL值
<> 非
<>'' 非空字符串,也不是NULL值
3.模糊条件
顾名思义就是查询字段值是否包含某些子串
语句 | 意思 |
---|---|
LIKE | 包含 |
NOT LIKE | 不包含 |
#格式
#查询字符串中间有'字符'
SELECT * FROM 表名 WHERE 字段名 LIKE'%字符%';
#查询的字段有三个字,中间字是'字符'
SELECT * FROM 表名 WHERE 字段名 LIKE '_字符_';
#查询'字符'开头的字段
SELECT * FROM 表名 WHERE 字段名 LIKE '字符%';
/*
* _ 是匹配0到1个字符
* % 是匹配0到多个字符
*/
七、常用查询
1.聚合查询
运用的函数:sum、avg、max、min、count
#格式:
SELECT SUM(字段名) FROM 表名 WHERE 条件;
SELECT AVG(字段名) FROM 表名 WHERE 条件; #求平均值
SELECT COUNT(*) FROM 表名; #计算表有多少行
2.排序查询
正序和倒序是可以一起使用的
#格式:
ORDER BY 字段 #正序
ORDER BY 字段 ASC #正序,正序可以省略ASC
ORDER BY 字段 DESC #倒序
#以字段1正序排列,字段1相同的以字段2排序
SELECT * FROM 表名 ORDER BY 字段1,字段2……;
#正序和倒序一起使用
SELECT * FROM 表名 ORDER BY 字段1,字段2 DESC;
#在某条件下进行排序查询
SELECT * FROM 表名 WHERE 条件 ORDER BY 字段1;
3.分页查询
就是在普通的查询后面跟上limit,limit要放在where的条件\排序后面,偏移量 = (页数-1) * 步长
#格式:
SELECT * FROM 表名 LIMIT 偏移量,步长;
#举例:
SELECT * FROM student LIMIT 3,4; #查询3-6行数据
4.分组查询
(1)按照指定的一个或多个字段分组查询(主要用于统计数据)分组查询多数时候与聚合查询一起使用
(2)可以分组之后,再分组 都是在完整的group by分组下计数的
(3)可以对分组查询的聚合查询结果做筛选,用having
#格式:
SELECT 字段1名,COUNT(字段1名) FROM 表名 GROUP BY 字段1名;
SELECT 字段1名,COUNT(字段1名),字段2名,COUNT(字段2名) WHERE 条件
GROUP BY 字段1名,字段2名;
SELECT 字段1名,COUNT(字段1名) FROM 表名 GROUP BY 字段1名 HAVING 条件
八、判断函数
1.case流程控制函数
#举例(1):
SELECT name,
(
CASE sex
WHEN 1 THEN '男'
WHEN 2 THEN '女'
……
ELSE '未知'
END
) as sex
FROM student;
#举例(2):
SELECT name,
(
CASE
WHEN sex = 1 THEN '男'
WHEN class = 1 THEN '一班'
……
ELSE '未知'
END
)
FROM student;
2.IF函数
#格式:
IF(expr1,expr2,expr3);
/*
* 第一个参数:条件
* 第二个参数:如果为真,则
* 第三个参数:如果为假,则
*/
IFNULL(expr1,expr2);
/* 若expr1不为空,则返回expr1 否则返回expr2 */
#举例:
SELECT name,IF(sex <= 1,'正常性别','异常性别') FROM student;
SELECT id,name,IFNULL(class,'班级是NULL') FROM student;
3.字符串的集合操作ELT
可以用来判断连续的数字,有点像C++的enum枚举
#格式:
ELT(N,str1,str2,str3,……);
/*
* 如果N=1,返回str1;N=2,返回str2……如果N不是参数的数量,则返回NULL
* 返回的str也可以是字段
*/
#举例:
SELECT ELT(class,'一班','二班','三班') '班级' FROM student;
路漫漫其修远兮,吾将上下而求索