sql进阶-笔记

wujiawen 发布于

sql进阶学习笔记

关于连表查询

join 用于把来自两个或多个表的行结合起来

join 有很多种,下面分别作说明演示

inner join

inner join 等同于 join

INNER JOIN 关键字,在表中存在至少一个匹配时返回行

join 是 左表的每个记录都会对右表进行一次遍历
所以会进行 【左表.length * 右表.length】 次匹配

语法

1
2
3
4
5
6
7
8
9
SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name=table2.column_name;
-- 或
SELECT column_name(s)
FROM table1
JOIN table2
ON table1.column_name=table2.column_name;

示例:

1
2
3
4
5
SELECT Websites.name, access_log.count, access_log.date
FROM Websites
INNER JOIN access_log
ON Websites.id=access_log.site_id
ORDER BY access_log.count;

left join

LEFT JOIN 关键字从左表(table1)返回所有的行
即使右表(table2)中没有匹配
如果右表中没有匹配,则结果为 NULL

语法

1
2
3
4
5
6
7
8
9
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;
-- 或
SELECT column_name(s)
FROM table1
LEFT OUTER JOIN table2
ON table1.column_name=table2.column_name;

right join

RIGHT JOIN 关键字从右表(table2)返回所有的行
即使左表(table1)中没有匹配
如果左表中没有匹配,则结果为 NULL

语法

1
2
3
4
5
6
7
8
9
SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name=table2.column_name;
-- 或
SELECT column_name(s)
FROM table1
RIGHT OUTER JOIN table2
ON table1.column_name=table2.column_name;

full outer join

注意: MySQL中不支持 FULL OUTER JOIN

FULL OUTER JOIN 关键字
只要左表(table1)和右表(table2)其中一个表中存在匹配,则返回行
FULL OUTER JOIN 关键字结合了 LEFT JOIN 和 RIGHT JOIN 的结果

join 的小总结

A inner join B 取交集

A left join B 取 A 全部,B 没有对应的值为 null

A right join B 取 B 全部 A 没有对应的值为 null

A full outer join B 取并集,彼此没有对应的值为 null

对应条件在 on 后面填写

insert into select 语句

INSERT INTO SELECT 语句从一个表复制数据,然后把数据插入到一个已存在的表中

语法

1
2
3
4
5
6
7
INSERT INTO table2
SELECT * FROM table1;

INSERT INTO table2
(column_name(s))
SELECT column_name(s)
FROM table1;

示例

1
2
3
4
5
6
INSERT INTO Websites (name, country)
SELECT app_name, country FROM apps;

INSERT INTO Websites (name, country)
SELECT app_name, country FROM apps
WHERE id=1;

函数

Aggregate 函数

  • AVG() - 返回平均值
  • COUNT() - 返回行数
  • FIRST() - 返回第一个记录的值
  • LAST() - 返回最后一个记录的值
  • MAX() - 返回最大值
  • MIN() - 返回最小值
  • SUM() - 返回总和

Scalar 函数

  • UCASE() - 将某个字段转换为大写
  • LCASE() - 将某个字段转换为小写
  • MID() - 从某个文本字段提取字符,MySql 中使用
  • SubString(字段,1,end) - 从某个文本字段提取字符
  • LEN() - 返回某个文本字段的长度
  • ROUND() - 对某个数值字段进行指定小数位数的四舍五入
  • NOW() - 返回当前的系统日期和时间
  • FORMAT() - 格式化某个字段的显示方式

Mysql 文档:
https://www.runoob.com/mysql/mysql-tutorial.html