一.新增
insert into 表名 values(值,值……);
(1)指定列插入
意思就是可以指定是只插入id啊还是只插入name啊,又或者是插入id和name其他不插入啊,
指定插入要用()指定要插入的列,其他不插入的列为默认值default
insert into 表名 (指定的列,列和列用逗号分开) values(指定列的值,指定列的值……);
eg:insert into student (name) values ('李四');
(2) 一次性插入多行记录,一个语句完成多行插入
insert into 表名 values(值,值……),(值,值……),(值,值……);
还可以指定列插入,然后多组插入;
二.查询
SQL中使用select关键字来表示查询~
查询语句是整个SQL中占比最大的,百分之80的工作都在于查询
(1).全列查找,查询出当前表所有的行和所有的列(全列查找是一个危险操作)
select * from 表名;
*号称为 通配符,表示所有的列~~
使用全列查找就能把当前表所有内容都一下子表现出来~~
但为什么说全列查找是一个危险操作呢?
客户端和服务器是通过网络来交互的,服务器数据库把数据存在磁盘上,当客户端向服务器发起查询请求,服务器就会处理请求,服务器此时会从磁盘上读取数据,然后再把数据通过网卡写回客户端,就返回了查询结果
那为啥说select * 是危险的呢?在公司中的的数据库里面存储的数据上千万甚至上亿条,如果调用select * ,服务器就会大规模的去读取磁盘,当前的存储的数据量级非常大!!!这就是一个大问题!!!这就会导致读磁盘和写网卡的时间非常的长,甚至把磁盘带宽和网卡带宽吃满!!
严重的话会导致服务器卡死~
所以说全列查询是一个危险操作
(2.)指定列查询 : select 列名 from 表名;
要查询的列名可以写多个,用逗号分开
这个查询只能看见两列,是否就意味着其他的列被删掉了呢?
查询过程中,客户端这里显示的内容只是一个 临时表!! 临时表是根据服务器的数据生成的
所有的查询操作是不会影响磁盘上的数据的
(3)查询字段为表达式
就是一边查,一边计算,查询的结果为计算后的结果
比如说把所有人的语文成绩都加上10
这里只是影响到临时表的数据展示,不会对服务器的数据有任何影响,不会修改数据
(4)给查询的结果起别名
select 表达式 as 别名 from 表名;
起别名不仅仅是列名能起别名,表名,表达式都能起别名
比如说我要查询所有人的总成绩
可以给总分起个别名total
只需要在要起别名的列后面加上 as 别名 就行了
(5)去重操作 : distinct
distinct关键字,修饰某个列,针对这个列的数据就可以进行去重了!!
会把重复的数据合并成一个
去重操作也可以对多个列进行去重
那这里为什么没把math重复的给去掉呢?
如果是多个列去重,则只能是当多个列同时相同的时候,才会视为重复,才进行去重
(6)排序
select 列名 from 表名 order by 列名;
order by 是默认升序排序
比如说我要按照语文成绩升序排序
想降序的话在末尾加上 desc
这里的desc和描述表结构的desc不一样,描述表结构的describe,这里的降序是descend
加上desc就是降序,啥也不加就是默认升序,或者写个asc也是升序,但是没必要
还可以指定多个列排序,但是有优先级,哪个越靠前,优先级越高
这里表示先看math的大小,如果math相同,再去比较chinese;
!!!!!(7)条件查询
查询的时候指定筛选条件,where子句来表示条件
逻辑运算符
1. WHERE条件可以使用表达式,但不能使用别名。
2. AND的优先级高于OR,在同时使用时,需要使用小括号()包裹优先执行的部分
注意:
在条件查询的sql中,先执行where,符合条件的记录,再执行select前半部分决定显示哪些列,以及进行啥样的运算
而order by 是在查询结果都知道了之后才进行排序
在SQL中AND优先级比OR更高,当一个条件里同时有AND和OR的时候,先算AND
3.LIKE模糊查询
%代替任意个字符
_ 代替一个任意字符
NULL=NULL 结果还是NULL=》false
where后面的条件fuhe(值为true)才保留记录,否则跳过
(8)分页查询 limit
select 列名 from 表名 limit N;查询前N条记录
select 列名 from 表名 limit N offset M;从第N条记录开始查询,查询N条记录(M从0开始算)
上述的所有查询操作是可以实现复合查询的,就是合体使用,实现更复杂的查询
三.修改
使用update 来进行修改
upset 表名 set 列名 = 值,列名 = 值…… where 条件;
修改的时候明确针对哪张表的哪些行的哪些列改成哪些值
先from表,然后set什么列值,where改哪里的列值
也可以一条语句改多个列
update 也是一个危险操作,update是会改变真正的数据,也就是会改磁盘上的数据,不再是改临时表了,查询才是临时表,update给你来真的
为啥危险?因为你写update的时候不明确改哪里,不给条件,那么整张表的所有记录都会被修改!!!
四..删除表记录
delete from 表名 where 条件;
通过where条件来控制删除哪条或者哪些记录
同样的,如果不写where条件,就当当于把所有记录全部删除了
delete是删除所有表记录
drop是给你把表都删除了
都是很严重的问题!!!