转载自:菜鸟教程
自己写一遍加深印象。

1. MySQL LIMIT子句

语法:从第1条数据开始返回n条数据。

select column_names from table_name limit n;

Oracle语法
select column_names from table_name where rownum<=n;

2. MySQL LIKE操作符

LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。

select column_names from table_name where column_name like pattern;

举例:
选取 name 以字母 “G” 开始的所有客户:

select * from Websites where name like 'G%';

选取 name 以字母 “k” 结尾的所有客户:

select * from Websites where name like '%k';

选取 name 包含模式 “oo” 的所有客户:

select * from Websites where name like '%oo%';

选取 name 不包含模式 “oo” 的所有客户:

select * from Websites where name not like '%oo%';
  1. SQL 通配符
    在SQL中,通配符与SQL LIKE操作符一起使用,用于搜索表中数据。
通配符描述
%代替0个或者多个字符
_替代一个字符
[charlist]字符列中的任何单一字符
[^charlist]或[!charlist]不在字符列中的任何单一字符

%和_举例:
选取 url 以字母 “https” 开始的所有网站:

select * from Websites where url like 'https%';

选取 url 包含模式 “oo” 的所有网站:

select * from Websites where url like '%oo%';

选取 name 以一个任意字符开始,然后是 “oogle” 的所有客户:

select * from Websites where name like '_oogle';

选取 name 以 “G” 开始,然后是一个任意字符,然后是 “o”,然后是一个任意字符,然后是 “le” 的所有网站:

select * from Websites where name like 'G_o_le';

[charlist]举例:
MySQL 中使用 REGEXPNOT REGEXP 运算符 (或 RLIKE 和 NOT RLIKE) 来操作正则表达式。
下面的 SQL 语句选取 name 以 “G”、“F” 或 “s” 开始的所有网站:

SELECT * FROM Websites WHERE name REGEXP '^[GFS]';

选取 name 以 A 到 H 字母开头的网站:

SELECT * FROM Websites WHERE name REGEXP '^[A-H]';

选取 name 不以 A 到 H 字母开头的网站:

SELECT * FROM Websites WHERE name REGEXP '^[^A-H]';

3. SQL IN和BETWEEN操作符

有 IN 的 BETWEEN 操作符实例:
选取 alexa 介于 1 和 20 之间但 country 不为 USA 和 IND 的所有网站:

SELECT * FROM Websites WHERE (alexa BETWEEN 1 AND 20) AND country NOT IN ('USA','IND');

带有文本值的 BETWEEN 操作符实例:
选取 name 以介于 ‘A’ 和 ‘H’ 之间字母开始的所有网站:

SELECT * FROM Websites WHERE name BETWEEN A AND H;

带有日期值的 BETWEEN 操作符实例:
取 date 介于 ‘2016-05-10’ 和 ‘2016-05-14’ 之间的所有访问记录:

SELECT * FROM access_log WHERE date BETWEEN '2016-05-10' AND '2016-05-14';

4. SQL 别名

通过使用 SQL,可以为表名称或列名称指定别名。
列的SQL别名语法:

SELECT column_name AS alias_name FROM table_name;

表的SQL别名语法:

SELECT column_names FROM table_name AS alias_name;

列的别名实例
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。提示:如果列名称包含空格,要求使用双引号或方括号:

SELECT name AS c, country AS c FROM Websites;

在下面的 SQL 语句中,我们把三个列(url、alexa 和 country)结合在一起,并创建一个名为 “site_info” 的别名:

SELECT name, CONCAT(url,',',alexa,',',country) AS site_info FROM Wensites;

表的别名实例
下面的 SQL 语句选取 “菜鸟教程” 的所访问记录。我们使用 “Websites” 和 “access_log” 表,并分别为它们指定表别名 “w” 和 “a”(通过使用别名让 SQL 更简短):

SELECT w.name, w.url, a.count, a.date FROM Websites AS w, access_log AS a WHERE a.site_id=w.id and w.name="菜鸟教程";

在下面的情况下,使用别名很有用:
在查询中涉及超过一个表
在查询中使用了函数
列名称很长或者可读性差
需要把两个列或者多个列结合在一起

5. SQL 连接(JOIN)

SQL join 用于把来自两个或多个表的行结合起来。
下图展示了 LEFT JOIN、RIGHT JOIN、INNER JOIN、OUTER JOIN 相关的 7 种用法。

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 JOIN 类型:
INNER JOIN:如果表中有至少一个匹配,则返回行
LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行
RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行
FULL JOIN:只要其中一个表中存在匹配,则返回行

5.1 SQL INNER JOIN 关键字
INNER JOIN 关键字在表中存在至少一个匹配时返回行。
SQL 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 是相同的。

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

注释:INNER JOIN 关键字在表中存在至少一个匹配时返回行。如果 “Websites” 表中的行在 “access_log” 中没有匹配,则不会列出这些行。

在使用 join 时,on 和 where 条件的区别如下:
1、 on 条件是在生成临时表时使用的条件,它不管 on 中的条件是否为真,都会返回左边表中的记录。
2、where 条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有 left join 的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。
SQL JOIN 中 on 与 where 的区别

5.2 SQL 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;

下面的 SQL 语句将返回所有网站及他们的访问量(如果有的话)。
以下实例中我们把 Websites 作为左表,access_log 作为右表:

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;


注释:LEFT JOIN 关键字从左表(Websites)返回所有的行,即使右表(access_log)中没有匹配。

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

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;


下面的 SQL 语句将返回网站的访问记录。
以下实例中我们把 Websites 作为左表,access_log 作为右表:

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


注释:RIGHT JOIN 关键字从右表(Websites)返回所有的行,即使左表(access_log)中没有匹配。

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

SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name=table2.column_name;

SQL FULL OUTER JOIN 实例
下面的 SQL 语句选取所有网站访问记录。
MySQL中不支持 FULL OUTER JOIN,你可以在 SQL Server 测试以下实例。

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

注释:FULL OUTER JOIN 关键字返回左表(Websites)和右表(access_log)中所有的行。如果 “Websites” 表中的行在 “access_log” 中没有匹配或者 “access_log” 表中的行在 “Websites” 表中没有匹配,也会列出这些行。

更多推荐

MySQL高级教程学习(一)