一、子查询与连接
1.子查询(Subquery):出现在其他SQL语句中的SELECT子句
嵌套在查询内部,且始终出现在圆括号里
可以包含多个关键字或条件,如DISTINCT,GROUP BY,ORDER BY,LIMIT ,函数等
子查询的外层可以是SELECT,INSERT, UPDATE, SET ,DO等
子查询可以返回标量,一行,一列,或者子查询
用ALL,ANY,SOME修饰的比较运算符
operand comparison_operator ANY|ANY|SOME (Subquery)
=ANY等价于IN;!=ALL等价于<>ALL等价于NOT IN
INSERT +表名+ SELECT .....
2.多表更新:
UPDATE + table_references SET col_name1=...,col_name2=... WHERE ...
table_references:
表名A+连接类型+表名B +ON 条件
CREATE TABLE 【IF NOT EXISTS】+表名(表定义,如包含哪些column)+select_statement
3.连接:
连接类型:内连接【INNER JOIN】,只显示相连接的部分
在mysql中JOIN,CROSS JOIN , INNER JOIN 是等价的
左外连接【LEFT OUTER JOIN】,显示左表的全部和右表中相连接的部分
右外连接【RIGHT OUTER JOIN】,显示右表的全部和左表中相连接的部分
连接条件:通常ON关键字用来设定连接条件;
WHERE 关键字用来进行结果集记录的过滤
4.无限分类数据表设计
通过自身连接实现,如
CREATE TABLE tdb_goods_types(
type_id SMALLINT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
type_name VARCHAR(10) NOT NULL,
parent_id SMALLINT UNSIGNED NOT NULL DEFAULT 0);
5.多表删除 DELETE tab_name[.*],.....FROM table_references WHERE....
二、mysq的库存函数
1、字符函数:CONCAT() 字符连接,例如,CONCAT("MY","SQL");
CONCAT_WS()用指定分割符连接字符,例如,CONCAT("-","YOU","ME",HIM");
FORMAT() 数字格式化,例如,FORMAT(a,b)将a按四舍五入保留b位小数;
LOWER() 将字符转换为小写形式
UPPER() 将字符转换成大写形式
LEFT(字符,a,b) 将字符从左侧第a位开始,取b位;RIGHT();
LENGTH() 获取字符长度; LTRIM() 删除前导空格;RTRIM()删除后续空格;TRIM()删除前导后续空格
SUBSTRING(字符,a,b)截取字符串
【NOT】 LIKE 模式匹配 例如MAING LIKE M%
REPLACE() 字符替换 ,例如,REPLACE("???MY??SQL???","?","")
2.数值运算符函数:
CEIL() 进一取整; DIV 整数除法 FLOOR() 舍一取整
MOD 求余 POWER(a,b)求幂运算 ROUND() 四舍五入 TRUNCATE()数字截取
3.比较运算函数
【NOT】 BETWEEN.... AND.... 【不在】范围之内
【NOT】NOT IN() 【不】在列出值之中
IS [NOT] NULL 【不】为空
4.日期函数:NOW();当前日期和时间 CURDATE()当前日期
CURTIME() 当前时间 DATE_ADD() 日期变化 ,例如DATE_ADD("2013-02-13",INTERVAL 365 DAY)
DATEDIFF() 日期差值 DATE_FORMAT() 日期格式化
5.聚合函数 : AVG() 平均数 COUNT() 计数 MAX() 最大值
MIN() 最小值 SUN() 求和
6.加密函数:MD5() 信息摘要算法 PASSWORD() 加密算法
7.信息函数:CONNECTION() 连接ID
DATABASE() 当前数据库 VERSION()版本信息
LAST_INSERT_ID() 最后插入值 USER() 用户信息
三、自定义函数
1.CREATE FUNCITON 函数名 + RETURNS + 返回值类型(STRING)+ 函数体
函数体由合法的SQL语句构成;
函数体可以是简单的SELECT ,INSERT语句;
也可以是符合结构,使用BEGIN....END语句;
复合结构可以包含声明、循环、控制结构