MySQL数据表DML操作

时间:2021-11-21 17:34:57

INSERT语句

u  语法:

l  INSERT INTO 表名[(列名1,…列名n)] VALUES (值1,…值n);

u  功能:向指定的表添加指定值的记录

u  一次性插入多条记录:

l  INSERT INTO 表名 [(列名1,…列名n)] VALUES (值1,…值n),(值1,…值n)…;

 

      DELETE语句

u  语法:

l  DELETE FROM 表名 [where 条件] ;             

u  功能:用于删除满足指定条件的记录

u  注:所有的SQL语句的条件子句中都可以使用运算符和函数

 

      TRUNCATE语句

u  语法:

l  TRUNCATE [TABLE] tbl_name

u  功能:用于完全清空一个表

 

      UPDATE语句

u  语法:

l  UPDATE 表名 SET 列名1=值1,…列名n=值n [WHERE 条件] ;

        

      SELECT语句

l  基本语法:

                            SELECTselection_list                                   选择那些列

                                     FROMtable_list                                   从何处选择行

                                     WHEREprimary_constraint              行必须满足什么条件

                                     GROUPBY grouping_columns                   怎样对结果分组

                                     HAVINGsecondary_constraint        行必须满足的第二条件

                                     ORDERBY sotring_columns             怎样对结果排序

                                     LIMIToffset_start,row_count                  结果限定

                  

      普通查询

u  查询所有的记录的所有列

l  SELECT * FROM employees;

u  查询特定行

l  SELECT * FROM employees WHERE name='张三';

u  查询特定列

l  SELECT name ,salary FROM employees;

u  去掉重复的值

l  SELECT DISTINCT dept_id FROM employees;

u  给列取别名

l  SELECT name AS 姓名 FROMemployees;

l  SELECT name n FROM employees;

 

      条件查询

u  语法

l  SELECT 列名,… FROM 表名 WHERE 条件 ;

u  WHERE 子句中的条件表达式

l  可以包括运算符(算术、比较、逻辑等)

l  可以使用圆括号将一个表达式分成几个部分

l  可以使用常量,列和函数来完成运算

u  WHERE子句中不能出现组函数

                  

         查询排序

                   语法

                            SELECT列名,…FROM 表名 [WHERE 条件] ORDER BY 排序列名1 [ASC|DESC],排序列名2 [ASC|DESC]…;

                            ASC:升序,缺省;

                            DESC:降序

                   例:

                            SELECT* FROM employees ORDER BY dept_id ,salary DESC ;

                            SELECT* FROM employees ORDER BY RAND()

        

      查询分组

u  语法:

l  SELECT 列名,…

FROM表名

[WHERE 条件]

GROUP BY 分组的列;

u  GROUP BY 子句的真正作用在于与各种聚合函数配合使用。它用来对查询出来的数据进行分组,分组后的数据执行组函数计算,最终结果自动按分组列进行升序排列。

        

      常用聚合函数

u  聚合函数对一组值执行计算,并返回单个值。也叫组函数。

函数名

说明

COUNT(*|列名)

行计数

AVG(数值类型列名)

平均值

SUM(数值类型列名)

求和

MAX(列名)

最大值

MIN(列名)

最小值

u  除了COUNT()以外,聚合函数都会忽略空值。

u  聚合函数不能和非分组的列混合使用

 

示例

Ø  SELECT COUNT(*) AS '总数' FROMemployees;

Ø  SELECT dept_id,COUNT(*) ,SUM(salary),AVG(salary),MAX(salary),MIN(salary) FROM employees GROUP BY dept_id

 

n  查询分组中一个非常重要的规则:

u  出现在SELECT列表中的列,如果出现的位置不是在组函数中,那么必须出现在GROUP BY子句中。

 

         HAVING

u  HAVING子句用来对分组后的结果再进行条件过滤。

u  例:

l  SELECT dept_id ,AVG(salary)

                                     FROMemployees

                                     WHEREsalary BETWEEN 2500 AND 7000

                                     GROUPBY dept_id

                                     HAVINGCOUNT(*)>1;

 

      HAVING与WHERE的区别

u  WHERE子句是在分组前进行的条件锅炉,所以WHERE子句中不能使用聚合函数

u  HAVING子句是分组后进行的条件过滤,所以HAVING子句中可以使用聚合函数

 

      查询结果限定 

u  在SELECT语句的最后可以用LIMIT来限定查询就诶过返回的起始记录和总数量。——MySQL特有。

u  语法:

l  SELECT … LIMIT offset_start , row_count ;

n  offset_start: 第一个返回记录行的偏移量。默认为0。

n  Row_count: 要返回记录行的最大数目。

u  例:

l  SELECT * FROM employees LIMIT 5 ;  /*检索前5个记录行*/

l  SELECT * FROM employees LIMIT 5,10; /*检索记录行6-15*/

 

      总结

u  有关数据表的DML操作

l  INSERT INTO、DELETE、UPDATE

l  SELECT    selection_list

                                                        FROMprimary_constaint

GROUP BYgrouping_columns

HAVINGsecondary_constraint

ORDER BYsorting_columns [ASC|DESC]

LIMIToffset_start,row_count

l  条件查询

l  查询排序

l  聚合函数 COUNT() 、SUM()、AVG()、MAX()、MIN()

l  分组查询