MySQL数据库-增删查改

目录

 

1. 各种查询

1. 单表中的各种查询

2. 分组查询 group by

3. 聚合函数查询

4. 连接查询

5.子查询

6. 正则表达式查询——REGEXP关键字后跟正则表达式

2. 插入语句

3. 更新语句

4. 删除语句


1. 各种查询

1. 单表中的各种查询

select * from table1;  //查询table1中的所有列的所有记录,最好不要用*,因为会降低查询速度。

select  列名1,列名2,...,列名n form table1; //查询table1中指定列的所有记录。

select 列名1,列名2  from table1  where  expr;//查询table1中指定列的符合条件expr的记录。

in关键字的使用,比如:select * from table 列名1  in(值1,值2,...,值n),查询列名1中处于括号范围的那些匹配记录,也可以not  in,表示不处于括号范围的那些匹配记录。

between and 关键字,select 列名1,列名2 from table where 列名1 between 100 and 200;查询处于[100,200]区间的记录, 也可以not between 100 and 200,表示不在[100,200]区间的记录。

like匹配查询,select 列名1 from table where 列名1 like 匹配规则;// ‘%’匹配任意长度的字符,包括零字符,‘_’下划线匹配一个任意字符。

is null,select 列名1, 列名2 from table where 列名1 is null;//表示查询条件是列名1中为null的值,也可以is not null,表示非null的值。

and 和 or ,select 列名1 from table where 条件1 and  条件2;  //表示同时满足多条件查询,可以用or关键字,表示满足条件之一就行。当and 和 or 一起使用的时候,and的优先级更高。

distinct关键字,select distinct 列名 from table;查询出的结果就不会有重复的。

order by查询结果排序:

select 列名1,列名2 from table order by 列名1; 默认按照列名1排序,字母表升序(升序是asc,asc关键字可有可无); 

select 列名1,列名2 from table order by 列名1 desc;降序排序。

select 列名1,列名2 ,列名3 from table order by 列名1,列名2;默认升序,当列名1的值相同时,才按照列名2升序。 

select 列名1,列名2 ,列名3 from table order by 列名1 desc,列名2;先按列名1降序,当列名1值相同时,列名2再升序,如果两个列都想降序的话,就要都加上desc。

limit关键字,可以在查询语句的最后加上limit语句来限制查询结果中的记录数,语法 limit [起始位置, ] 记录数。第一行记录的位置是0,往后加1,如果不指定起始位置,就默认从0开始,记录数代表此次限制查询返回多少条记录。

2. 分组查询 group by

如何理解分组(不是原理哈),参考:https://blog.csdn.net/u014717572/article/details/80687042

group by 列1;将列1中值相同的记录归为一组。 比如,select 列 from table group by 列3;

group by 列1,列2,...,列n;先按列1分组,然后在各个组内进行列2分组,然后再在列2的各个分组中分组,依次类推。

group by 需要和一下库函数配合使用。比如下面的数据库表:

select type, group_concat(`name`) from fruit group by type;  这句的执行结果是:

     将type值相同的记录归为一组,

having关键字和group by联合使用,限制条件;select 列 from table group by 列3 having expr;expr就是条件;

with rollup关键字的作用是在group by分组查询之后统计所有记录的总和,添加到查询结果的最后一行,如果是字符串,就全部拼接起来,如果是数值,就全部加起来,分组列都直接null值(这句话的理解还是看下面的实验吧),比如执行:

select type, group_concat(`name`) as fruit_name, count(`name`) as number from fruit group by type with rollup;

执行结果如下:

 

group  by 和 order by搭配使用,即先分组,后排序。

3. 聚合函数查询

avg(列) 函数时计算某一列的平均值,即参数只有一个,比如AVG(列名1)。

count(*) 返回总记录数,count(列名1) 返回列名1中不为null的总行数。 

max(列) 返回某一列中最大的值。

min(列) 返回某一列中最小的值。

sum(列) 返回某一列中所有值的和,忽略掉null值。 可以配合distinct 使用,比如 sum(distinct  列)。

4. 连接查询

连接查询是将多张表的查询结果合并为一个查询结果,为了性能,一般连接查询不要超过3张表。on关键字后面跟的是匹配条件,可以是一个,也可以是多个,用and 或 or 连接即可。给出两张表进行举例说明 :      

fruit表(水果表)
package表(包装表)

1.内连查询inner join on

select A.lie1 ,  B.lie3 from A inner join B on A.id=B.id;类似这种,查询结果是同时满足两个表的on后面的条件的。

比如:select * from package f inner join fruit p on f.type = p.type;   执行结果如下:

2. 左连接查询left join on

select A.lie1 ,  B.lie3 from A left join B on A.id=B.id;类似这种,查询结果是包含了左边A表的所有记录,然后再包含了B表中符合on后面条件的记录。那么这样查询结果中可能有些记录,包含了A表的信息,而没有B表的信息。

比如:select * from package f inner join fruit p on f.type = p.type;   执行结果如下:

3. 右连接查询right join on

select A.lie1 ,  B.lie3 from A right join B on A.id=B.id;类似这种,查询结果是包含了右边B表的所有记录,然后再包含了A表中符合on后面条件的记录。那么这样查询结果中可能有些记录,包含了B表的信息,而没有A表的信息。

5.子查询

any(some)、all关键字子查询。

any关键字和some关键字是同一个功能和意义,语法 any(子查询),any用于在一个查询语句的条件里面,表示只要any中任何一个值满足条件就行,比如下面:

all关键字的意思就是要子查询满足所有的条件,比如大于num2的所有值才行。

exists关键字的子查询

exists 表示存在与否,语法:exists(子查询),如果子查询有返回结果,则 exists的结果为true,如果子查询返回空(没有记录),则返回false。

 

 not  exists关键字的作用恰恰相反。

in 关键字子查询

语法:in(子查询),子查询返回的是数据列,比如(12,25,34)这种,表示是否存在语数据列中。

union关键字合并查询结果集

6. 正则表达式查询——REGEXP关键字后跟正则表达式

  就像这样的用。

2. 插入语句

不指定数据的列名,那么要保证插入的数据的顺序必须与表的各列一一对应。

可以指定数据插入哪些列。

insert into table (id, name) values(111, 'dgh');

insert into table (id,name) values(111,‘dgh’),(222,‘ddd’);

将查询结果作为输入,插入。

3. 更新语句

update table set 列名1=“xxx”,列名2=“rrr”  where 条件;

4. 删除语句

delete from table;删除表的所有记录;

delete from table where exp;删除指定条件的记录;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值