MySQL的基本语法(复习)
  DosddciaWHNX 2023年12月08日 23 0


复习过程中,记录了很久没用而忘掉的一些语法。

-- 去重(DISTINCT)
SELECT DISTINCT id, salary FROM employees;

-- 重命名
# 3种,as和双引号都可省略,重命名字符串里面有空格时,一定要加双引号。
SELECT id 员工ID, salary "月工资", department_id AS "部门编号" FROM employees;
SELECT id, salary * 12 AS "年薪" FROM employees ORDER BY 年薪; # ORDER BY 后面可以跟别名
-- WHERE 后面不可跟别名,因为FROM 和 WHERE 先执行,SELECT 是后执行的,所以别名是在 WHERE 之后产生的。
SELECT id, salary * 12 AS "年薪" FROM employees WHERE 年薪 > 120000; #报错

-- 给空值赋值(IFNULL)
SELECT id, salary, salary * 12 AS "年工资" FROM employees;
SELECT id, salary, IFNULL(salary, 0) * 12 AS "年工资" FROM employees; 

-- 着重号 ``
SELECT * FROM `order`; -- order是排序关键字,这里的表名与关键字重复了,所以需要加着重号区分一下;普通表名也可以使用着重号,但没必要。

-- 查询常数
SELECT 'Sophia', * FROM employees; -- 在查询到的每一行中都带个常数

-- 显示表结构
DESCRIBE employees;
DESC employees;

-- 运算符
SELECT 100 + 1.5; # 101.5
SELECT 100 + '1'; # 101
SELECT 100 + 'a'; # 100,将'a'看做0处理
SELECT 100 + NULL; # 100
-- 除法
SELECT 100 / 1.0; # 100.0000
SELECT 100 / 3.0; # 33.3333
SELECT 100 DIV 3.0; # 33,DIV表示直接取整(不四舍五入)
SELECT 100 / 0; # NULL,不报错
-- 取模
# 取模结果的正负号取决于被模数 100 的正负号
SELECT 100 MOD 3.0; # 1
SELECT 100 % 3.0; # 1
SELECT -100 % 3.0; # -1

-- 当字符串不能隐式地转化为数值时,则其值为0
SELECT 0 = '1'; # 0
SELECT 0 = 'a'; # 1

-- 安全等于 <=>
SELECT 1 <=> NULL, NULL <=> NULL; # 0,1,安全等于就是为NULL判断而设计的

-- NULL 参与判断时,结果都为NULL
SELECT * FROM employee WHERE salary = NULL; # 不会匹配到任何结果,因为salary = NULL结果全部是 NULL
SELECT * FROM employee WHERE salary != NULL; # 不会匹配到任何结果,因为salary != NULL结果全部是 NULL
SELECT * FROM employee WHERE salary <=> NULL; # 可以正确匹配
SELECT * FROM employee WHERE salary IS NULL; # 可以正确匹配
SELECT * FROM employee WHERE ISNULL(salary); # 可以正确匹配

-- 匹配非空
SELECT * FROM employee WHERE salary IS NOT NULL; # 可以正确匹配
SELECT * FROM employee WHERE NOT salary <=> NULL; # 可以正确匹配

-- 最小值 LEAST、最大值 GREATEST
SELECT LEAST('g','b','t','m'), GREATEST('g','b','t','m');# b,t
SELECT LEAST(first_name, last_name); # 输出最小的字符串(逐字符比较)
SELECT LEAST(LENGTH(first_name), LENGTH(last_name));  # 输出最小的长度

-- BETWEEN 6000 AND 8000 包含边界
SELECT * FROM employee WHERE salary BETWEEN 6000 AND 8000;
SELECT * FROM employee WHERE salary >= 6000 && salary <= 8000;

-- in \ not in
SELECT * FROM employee WHERE department_id IN (10,20,30);
SELECT * FROM employee WHERE department_id = 10 or department_id = 20 or department_id = 30;

-- LIKE 模糊查询
# % 表示任意长度的任意字符,包括个数为0
# _ 表示一个任意字符
# \_ 表示斜杠的转义字符
# ESCAPE 表示将其他符号作为转义符号,MySQL 就不会将反斜杠作为转义字符处理了
SELECT * FROM employee WHERE last_name LIKE '%a%';  
SELECT * FROM employee WHERE last_name LIKE '_$_a%' ESCAPE '$'; # 这里的$_就是转义字符

-- REGEXP 正则匹配
# $表示结尾,^表示开头
SELECT 'shsk' REGEXP '^s', 'shsk' REGEXP 'k$', 'shsk' REGEXP 'hs';# 1,1,1

-- 逻辑运算符
-- NOT !
-- AND &&
-- OR ||
-- XOR  逻辑异或:其中必有一项满足,而另一项不满足

-- 位运算符:^ 异或运算符;~ 取反运算符;&;|;>>; <<
    
-- 排序 
SELECT * FROM employee ORDER BY salary; # ORDER BY 从低到高
SELECT * FROM employee ORDER BY salary ASC;  # 升序:DECS(ascend),ORDER BY默认升序,不写ASC也可以
SELECT * FROM employee ORDER BY salary DESC;  # 降序:DECS(descend)
SELECT id, salary * 12 AS "年薪" FROM employees ORDER BY 年薪; # ORDER BY 后面可以跟别名
-- WHERE 后面不可跟别名,因为FROM 和 WHERE 先执行,SELECT 是后执行的,所以别名是在 WHERE 之后产生的。
SELECT id, salary * 12 AS "年薪" FROM employees WHERE 年薪 > 120000; #报错
SELECT id, salary FROM employees WHERE salary > 6000 ORDER BY salary; # WHERE 和 ORDER BY 之类同时使用时,WHERE 一定要紧跟在 FROM 后面。
# 多级排序
SELECT id, salary FROM employees ORDER BY department_id DESC, salary ASC; 

-- 分页
# LIMIT (pageNo - 1) * pageSize, pageSize
SELECT id, salary FROM employees LIMIT 0,20; # 从第0条数据开始,显示20条数据
SELECT id, salary FROM employees LIMIT 2; # 返回第2条数据
SELECT id, salary FROM employees LIMIT 20 OFFSET 0; # MySQL 8.0 的新特性,从第0条数据开始,显示20条数据

-- 可以给表起别名,在 SELECT 和 WHERE 中则必须只能使用表的别名,不能使用表的原名。
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月08日 0

暂无评论

DosddciaWHNX