3.dml语句、运算符、函数

dml语句、运算符、函数

  DML(Data Manipulation Language)语句: 数据操纵语句,用于添加、删除、更新和查询数据库记录,并检查数据完整性,常用的语句关键字主要包括 insert(增加)、delete(删除)、udpate(修改)   和select(查询) 等。
表的管理

插入数据

    • insert into 表名[字段名] values (值1,[值2]);
      值要与数据类型相同,大小必须在列的规定范围,一一映射;字符和日期型数据包含在单引号中;不指定值为插入空值(null)

  一次性插入多条数据

    • INSERT INTO 表名 【字段名1,字段名2】VALUES(record1_value1,record1_value2,....,record1_valuesn),(record2_value1,record2_value2,....,record2_valuesn),(record3_value1,record3_value2,....,recordn_valuesn);

  更新数据

    • update 表名 set 修改内容 where 修改条件;(后面这个其实就是一个匹配的条件,set后为修改的数据)

  同时更新多条数据

    • update 表1名 a,表2名 b set a.sal=a.sal*b.deptno,b.deptname=a.ename where a.deptno=b.deptno;
      其中a,b是两个表的别名(当然不起别名也是可以的)。上一语句的意思是:当表1的deptno与表2的deptno相同时,将表1的sal更新成表1的sal*表2的deptno积,将表2的deptname更新成表1的ename。

  删除表中数据

    • delete from 表名 [where 字段=值];
      删除多个表中数据
      • delete a,b from emp a,dept b where a.deptno=b.deptno and a.deptno=3;

  用于删除表的所有数据

    • truncate table <表名>

  查询所有字列

    • select * from 表名;

  查询一部分列(建议查询所有列也用这种)

    • select 字段1[,字段2..] from 表名;

  去重复数据

    • select [distinct] * from 表名

  列 起别名

     select 字段1 as 别名1,字段2 as 别名2,..from 表名

     中文需要加 ' 号,英文不用

where子句-条件查询
  用where 关键字
    select * from 表名 where 字段名=对应值;
  除了‘=’外,还可以使用>、<、>=、<=、!=等比较运算符;
  多个条件之间还可以使用or、and 等逻辑运算符进行多条件联合查询。
    select * from 表名 where deptno=1 and sal<3000;

范围(between and)查询

  • select * from student where english between 80 and 90;
    查询英语分数在80到90之间的同学

模糊查询

  • [NOT] LIKE '字符串';
    NOT :可选参数,字段中的内容与指定的字符串不匹配时满足条件。
    字符串:指定用来匹配的字符串。“字符串”可以是一个很完整的字符串,也可以包含通配符。
    •  查询名字中间有金的,且姓为一位的名字:select * from 表名 where name LIKE '_金%';
    •     支持百分号“%”通配符和下划线“_” 通配符
  • %通配符代表零个或多个任意字符,_通配符代表一个字符在不知道是啥的时候用_通配符
  • 下划线通配符一次只匹配一个字符

order by子句---默认升序
指定排序的列,排序的列即可是表中的列名,也可以是select 语句后指定的列名。

  • Asc升序 Desc降序

select * from strdent order by math,english DESC;
注意:只有english降序了,math默认升序,所以想要math也升序在math后也加desc

