MySQL-函数
distinct-去重 //放在select后
1、字符串函数
SELECT 函数(参数)
CONCAT(S1,S2,S3...)-字符串拼接,拼接成一个字符串。
LOWER(str)-将字符串str全部转换为小写。
UPPER(str)-将字符串str全部转换为大写。
LPAD(str,n,pad)-左填充,用字符串pad对str的左边进行填充,达成n个字符串长度。
RPAD(str,n,pad)-右填充,用字符串pad对str的右边进行填充,达成n个字符串长度。
TRIM(str)-去掉字符串头部和尾部的空格。
SUBSTPING(str,start,len)-返回从字符串str从start位置起的len个长度的字符串。
2、数值函数
SELECT 函数(参数)
CEIL(x)-向上取整
FLOOR(x)-向下取整
MOD(x,y)-返回x/y的模
RAND()-返回0~1内的随机数
ROUND(x,y)-求参数x的四舍五入的值,保留y位小数
3、日期函数
SELECT 函数(参数)
CUPDATE()-返回当前日期
CUPTIME()-返回当前时间
NOW()-返回当前日期和时间
YEAR(date)-获取指定date的月份
MONTH(date)-获取指定date的月份
DAY(date)-获取指定date的日期 //DAY(now())得到的那一天
DATE-ADD(date,INTERVAL expr type)返回一个日期/时间值加上一个时间间隔expr后的时间值
DATEDIFF(date1,date2)返回起始时间date1和结束时间date2之后的天数
4、流程控制函数
IF(value,t,f)-如果value为true,则返回t,否则返回f
IFNULL(value1,avlue2)-如果value1不为空,返回value1,否则返回value2
CASE WHEN [val1] THEN [res1] ...ELSE [default] END-如果val1为true,返回res1,…否则返回default默认值
CASE [expr] WHEN [val1 ] THEN [res1] ... ELSE [default] END-如果expr的值等于val1,返回res1,…否则返回default默认值
MySQL-约束
NOT NULL-非空约束
UNIQUE-唯一约束
PRIMARY-主键约束
DEFAULT-默认约束 //默认约束为1,defauat‘1’
CHECK-检查约束 //check(age>0 && age<120)
FOREIGN KEY-外键约束
1、外键约束:
添加外键
1.CREATE TABLE 表名(
字段名 数据类型,
.....
[CONSTRAINT] [外键名称] FOREIGN KEY [外键字段名] REFFRENCES 主表(主表名)
);
2.ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名) REFERENCES 主表(主表列名);
删除外键
ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
MySQL-多表查询
1、多表关系
一对多:
多对多:创建第三个表关联其他两个
一对一:创建UNIQUE唯一主键
2、多表查询
SELECT * FROM 表名,表名; //多表查询
SELECT * FROM 表名1,表名2 WHERE 表名1.id = 表名2.id; //笛卡儿积
3、多表查询分类
连接查询
内连接:A,B的交集部分
外连接:左连接,右连接
自连接
子查询
4、内连接
隐式内连接
SELECT 字段列表 FROM 表1,表2 WHERE 条件 ....;
// 条件:表名1.id = 表名2.id ,可以取别名
显式内连接
SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 连接条件....; //inner可省略
5、外连接
左外连接
SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件...;
右外连接
SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件...;
6、自连接
语法
SELECT 字段列表 FROM 表A 别名A JOIN 表B 别名B ON 条件....;
子连接查询,可以是内连接查询,也可以是外连接查询。
7、联合查询-union,union all
语法
SELECT 字段列表 FROM 表A.....
UNION[ALL]
SELECT 字段列表 FROM 表B......;
注
对于联合查询的多张表的列数和字段类型必须保持一致 。
union all 全部数据合在一起,union是要去重。
8、子查询
SQL语句中嵌套SELECT语句,称为嵌套查询,又称子查询。
SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2);
子查询结果不同,分为;
标量子查询(结果为单个值)
列子查询
行子查询
表子查询
1.标量子查询
单个值可以是数字、字符串、日期等
常用操作符:= <> < > >= <=
2.列子查询
返回结果是一列(多列)
常用操作符:
IN:指定范围内,多选一
NOT IN:不在指定范围内
ANY:返回列表中,任意一个满足即可
SOME :与ANY一样
ALL:返回列表的所有值都必须满足
//使用:in(2,4)、all (条件)
3.行子查询
返回结果是一行(多行)
常用操作符:=、<>、IN、NOT IN
4、表子查询
返回多行多列
常用操作符:IN