MYSQL学习的第三天
一:补充:多表查询中的不等值连接
1:连接n个表时,至少要有n-1个连接条件
2:等值连接:即两个表中的关键字段是相等的关系。例:t1.key1=t2.key2,
3:不等值连接:值两个表中的关键字段是非相等的其它逻辑关系。例:t1.key1 between t2.key2 and t2.key3
二:子查询 (嵌套查询)
1:注意子查询最多嵌套32句,单一般用不上这么多,因为逻辑关系很容易乱。
2:一个select语句中包含另一个或多个完整的select语句。
3:子查询分类
• 标量子查询:返回的结果是一个数据(单行单列)
• 行子查询:返回的结果是一行(单行多列)
• 列子查询:返回的结果是一列(多行单列)
• 表子查询:返回的结果是一张表(多行多列)
注:分类不是绝对的,如可以吧一列的子查询:
4:子查询出现的位置
• 出现在select子句中:将子查询返回结果作为主查询的一个字段或者计算值(标量子查询、列子查询)
• 出现在where/having子句中:将子查询返回的结果作为主查询的条件(标量子查询、行子查询、列子查询、表子查询)
• 出现在from子句中:将子查询返回的结果作为主查询的一个表(标量子查询、行子查询、列子查询、表子查询)
注:where字句中的判断值为聚合函数时,必须用到子查询。
5:子查询操作符

三、常用函数
1:字符串函数
CONCAT(str1,str2,...) 把多个文本字符串合并成一个长字符串,最多合并255个字符串,且有一个空值则返回空值。
INSTR(str,substr) 返回子字符串substr在文本字符串str中第一次出现的位置
LEFT(str,len) 返回字符串str的左端len个字符
RIGHT(str,len) 返回字符串str的右端len个字符
MID(str,pos,len) 返回字符串str的位置pos起len个字符,len不写时,则截取pos起后的所有字符
RTRIM(str) 返回删除了右空格的字符串str
LTRIM(str) 返回删除了左空格的字符串str
TRIM(str) 返回删除了两边空格的字符串str,不能删除中间的空格,较常用
REPLACE(str,from_str,to_str) 用字符串to_str替换字符串str中的子串from_str并返回
UPPER(str) 返回大写的字符串str
LOWER(str) 返回大写的字符串str
2:数学函数
ABS(n) 返回n的绝对值
FLOOR(n) 返回不大于n的最大整数值(地板函数)
CEILING(n) 返回不小于n的最小整数值(天花板函数)
ROUND(n[,d]) 返回n的四舍五入值,保留d位小数(d的默认值为0)
3:日期时间函数
DATE(date) 返回指定日期/时间表达式的日期部分或将文本转为日期格式
WEEK(date[,mode]) 返回指定日期是一年中的第几周
YEAR(date) 返回指定日期的年份(范围在1000到9999)
MONTH(date) 返回指定日期的月份(范围在1到12)
DAY(date) 返回指定日期的日(范围在1到31)
HOUR(datetime) 返回指定时间的小时(范围在1-24)
CURDATE() 以'yyyy-mm-dd'或yyyymmdd格式返回当前日期值(根据返回值所处上下文是字符串或数字)
CURTIME() 以'hh:mm:ss'或hhmmss格式返回当前时间值(根据返回值所处上下文是字符串或数字)
NOW() 以'yyyy-mm-dd hh:mm:ss'或yyyymmddhhmmss格式返回当前日期时间(根据返回值所处上下文是字 符串或数字)
DATEDIFF(expr1,expr2) 返回结束日expr1和起始日expr2之间的天数
UNIX_TIMESTAMP([date]) 返回一个unix时间戳(从'1970-01-01 00:00:00'开始的秒数,date默认值为当前时间)
FROM_UNIXTIME(unix_timestamp) 以'yyyy-mm-dd hh:mm:ss'或yyyymmddhhmmss格式返回时间戳的值(根据返回值所处上下文是字符 串或数字)
4:逻辑函数
IFNULL(expression, alt_value) 判断第一个表达式是否为 NULL,如果为 NULL 则返回第二个参数的值,如果不为 NULL 则返回第一个 参数的值。
IF(expr1,expr2,expr3) 如果expr1的值为true,则返回expr2的值,如果expr1的值为false,则返回expr3的值。
CASE WHEN expr1 THEN expr2 [WHEN expr3 THEN expr4...ELSE expr5] END 如果expr1的值为true,则返回expr2的值,如果expr3的值为true,则返回expr4的值...








暂无数据