回忆是一座桥
却是通往寂寞的牢

SQL语法 - 书写规范与基础函数

SQL语句的编写规范

编写规范:

  • SQL语句中出现的所有表名、表别名、字段名、序列等数据库对象都应小写;

  • SQL语句中出现的系统保留字、内置函数名、SQL保留字、绑定变量等都应大写;

  • SQL语句中出现的变量参数应采用驼峰命名法命名,并反映变量的实际意义;

  • SQL语句中的表别名应简短明了,宜反映表名的实际意义;

  • 如果一行有多列并超过80个字符,基于列对齐原则,应采用下行缩进;

  • 缩进应为1个Tab或者4个字符;

  • 同层次的SQL语句缩进应保持一致(纵向对齐);

  • SELECT/FROM/WHERE/ORDER BY/GROUP BY等子句应独占一行;

  • SELECT子句内容如果只有一项,应与 SELECT 同占一行;

  • SELECT子句内容如果多于一项,每一项都应独占一行,并在对应 SELECT的基础上向右缩进2个Tab或者8个字符;

  • FROM子句内容如果只有一项,应与 FROM同占一行;

  • FROM子句内容如果多于一项,每一项都应独占一行,并在对应FROM的基础上向右缩进1个Tab或者4个字符;

  • WHERE子句内容如果只有一项,应与 WHERE同占一行;

  • WHERE子句的条件如果有多项,每一个条件应独占一行,并以AND开头,并在对应WHERE的基础上向右缩进1个Tab或者4个字符;

  • (UPDATE)SET子句内容如果有一项,应与 SET同占一行;

  • (UPDATE)SET子句内容如果有多项,每一项应独占一行,并在对应SET的基础上向右缩进1个Tab或者4个字符;

  • INSERT子句左/右括号以及每个表字段应独占一行,其中括号无缩进,表字段在对应括号的基础上向右缩进1个Tab或者4个字符;

  • VALUES子句左/右括号以及每一项的值应独占一行,其中括号无缩进,每一项的值在对应括号的基础上向右缩进1个Tab或者4个字符;

  • SQL语句中不应出现空行;

  • SQL语句内的算术运算符、逻辑运算符(AND、OR、NOT)、 比较运算符(=、<=、>=、>、<、<>、BETWEEN AND)、IN、LIKE等运算符前后都应加一空格;

  • SQL语句中逗号后应加一空格;

  • 不等于应统一使用符号“<>”;


示例:

SELECT 
    e.employee_id,
    e.first_name,
    e.last_name,
    d.department_name,
    s.salary,
    s.bonus,
    (s.salary + s.bonus) AS total_compensation
FROM 
    employees AS e
INNER JOIN 
    departments AS d ON e.department_id = d.department_id
LEFT JOIN 
    salaries AS s ON e.employee_id = s.employee_id
WHERE 
    d.department_name IN ('Sales', 'Engineering')
    AND s.salary > 50000
    AND (s.bonus IS NOT NULL AND s.bonus > 5000)
ORDER BY 
    total_compensation DESC,
    e.last_name ASC
LIMIT 10;

常用的基础函数

由于不同数据库实现的SQL方言之间的函数存在一定差异,因此这里仅列出MySQL与SQL Server的常用基础函数,其他数据库实现的常用函数需查阅对应的官方文档。


MySQL

