外键(一般不会在数据库层面添加,了解)
alter table student
add constraint `FK_gradeid`
foreign key(`gradeid`) references `grade`(`id`);
表操作
数据添加
insert into grade(`gradename`) values ('一班'), ('二班');
数据修改
update `grade` set `gradename`='五班', `gradeid`=5 where `gradeid`=2;
不加条件会修改整个表
数据删除
delete from `grade` where `gradeid`=5;
清空数据库表
表的结构和索引约束不会变
用delete删除表不会影响自增,还会继续累积
用truncate删除表会重置自增,不会影响事务
truncate `student`
查询数据
-- 查询全部学生
SELECT * FROM `student`
-- 查询指定字段
SELECT `studentname`,`studentno` FROM `student`
-- 别名
SELECT `studentname` AS 学生姓名,`studentno` AS 学号 FROM `student` AS s
-- 函数 concat拼接字符串
SELECT CONCAT('姓名:', `studentname`) AS 新名字 FROM `student`
-- 去重查询,重复结果只显示一条
SELECT DISTINCT `studentno` FROM result
-- 让所有学生成绩加一分
SELECT `studentno`, `studentresult`+1 FROM `result`
条件查询
-- AND && 和
SELECT `studentno` AS 学生编号,`studentresult` AS 学生成绩 FROM `result`
WHERE `studentresult`<100 AND `studentresult`>60;
-- OR || 或
SELECT `studentno` AS 学生编号,`studentresult` AS 学生成绩 FROM `result`
WHERE `studentresult`=98 OR `studentresult`=70
-- NOT != 非
SELECT `studentno` AS 学生编号,`studentresult` AS 学生成绩 FROM `result`
WHERE NOT `studentresult`=98
-- 模糊区间查询
SELECT `studentno` AS 学生编号,`studentresult` AS 学生成绩 FROM `result`
WHERE `studentresult` BETWEEN 60 AND 80;
模糊查询
-- like 通配符 %(无数量限制个字符) _(一个字符)
-- 所有带张字的学生
SELECT `studentno`, `studentname` FROM `student`
WHERE `studentname` LIKE '%张%';
-- in 不能使用通配符,只能在一个或多个数据中查询具体的
SELECT `studentno` AS 学生编号, `studentname` AS 学生姓名 FROM `student`
WHERE `studentname` IN ('张伟', '赵强');
-- 查询为空(null)的数据
SELECT `studentno` AS 学生编号, `studentname` AS 学生姓名 FROM `student`
WHERE `borndate` IS NULL;
-- 查询不为空的数据
SELECT `studentno` AS 学生编号, `studentname` AS 学生姓名 FROM `student`
WHERE `borndate` IS NOT NULL;
联表查询
-- 内连接[inner]join, 必须满足所有条件才会显示
SELECT s.studentno, `studentname`, r.studentno, `studentresult`
FROM `student` AS s
INNER JOIN `result` AS r
ON s.`studentno`=r.`studentno`
-- 左连接left join, 展示所有左边资源,用右边做添加
SELECT s.studentno, `studentname`, r.studentno, `studentresult`
FROM `student` AS s
LEFT JOIN `result` AS r
ON s.`studentno`=r.`studentno`
-- 右连接right join, 展示所有右边资源,用左边添加
SELECT s.studentno, `studentname`, r.studentno, `studentresult`
FROM `student` AS s
RIGHT JOIN `result` AS r
ON s.`studentno`=r.`studentno`
自连接(了解)
-- 将一张表拆分为两张表查询, 有所属关系
SELECT f.`categoryName`, z.`categoryName`
FROM `category` AS f, `category` AS z
WHERE z.pid = f.`categoryid`;
分页与排序
排序(order by升序asc, 降序desc)和分页(limit)
-- 成绩排序(升序),和分页
SELECT r.`studentno`, `studentname`, `subjectname`,`studentresult`
FROM `result` AS r
LEFT JOIN `student` AS s
ON r.`studentno`=s.`studentno`
INNER JOIN `subject` AS sb
ON r.`subjectno`=sb.`subjectno`
WHERE `subjectname`='高等数学-1'
ORDER BY `studentresult` ASC
LIMIT 0,3
-- 0,3参数分别表示
-- 0: 从第几个数据开始查
-- 3: 每次查询及个元素
子查询
-- 在一个语句中嵌套一个语句
SELECT * FROM `employees`
WHERE `ID` IN (SELECT `ID` FROM `employees`
WHERE `SALARY` > 4500)
MySQL函数
基础函数
了解
-- 向上取整
SELECT CEILING(9.4)
-- 向下取整
SELECT FLOOR(9.4)
-- 得到一个(0-1)随机数
SELECT RAND();
-- 判断一个数的符号
SELECT SIGN(-10)
-- 返回一个字符串长度
SELECT CHAR_LENGTH('hello world')
-- 字符串拼接
SELECT CONCAT('1', '2', '3')
-- 替换字符串
SELECT INSERT ('1234567', m, n, '1234')-- 从第m个元素,将后面元素替换n长度的字符串
-- m=1, n=2 ----> 123434567
-- 第一次出现元素的位置
SELECT INSTR('1234567', '7') -- ----------> 7
-- 替换指定的字符串
SELECT REPLACE('123456', '123', '789'); -- ------>789456
-- 反转字符串
SELECT REVERSE('123'); -- ---->321
-- 获取指定长度字符串
SELECT SUBSTR('123456', 2, 3) -- ---> 234
2.日期函数(记住)
-- 获取当前时间
SELECT NOW();
-- 获取年份,其他类似
SELECT YEAR(NOW());
聚合函数
-- 求平均值
SELECT AVG();
-- 求最大值
SELECT MAX();
-- 求最小值
SELECT MIN();
-- 返回总数
SELECT SUM();