Mysql数据库(3)-CURD语句

Maysql数据库(3)-数据库的CURD语句

C:create 添加数据-insert语句

U:update 更新数据-update语句

R:read   读取(查找)数据-select语句

D:delete 删除数据-delete语句

一.Insert 语句

1.基本使用:insert into table_name(要添加数据的列名)

               values (与列名对应的列类型)

2.注意事项

2.1 如果是给表中的所有字段添加数据,可以不写前面的字段名称

2.2 一条语句添加多行数据  insert into table_name (列名..) values (),(),() 形式添加多条记录

2.3在 values 中列出的数据位置必须与被加入的列的排列位置相对应。

2.4 关于默认值,当不给某个字段值时(此时2.3的相对应没有满足),并且指定了not null,那么如果有默认值就会添加默认值,否则就会报错。如果某个列没有指定 not null ,那么当添加数据时,没有给定值,则会默认给 null(指定某个列的默认值,可以在创建表时进行指定,在列名 列类型 后加上 dafault xxx即可,同理指定为not null也是在列类型后加上 not null)

二.Update语句

1.基本使用

  UPDATE table_name

  SET 具体设置的更新内容

  WHERE 在哪里更新数据,指明更新那些行

UPDATE employee
SET salary = salary + 1000 , job = 'java程序员' 
WHERE user_name = 'ZitWang'

2.注意事项

(WHERE 在哪里更新数据,指明更新那些行)注意如果不写这个句子,那么,会更新所有的记录(行)

三.Delete语句

1.基本使用

DELETE  FROM  table_name
WHERE  将哪里的数据删除,指明删除那些行

DELETE FROM employee
WHERE user_name = 'tom';

2.注意事项

2.1(WHERE 将哪里的数据删除,指明删除那些行)注意如果不写这个句子,那么,会删除表中所有的数据

但不会删除表本身(结构还在,还可以insert),要与(drop table 表名)句子分开。

2.2  Delete 语句不能删除某一列的值(可使用 update 将其置空实现)

四.Select语句

1.基本使用

SELECT [distinct]   *或者(列名a,列名b,使用列名构建的表达式)

                  from  表名/*可以有多个,会涉及到多表查询,暂且不细说*/

  WHERE 查询条件是XXXX

2.注意事项

2.1SELECT [distinct] 中[distinct]是可选的,写上表示将查询结果去重,要查询的记录,每个字段都相同,才会去重。eg:SELECT DISTINCT `name`, english FROM student(有学生名字与英语分数都一致,此时才会去重)

2.2  *或者(列名a,列名b,使用列名构建的表达式) 中使用*,表示所有列全都查询出来,(列名a,列名b,使用列名构建的表达式)表示将某几列查询出来,此时,列名可以构建成表达式,eg:(列名a+列名b+10)整体作为查查询结果输出。可以给列名取别名,eg: 列名a AS 别名XXX。

2.3 from  表名  中,表名可以有多个,会涉及到多表查询,后面拓展说明。

2.4 WHERE 查询条件是XXXX 中在where子句中确定查询条件时,需要往往需要使用逻辑运算符与比较运算符来实现。

 

3.Select语句拓展-order by 子句

3.1作用:将查询结果进行排序 

3.2基本使用:order by 列名 ASC/DESC

3.3注意事项:  1.order by 子句 位于整条查询语句的结尾

               2.ASC/DESC,ASC表示将输出结果升序排列,DESC降序,如果语句中不写,默认ASC升序

               3.order by 列名,这个列名可以是表中本来就有的,也可以是你取的别名

4.Select语句拓展-group by 与having子句

4.1作用:group by子句将查询结果按照列分组,having子句可以实现对分组的结果进行过滤,二者往往结合起来使用。

4.2基本使用:

SELECT [distinct]   *或者(列名a,列名b,使用列名构建的表达式)

FROM 表名

GROUP BY 列名

HAVING 过滤条件

GROUP by 用于对查询的结果分组统计, 
-- having 子句用于限制分组显示结果
SELECT AVG(sal), deptno
FROM emp 
GROUP BY deptno
HAVING AVG(sal) < 2000;

5.Select语句拓展-合计/统计函数的使用

5.1 count函数:返回行的总数

    SELECT COUNT(*) FROM 表名
    WHERE 条件

    count(*) 返回满足条件的记录的行数

    count(列): 统计满足条件的某列有多少个,但是会排除为 null的情况

5.2 sum函数:求和

SELECT SUM(列名) AS 别名,SUM(列名),SUM(列名) FROM 表名;

5.3 avg函数:求平均

SELECT AVG(列名/列名的表达式) FROM 表名;

5.4 min/max:求最值

SELECT MAX(列名/列名的表达式) FROM 表名;

SELECT MIN(列名/列名的表达式) FROM 表名;

6.Select语句拓展-时间日期相关函数的使用

6.1显示当前时间:

current:最近的

CURRENT_DATE()当前日期;CURRENT_TIME()当前时间点;

CURRENT_TIMESTAMP()当前时间戳(日期年月日+时间点时分秒);

now();当前时间(日期年月日+时间点时分秒)

6.2日期加减时间:

DATE_ADD(date,INTERVAL 多长时间) ;DATE_SUB(date,INTERVAL 多长时间)

6.3日期加减日期:

加:DATE_ADD(date1,INTERVAL date2) ;

减:DATEDIFF(date1, date2);返回两个日期差(天数),可以取负数

6.4 unix_timestamp() 返回1970.1.1到当前时间的秒数

    FROM_UNIXTIME() : 可以把一个 unix_timestamp 秒数[时间戳],转成指定格式的日期。 %Y-%m-%d 格式是规定好的,表示年月日。在开发中,可以存放一个整数,然后表示时间,通过 FROM_UNIXTIME 转换。

SELECT UNIX_TIMESTAMP() FROM DUAL; 
SELECT FROM_UNIXTIME(1234567891, '%Y-%m-%d') FROM DUAL;
SELECT FROM_UNIXTIME(789463345, '%Y-%m-%d %H:%i:%s') FROM DUAL;

 DUAL:亚元表

7.Select语句拓展-加密与系统函数

USER();查询用户

DATABASE();查询当前使用数据库名称

MD5(str); 为字符串算出一个 MD5 的32位的字符串,常用于(用户密码)加密

PASSWORD(str; 加密函数, MySQL 数据库的用户密码就是 PASSWORD 函数加密

SELECT USER() FROM DUAL; -- 用户@IP 地址
SELECT DATABASE();

SELECT MD5('passwordxxxx') FROM DUAL;

SELECT LENGTH(MD5('passwordxxxx')) FROM DUAL;//此时长度为32,说明在数据库中存放的是加密后的密码

MD5(str)的应用:INSERT INTO 表名
                                        VALUES(MD5('密码'))//这样存入数据库的密码就是加密形式的,安全性up

7.Select语句拓展-流程控制函数

7.1 IF(expr1,expr2,expr3) 如果 expr1 为 True ,则返回 expr2 否则返回 expr3[类似(a?b:c)]

7.2 IFNULL(expr1,expr2) 如果 expr1 不为空,则返回 expr1,否则返回 expr2[是空吗(是,返回2)/(不是,返回1)--返回不是空的优先返回expr1]

7.3 SELECT CASE

   WHEN expr1 THEN expr2

   WHEN expr3 THEN expr4

   ELSE expr5 END; [类似if-else if- else .]
    //如果 expr1 为 true,则返回 expr2,如果 expr2 为 true, 返回 expr4, 否则返回 expr5

 

posted @ 2022-12-14 11:48  ZitWang  阅读(128)  评论(0)    收藏  举报