MySQL表的增删改查(插入,SELECT 列, WHERE 条件,结果排序,筛选分页结果,Update,Delete,group by),函数(日期函数,字符串函数,数学函数,其他函数)- 总结三

五、表的增删改查

5.1 Create

5.1.1 单行数据 + 全列插入:

         --value_list 数量必须和定义表的列的数量及顺序一致

         INSERT INTO students VALUES (101, 10001, '孙悟空', '11111');

5.1.2 多行数据 + 指定列插入:

          -- 插入两条记录,value_list 数量必须和指定列数量及顺序一致

         INSERT INTO students (id, sn, name) VALUES(102, 20001, '曹孟德'),(103, 20002, '孙仲谋');

5.1.3 插入否则更新(3)

       (1)表中有冲突数据,数据的值和 update 的值相等(2)表中没有冲突数据时被插入(3)表中有冲突数据已被更新

         INSERT INTO students (id, sn, name) VALUES (100, 10010, '唐大师')
         ON DUPLICATE KEY UPDATE sn = 10010, name = '唐大师';

5.1.4 替换

       (1)主键或者唯一键没有冲突,则直接插入;(2)主键或者唯一键如果冲突,则删除后再插入

          REPLACE INTO students (sn, name) VALUES (20001, '曹阿瞒');

5.2  Retrieve

5.2.1 SELECT 列

(1) 全列查询: SELECT * FROM exam_result;

(2) 指定列查询:SELECT id, name, english FROM exam_result;

(3)查询字段为表达式:表达式不包含字段SELECT id, name, 10 FROM exam_result;

                                         表达式包含一个字段:SELECT id, name, english + 10 FROM exam_result;

                                         表达式包含多个字段:SELECT id, name, chinese + math + english FROM exam_result;

(4)为查询结果指定别名:SELECT id, name, chinese + math + english 总分 FROM exam_result;

(5)结果去重:SELECT DISTINCT math FROM exam_result;

5.2.2 WHERE 条件

比较运算符:

逻辑运算符:

eg:(1)<: SELECT name, english FROM exam_result WHERE english < 60;

     (2)AND:SELECT name, yuwen FROM exam_result WHERE yuwen >= 80 AND yuwen <= 90;

         BETWEEN ... AND ...:SELECT name, yuwen FROM exam_result WHERE yuwen BETWEEN 80 AND 90;

    (3)OR: SELECT name, shuxue FROM exam_result  WHERE shuxue = 98  OR shuxue = 99;

         IN: SELECT name, shuxue FROM exam_result WHERE shuxue IN (98, 99);

    (4)%: SELECT name FROM exam_result WHERE name LIKE '孙%'; --姓孙

       _: SELECT name FROM exam_result WHERE name LIKE '孙_';--孙某

    (5)IS NOT NULL :  SELECT name, qq FROM students WHERE qq IS NOT NULL;

5.2.3 结果排序

语法:-- ASC 为升序(从小到大)  DESC 为降序(从大到小)   默认为 ASC

       SELECT ... FROM table_name [WHERE ...] ORDER BY column [ASC|DESC], [...];

注意没有 ORDER BY 子句的查询,返回的顺序是未定义的,永远不要依赖这个顺序

eg:SELECT name, math, english, chinese FROM exam_result  ORDER BY math DESC, english, chinese;

5.2.4 筛选分页结果

-- 起始下标为 0

-- 从 0 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n;
-- 从 s 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n;
-- 从 s 开始,筛选 n 条结果,比第二种用法更明确,建议使用
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;

对未知表进行查询时,最好加一条 LIMIT 1,避免因为表中数据过大,查询全表数据导致数据库卡死

5.3 Update

语法:UPDATE table_name SET column = expr [, column = expr ...] [WHERE ...] [ORDER BY ...] [LIMIT ...]

          eg: UPDATE exam_result SET math = math + 30 ORDER BY math  + english + chinese LIMIT 3;--将总成绩倒数前三的 3 位同学的数学成绩加上 30 分

5.4 Delete

5.4.1 删除数据: DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]

        eg:DELETE FROM exam_result WHERE name = '孙悟空';

            DELETE FROM tablename;            --删除整张表数据

5.4.2 截断表:TRUNCATE [TABLE] table_name

         注意:这个操作慎用(1)只能对整表操作,不能像 DELETE 一样针对部分数据操作;(2)实际上 MySQL 不对数据操作,所以比 DELETE 更快(3)会重置 AUTO_INCREMENT 项

       eg:TRUNCATE for_truncate;  -- 截断整表数据,注意影响行数是 0,所以实际上没有对数据真正操作

5.5  插入查询结果

语法:INSERT INTO table_name [(column [, column ...])] SELECT ...

     eg:-- 创建一张空表 no_duplicate_table,结构和 duplicate_table 一样
          CREATE TABLE no_duplicate_table LIKE duplicate_table;

          -- 将 duplicate_table 的去重数据插入到 no_duplicate_table

          INSERT INTO no_duplicate_table SELECT DISTINCT * FROM duplicate_table;

          -- 通过重命名表,实现原子的去重操作

           RENAME TABLE duplicate_table TO old_duplicate_table,no_duplicate_table TO duplicate_table;

5.6 聚合函数

5.7group by子句的使用

select column1, column2, .. from table group by column;

六、函数

6.1 日期函数

eg:  select date_add('2017-10-28', interval 10 day);

6.2 字符串函数

eg:(1)--要求显示student表中的信息,显示格式:“XXX的语文是XXX分,数学XXX分,英语XXX分

    select concat(name, '的语文是',chinese,'分,数学是',math,'分') as '分数' from student;

    (2)--求学生表中学生姓名占用的字节数

    select length(name), name from student;

    注意:length函数返回字符串长度,以字节为单位。如果是多字节字符则计算多个字节数;如果是单字节字符则算作一个字节。比如:字母,数组算作一个字节,中文表示多个字节数(与字符集编码有关)

6.3 数学函数

6.4 其他函数

(1)user() 查询当前用户

(2)md5(str)对一个字符串进行md5摘要,摘要后得到一个32位字符串

(3)database()显示当前正在使用的数据库           eg:select database();

(4)password()函数,MySQL数据库使用该函数对用户加密     eg:select password('root');

(5)ifnull(val1, val2) 如果val1为null,返回val2,否则返回val1的值  

猜你喜欢

转载自blog.csdn.net/qq_43109561/article/details/89004981