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 输出结果如下:
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 是相同的。
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。
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 输出结果如下:
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 输出结果如下:
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 输出结果如下:
##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 输出结果如下: