sql语言(note7)

第九周(Mysql语言)

5.1 MySQL语言简介

5.2 常量和变量

5.2.1 常量

  1. Unicode字符串与ASII字符串相似,但前面有N标志符,N必须为大写,例:N'hello'

  2. 字符串中的特殊字符

    • NUL字节与NULL值不同,NUL为一个零值字节,NULL代表没有值
  3. 字符串常量

    mysql> select 'hello','"hello"','hel''lo','\'hello';
    
    +-------+---------+--------+--------+
    | hello | "hello" | hel'lo | 'hello |
    +-------+---------+--------+--------+
    | hello | "hello" | hel'lo | 'hello |
    +-------+---------+--------+--------+
    
  4. 数值常量

    • 数值常量可以分为整数常量和浮点数常量
      • 整数常量例:1894,+12313155,-1435433
      • 浮点数常量:5.26,-1.39,101.5E5,0.5E-2
  5. 十六进制常量

    • 最前面有一个大写或者小写字母“x”,例:X‘41’表示大写字母A。x‘4D7953514C’表示字符串MySQL。
    mysql> select 0x41,cast(0x41 as unsigned);
    +------+------------------------+
    | 0x41 | cast(0x41 as unsigned) |
    +------+------------------------+
    | A    |                     65 |
    +------+------------------------+
    
  6. 日期时间常量

    • 日期/时间的组合数据类型为DATETIME或TIMESTAMP,如“2014-06-17 12:30:43”
  7. 位字段值

    • 可以使用b'value'符号写位字段值,value是一个用0和1写成的二进制值,例:b'0'显示为空白,b'1'显示为一个笑脸图标,OCT函数可以将位字段值常量显示为数值型格式
    SELECT BIN(b'111101'+0),OCT(b'111101'+0);
    +------------------+------------------+
    | BIN(b'111101'+0) | OCT(b'111101'+0) |
    +------------------+------------------+
    | 111101           | 75               |
    +------------------+------------------+
    
  8. 布尔值

    mysql> SELECT TRUE,FALSE;
    +------+-------+
    | TRUE | FALSE |
    +------+-------+
    |    1 |     0 |
    +------+-------+
    
  9. NULL值

    • 通常表示没有值,无数据

5.2.2 变量

  1. 用户变量

    • 语法:SET @用户变量=expr1 [,@用户变量2= expr2 , …]

    • 用户变量名可以由当前字符集的文字数字字符、“.”、“_”和“$”组成。

      SET @name='王林';
      SET @user1=1,@user2=2,@user3=3;
      SET @user4=@user3+1;
      SELECT @name;
      
      /*其中:
      (1)创建用户变量name并赋值为“王林”。
      (2)创建用户变量user1并赋值为1,user2赋值为2,user3赋值为3。
      (3)创建用户变量user4,它的值为user3的值加1。
      (4)查询用户变量name的值。执行结果如右图所示。*/
      
      
      +-------+
      | @name |
      +-------+
      | 王林  |
      +-------+
      
      # 使用查询给变量赋值。
      USE xscj;
      SET @student=(SELECT 姓名 FROM xs WHERE 学号='081101');
      
      #查询表xs中名字等于student值的学生信息。
      SELECT 学号,姓名,专业名,出生日期
      	FROM xs WHERE 姓名=@student;
      	
      +--------+------+----------+------------+
      | 学号   | 姓名 | 专业名   | 出生日期   |
      +--------+------+----------+------------+
      | 081101 | 王林 | 计算机   | 1990-02-10 |
      | 081202 | 王林 | 通信工程 | 1989-01-29 |
      +--------+------+----------+------------+
      
      
      mysql> SELECT @t2:=(@t2:=2)+5 AS t2;
      +----+
      | t2 |
      +----+
      |  7 |
      +----+
      
  2. 系统变量

    # 获取mysql的版本
    mysql> SELECT @@VERSION;
    +-----------+
    | @@VERSION |
    +-----------+
    | 5.5.62    |
    +-----------+
    
    #获取当前系统时间
     select CURRENT_TIME;
    +--------------+
    | CURRENT_TIME |
    +--------------+
    | 13:04:40     |
    +--------------+
    
    • 语法格式:SET 系统变量名 = expr

      ​ | [GLOBAL | SESSION] 系统变量名 = expr

      ​ | @@ [global.| session.] 系统变量名 = expr

    • 全局系统变量

      • 当MySQL启动的时候,全局系统变量就初始化了,并且应用于每个启动的会话。如果使用GLOBAL(要求SUPER权限)来设置系统变量,则该值被记住,并被用于新的连接,直到服务器重新启动为止。

        #将全局系统变量sort_buffer_size的值改为25000
        SET @@global.sort_buffer_size=25000;
        
    • 会话系统变量

      • 只适用于当前的会话

        #将当前的会话的SQL_WARNINGS变量设置为TRUE
        SET @@SQL_WARNINGS=NO;
        
        #对于当前会话,把系统变量SQL_SELECT_LIMIT的值设置为10
        #这个变量决定了SELECT语句的结果集中的最大行数
        SET @@SESSION.SQL_SELECT_LIMIT=10;
        SELECT @@LOCAL.SQL_SELECT_LIMIT;
        
        +--------------------------+
        | @@LOCAL.SQL_SELECT_LIMIT |
        +--------------------------+
        |                       10 |
        +--------------------------+
        
        #把SQL_SELECT_LIMIT的值恢复为默认值
        set @@LOCAL.SQL_SELECT_LIMIT=DEFAULT;
        
        #使用SHOW VARIABLES语句可以得到系统变量清单。
        #使用SHOW GLOBAL VARIABLES返回所有全局系统变量。
        #使用SHOW SESSION VARIABLES返回所有会话系统变量。
        
        

