1、查询字段的内容:可以是表中的字段、常量值、表达式、函数

#查询常量、表达式、函数时在不涉及表中字段时无需FROM子句
SELECT 100;
SELECT 'john';

SELECT 100%90;

SELECT VERSION();

2、SQL中的+是运算符,不能作为字符串连接符,但如果+连接的字符串可以转化为数值型,则可以进行加法运算,详细规则如下:

SELECT 100+90;# 190 操作数都为数值型,直接做加法运算
SELECT '123'+90;# 213 操作数可以转化为数值型,则先将操作数转化为数值,再做加法运算
SELECT '123'+'12';# 135
SELECT 'john'+90;# 90 #操作数不可转化为数值型,则转化为0
SELECT 'john'+'Tom';#0
SELECT null+10;#null 操作数中只要有一个为null,则结果为null

3、SQL中的CONCAT(str1,str2,…)可以拼接多个参数,第三个形参是可变参数,但是要注意,这些参数中如果有一个为null,则拼接后的结果就是null,因此在拼接查询字段时最好使用ifnull函数判断一下

SELECT CONCAT('a','v','c','f');

 SQL中还有一个ISNULL()函数:判断某字段或表达式是否为null,如果是返回1,否则返回0

SELECT
	ISNULL( commission_pct ) 
FROM
	employees 
WHERE
	commission_pct IS NOT NULL 
	LIMIT 1;#结果为0

4、WHERE子句中支持的条件表达式
 1️⃣简单条件运算符:>、<、=、!=(<>)、>=、<=、<=>(安全等于)

#查询奖金率为null的员工信息:安全等于既可以比对null值,也可以比对其他类型的值
SELECT
	* 
FROM
	employees 
WHERE
	commission_pct <=> null;

#查询last_name值为Kochhar的员工信息
SELECT
	* 
FROM
	employees 
WHERE
	last_name <=> 'Kochhar';

 2️⃣逻辑运算符:and(&&)、or(||)、not(!)
 3️⃣模糊查询:like、between…and…、in、is null
Tip
  1️⃣like中支持两种通配符:%(任意多个任意字符)、_(一个任意字符)

#查询last_name中第3个字符为n第5个字符位l的员工信息
SELECT
	* 
FROM
	employees 
WHERE
	last_name LIKE '__n_l%';

  2️⃣like中支持转义:使用\,也可以使用 ESCAPE 关键字自定义转义字符

#查询last_name中第2个字符为_的员工信息
SELECT
	* 
FROM
	employees 
WHERE
	last_name LIKE '_\_%';
	
#查询last_name中第2个字符为_的员工信息,使用ESCAPE关键字指定转义字符
SELECT
	* 
FROM
	employees 
WHERE
	last_name LIKE '_$_%' ESCAPE '$';

5、排序:可以按照表达式排序、别名排序、函数排序

#查询员工姓名和员工年薪并按年薪降序排列——表达式
SELECT
	last_name,
	salary * 12 * ( 1+ IFNULL( commission_pct, 0 ) ) 年薪 
FROM
	employees 
ORDER BY
	salary * 12 * ( 1+ IFNULL( commission_pct, 0 ) ) DESC;

#查询员工姓名和员工年薪并按年薪降序排列——别名
SELECT
	last_name,
	salary * 12 * ( 1+ IFNULL( commission_pct, 0 ) ) 年薪 
FROM
	employees 
ORDER BY
	年薪 DESC;

#按函数排序
SELECT
	LENGTH( last_name ) 姓名长度,
	salary * 12 * ( 1+ IFNULL( commission_pct, 0 ) ) 年薪 
FROM
	employees 
ORDER BY
	LENGTH( last_name ) DESC,年薪 DESC;

Tip:SQL语句的执行顺序是先执行FROM子句,接着执行WHERE子句,然后执行SELECT子句,其次是ORDER BY子句