一、SQL语言
1.基本查询
#创建一个数据库
CREATE DATABASES 库名 CHARACTER SET utf8;
#基本查询 (执行查询语句返回的结果集是一张虚拟表。)
SELECT 列名1,列名2,列名3... FROM 表名;
SELECT * FROM 表名; #查询所有列
#对列中数据进行运算(+、-、*、/)以及别名
SELECT 列名+-*/n AS 别名 FROM 表名;
#查询结果去重
SELECT DISTINCT 列名 FROM 表名;
2.排序查询
#排序查询 ASC升序 DESC降序
SELECT 列名1,列名2,列名3... FROM 表名 ORDER BY 列名1 ASC/DESC;#依据单列排序
SELECT 列名1,列名2,列名3... FROM 表名 ORDER BY 列名1 ASC/DESC,列名2 ASC/DESC;#依据多列排序,在列名1排序相等的情况下,依据列名2进行排序
3.条件查询
#条件查询
SELECT 列名1,列名2,列名3... FROM 表名 WHERE 条件
SELECT 列名1,列名2,列名3... FROM 表名 WHERE 列名1 = n; #等值判断(=)
SELECT 列名1,列名2,列名3... FROM 表名 WHERE 列名1 = n1 AND 列名2 = n2; #逻辑判断(与或非,and、or、not)
SELECT 列名1,列名2,列名3... FROM 表名 WHERE 列名1 >= n1 AND 列名1 <= n2;#不等值判断(<、>、>=、<=、!=、<>)
#区间判断(between and)
SELECT 列名1,列名2,列名3... FROM 表名 WHERE 列名1 BETWEEN n1 AND n2;#闭区间,包含两个边界值
#NULL值判断
SELECT 列名1,列名2,列名3... FROM 表名 WHERE 列名1 IS NULL /IS NOT NULL;
#枚举查询 IN(n1,n2,n3...)
SELECT 列名1,列名2,列名3... FROM 表名 WHERE 列名1 IN(n1,n2,n3...);
#模糊查询
SELECT 列名1,列名2,列名3... FROM 表名 WHERE 列名1 LIKE ‘张_‘;#‘_‘代表单个任意字符,可填入多个
SELECT 列名1,列名2,列名3... FROM 表名 WHERE 列名1 LIKE ‘张%‘; ##任意字符长度
#分支结构查询CASE-WHEN-END
SELECT 列名1,列名2,列名3... ,
CASE
WHEN ...
WHEN ...
WHEN ...
ELSE ...
END
FROM 表名;
4.时间查询
#时间查询
SELECT SYSDATE();#当前系统时间(年月日时分秒)
SELECT CURDATE();#获取当前日期(年月日)
SELECT CURTIME();#获取当前时间(时分秒)
SELECT WEEK(DATE);#获取指定日期为一年中的第几周
SELECT YEAR(DATE);#获取指定日期的年份
SELECT HOUR(TIME);#获得指定时间的小时值
SELECT MINUTE(TIME);#获得时间的分钟值
SELECT DATEDIFF(DATE 1,DATE 2);#获得两个日期相隔的天数
SELECT ADDDATE(DATE,n);#计算DATE加上n天后的日期
5.字符串查询
#字符串查询
SELECT CONCAT(str1,str2,...);#将多个字符串连接
SELECT INSERT(str,pos,len,newStr);#将str中指定pos位置开始len长度的内容替换为newStr
SELECT LOWER(str);#将指定字符串转换为小写
SELECT UPPER(str);#将指定字符串转化为大写
SELECT SUBSTRING(str,num,len);#将str字符串指定num位置开始截取len长度的内容
6.聚合函数
#聚合函数 SUM()求单列结果的总和、AVG()平均值、MAX()/MIN()最大值/最小值、COUNT()求总行数
SELECT SUM(列名1,列名2,列名3...) FROM 表名;
7.分组查询、分组过滤查询
#分组查询 GROUP BY 分组依据必须在WHERE之后生效
SELECT 列名 FROM 表名 WHERE 条件 GROUP BY 分组依据(列);#注:分组查询中,select显示的只能是分组依据列,或者聚合函数列,不能出现其他列
#分组过滤查询
SELECT 列名 FROM 表名 WHERE 条件 GROUP BY 分组依据 HAVING 过滤规则;#过滤规则定义对分组后的数据进行过滤
8.限定查询
#限定查询 LIMIT 起始行,查询行数 注:起始行是从0开始
SELECT * FROM 表名 LIMIT 0,5;
#典型应用
#分页查询:一页显示10行,一共查询三页
#思路:第一页从0行开始,显示10条
SELECT * FROM 表名 LIMIT 0,10;
#第二页从10行开始,显示10条
SELECT * FROM 表名 LIMIT 10,10;
#第三页从20行开始,显示10条
SELECT * FROM 表名 LIMIT 20,10;
查询总结
SQL语言编写顺序:SELECT 列名 FROM 表名 WHERE 条件 GROUP BY 分组依据 HAVING 过滤规则 ORDER BY 排序列(ASC/DESC) LIMIT 起始行,查询行数;
9.进阶查询
#子查询
SELECT 列名 FROM 表名 WHERE 条件(子查询结果);#子查询结果为一行一列
SELECT 列名 FROM 表名 WHERE 列名 IN(子查询结果);#子查询结果为多行一列
SELECT 列名 FROM 子查询结果集 WHERE 条件;#子查询结果为多行多列可视为表
#合并查询 将两个表的查询结果合并在一起!!!列数必须相同
SELECT * FROM 表1 UNION SELECT * FROM 表2;#去除重复数据
SELECT * FROM 表1 UNION ALL SELECT * FROM 表2;#不去除重复数据。显示所有
#表连接查询 将表连接起来再查询!!!
#内连接
SELECT 列名 FROM 表1 INNER JOIN 表2 ON 连接条件;#两表连接
SELECT 列名 FROM 表1 INNER JOIN 表2 ON 连接条件 INNER JOIN 表3 ON 连接条件;#三表连接
#左外连接 注:以左表为主
SELECT 列名 FROM 表1 LEFT JOIN 表2 ON 连接条件;
#右外连接 注:以右表为主
SELECT 列名 FROM 表1 RIGHT JOIN 表2 ON 连接条件;
#DML操作
#新增 INSERT
INSERT INTO 表名 (列名1,列名2,列名3...) VALUES (值1,值2,值3,...);
#修改 UPDATE 不加WHERE语句则整表更新
UPDATE 表名 SET 列1=新值1,列2=新值2... WHERE 条件;
#删除 DELETE 不加WHERE语句则删除整张表 对表中数据做操作
DELETE FROM 表名 WHERE 条件;
#清空整张表,对表做操作
TRUNCATE TABLE 表名;
#数据表操作
#数据表的创建
CREATE TABLE 表名(
列名 数据类型 [约束],
列名 数据类型 [约束],
...
列名 数据类型 [约束]#最后一列的末尾不加逗号!
)[CHARSET = utf8];#可根据需要制定字符编码集
#数据表的修改(ALTER)
ALTER TABLE 表名 ADD 列名 数据类型;#向表中添加列
ALTER TABLE 表名 MODIFY 列名 VARCHAR(10);#修改表中列的长度
ALTER TABLE 表名 DROP 列名;#删除表中此列
ALTER TABLE 表名 CHANGE 旧列名 新列名 数据类型;#修改别名
#数据表的删除
DROP TABLE 表名;
#约束
#实体完整性约束 标识每一行数据不重复,实体唯一
#主键约束 PRIMARY KEY
#唯一约束 UNIQUE
#自动增长列 AUTO_INCREMENT
CREATE TABLE 表名(
列名 数据类型 PRIMARY KEY,#标识唯一,不可重复且不能为NULL
列名 数据类型 UNIQUE,#标识唯一,不可重复可以为NULL
...
列名 数据类型 PRIMARY KEY AUTO_INCREMENT#不可单独使用,和主键配合,给主键数值列添加自动增长!!!
)CHARSET = utf8;
#域完整性约束 限制列的单元格的数据正确性。
#非空约束 NOT NULL
#默认值约束 DEFAULT N
#引用完整性约束 CONSTRAINT 引用名 FOREIGN KEY (列名) REFERENCES 被引用表名(列名)
CREATE TABLE 表名(
列名 数据类型 PRIMARY KEY,
列名 数据类型 UNIQUE NOT NULL,#非空,必须有值
列名 INT DEFAULT 20,#为列赋予默认值
...
列名 数据类型 PRIMARY KEY AUTO_INCREMENT#不可单独使用,和主键配合,给主键数值列添加自动增长!!!
)CHARSET = utf8;
#事务
#事务特性 Atomicity(原子性)、Consistency(一致性)、Isolation(隔离性)、Durability(持久性)
START TRANSACTION;
...#事务内数据操作语句
COMMIT;#事务内数据操作语句成功,执行COMMIT提交
ROLLBACK;#事务内数据操作语句失败,执行ROLLBACK回滚
#权限管理
#创建用户
CREATE USER 用户名 IDENTIFIED BY 密码;
#授权
GRANT ALL ON 数据库.表 TO 用户名;
#撤销权限
REVOKE ALL ON 数据库.表 FROM 用户名;#用户重新连接客户端之后才会生效
#删除用户
DROP USER 用户名;#用户重新连接客户端之后才会生效
#视图 视图的操作不会影响源表
CREATE VIEW 视图名 AS 查询数据源表语句;