SQL--Advanced tutorials

LIKE--模糊查询

模糊查询

选取 url 以字母 https开始的全部网站sql

SELECT * FROM Websites
WHERE url LIKE 'https%';

选取 url 包含模式 "oo" 的全部网站数据库

SELECT * FROM Websites
WHERE url LIKE '%oo%';

JOIN--外链接查询

SQL JOIN 子句:函数

用于把来自两个或多个表的行结合起来,==基于这些表之间的共同字段==。网站

最多见的 JOIN 类型:url

SQL INNER JOIN(简单的 JOIN)。 SQL INNER JOIN 从多个表中返回知足 JOIN 条件的全部行。code

"Websites" 表中的 "id" 列指向 "access_log" 表中的字段 "site_id"。上面这两个表是经过 "site_id" 列联系起来的。图片

而后,若是咱们运行下面的 SQL 语句(包含 INNER JOIN):it

SELECT Websites.id, Websites.name, access_log.count, access_log.date FROM Websites INNER JOIN access_log ON Websites.id=access_log.site_id;io

执行以上 SQL 输出结果以下:table

img

INNER JOIN--内链接查询

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

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;

**注释:**INNER JOIN 与 JOIN 是相同的。

SQL INNER JOIN

LEFT JOIN--右链接

LEFT JOIN 关键字从左表(table1)返回全部的行,即便右表(table2)中没有匹配。若是右表中没有匹配,则结果为 NULL。

SQL LEFT JOIN 语法

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;

**注释:**在某些数据库中,LEFT JOIN 称为 LEFT OUTER JOIN。

SQL LEFT JOIN

SELECT Websites.name, access_log.count, access_log.date
FROM Websites
LEFT JOIN access_log
ON Websites.id=access_log.site_id
ORDER BY access_log.count DESC;

执行以上 SQL 输出结果以下:

img

VIEWS--SQL 视图

视图是可视化的表。

DATAS--SQL内建函数

内建函数

  • [x] SQL CREATE TABLE Orders ( OrderId int NOT NULL, ProductName varchar(50) NOT NULL, OrderDate datetime NOT NULL DEFAULT NOW(), PRIMARY KEY (OrderId) )

MySQL 使用下列数据类型在数据库中存储日期或日期/时间值:

  • DATE - 格式:YYYY-MM-DD
  • DATETIME - 格式:YYYY-MM-DD HH:MM:SS
  • TIMESTAMP - 格式:YYYY-MM-DD HH:MM:SS
  • YEAR - 格式:YYYY 或 YY

GROUP BY--多表查询

  • [x] SQL SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name;

GROUP BY 简单应用

统计 access_log 各个 site_id 的访问量:

实例

SELECT site_id, SUM(access_log.count) AS nums
FROM access_log GROUP BY site_id;

执行以上 SQL 输出结果以下:

img


SQL GROUP BY 多表链接

如今咱们想要查找每一个送货员配送的订单数目。

下面的 SQL 语句统计全部网站的访问的记录数:

SELECT Websites.name,COUNT(access_log.aid) AS nums FROM access_log
LEFT JOIN Websites
ON access_log.site_id=Websites.id
GROUP BY Websites.name;

执行以上 SQL 输出结果以下:

img

##HAVING--组合筛选

在 SQL 中增长 HAVING 子句缘由是,WHERE 关键字没法与聚合函数一块儿使用。

HAVING 子句可让咱们筛选分组后的各组数据。

  • [x] SQL SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name HAVING aggregate_function(column_name) operator value;

如今咱们想要查找总访问量大于 200 的网站。

咱们使用下面的 SQL 语句:

实例

SELECT Websites.name, Websites.url, SUM(access_log.count) AS nums FROM (access_log INNER JOIN Websites ON access_log.site_id=Websites.id) GROUP BY Websites.name HAVING SUM(access_log.count) > 200;

执行以上 SQL 输出结果以下:

img

相关文章
相关标签/搜索