类别 函数 描述
数值函数 ABS(x) 返回x的绝对值
数值函数 BIN(x) 返回x的二进制(OCT返回八进制,HEX返回十六进制)
数值函数 CEILING(x) 返回大于x的最小整数值
数值函数 EXP(x) 返回值e(自然对数的底)的x次方
数值函数 FLOOR(x) 返回小于x的最大整数值
数值函数 GREATEST(x1, x2, …, xn) 返回集合中最大的值
数值函数 LEAST(x1, x2, …, xn) 返回集合中最小的值
数值函数 LN(x) 返回x的自然对数
数值函数 LOG(x, y) 返回x的以y为底的对数
数值函数 MOD(x, y) 返回x/y的模(余数)
数值函数 PI() 返回pi的值(圆周率)
数值函数 RAND() 返回0到1内的随机值,可通过提供一个参数(种子)生成指定的随机数
数值函数 ROUND(x, y) 返回参数x的四舍五入的有y位小数的值
数值函数 SIGN(x) 返回代表数字x的符号的值
数值函数 SQRT(x) 返回一个数的平方根
数值函数 TRUNCATE(x, y) 返回数字x截短为y位小数的结果
聚合函数 AVG(X) 返回指定列的平均值
聚合函数 COUNT(X) 返回指定列中非NULL值的个数
聚合函数 MIN(X) 返回指定列的最小值
聚合函数 MAX(X) 返回指定列的最大值
聚合函数 SUM(X) 返回指定列的所有值之和
聚合函数 GROUP_CONCAT(X) 返回由属于一组的列值连接组合而成的结果,非常有用
文本函数 ASCII(char) 返回字符的ASCII码值
文本函数 BIT_LENGTH(str) 返回字符串的比特长度
文本函数 CONCAT(s1, s2, …, sn) 将s1, s2, …, sn连接成字符串
文本函数 CONCAT_WS(sep, s1, s2, …, sn) 将s1, s2, …, sn连接成字符串,并用sep字符间隔
文本函数 INSERT(str, x, y, instr) 将字符串str从第x位置开始,y个字符长的子串替换为字符串instr,返回结果
文本函数 FIND_IN_SET(str, list) 分析逗号分隔的list列表,如果发现str,返回str在list中的位置
文本函数 LCASE(str)或LOWER(str) 返回将字符串str中所有字符改变为小写后的结果
文本函数 LEFT(str, x) 返回字符串str中最左边的x个字符
文本函数 LENGTH(s) 返回字符串str中的字符数
文本函数 LTRIM(str) 从字符串str中切掉开头的空格
文本函数 POSITION(substr, str) 返回子串substr在字符串str中第一次出现的位置
文本函数 QUOTE(str) 用反斜杠转义str中的单引号
文本函数 REPEAT(str, x) 返回字符串str重复x次的结果
文本函数 REVERSE(str) 返回颠倒字符串str的结果
文本函数 RIGHT(str, x) 返回字符串str中最右边的x个字符
文本函数 RTRIM(str) 返回字符串str尾部的空格
文本函数 STRCMP(s1, s2) 比较字符串s1和s2
文本函数 TRIM(str) 去除字符串首部和尾部的所有空格
文本函数 UCASE(str)或UPPER(str) 返回将字符串str中所有字符转变为大写后的结果
日期函数 CURDATE()或CURRENT_DATE() 返回当前的日期
日期函数 CURTIME()或CURRENT_TIME() 返回当前的时间
日期函数 DATE_ADD(date, INTERVAL int keyword) 返回日期date加上间隔时间int的结果(int必须按照关键字进行格式化)
日期函数 DATE_FORMAT(date, fmt) 依照指定的fmt格式格式化日期date值
日期函数 DATE_SUB(date, INTERVAL int keyword) 返回日期date减去间隔时间int的结果(int必须按照关键字进行格式化)
日期函数 DAYOFWEEK(date) 返回date所代表的一星期中的第几天(1~7)
日期函数 DAYOFMONTH(date) 返回date是一个月的第几天(1~31)
日期函数 DAYOFYEAR(date) 返回date是一年的第几天(1~366)
日期函数 DAYNAME(date) 返回date的星期名
日期函数 FROM_UNIXTIME(ts, fmt) 根据指定的fmt格式,格式化UNIX时间戳ts
日期函数 HOUR(time) 返回time的小时值(0~23)
日期函数 MINUTE(time) 返回time的分钟值(0~59)
日期函数 MONTH(date) 返回date的月份值(1~12)
日期函数 MONTHNAME(date) 返回date的月份名
日期函数 NOW() 返回当前的日期和时间
日期函数 QUARTER(date) 返回date在一年中的季度(1~4)
日期函数 WEEK(date) 返回日期date为一年中第几周(0~53)
日期函数 YEAR(date) 返回日期date的年份(1000~9999)
控制流函数 CASE WHEN [test1] THEN [result1]… ELSE [default] END 如果test1是真,则返回result1,否则返回default
控制流函数 CASE [test] WHEN [val1] THEN [result]… ELSE [default] END 如果test和valN相等,则返回result,否则返回default
控制流函数 IF(test, t, f) 如果test是真,返回t;否则返回f
控制流函数 IFNULL(arg1, arg2) 如果arg1不是空,返回arg1,否则返回arg2
控制流函数 NULLIF(arg1, arg2) 如果arg1=arg2返回NULL;否则返回arg1