注意事项

  • 如果delete 和truncate删除表数据时如果不加where子句筛选将删除所有数据,delete删除可撤销
  • * 号代表所有列不建议使用,它将减慢查询效率
  • 可以使用mysql运算符做运算,不过一般不用数据库做计算,因为会减慢存储速度
  • 数据库很灵活它可以根据计算出来的列而查询等等

  • 算数运算符
    • + 加法运算 用于获得一个或多个值的和
    • - 减法运算 用于从一个值中减去另一个值
    • * 乘法运算 使数字相乘,得到两个或多个值的乘积
    • / 除法运算,返回商 用一个值除以另一个值得到商
      %,MOD 求余运算,返回余数 用一个值除以另一个值得到余数
    • 语法:MOD(a,b)
        例:SELECT MOD (7,3) ;
    逻辑运算符
    • NOT 或者 ! 逻辑非
      • 当操作数为 0(假)时,返回值为 1;
      • 当操作数为非零值时,返回值为 0;
      • 当操作数为 NULL 时,返回值为 NULL。
      • 在使用运算符运算时,一定要注意运算符的优先级,如果不能确定计算顺序,最好使用括号,以保证运算结果的正确。
      AND 或者 && 逻辑与
      • 当所有操作数都为非零值并且不为 NULL 时,返回值为 1;
      • 当一个或多个操作数为 0 时,返回值为 0;
      • 操作数中有任何一个为 NULL 时,返回值为 NULL。
      • 注意:AND 运算符可以有多个操作数,但要注意多个操作数运算时,AND 两边一定要使用空格隔开,不然会影响结果的正确性。
      OR 和 || 逻辑或
      • 当两个操作数都为非 NULL 值时,如果有任意一个操作数为非零值,则返回值为 1,否则结果为 0;
      • 当有一个操作数为 NULL 时,如果另一个操作数为非零值,则返回值为 1,否则结果为NULL;
      • 假如两个操作数均为 NULL 时,则返回值为 NULL。
      XOR 逻辑异或
      • 当任意一个操作数为 NULL 时,返回值为 NULL;
      • 对于非 NULL 的操作数,如果两个操作数都是非 0 值或者都是 0 值,则返回值为 0;
      • 如果一个为0值,另一个为非 0 值,返回值为 1。
    比较运算符
    • = 等于
      = 运算符用来比较两边的操作数是否相等,相等的话返回 1,不相等的话返回 0
      • 若有一个或两个操作数为 NULL,则比较运算的结果为 NULL。
      • 若两个操作数都是字符串,则按照字符串进行比较。
      • 若两个操作数均为整数,则按照整数进行比较。
      • 若一个操作数为字符串,另一个操作数为数字,则 MySQL 可以自动将字符串转换为数字。
      • 注意:NULL 不能用于 = 比较。
      <=> 安全的等于
      <=> 操作符和 = 操作符类似,不过 <=> 可以用来判断 NULL 值,具体语法规则为
      • 当两个操作数均为 NULL 时,其返回值为 1 而不为 NULL;
      • 而当一个操作数为 NULL 时,其返回值为 0 而不为 NULL。
      <> 或者 != 不等于
      • 与 = 的作用相反,<> 和 != 用于判断数字、字符串、表达式是否不相等。对于 <> 和 !=,如果两侧操作数不相等,返回值为 1,否则返回值为 0;如果两侧操作数有一个是 NULL,那么返回值也是 NULL。
      <= 小于等于
      • <= 是小于等于运算符,用来判断左边的操作数是否小于或者等于右边的操作数;如果小于或者等于,返回值为 1,否则返回值为 0;如果两侧操作数有一个是 NULL,那么返回值也是 NULL。
      >= 大于等于
      • >= 是大于等于运算符,用来判断左边的操作数是否大于或者等于右边的操作数;如果大于或者等于,返回值为 1,否则返回值为 0;如果两侧操作数有一个是 NULL,那么返回值也是 NULL。
      > 大于
      • > 是大于运算符,用来判断左边的操作数是否大于右边的操作数;如果大于,返回值为 1,否则返回值为 0;如果两侧操作数有一个是 NULL,那么返回值也是 NULL。
      < 小于
      • < 是小于运算符,用来判断左边的操作数是否小于右边的操作数;如果小于,返回值为 1,否则返回值为 0;如果两侧操作数有一个是 NULL,那么返回值也是 NULL。
      IS NULL 或者 ISNULL 判断一个值是否为空
      • IS NULL 或 ISNULL 运算符用来检测一个值是否为 NULL,如果为 NULL,返回值为 1,否则返回值为 0。ISNULL 可以认为是 IS NULL 的简写,去掉了一个空格而已,两者的作用和用法都是完全相同的。
      IS NOT NULL 判断一个值是否不为空
      • IS NOT NULL 运算符用来检测一个值是否为非 NULL,如果是非 NULL,返回值为 1,否则返回值为 0。
      BETWEEN AND 判断一个值是否落在两个值之间
      • BETWEEN AND 运算符用来判断表达式的值是否位于两个数之间,或者说是否位于某个范围内,它的语法格式如下:
        • expr BETWEEN min AND max
          expr 表示要判断的表达式,min 表示最小值,max 表示最大值。如果 expr 大于等于 min 并且小于等于 max,那么返回值为 1,否则返回值为 0。
    • 注意:比较运算符可以用于比较数字、字符串和表达式的值。注意,字符串的比较是不区分大小写的。
    位运算符
    • | 位或 a | b 5 | 8
    • & 位与 a & b 5 & 8
    • ^ 位异或 a ^ b 5 ^ 8
    • ~ 位取反 ~a ~5
    • << 位左移 a << b 5 << 2,表示整数 5 按位左移 2 位
    • >> 位右移 a >> b 5 >> 2,表示整数 5 按位右移 2 位
    • 总结:位运算中的&、|、~和逻辑运算中的&&、||、!非常相似。
    运算符优先级

    • 在无法确定优先级的情况下,可以使用圆括号“()”来改变优先级,并且这样会使计算过程更加清晰。

