MySQL 操作总结(二)

来源:互联网 发布:python在线编译器 编辑:程序博客网 时间:2024/06/04 19:25

MySQL 操作总结(二)

数据的操作(DML)

数据的插入(INSERTINTO):

插入一条:

INSERT INTO table_name(field1, field2,field3)

       VALUES(value1,value2, value3)

或者

INSERT INTO table_name

       VALUES(value1,value2, value3)

 

插入多条:
INSERT INTO table_name(field1, field2, field3)

       VALUES(value1,value2, value3),

       VALUES(value1,value2, value3),

       VALUES(value1,value2, value3)

插入查询结果:

INSERT INTO table_name1(field1, field2,field3)

       SELECT(field1,field2, field3)

              FROMtable_name2

                     WHERE…

数据的更新(UPDATE):

更新一条或者多条记录:

UPDATE table_name

       SETfield1=value1,

              field2=value2,

              field3=value3

       WHERECONDITION

数据的删除(DELETE):

DELETE FROM table_name

       WHERECONDITION

数据的查询(DQL)

简单单表记录查询:

SELECT * / SELECT DISTINCT field(去重)/SELECT field1*12 [AS] anothername, field2(重命名)/SELECTCONCAT(field1,“other words”, field2) [AS] anothername(field1和field2重新组合为一个新的字段,并且重命名为anothername)

FROM table_name

WHERE

       Field1 = ‘name’ /关系运算符

       AND(&&/OR/ ||) /逻辑运算符

       …(NOT) BETWEEN AND

       …IS (NOT) NULL

       …(NOT) IN

       …(NOT) LIKE%(_)’

       ORDER BY field1 [ASC | DESC], field2 [ASC |DESC] /对查询结果进行排序

       LIMIT start_row, row_count /限制查询显示数量,一般用于分页

 

统计函数和分组数据记录查询:

统计函数:

COUNT():统计表中记录的条数,COUNT(*)不忽略null值,COUNT(field)忽略null值

AVG(): 求平均值,AVG(field)忽略null值

SUM(): 求总和,SUM(field)忽略null值

MAX(): 求最大值,MAX(field)忽略null值

MIN(): 求最小值, MIN(field)忽略null值

注意:若所操作的表中没有任何数据记录,则COUNT函数返回0,其余函数返回null。

 

分组与统计函数结合使用:

SELECT COUNT(field), GROUP_CONCAT(field) /将分组中的field字段列为一个字段显示

       FROMtable_name

       WHERECONDITION

       GROUP BY field1, field2

       HAVING CONDITION;

 

多表数据联查:

内连接(INNERJOIN):在表关系的笛卡尔积中,保留匹配数据,舍弃不匹配数据(匹配并不代表相等,要根据匹配的条件)

l  自然连接:根据表关系中相同名称的字段进行记录匹配,然后去掉重复列,是一种特殊的等值连接。

l  等值连接:根据表关系中相同名称的字段进行相等(=)记录匹配,不会去掉重复列。

l  不等连接:在表关系笛卡儿积中,保留选择匹配字段不相等的记录,不会去掉重复列。

外连接(OUTERJOIN):在表关系笛卡儿积中,不仅保留表关系中所有匹配的数据记录,而且还会保留部分不匹配的数据记录。

l  左外连接:不仅保留所有匹配记录,而且保留左边表中的不匹配记录。

l  右外连接:与左外连接相对。

l  全外连接:保留所有的匹配与不匹配的数据记录。

 

内连接查询:

SELECT a.field1, a.field2, b.field3…

       FROMtable_name1 a INNER JOIN table_name2 b

       ONjoin_condition

外连接查询:

SELECT a.field1, a.field2.. ,b.field1,b.field2

       FROMtable_name1 a LEFT | RIGHT | FULL [OUTER] JOIN table_name2 b

       ONjoin_condition

 

合并查询数据记录:

SELECT field1, field2..

       FROMtable_name1

UNION(去重) | UNIONALL(不去重)

SELECT field1, field2

       FROMtable_name2

 

子查询:

连接查询性能很差,因为要做笛卡儿积然后在筛选数据,所以建议使用子查询替代连接查询。

子查询可以出现在WHERE子句或者FROM子句中。

子查询在WHERE子句中作为条件:

l  子查询结果返回单行单列数据

SELECT *

       FROM table_name1

       WHERE field>(

              SELECTfield

                     FROMtable_name2

                     WHERECONDITION);

l  子查询结果返回单行多列子查询

SELECT *

       FROM table_name1

       WHERE (field1,field2) = (

       SELECT field1, field2

              FROM table_name2

              WHERE CONDITION);

l  子查询返回多行单列数据

SELECT *

       FROM table_name1

       WHERE field1 (NOT)IN (

              SELECT field1

                     FROMtable_name2

                     WHERECONDITION);

       除了IN关键字还有(<>=)ANY,(<>=)ALL

l  带有关键字EXISTS的子查询

关键字EXISTS返回一个布尔类型,当返回结果集时为TRUE,不能返回结果集时为FALSE。查询时EXISTS对外表采用遍历方式逐条查询,每次查询都会比较EXISTS的条件语句,当EXISTS里的条件语句返回记录行时则条件为真,此时返回当前遍历到的数据记录;反之,如果EXISTS里的条件语句不能返回记录行,则丢弃当前遍历到的记录。

SELECT *

       FROM table_name1a

       WHERE EXISTS(

              SELECT *

                     FROM table_name2 b

                     WHEREa.field = b.field);

子查询在FROM子句中作为一张临时表:

l  子查询结果返回多行多列数据记录

 

0 0
原创粉丝点击