insert
一条信息插入
INSERT INTO 表名(字段名1,字段名2,...) VALUES (值 1,值 2,...);
多条信息插入
INSERT INTO 表名 (字段名1,字段名2,...) VALUES (值 1,值 2,…),(值 1,值 2,…),...;
update
选择更新(满足条件就是where后面的值)
UPDATE 表名 SET 字段名1=值1,字段名2=‘字符串’,字段名3=数字.... WHERE 字段名4=值4;
全部更新(无条件更新)
update 表名 set 字段名1=值1;
delete
选择条件删除(满足的全删)
DELETE FROM 表名 WHERE 字段1=值1;
清空表(不加条件)
DELETE FROM 表名
select
查询表的全部字段信息
select * from 表名;
查询表的内容,where作满足条件,( 字段 关系运算符 数字或字符串)
select * from 表名 where 字段>=5;
select * from 表名 where 字段='字符串';
查询表的指定字段信息
select 字段1,字段2... from 表名;
查询表的指定字段的时候添加临时信息数据(这样可以添加临时值)
select 字段1,字段2,'字符串',... from 表名;
查询表的指定字段的时候还可以对所查询字段作临时修改(备注字段2必须int类型,如果是其他类型返回字段结果全为空)
select 字段1,字段2+数字 from 表名;
查询表的字段信息(distinct 只对字段1起防重复作用),也就是说字段1的第1、2行一样,只会显示第一行内容。
select distinct 字段1,字段2 from 表名;
基础函数使用
统计行数
select count(*) from 表名;
选出max值(字段1一般为int类型,若为字符型数字也会成功返回值最大值,但字符型数字中含有字母的话也能返回,但不一定是最大值)
select max(字段1) from 表名;
同理选出min值
select 字段1,min(字段2) from 表名;
统计该字段所有行之和sum(若为字符型也能统计相加,但字符型会自动忽略含有字母的行)
select sum(字段1) from 表名;
算出平均值avg(字段1),是sum(字段1)除count(*)的值,不过最好要int类型
select avg(字段1) from 表名;
…还有许多函数,就不一一举例说明了,要用的时候查查就知道了
关键字查询
1、IN关键字查询
查询表的内容,where作满足条件, 等于 字符串1或字符串2条件显示
select * from 表名 where 字段1 in ('字符串1','字符串2');
查询表的内容,返回除 等于字符串1外的 所有内容
select * from 表名 where 字段1 not in ('字符串1');
2、BETWEEN AND关键字查询
查询表中字段1满足0到20之间的数据,但不包括0和20
select * from 表名 where 字段1 between 0 and 20;
3、null查询(空值查询)
查询表中字段1不为null的数据
select * from 表名 where 字段1 is not null;
4、AND关键字查询
select * from 表名 where 字段1 >15 and 字段2 ='string';
5、OR关键字查询
select * from 表名 where 字段1 >= 5 or 字段2='string';
6、LIKE关键字查询
精准查询
select * from 表名 where 字段1 like 'string';
模糊查询 ("%"通配符)
字段1中(含有string)
select * from 表名 where 字段1 like '%string%';
字段1中(开头为string)
select * from 表名 where 字段1 like 'string%';
字段1中(结尾为string)
select * from 表名 where 字段1 like '%string';
含("_"通配符)
select * from 表名 where 字段1 like 's_sl';
"_"通配符是单个字符匹配查询,如果要多个字符需要多个该通配符,对字符串中的字符个数和位置一一匹配
LIMIT限制查询数量
select * from 表名 (条件) limit 数量;
GROUP BY进行分组查询
select 字段1,sum(字段2) from 表名 GROUP BY 字段1;
这种分表查询一般用于字段1重复,需要字段1对应的字段2总数
eg:
新建demo_db表
然后执行分组查询语句:
select user_name,sum(price) from demo_db GROUP BY user_name;
返回结果:
可以看出将user_name字段相同名称的合并并计算出对应price字段的和。
也可以在这语句的基础上添加条件再查询:
select user_name,sum(price) from demo_db GROUP BY user_name having sum(price)>=500;
就是在上面结果下显示出price总合大于等于500的数据了。
ORDER BY对查询结果排序
order by 有asc升序和desc降序2种排序
select * from 表名 order by 字段1 ;
如果没指定排序方式order by 默认是按照asc升序方式排序的,
下面是指定的方式:
select * from 表名 order by 字段1 desc;
别名设置
1、改表名
select * from 原表名 as 改后表名;
这操作并不能使得数据库中的表名更改,只是在显示查询结果的时候显示改后的表名
2、改字段名
select 字段1 as '改后名',字段2 from 表名;
显示结果是让字段显示 改后名、字段2
表的关联关系
表的关系大致分3种:
1、一对一
2、多对多
3、多对一
关联查询(带比较运输符的子查询):
select * from 表1 where 表1字段1 比较运算符 (select 表2字段2 from 表2 where 表2字段3='字符串');
简单理解就是拿表2的查询结果当条件查询表1
关联表中数据的删除:
当表1和表2是多对1的关系的时候,不能直接删除表2中的数据,需要先删除该数据于表1有关系的数据,再删除表2的数据。
delete from 表1 where 表1字段1=(select 表2字段2 from 表2 where 表2字段3='字符串');
delete from 表2 where 表2字段3='字符串';
多表连接查询
1、交叉连接查询
select * from 表1 cross join 表2;
返回结果是表1和表2的笛卡尔积,( 表1{a,b},表2{1,2},笛卡尔积结果{(a,1),(a,2),(b,1),(b,2) }返回4行结果。。。。。)
2、内连接查询
select 表1.字段1,表1.字段2, ... from 表1 [inner] join 表2 on 表1.关系字段=表2.关系字段
先内连接2表,on后面是2表要相等的字段,满足显示
3、外连接查询
select 表1.字段1,表2.字段2, ... from 表1 left | right [outer] join 表2 on 表1.关系字段=表2.关系字段 where 条件
查询所有数据的时候 select * from … 返回的默认规则
1、LEFT [OUTER] JOIN 左(外)连接:返回包括左表中的所有记录和右表中符合连接条件的记录。
2、RIGHT [OUTER] JOIN 右(外)连接:返回包括右表中的所有记录和左表中符合连接条件的记录。
备注:左(外)连接的结果包括LEFT JOIN子句中指定的左表的所有记录,以及所有满足连接条件的记录。如果左表的某条记录在右表中不存在则在右表中显示为空。
同理右(外)连接也是。
子查询
1、关联查询(带比较运输符的子查询):
select * from 表1 where 表1字段1 比较运算符 (select 表2字段2 from 表2 where 表2字段3='字符串');
2、EXISTS关键字的子查询
exitsts(ture)
select * from 表1 where exists (select 表2字段2 from 表2 where 表2字段3='字符串');
exists关键字后面的参数可以是任意一个子查询, 它不产生任何数据只返回true或false。当返回值为true时外层查询才会 执行。
3、ANY关键字的子查询
select * from 表1 where 表1字段 > any (select 表2字段 from 表2);
any关键字表示满足其中任意一个条件就返回一个结果作为外层查询条件。
4、ALL关键字的子查询
select * from 表1 where 表1字段 > all (select 表2字段 from 表2);
all关键字表示满足所有条件才结果作为外层查询条件。
总结
参考链接
Mysql学习
总结:
边学习,边思考,最后多动手,实践才是硬道理。。。。