in和no tin

  • in:IN 运算符用来判断表达式的值是否位于给出的列表中
  • not in:NOT IN 用来判断表达式的值是否不存在于给出的列表中
    语法:
    • expr IN ( value1, value2, value3 ... valueN )
    • expr NOT IN ( value1, value2, value3 ... valueN )
    • expr 表示要判断的表达式,value1, value2, value3 ... valueN 表示列表中的值。MySQL 会将 expr 的值和列表中的值逐一对比。

函数
   函数就是输入值然后得到相应的输出结果,输入值称为参数(parameter),输出值称为返回值。
   SELECT、INSERT、UPDATE 和 DELETE 语句及其子句(例如 WHERE、ORDER BY、HAVING 等)中都可以使用 MySQL 函数。例如,数据表中的某个数据是负数,现在需要将这个数据显示为整                   数,这时就可以在 SELECT 语句中使用绝对值函数。

数学相关函数

    • ABS 求绝对值
    • SQRT 求二次方根
    • MOD 求余数
    • CEIL 和 CEILING 两个函数功能相同,都是返回不小于参数的最小整数,即向上取整
    • FLOOR 向下取整,返回值转化为一个BIGINT
    • RAND 生成一个0~1之间的随机数,传入整数参数是,用来产生重复序列
    • ROUND 对所传参数进行四舍五入
    • SIGN 返回参数的符号
    • POW 和 POWER 两个函数的功能相同,都是所传参数的次方的结果值
    • SIN 求正弦值
    • ASIN 求反正弦值,与函数 SIN 互为反函数
    • COS 求余弦值
    • ACOS 求反余弦值,与函数 COS 互为反函数
    • TAN 求正切值
    • ATAN 求反正切值,与函数 TAN 互为反函数
    • COT 求余切值

  时间日期和相关函数

    • CURDATE 和 CURRENT_DATE 两个函数作用相同,返回当前系统的日期值
    • CURTIME 和 CURRENT_TIME 两个函数作用相同,返回当前系统的时间值
    • NOW 和 SYSDATE 两个函数作用相同,返回当前系统的日期和时间值
    • UNIX_TIMESTAMP 获取UNIX时间戳函数,返回一个以 UNIX 时间戳为基础的无符号整数
    • FROM_UNIXTIME 将 UNIX 时间戳转换为时间格式,与UNIX_TIMESTAMP互为反函数
    • MONTH 获取指定日期中的月份
    • MONTHNAME 获取指定日期中的月份英文名称
    • DAYNAME 获取指定曰期对应的星期几的英文名称
    • DAYOFWEEK 获取指定日期对应的一周的索引位置值
    • WEEK 获取指定日期是一年中的第几周,返回值的范围是否为 0〜52 或 1〜53
    • DAYOFYEAR 获取指定曰期是一年中的第几天,返回值范围是1~366
    • DAYOFMONTH 获取指定日期是一个月中是第几天,返回值范围是1~31
    • YEAR 获取年份,返回值范围是 1970〜2069
    • TIME_TO_SEC 将时间参数转换为秒数
    • SEC_TO_TIME 将秒数转换为时间,与TIME_TO_SEC 互为反函数
    • DATE_ADD 和 ADDDATE 两个函数功能相同,都是向日期添加指定的时间间隔
    • DATE_SUB 和 SUBDATE 两个函数功能相同,都是向日期减去指定的时间间隔
    • ADDTIME 时间加法运算,在原始时间上添加指定的时间
    • SUBTIME 时间减法运算,在原始时间上减去指定的时间
    • DATEDIFF 获取两个日期之间间隔,返回参数 1 减去参数 2 的值
    • DATE_FORMAT 格式化指定的日期,根据参数返回指定格式的值
    • WEEKDAY 获取指定日期在一周内的对应的工作日索引

  字符串相关的函数

    • LENGTH 计算字符串长度函数,返回字符串的字节长度
    • CONCAT 合并字符串函数,返回结果为连接参数产生的字符串,参数可以使一个或多个
    • INSERT 替换字符串函数
    • LOWER 将字符串中的字母转换为小写
    • UPPER 将字符串中的字母转换为大写
    • LEFT 从左侧字截取符串,返回字符串左边的若干个字符
    • RIGHT 从右侧字截取符串,返回字符串右边的若干个字符
    • TRIM 删除字符串左右两侧的空格
    • REPLACE 字符串替换函数,返回替换后的新字符串
    • SUBSTRING 截取字符串,返回从指定位置开始的指定长度的字符换
    • REVERSE 字符串反转(逆序)函数,返回与原始字符串顺序相反的字符串

  聚合函数

    • MAX 查询指定列的最大值
    • MIN 查询指定列的最小值
    • COUNT 统计查询结果的行数
    • SUM 求和,返回指定列的总和
    • AVG 求平均值,返回指定列数据的平均值

  流程控制函数

    • IF 判断,流程控制
    • IFNULL 判断是否为空
    • CASE 搜索语句

  使用范围

    • 数学函数主要用于处理数字。这类函数包括绝对值函数、正弦函数、余弦函数和获得随机数的函数等。
    • 字符串函数主要用于处理字符串。其中包括字符串连接函数、字符串比较函数、将字符串的字母都变成小写或大写字母的函数和获取子串的函数等。
    • 日期和时间函数主要用于处理日期和时间。其中包括获取当前时间的函数、获取当前日期的函数、返回年份的函数和返回日期的函数等。
    • 条件判断函数主要用于在 SQL 语句中控制条件选择。其中包括 IF 语句、CASE 语句和 WHERE 语句等。
    • 系统信息函数主要用于获取 MySQL 数据库的系统信息。其中包括获取数据库名的函数、获取当前用户的函数和获取数据库版本的函数等。
    • 加密函数主要用于对字符串进行加密解密。其中包括字符串加密函数和字符串解密函数等。
      其他函数主要包括格式化函数和锁函数等。来源于C语言中文网。

 代码练习:

 

