数据库的重要性
如今掌握数据库已经是程序员的必备技能树之一了,现在所有的信息基本与数据库离不开,而想要程序开发或者后端更是要作为基本
现在来更第二篇总结,梳理一遍知识
插入语句
insert into 表名([字段,字段])values('值1','值2')
//如果不加字段,则值要一一对应 主键自增可省略
insert into 表名 values('值1','值2')
修改
update 表名 set 字段名='值';//会改动一列的值
update Student set 'name'='历次' where id=1;
//修改多个值
update Student set 'name'='历次','pwd'='213' where id=1;
//条件子句 运算符 >=,<=,=,<,>,<>不等于!=,BETWEEN..and..,and,OR
删除
DELETE FROM 表名; //不影响自增
//删除指定的数据
DELETE FROM 表名 where id=1;
TRUNCATE命令
TRUNCATE 表名; //清空表,自增归0,不影响事务
DELETE与TRUNCATE区别
相同点:都能删除数据
不同点:TRUNCATE 不影响事务,自增归0,DELETE反之
查询(最重点)
查询是最基本的而且在以后公司用的到最多的因为增删改的权限基本不会给到你,否则万一删库到跑路后果不堪设想
//简单查询
select * from 表 where id=1;
//别名(字段和表)
select 'name' As 姓名 from 表 As 别名;
//函数Concat(a,b) 拼接字符串
Select CONCAT('姓名:',name) AS 新名字 FORM STUDENT;
去重distinct
select StudentNo form result; //查询有考试的人的学号
select distinct StudentNo form result; //去掉重复的学号
查看系统版本,自增步幅
select VERSION()
SELECT 100*3-1 AS 计算结果 //用来计算
SELECT @@auto_increment_increment //查询自增的步长
模糊查询 LIKE IN
select sno,name from Student where name LIKE '刘%' //查询姓刘的
select sno,name from Student where name LIKE '%刘%' //查询姓名中有刘的
select sno,name from Student where name LIKE '刘_' // 后面一个字_
select sno,name from Student where name LIKE '刘__' //后面两个字__
select sno,name from Student where sno in(1001,1002,1003); //查询一个范围里的
联表查询Join on where等值查询
| inner join | 有匹配的值就返回结果 |
|Right JOIN|会在右边返回即使左表没有找到|
| left JOIN | 会在左边返回即使右表没有找到 |
/*思路
分析需求,分析查询的字段来自哪个表
确定使用哪种连接查询? 7种
确定交叉点(相同的字段)
判断条件 :主键相同
*/
select sno,name,cno,class from Student As s INNER JOIN Course AS c on s.sno=c.sno
select sno,name,cno,class from Student As s Right JOIN Course AS c on s.sno=c.sno
select sno,name,cno,class from Student As s left JOIN Course AS c on s.sno=c.sno
先查2个表再连接个表
//我要查哪些数据 select.. 我从哪几个表中查,需要右表就查右表
SELECT sno,name,cname,c.cno,c.rno from student AS s RIGHT
JOIN course AS c on s.cno=c.cno
LEFT JOIN teacher As t on t.rno=c.rno //A右连接B,C左连接B,展示b表的数据涉及到多张表的查询然后先查2各表再连接个表
自连接
自己的表和自己的表连接 核心:一张表拆分为两张一样的表即可
比如一个表有pid和categoryid,把pid等于1的categoryid当作父id,然后剩下的categoryid看pid对应的父id,则父子关系形成
|categoryid | pid |Name
|3 | 1 |产品
|2 | 2 | 香蕉 拆分后 3 产品对应子4 手机 2水果对应子香蕉
| 2 | 1 | 水果
| 4 | 3 | 手机
select a.categoryName As '父栏,b.categoryName As '父栏目'
from category As a,category as b
Where a.categoryid=b.pid
排序和分页
limit 0,5(0代表起始值,5代表每页的大小)
limit 5,5 第二页
limit 10,5 第三页
limit (n-1)*PageSize,PageSize 第n页 PageSize 代表每页的大小
ORDER BY ASC 升序 或者DESC 降序
select sno,name,cno,class from Student As s INNER JOIN Course AS c on s.sno=c.sno
ORDER BY ASC //排序要写在分页前面,否则会报错
limit 5,5
嵌套查询
比如要查询一个课程名字为JAVA程序设计的学这个课的学生姓名学号 由里及外查询
//正常的连表查询
select sno,name from student s
inner join course c
on s.cno=c.cno
where c.cname='JAVA程序设计'
//嵌套查询 (由里及外)
//第一步: 查出JAVA程序设计的课程号
select cno from course where cname='JAVA程序设计'
//第二步:利用课程号查出要的学号姓名
select sno,name from student
where cno=(
select cno from course where cname='JAVA程序设计'
)