mysql中记录的基本操作

116 阅读1分钟

1.增

insert into 表名(字段1,字段2,字段3) values(值1,值2,值3);

insert into 表名(字段1,字段2,字段3) values(值1,值2,值3),(值1,值2,值3;

注意:这里的字段和值需要一一对应,否则会报错。

2.删

delete from 表名 where条件;

注意:如果没有where条件,则默认把表清空。

3.改

update 表名 set 字段1=值1;

update 表名 set 字段1=值1 where条件;

where条件:>, >=, <, <= !=, between and(可以是区间), or, and, is null, is not null, in(类似于Java中的枚举)

注意null和空字符串是不一样的。

4.查

select * from 表名;

select 字段名 from 表名;

select 字段名1,字段名2 from 表名;

(1)起别名(as)

select 字段 as 别名 from 表名;

注意:as可以作用于任何一个字段,为了方便阅读。

(2)去重(distinct)

select distinct 字段 from 表名;

select distinct 字段1,字段2 from 表名;

注意:当distinct后面作用单个字段时,会直接去重;如果distinct后面有多个字段,只有当distinct作用的所有字段里面的记录都一样时,才会去重。

例:select distinct name, age from class;

在上述例子中,只有当class表中的name和age字段的记录都一样的时候才会被去重。如果有一个记录name是相同的而age是不一样的,则此时不会被去重。

(3)模糊查询like('_'代表单个字符,'%代表0个或者任意字符串')

例:select name from class where name like '李_';

select name from class where name like '李%';

(4)排序(order by)desc:降序 asc:升序

select name, sal from emp order by sal desc;

select name sal from emp order by sal desc,number asc;

注意:如果order by是作用单个字段,那么会直接排序;如果order by后面有多个字段,那么会先按照第一个字段的排序,只有当第一个字段里面的记录是一样的时候,才会按照第二个字段排序,以此类推。上述例子中,只有当sal相同的时候,才会按照number排序。

(5)聚合函数(max,min,sum.count,avg)

select sum(sal), max(sal), min(sal) from class;

注意:如果使用聚合函数,则在查询语句中不能含有没有被聚合函数作用的字段,如下就是错误的。

错误:select name, max(sal), min(sal) from class;

(6)分组group by

select emp, sum(sal) from class group by emp;

注意:如果一个字段被group by作用,那么我们可以称这个字段为分组列,回看第五条聚合函数,如果使用聚合函数,那么没有被聚合函数作用的字段不能和聚合函数一起出现,但是分组列可以使用。在上述例子中,emp之所以可以出现在查询语句中是因为被group by作用了,已经成为了一个分组列。

(7)having二次筛选

having和where的区别:

where是对原始的数据进行筛选,having是搭配group by使用,先分组在筛选,也就是对分组之后的数据进行筛选。

(8)限制limit

select * from student limit n;

select * from student limit m,n;

注意:如果limit后面只有一个参数,代表只查询几条信息;如果limit后面有两个参数,如上,第一个代表从第几行开始查询,第二个代表查询几条。上述代表从行m开始查询,查询n行。切记,第一行为行0,第二行为行1,类似于索引。

多表查询

1.内连接

select * from 表1 别名1 join 表2 别名2 on 别名1.xx=别名2.xx

例:select e.,d. from emp e join dept d on e.deptno=d.deptno;

注意:内连接的条件是必须有外键和主键,同时,内连接必须带有on来作为查询条件,否则会产生笛卡尔积。

2.左连接

因为内连接的查询结果,并不是所有的数据,⽽是满⾜规则的数据。左连接是指左表记录⽆论是否满⾜条件都会查询出来,⽽右表只有满⾜条件才能查询出来。左表中不满⾜条件的记录,右表部分都为NULL。left join左右两边都是表,on后面的是满足的查询条件。如果在查询时候还需要添加条件,where是放在on的后面。

语法:select * from 表1 别名1 left join 表2 别名2 on 别名1.xx=别名2.xx;

例:select e.ename,e.deptno,d.dname from emp e left join dept d on

e.deptno=d.deptno;

一个表和多个表进行左连接只需要在一个表左连接之后继续左连接即可。

select * from 表1 别名1 left join 表2 别名2 on 别名1.xx=别名2.xx left join 表3 on 别名1.xx=别名3.xx;

3.右连接

因为内连接的查询结果,并不是所有的数据,⽽是满⾜规则的数据。右连接是指右表记录⽆论是否满⾜条件都会查询出来,⽽左表只有满⾜条件才能查询出来。右表中不满⾜条件的记录,左表部分都为NULL。

语法:select * from 表1 别名1 right join 表2 别名2 on 别名1.xx=别名2.xx;

4.子查询 也就是select查询嵌套select查询,切记,子查询的select语句必须用一个括号括起来。

例:查询⽐allen⼯资⾼的员⼯信息

select * from emp where sal > (select sal from emp where ename='allen');