#order dy(默认升序) 字段 desc(逆序)
#查询eternity里age列以逆序排列,id列以升序(因为它默认升序)
SELECT id,age FROM eternity ORDER BY id,age DESC ;

#创建一个员工表employee
CREATE TABLE employee(
    id INT,
    NAME VARCHAR(20),
    gender VARCHAR(20),
    birthday DATE,
    entry_date DATE,
    job VARCHAR(30),
    salary DOUBLE,
    RESUME LONGTEXT#longtext:大型文本类型
);

ALTER TABLE employee MODIFY id INT PRIMARY KEY AUTO_INCREMENT;#只有自增列,而且这个只能是键
#查询employee表的所有列,不建议用,它会减慢查询速度
SELECT * FROM employee;

#插入数据 insert into 表名 values(值1,值2...);要与字段一一对应
INSERT INTO employee VALUES(2,'鬼谷','','1918-08-08','2021-09-28','枪兵',6000,'aggggfgagag');
INSERT INTO employee(NAME,gender,birthday,entry_date,job,salary,RESUME) VALUES('鬼谷子','','1918-08-08','2021-09-28','射手',6000,'aggggfgagag');
INSERT INTO employee(NAME,gender,birthday,entry_date,job,salary,RESUME) VALUES('鬼谷子','','1918-08-08','2021-09-28','射手',6000,'aggggfgagag');

