四、操作数据表中的记录

4-2插入记录INSERT

 

INSERT [INTO] table_name [(column_name,...)] {VALUES|VALUE} ({expr|DEFAULT},...),(...),...;

/*

column_name 表示列名

expr 表示表达式

DEFAULT 可直接书写,表示默认值 当字段有自动增加的属性后,在插入表的所有字段的数据时,可以填写 NULL 或 DEFAULT 这两个关键字,表示按照原先默认自动增长的属性

插入多行数据时,可以用逗号隔开

*/

Eg:

INSERT INTO table_name VALUES(DEFAULT,'BeforeDayBreak',md5('123'),DEFAULT,0),(NULL,'Superman',md5('123'),DEFAULT,0);

 

4-3插入记录INSERT SET-SELECT

前面说的

insert [column_name]values(...)[,(...),(....)];

比较常用,可以一次性插入多条记录,并且可以输入表达式甚至是函数 但是无法进行子查询

insert tb_name set column_name={expr|default}

可以进行子查询,但是只能插入一条记录

第三种

insert方法 insert table_name [(colname...)] select.....

这种方法就是把查询到的结果插入到指定数据表中

 

4-4单表更新记录UPDATE

UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET col_name1={exp1|DEFAULT}[,col_name2=...][WHERE where_condition]

/*一般来说要用WHERE指定位置,不然所有数据都会被更新*/

例:

不指定记录:UPDATE users set age = age + 5,sex = 0; 使表里所有记录的age加5

指定记录: UPDATE users set age = age+ + 10 WHERE id % 2=0; 取id为偶数的位置

 

4-5单表删除记录

DELETE FROM tbl_name [WHERE where_conditon];

若不添加WHERE则删除【全部记录】 删除后再插入,插入的id号从最大的往上加,而不是填补删除的。(自动编号)

 

4-6查询表达式解析

  • 每一个表达式表示想要的一列,必须至少有一个
  • 多个列之间以英文逗号分隔
  • 星号(*)表示所以列 tbl_name.*可以表示命名表的所有列
  • 查询表达式可以使用[As]alias_name为其赋予别名
  • 别名可用于GROUP BY,ORDRE BY或HAVING子句
  • SELECT 字段出现顺序影响结果集出现顺序,字段别名也影响结果集字段别名。

查找记录

  • 语法:

SELECT select_expr [,select expr2...] 只查找某一个函数或表达式

[

FROM table_references 查询表名

[WHERE where_conditon] 查询条件

[GROUP BY {col_name|position} [ASC|DESC],...] 按某个字段进行分组,相同的只显示第一个

[HAVING where_conditon] 分组时,给出显示条件

[ORDER BY {col_name|expr|position} [ASC|DESC],...] 排序

[LIMIT {[offset,]row_count|row_count OFFSET offset}] 限制返回数量

}

  • 查询表达式的顺序会影响结果顺序
  • 使用tbl_name.col_name来表示列记录,这多表查询时可以区别开同名的列
  • 使用[AS] alias_name为其赋予别名,别名可以用于GROUP BY、ORDER BY或HAVING子句,

例如SELECT id AS userId,username AS uname FROM users; 这样查询出来的结果会用别名表示

 

4-7WHERE语句进行条件查询

where 后各种根据条件(>、<、=、>=、<=、!=、<>、IS NOT NULL),根据逻辑(and,or),根据结合方式left join、right join等,根据模式匹配(IN、NOT IN、like、not like、regexp),使用各种MySQL函数和表达式,从表集合中筛选记录。

 

4-8GROUP BY语句对查询结果分组

[GROUP BY {col_name|position} [ASC|DESC],...]

ASC:升序,默认

DESC:降序

position:SELECT语句中列的序号

eg. SELECT sex FROM users GROUP BY sex;

对users中的sex按sex进行分组

eg. SELECT * FROM users GROUP BY 1;

(这里的1表示查询的第一个字段,这里查询所有字段信息,第一个字段就是id,所以会按照id字段进行分组)

1表示SELECT语句中第一个出现的字段,即位置。

  • 建议BY后写列名称,不写位置,因为位置还要人为数。
  • 注意:如果存在相同的值(例如上面的age可能有多个相同的值),只会保留一个。但使用ORDER BY 就不会省略。

 

4-9HAVING语句设置分组条件

having 语句分组,用在group by后面追加条件,判断式中的字段是必须出现在前面select中的 或者是可以包含没有出现在前面查询中的字段的一个聚合函数count(),max()等等

[HAVING when where_condition]

SELECT sex FROM users GROUP BY 1 HAVING age > 35; //有错

SELECT sex, age FROM users GROUP BY 1 HAVING age > 35;

SELECT sex FROM users GROUP BY 1 HAVING count(id) >= 2; (

这条指令,指按照sex分组,分成了两组sex=0和sex=NULL,条件id数大于2的留下显示,显然sex=0个数有8>2故留下,而sex=NULL个数为1,不满足条件,故不显示。如果条件改成count(id)>=1,则会显示sex为0和NULL两个分组。)

聚合函数永远只有一个返回结果 count是记录个数的,

 

4-10ORDER BY语句对查询结果排序

对查询结果进行排序,默认是升序

order by{col_name}

select * from users order by id desc; //对一个字段排序

select * from users order by age,id desc; //两个字段同时排序

desc是降序

1、对查询结果进行排序:

[ORDER BY [col_name | expr | position } [ASC|DESC],...]elect * from user order by id desc;

2、可以同时按多条字段进行排序,规则是先按前面的字段排,在基础上再按后面字段排。

3、如:SELECT * FROM users ORDER BY age,id DESC; 先按照age排序,如果age有重复的,重复的字段里按id排序

 

4-11LIMIT语句限制查询数量

LIMIT:限制查询结果返回的数量

[LIMIT {[offset,] row_count|row_count OFFSET offset}]

SELECT语句从0开始编号

offset:偏移量

row_count:返回结果的数目

eg. SELECT * FROM users LIMIT 2; // 从第一条开始(第一个为0),返回两条

       SELECT * FROM users LIMIT 2,3 ;//从第三条开始(第一个为0),返回三条

 

第三种insert,数据从一个表插入到另一个表 将查询结果写入到另一个数据表中:

INSERT table_name(column_name) SELECT ...

eg: INSERT test SELECT username FROM users WHERE age >=30; // 字段不匹配提示

INSERT test(username) SELECT username FROM users WHERE age >=30;

{

对比分组: SELECT sex, age FROM users GROUP BY 1 HAVING age > 35;

分组用的是HAVING要求HAVING后的条件要么是聚合函数,要么字段在前面出现;

而插入用的是WHERE 没有以上提到的两个限制

}

  • limit分页查询 limit (pageNo-1)*pageSize , pageSize

 

小结

四、操作数据表中的记录

四、操作数据表中的记录

四、操作数据表中的记录

四、操作数据表中的记录