iMisty的技术栈

iMisty的技术栈

MySQL基础之特殊形式的查询

922
2019-06-15

特殊形式的查询

特殊形式的查询

  • 子查询 : 内层语句查询的结果可以作为外层语句查询的条件
    语法 SELECT 字段名称 FROM tb_name WHERE col_name = (SELECT col_name FROM tb_name)

    子查询的情况

    • 由IN引出的子查询

    • 由比较运算符引出的子查询

    • 由exists引发的子查询

    • ANY SOME ALL 引发的子查询,

    • INSERT ...SELECT 将查询结果集插入到这个表中

    • CREATE ... SELECT 可以才创建表的时候将另一个表中的数据写入到新表中

    • CREATE TABLE tb_name LIKE tb_name2 按照一个表的结构创建另一个结构一样的表

联合查询

  • UNION 会自动合并去除重复的值 SELECT 字段名称 ,... FROM tb_name UNION SELECT 字段名称, ... FROM tb_name2
  • UNION ALL 简单合并两个表的查询结果集 ,都会显示出来 SELECT 字段名称 ,... FROM tb_name UNION ALL SELECT 字段名称, ... FROM tb_name2

自身连接查询

  • 无限极分类

MySql 常用函数

数学函数
  • CELL() 进一取整,
  • ABS() 取绝对值
  • FLOOR 舍掉小数部分
  • POWER() 幂运算
  • ROUND() 四舍五入
  • PI() 圆周率
  • TRUNCATE() 截取小数点后几位
  • RAND()或者RAND(X) 0-1 之间的随机数
  • MOD() 取余数
  • SIGN() 得到数字符号
  • EXP() 计算得到E的X次方
字符串函数
  • SELECT CHAR_LENGTH('abc'); SELECT CHAR_LENGTH 得到指定字符串的字符数

  • SELECT LENGTH('abc') SELECT LENGTH 返回字符串的长度

  • SELECT CONCAT('a','b','c')SELECT CONCAT 将字符串合并成一个字符串

  • SELECT CONCAT('a','b','c',null)如果字符串中包含null,那么返回的结果就是null

  • SELECT CONCAT_WS('-','''a','b','c') 以指定字符拼接字符串

  • SELECT CONCAT_WS('-','a','b','c',null); 这样会拼接空字符

  • SELECT CONCAT_WS(null,'a','b','c'); 以null拼接会返回空字符

  • SELECT UPPER('hello world'),UCASE('hello world') ,LOWER('HELLO WORLD ') ,LCASE(''HELLO WORLD'') 将字符串转换成大写或者小写

  • SELECT REVERSE('abc') 字符串的反转 结果为cba

  • SELECT LEFT('hello',2) , RIGHT('hello',2) LEFT()|RIGHT() 返回字符串的前几个字符或者后几个字符

  • SELECT LPAD ('abc' ,10,'?') 用自定字符填充到指定长度

  • SELECT RPAD ('abc' ,10,'!')

  • SELECT TRIM(' abc ') , LTRIM(' abc'), RTRIM('abc ') 去掉空格,左边的空格或者右边的空格

  • SELECT CONCAT('*', TRIM(' abc '),'*') , LTRIM(' abc'), RTRIM('abc ') 去掉空格,左边的空格或者右边的空格

  • SELECT REPEAT('hello',3) 字符串重复指定的次数

  • SELECT REPLACE('hello king ','king','queen' 替换指定的字符串

  • SELECT SUBSTRING('abcdef',1,3) 截取字符串,从第几位开始截取几个字符

  • SELECT STRCMP ('a','z') 比较字符的assic 码,第一个字符大于第二个返回1,否则返回-1

常用日期函数
  • SELECT CURDATE(),CURRENT_DATE() 返回当前日期

  • SELECT CURTIMe(),CURRENT_TIME() 返回当前时间

  • SELECT NOW() ,CURRENT_TIMESTAMP(),SYSDATE() 返回当前的日期时间

  • SELECT MONTH(2017-02-19) 返回日期中的月份和月份的名称

  • SELECT MONTH(CURDATE()),MONTHNAME(CURDATE())

  • SELECT DAYNAME(NOW()) 返回星期几

  • SELECT DAYOFWEEK(NOW()) 返回一周内第几天

  • SELECT WEEK(NOW())

  • SELECT YEAR(NOW()),MONTH(NOW()),DAY(NOW()),HOUR(NOW()),MINUTE(NOW()),SECOND(NOW())

  • SELECT DATEDIFF('2017-03-01','2017-03-05') 计算两个日期相差的天数

  • SELECT DATE_FORMAT('2016-06-01','%Y/%m/%d') 格式化日期

其他常用函数

  • SELECT VERSION() 返回当前的数据库版本
  • SELECT CONNECTION_ID 返回当前数据库连接,查看当前线程的id
  • SELECT DATABASE(),SCHEMA(); 得到当前的数据库
  • SELECT USER(),CURRENT_USER(),SYSTEM_USER(),SESSION_USER();得到当前登陆的用户
  • SELECT LAST_INSERT_ID(); 得到上次插入操作产生的auto_increment的值
  • SELECT MD5('king') 加密函数MD5值
  • SELECT PASSWORD('123456') mysql 默认的加密函数,密码加密算法,例如用户的密码,不可以使用md5