SQL--Advanced tutorials

2018-02-03 10:39:32来源:oschina作者:T-newcomer人点击

分享
LIKE--模糊查询

模糊查询


选取 url 以字母 https开始的所有网站


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

选取 url 包含模式 "oo" 的所有网站


SELECT * FROM Websites
WHERE url LIKE '%oo%';
JOIN--外连接查询

SQL JOIN 子句:


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


最常见的 JOIN 类型:


SQL INNER JOIN(简单的 JOIN)。 SQL INNER JOIN 从多个表中返回满足 JOIN 条件的所有行。



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


然后,如果我们运行下面的 SQL 语句(包含 INNER JOIN):


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


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


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


微信扫一扫

第七城市微信公众平台