5.3 运算符与表达式

5.3.1 算术运算符

  1. “+” select 1.2+3.09345, 0.00000000001+0.00000000001;

  2. “-” select 200-201, 0.14-0.1, -2, -23.4;

    • 加减对于时间
    select '2014-01-20'+INTERVAL 22 DAY;
    
    ------------------------------+
    | '2014-01-20'+INTERVAL 22 DAY |
    +------------------------------+
    | 2014-02-11                   |
    +------------------------------+
    
  3. “ * ” select 512,50, -11.28.2, -19530415 -19540319;

  4. “ / ” select 12/2, 1.6/-0.1, 23/7, 23.00/7.00000,1/0;

  5. “ % ”求余 select 12%5, -32%7,3%0;

    # 在运算过程中,用字符串表示的数字可以自动地转换成字符串。当转换时,如果第一个字符的第一位是数字,那么它被转换为这个数字的值,否则,他被转换为零
    select '80AA'+'1','AA80'+1,'10x'*2*'qwe';
    
    ------------+----------+---------------+
    | '80AA'+'1' | 'AA80'+1 | '10x'*2*'qwe' |
    +------------+----------+---------------+
    |         81 |        1 |             0 |
    +------------+----------+---------------+
    

5.3.2 比较运算符

  1. 比较运算符

  2. “ = ” select 3.14=3.142,5.12=5.120, 'a'='A','A'='B','apple'='banana';

    • select 'Apple'='apple' , BINARY 'Apple'='apple';
    • 关键字BINARY 作用是 区分大小写
  3. " <> " select 5<>5,5<>6,'a'<>'a','5a'<>'5b';

  4. "<=",">=","<"和">" select 10>10, 10>9, 10<9, 3.14>3.142;

5.3.3 逻辑运算符

  1. NOT 取反,真变假,假变真
    • select NOT 1, NOT 0, NOT(1=1),NOT(10>9);
  2. AND 全真为真,一假为假
    • select (1=1) AND (9>10),('a'='a') AND ('c'<'d');
  3. OR 一真为真
    • select (1=1) OR (9>10), ('a'='b') OR (1>2);
  4. XOR 一真 ,而另一个为假且不是NULL,则返回值为真,否则为假
    • select (1=1) XOR (2=3), (1<2) XOR (9<10);

5.3.4 位运算符

  1. 位运算符

  2. " | " 和" & " 运算符

    select 13|28,3|4,13&28,3&4;
    
    +-------+-----+-------+-----+
    | 13|28 | 3|4 | 13&28 | 3&4 |
    +-------+-----+-------+-----+
    |    29 |   7 |    12 |   0 |
    +-------+-----+-------+-----+
    
    #本例中13|28表示按13和28的二进制位按位进行与(OR)操作。
    
  3. << 和 >>运算符,分别用于向左移动和向右移动,

    select 1<<7,64>>1;
    +------+-------+
    | 1<<7 | 64>>1 |
    +------+-------+
    |  128 |    32 |
    +------+-------+
    # 转化为二进制数,向左或者向右移动一位
    
  4. " ^ "运算符 执行位异或(XOR)操作

    select 1^0,12^5,123^23;
    +-----+------+--------+
    | 1^0 | 12^5 | 123^23 |
    +-----+------+--------+
    |   1 |    9 |    108 |
    +-----+------+--------+
    
  5. " ~ "运算符,执行位取反操作,并返回64位整型结果

    select ~18446744073709551614,~1;
    +-----------------------+----------------------+
    | ~18446744073709551614 | ~1                   |
    +-----------------------+----------------------+
    |                     1 | 18446744073709551614 |
    +-----------------------+----------------------+
    

5.3.5 运算符优先级

5.3.6 表达式

  1. 表达式还可以根据值的复杂性来分类
    • 当表达式的结果只是一个值,如一个数值、一个单词或一个日期,这种表达式叫做标量表达式
    • 若是表达式的结果为0个、1个或多个行表达式的集合,那么这个表达式就叫作表表达式
    • 表达式按照形式还可分为单一表达式和复合表达式。单一表达式就是一个单一的值,如一个常量或列名。复合表达式是由运算符将多个单一表达式连接而成的表达式

5.4 系统内置函数

5.4.1 数学函数

  1. GREATEST() 和 LEAST()函数,功能是获取一组数值中的最大值和最小值

    
    
posted @ 2020-04-22 16:15  风里来雨里去duu  阅读(311)  评论(0编辑  收藏  举报