SQL Server

类别 函数 描述
数值函数 trunc(45.923, 1) 按指定精度截断十进制数,结果:45.9,此为Oracle函数
数值函数 mod(1600, 300) 求除法余数,结果:100
数值函数 abs(numeric_expr) 求绝对值
数值函数 ceiling(numeric_expr) 取大于等于指定值的最小整数
数值函数 avg(numeric_expr) 取平均数
数值函数 exp(float_expr) 取指数
数值函数 floor(numeric_expr) 小于等于指定值的最大整数
数值函数 pi() 3.1415926…
数值函数 power(numeric_expr, power) 返回power次方
数值函数 rand([int_expr]) 随机数产生器
数值函数 round(numeric_expr, int_expr) 按int_expr规定的精度四舍五入
数值函数 sign(int_expr) 根据正数,0,负数,返回+1,0,-1
数值函数 sqrt(float_expr) 平方根
聚合函数 count() 返回组中的总条数,count(*)包括NULL值和重复值项
聚合函数 max() 返回组中的最大值,空值将被忽略
聚合函数 min() 返回组中的最小值,空值将被忽略
聚合函数 sum() 返回组中所有值的和,空值将被忽略
聚合函数 avg() 返回组中所有值的平均值,空值将被忽略
文本函数 datalength(Char_expr) 返回字符串包含字符数,不包含后面的空格
文本函数 substring(expression, start, length) 取子串
文本函数 right(char_expr, int_expr) 返回字符串右边int_expr个字符
文本函数 left(character_expression, integer_expression) 返回左起integer_expression个字符
文本函数 ltrim() 去掉字符串头部的空格
文本函数 rtrim() 去掉字符串尾部的空格
文本函数 str(float_expression, [length, decimal]) 把数值型数据转换为字符型数据
文本函数 upper(char_expr) 转为大写
文本函数 lower(char_expr) 转为小写
文本函数 space(int_expr) 生成int_expr个空格
文本函数 replicate(char_expr, int_expr) 复制字符串int_expr次
文本函数 reverse(char_expr) 反转字符串
文本函数 stuff(char_expr1, start, length, char_expr2) 将字符串char_expr1中从start开始的length个字符用char_expr2代替
文本函数 ltrim(char_expr) rtrim(char_expr) 去掉空格
文本函数 ascii(char) char(ascii) 取ascii码,根据ascii码取字符
文本函数 char() 将ASCII码转换为字符
文本函数 charindex(char_expr, expression) 返回char_expr的起始位置
文本函数 patindex("%pattern%", expression) 返回指定模式的起始位置,否则为0
日期函数 getdate() 返回日期
日期函数 getutcdate() 获取UTC时间
日期函数 day(getdate()) 取出天
日期函数 month(getdate()) 取出月
日期函数 year(getdate()) 取出年
日期函数 datename(datepart, date_expr) 返回名称如June
日期函数 datepart(datepart, date_expr) 取日期一部分
日期函数 datediff(datepart, date_expr1, date_expr2) 日期差
日期函数 dateadd(datepart, number, date_expr) 返回日期加上number
类型转换函数 convert(datetype[(n)], expr[, stylus]) 类型转换
类型转换函数 cast(expr AS datatype[(n)]) 类型转换
系统函数 suser_name() 用户登录名
系统函数 user_name() 用户在数据库中的名字
系统函数 user 用户在数据库中的名字
系统函数 show_role() 当前用户的规则
系统函数 db_name() 数据库名
系统函数 object_name(obj_id) 数据库对象名
系统函数 col_name(obj_id, col_id) 列名
系统函数 col_length(objname, colname) 列长度
系统函数 valid_name(char_expr) 是否是有效标识符
系统函数 newid() 返回一个GUID(全局唯一标识符)值
系统函数 isnumeric(expr) 判断表达式是否为数值类型或可转换成数值
系统函数 isdate(expr) 确定输入表达式是否为有效日期或可转换成日期
未经允许不得转载:夕枫 » SQL语法 - 书写规范与基础函数
订阅评论
提醒
guest
0 评论
内联反馈
查看所有评论