#修改: update 表名 set 修改内容 where 条件;
UPDATE employee SET id=1 WHERE id=2;
UPDATE employee SET NAME='saber',job='大不列颠国国王' WHERE id=1 AND NAME='saber';
UPDATE employee SET salary=452 WHERE id=4;
SELECT NAME,id,job,salary FROM employee;
#把saber的工资加1000
UPDATE employee SET salary=salary + 1000 WHERE id=1;

#delete删除 :   语法:delete from 表名 where 条件;
DELETE FROM employee WHERE id=3;
#产出表数据
DELETE FROM employee;
#truncate删除:清空表    语法:truncate 表名;或truncate table 表名;
TRUNCATE employee;
#双击栏位下的列名 用语句查询
SELECT id,`name`,`gender`,`birthday`,`entry_date`,`job`,`salary`,`resume` FROM employee;
#查询一部分列
SELECT id,NAME FROM employee;
#去重:distinct   语法:select distinct 字段 from employee;
SELECT DISTINCT NAME FROM employee;

#计算
SELECT id+10,NAME,salary FROM employee;

#起别名  
/*<表名> [AS] <别名>

其中各子句的含义如下:
<表名>:数据库中存储的数据表的名称。
<别名>:查询时指定的表的新名称。
AS关键字可以省略,省略后需要将表名和别名用空格隔开。

注意:表的别名不能与该数据库的其它表同名。字段的别名不能与该表的其它字段同名。在条件表达式中不能使用字段的别名,否则会出现“ERROR 1054 (42S22): Unknown column”这样的错误提示信息。*/
SELECT id AS '身份证',NAME AS emname FROM employee;

#给id和salary+6
SELECT NAME,(id+salary)+10 AS '沙雕' FROM employee;
#查询salary=7000和id=1的
SELECT * FROM employee WHERE salary=7000 AND id=3;

#in(set)运算符:显示再in列表值所在的行
#查询salary列表7000和6000的行
SELECT *FROM employee WHERE salary IN(7000,6000); 

#查询所有name以子结尾的 语法:字段 Like '%子'
SELECT * FROM employee WHERE NAME LIKE '%子' ;
#查询所有的name中第一个字和谷字 语法:字段 Like '_谷'
SELECT * FROM employee WHERE NAME LIKE '_谷' ;

#or 或   查询鬼开头或子结尾的
SELECT * FROM employee WHERE NAME LIKE '鬼%' OR '%子';

#<> 不等于  查询salary不等于7000的
SELECT * FROM employee WHERE salary <> 7000;

#IS NULL:为空
select * from employee where name IS NULL;
#is not null;不为空
select * from employee where name IS NOT NULL;
#NOTSELECT * FROM employee where not name='鬼谷';

 

posted @ 2021-09-28 23:03  阴阳兔  阅读(193)  评论(0)    收藏  举报