文章目录

  • 一、排序查询
  • 1. 基本排序
  • 2. 多条件排序
  • 二、单行函数
  • 调用方法
  • 字符函数
  • ①LENGTH函数
  • ②CONCAT函数
  • ③upper 和 lower
  • ④substr
  • ⑤instr
  • ⑥trim
  • ⑦lpad 和 rpad
  • ⑧replace替换
  • 数学函数
  • ①round,ceil 和 floor
  • ②truncate截断
  • ③mod取模
  • 流程控制函数
  • ①IF函数
  • ②CASE函数


一、排序查询

SELECT 查询列表
FROM 表
WHERE 条件
ORDER BY 排序列表 [ASC|DESC]

注意:

  • ASC升序|DESC降序 默认升序
  • ORDER BY子句可以支持单个字段多个字段表达式函数别名
  • ORDER BY子句一般是放在查询语句最后LIMIT子句除外

1. 基本排序

查询所有员工信息,工资从高到低:

SELECT * FROM employees
ORDER BY salary DESC;

部门编号>=90的员工信息,按入职时间先后排序

SELECT 	 	* 
FROM 	 	employees
WHERE 	 	department_id >= 90
ORDER BY 	hiredate ASC;

年薪高低显示员工的信息和 年薪【按表达式排序

SELECT 		*, salary*12*(1+IFNULL(commission_pct,0)) AS 年薪
FROM 		employees
ORDER BY 	salary*12*(1+IFNULL(commission_pct,0)) DESC;

年薪高低显示员工的信息和 年薪【按别名

SELECT  	*, salary*12*(1+IFNULL(commission_pct,0)) AS 年薪
FROM 		employees
ORDER BY 	年薪 DESC;

按姓名的长度显示员工的姓名和工资【按函数排序

SELECT 		LENGTH(last_name) AS 名字字节长度, last_name, salary
FROM 		employees
ORDER BY 	LENGTH(last_name);

mssql排序规则 修改Chinese_PRC_CI_AS sql语句排序默认_字段


按字典序

SELECT 		last_name, salary
FROM 		employees
ORDER BY 	last_name;

2. 多条件排序

查询员工信息,先按工资升序,再按员工编号降序多个字段

SELECT salary, employee_id
FROM employees
ORDER BY salary ASC,employee_id DESC;

二、单行函数

调用方法

SELECT 函数名()
[FROM 表]

字符函数

①LENGTH函数

作用:获取参数值的字节个数 例:

SELECT LENGTH('john');
SELECT LENGTH('中文hhh');

mssql排序规则 修改Chinese_PRC_CI_AS sql语句排序默认_字符串_02


mssql排序规则 修改Chinese_PRC_CI_AS sql语句排序默认_升序_03

②CONCAT函数

SELECT CONCAT(last_name,'_',first_name)
FROM employees;
  1. 在数据库中新建临时列CONCAT(last_name,'_',first_name)
  2. 将记录映射到该列中取出

mssql排序规则 修改Chinese_PRC_CI_AS sql语句排序默认_字符串_04

③upper 和 lower

SELECT UPPER('name');
SELECT LOWER('NAME');

姓变大写,名变小写,再拼接:

SELECT CONCAT(UPPER(last_name),'_',LOWER(first_name)) 姓名
FROM employees;

mssql排序规则 修改Chinese_PRC_CI_AS sql语句排序默认_字段_05

④substr

tips:这里的字符串的索引不同于一般的编程语言,它是从1开始的。

SELECT SUBSTR('李莫愁爱上了陆展元',7) out_put;

mssql排序规则 修改Chinese_PRC_CI_AS sql语句排序默认_数据库_06

SELECT SUBSTR('李莫愁爱上了陆展元',4,3) out_put; #[4,4+3)

mssql排序规则 修改Chinese_PRC_CI_AS sql语句排序默认_数据库_07

⑤instr

INSTR(str,substr):当substrstr子串时返回开始的索引,若不存在则返回0

SELECT INSTR('123456','456') AS out_put;

mssql排序规则 修改Chinese_PRC_CI_AS sql语句排序默认_升序_08

⑥trim

TRIM([remstr FROM] str)

  1. 当填入一个字符串时,返回去掉前后空白字符后的字符串
  2. 可填入[remstr FROM],可以去掉自定义字符
SELECT TRIM('  ave  ') AS out_put;
SELECT TRIM('*' FROM '********ave*****') AS out_put;

mssql排序规则 修改Chinese_PRC_CI_AS sql语句排序默认_升序_09

⑦lpad 和 rpad

作用:凑字符个数

SELECT LPAD('殷素素',10,'*');
SELECT RPAD('殷素素',10,'*');

⑧replace替换

REPLACE(str,from_str,to_str)

SELECT REPLACE('张无忌爱上了周芷若','周芷若','赵敏');

数学函数

①round,ceil 和 floor

round:四舍五入

ROUND(X)
ROUND(X,D)

第二个参数是精确到D位小数

SELECT ROUND(1.65);
SELECT ROUND(2.4);
SELECT ROUND(1.65,2);

ceil:向上取整
floor:向下取整

②truncate截断

TRUNCATE(X,D):截断x到d位小数

SELECT TRUNCATE(1.69999,1);

③mod取模

MOD(a,b): a-a/b*b;

流程控制函数

①IF函数

IF(expr1,expr2,expr3)

expr1是判断条件,当其为真时取expr2的值,否则取expr3的值。

例:

SELECT 
	last_name,
	commission_pct,
	IF(commission_pct IS NOT NULL,"有奖金,嘻嘻","没奖金,呵呵")
FROM 
	employees;

mssql排序规则 修改Chinese_PRC_CI_AS sql语句排序默认_sql_10

②CASE函数

用法1:

case 判断的字段或表达式
when 常量1 then 要显示的值1或语句1;
when 常量2 then 要显示的值2或语句2;
...
else 要显示的值n或语句n;
end

习题:查询员工的工资
部门号=30,显示1.1倍部门号=40,显示1.2倍部门号=50,显示1.3倍 其他原工资

SELECT 	department_id, salary 原始工资,
	CASE
		department_id 
		WHEN 30 THEN salary * 1.1 
		WHEN 40 THEN salary * 1.2 
		WHEN 50 THEN salary * 1.3 
		ELSE salary 
	END AS 新工资 
FROM
	employees;

mssql排序规则 修改Chinese_PRC_CI_AS sql语句排序默认_字符串_11


用法二:

# 多重if
case
when 条件1 then 要显示的值1或语句1;
when 条件2 then 要显示的值2或语句2;
...
else 要显示的值n或语句n;
end

习题:查询员工的工资情况
如果工资>20000,显示A 如果工资>15000,显示B 如果工资>10000,显示C 否则显示D

SELECT
	salary,
	CASE
	WHEN salary>20000 THEN "A"
	WHEN salary>15000 THEN "B"
	WHEN salary>10000 THEN "C"
	ELSE "D"
	END AS 工资级别
FROM employees;

mssql排序规则 修改Chinese_PRC_CI_AS sql语句排序默认_字符串_12