目录
基础
1.别名
As:即alias
“”:双引号
注意事项:表定义了别名,原名必须要被替换为别名;
2.显示表结构
DESCRIBE 表名;
DESC 表名;
3.比较运算符
<=>:意义同=,区别:对NULL也可用;
<>:不等于。
4.NULL
参与WHERE子句:
关键字:IS NULL、IS NOT NULL
函数:ISNULL(字段)
比较:
不相等:NOT 字段 <=> NULL
相 等:字段 <=> NULL
5.BETWEEN AND
字段 BETWEEN 数字1 AND 数字2
等价于:
字段 >=数字1 && 字段 <=数字2
取反:
字段 NOT BETWEEN 数字1 AND 数字2
字段 <=数字1 or 字段 >=数字2
6.转义字符
- \
- ESCAPE ‘任意字符’
SELECT last_name
FROM employee
WHERE last_name LIKE ‘_$_a%’ ESCAPE ‘$’;
7.正则表达式
REGEXP
RLIKE
8.分页
LIMIT #(适用于:MySQL、PostgreSQL、MariaDB和SQLite)
(1)LIMIT 起始索引,显示记录数量
SELECT * FROM employee
LIMIT 0,20;
(2)LIMIT 显示记录数量 OFFSET起始索引
SELECT * FROM employee
LIMIT 20 OFFSET 0;
9.多表查询
所有列名前加上所属表名,优化查询速度;
10.JOIN
11.单行函数
字符串、数学、日期时间、流程处理(IF、IFNULL、CASE WHEN THEN [ELSE] END
- 流程处理函数
- 同if
IF(value, value1, value2)
- 同if ≠NULL
IFNULL(value1, value2)
- 同if else
CASE WHEN 条件1 THEN 输出1
WHEN 条件2 THEN 输出2
...
WHEN 条件n THEN 输出n
ELSE 默认输出 END “列别名”
- 同 switch case
CASE 列名 WHEN 常量1 THEN 输出1
WHEN 常量2 THEN 输出2
...
WHEN 常量n THEN 输出n
ELSE 默认输出 END “列别名”
12.分组
- GROUP BY
注意:(1)SELECT中出现的集合函数字段必须声明在GROUP BY中;反之,GROUP BY中声明的字段可以不出现在SELECT中。
WITH ROLLUP
分组结果最后添加整体平均值;
当使用ROLLUP时,不能同时使用ORDER BY对结果进行排序,显然:ROLLUP 和 ORDER BY互斥;
13.SELECT的执行过程
查询语法结构
Sql92语法:
SELECT …,…,…[存在聚合函数]
FROM …,…,…
WHERE 多表的连接条件 AND 不包含聚合函数的过滤条件
GROUP BY …,…,…
HAVING 包含聚合函数的过滤条件
ORDER BY …,…[ASC / DESC]
LIMIT …,…
Sql99语法:
SELECT …,…,…[存在聚合函数]
FROM … [LEFT/RIGHT] JOIN … ON 多表的连接条件
WHERE 不包含聚合函数的过滤条件
GROUP BY …,…,…
HAVING 包含聚合函数的过滤条件
ORDER BY …,…[ASC / DESC]
LIMIT …,…
★SELECT 执行顺序★
FROM->WHERE->GROUP BY->HAVING->SELECT 字段s->DISTINCT->ORDER BY-> LIMIT
14.子查询
子查询不可以在GROUP By 和 LIMIT中其他地方都可以;
自连接 优于 子查询;
子查询的编写技巧(或步骤):① 从里往外写; ② 从外往里写;
如何选择?
① 如果子查询相对较简单,建议从外往里写。一旦子查询结构较复杂,则建议从里往外写
② 如果是相关子查询的话,通常都是从外往里写。
15.创建与管理表
创建数据库
格式:
CREATE DATABASE [IF NOT EXISTS] 库名 [CHARACTER SET ‘字符集名’]
示例:
CREATE DATABASE IF NOT EXISTS T_Test CHARACTER SET 'utf8';
SHOW CREATE DATABASE T_Test;
(15.1)管理数据库
#查看当前连接中的数据库都有哪些
SHOW DATABASES;
#切换数据库
USE 数据库名;
#查看当前数据库中保存的数据表
SHOW TABLES;
#查看当前使用的数据库
SELECT DATABASE() FROM DUAL;
#查看指定数据库下保存的数据表
SHOW TABLES FROM 数据库名;
(15.2)修改数据库
#更改数据库字符集
ALTER DATABASE 数据库名 CHARACTER SET 'utf8';
(15.3)删除数据库
DROP DATABASE [IF EXISTS] 数据库名;
创建数据表
格式1
CREATE TABLE [IF NOT EXISTS] 表名( #需要用户具备创建表的权限。
字段1 字段类型
);
格式2
CREATE TABLE 表名
AS
SELECT 语句;
#查看
DESC 表名;
(15.4)修改数据表
添加字段、修改字段(类型、默认值)、字段重命名、删除字段
示例1:添加字段
#ALTER TABLE 表名
#ADD [COLUMN] 字段名 字段类型 [FIRST | AFTER 字段名];
ALTER TABLE myemp1
ADD phone_number VARCHAR(20) FIRST;
ALTER TABLE myemp1
ADD email VARCHAR(45) AFTER emp_name;
示例2:字段重命名
#ALTER TABLE 表名
#CHANGE 旧字段名 新字段名 字段类型;
ALTER TABLE emp
CHANGE salary monthly_salary DOUBLE(10.2);
(15.5)重命名数据表
格式1
RENAME TABLE 旧表名
TO 新表名;
格式2
ALTER TABLE 旧表名
RENAME TO 新表名;
(15.6)清空与删除表
清空
TRUNCATE TABLE 表名;#全部清除,不可回滚;
DELETE FROM 表名; #全部清除,可回滚;
删除
DROP TABLE IF EXISTS 表名;