学习笔记:javaEE基础8 SQL

学习来源 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
WHERE .. IN(.., .., ..)

模糊查询

1
2
3
LIKE '...'
-- %任意长度
-- _任意一个

聚合函数

把值相同的放到一个组中

1
GROUP BY
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
SELECT RAND();

限制查询结果个数

1
2
3
... LIMIT
... LIMIT ... -- 前几个
... LIMIT offset, row_count;

多表查询

内连接

1
2
3
SELECT 字段名称, .. FROM tbl_name1
INNER JOIN tbl_name2
ON 条件;

外连接

    • 左 左表全部,再右表符合,不符合的用NULL代替
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;

子查询的一些关键词

  • any
  • some
  • all

常用函数

数学函数

字符串函数

  • 字符数 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()