学习来源 Java数据库开发与实战应用
主要是对数据表的插入和查询操作
插入
基础语法
1 2 3
| INSERT ... SET column=.. ,column=.. ; INSERT tbl [(column....)] VALUES (...) INSERT tbl (column) SELECT a FROM .. ;
|
复制表
1 2
| CREATE TABLE tbl_name1 LIKE tbl_name2; INSERT tbl_name1 SELECT .. FROM tbl_name2;
|
修改
1
| UPDATE ... SET column=.. WHERE ...;
|
查询
单表查询
基础语法
1 2 3 4 5
| SELECT select_expr, .. FROM tbl_name [WHERE 条件] [GROUP BY {col_name|position} HAVING 二次筛选] [ORDER BY {col_name|position|expr} [ASC|DESC]] [LIMIT ]
|
去重
1
| SELECT DISTINCT(...) FROM tbl_name;
|
WHERE中加测NULL值
1 2
| WHERE .. <=> NULL WHERE .. IS NULL
|
在一个集合中
模糊查询
聚合函数
把值相同的放到一个组中
1 2 3 4
| SELECT GROUP_CONCAT(username), age, sex, GROUP_CONCAT(addr) FROM user1 GROUP By sex [WITH ROLLUP];
|
COUNT *
包含NULL值
MAX
MIN
SUM
AVG
二次筛选
HAVING
用HAVING进行分组条件的指定时,一定要保证分组条件要么为聚合函数,要么条件中的字段必须出现在当前的SELECT语句中
产生随机数
限制查询结果个数
1 2 3
| ... LIMIT ... LIMIT ... ... LIMIT offset, row_count;
|
多表查询
内连接
1 2 3
| SELECT 字段名称, .. FROM tbl_name1 INNER JOIN tbl_name2 ON 条件;
|
外连接
1 2 3
| SELECT 字段名称, ... FROM tbl_name1 OUTER LEFT JOIN tbl_name2 ON 条件;
|
1 2 3
| SELECT 字段名称, ... FROM tbl_name1 OUTER RIGHT JOIN tbl_name2 ON 条件;
|
外键约束
基础概念
- 如果外键字段没有添加索引,则会自动创建
- 子表必须关联父表主键
1
| [CONSTRAINT 名称] FOREIGN KEY(字段名称) REFERENCES 主表(字段名称)
|
对外键操作
动态删除外键
1
| ALTER TABLE tbl_name DROP FOREIGN KEY fk_name;
|
动态添加外键
1
| ALTER TABLE tbl_name ADD FOREIGN KEY(外键字段) REFERENCES 主表(主键字段);
|
参照操作
CASCADE
从父表删除或更新,子表也会
SET NULL
从父表删除,设子表为NULL
NO ACTON
| RESCRICT
拒绝对父表做更新或删除操作
1
| ... ON DELETE CASCADE ON UPDATE CASEADE;
|
子查询的一些关键词
常用函数
数学函数
字符串函数
- 字符数
CHAR_LENGTH
- 字符长度
LENGTH
- 合并
CONCAT
- 指定分隔符合并
CONCAT_WS()
- 大小写转换
UPPER
|UCASE
LOWER
|LCASE
- 反转
REVERSE
- 前后几个字符
LEFT|RIGHT
LEFT('aaaa', 2)
- 用字符串填充
LPAD|RPAD
LPAD('aaa', 10, '?')
- 重复指定次数
REPEAT
- 替换
REPLACE
- 截取字符串
SUBSTRING('abcs',1,3)
–> abc
- 比较字符串
STRCMP
日期函数
- 当前日期
curdate()
, current_date()
- 当前时间
curtime()
, current_time()
- 完整时间
now()
, current_timestamp()
, sysdate()
- 解析日期
month(...)
, monthname()
- 解析星期几
dayname(...)
dayofweek(...)
- 一年中第几个信息
week(....)
- 同理
hour()
minute()
second()
- 相差时间
datediff()
- 日期格式化
DATE_FORMAT
DATE_FORMAT('2016-06-01','%Y/%m/%d');
—> 2016-06-01改为2016/06/01
其他函数
- 当前服务器连接数 connection_ID()
- 上一次插入操作得到的自增长ID LAST_INSERT_ID()
- 加密 MD5()