SQL语句学习 之 路慢慢
2017-02-25 本文已影响86人
笨笨编程
基础教程
- 删除一张表:
DROP TABLE IF EXISTS `websites`;
- 创建一张表
CREATE TABLE `websites` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` char(20) NOT NULL DEFAULT '' COMMENT '站点名称',
`url` varchar(255) NOT NULL DEFAULT '',
`alexa` int(11) NOT NULL DEFAULT '0' COMMENT 'Alexa 排名',
`country` char(10) NOT NULL DEFAULT '' COMMENT '国家',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
![](https://img.haomeiwen.com/i674752/edd972f0965e7d3b.png)
- DISTINCT 关键字:用于返回唯一不同的值。
- 插入和删除某一列
ALTER TABLE Websites ADD COLUMN `address` varchar(255)NOT NULL COMMENT 'this is address' AFTER `alexa`;
ALTER TABLE Websites DROP `address`;
高级教程
SELECT TOP
- 从 "Websites" 表中选取头两条记录:
SELECT * FROM Websites LIMIT 2;
通配符
![](https://img.haomeiwen.com/i674752/8189d2198ce41998.png)
- 下面的 SQL 语句选取 name 以字母 "G" 开始的所有客户:
SELECT * FROM Websites WHERE name LIKE 'G%';
-
MySQL 中使用 REGEXP 或 NOT REGEXP 运算符 (或 RLIKE 和 NOT RLIKE) 来操作正则表达式。
-
下面的 SQL 语句选取 name 以 "G"、"F" 或 "s" 开始的所有网站:
SELECT * FROM Websites WHERE name REGEXP '^[GFs]';
IN
![](https://img.haomeiwen.com/i674752/9a8cc6c5779421dc.png)
- 下面的 SQL 语句选取 name 为 "Google" 或 "菜鸟教程" 的所有网站:
SELECT * FROM Websites WHERE name IN ('Google','菜鸟教程');
BETWEEN
![](https://img.haomeiwen.com/i674752/53df12f46654e385.png)
- 下面的 SQL 语句选取 alexa 介于 1 和 20 之间的所有网站:
SELECT * FROM Websites WHERE alexa BETWEEN 1 AND 20;
别名
![](https://img.haomeiwen.com/i674752/0fe0e03af3bd05bc.png)
- 下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。提示:如果列名称包含空格,要求使用双引号或方括号:
SELECT name AS n, country AS c FROM Websites AS w;
连接(JOIN)
![](https://img.haomeiwen.com/i674752/8a6e2ca1c6679418.png)
- 请注意,"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 zaccess_log ON Websites.id=access_log.site_id;
查询结果
JOIN分类
INNER JOIN
![](https://img.haomeiwen.com/i674752/d4f448f2aff99d1c.png)
SELECT Websites.name, access_log.count, access_log.date FROM Websites INNER JOIN zaccess_log ON Websites.id=access_log.site_id ORDER BY access_log.count;
![](https://img.haomeiwen.com/i674752/0ab02d22ce40d472.png)
LEFT JOIN
![](https://img.haomeiwen.com/i674752/51ea81d91e23cfda.png)
- 下面的 SQL 语句将返回所有网站及他们的访问量(如果有的话)。
//以下实例中我们把 Websites 作为左表,zaccess_log 作为右表:
SELECT w.name, w.url, z.count, z.date FROM websites AS w LEFT JOIN zaccess_log AS z ON w.id=z.site_id ORDER BY z.count DESC;
![](https://img.haomeiwen.com/i674752/9c32bbba02fc8d55.png)
RIGHT JOIN
![](https://img.haomeiwen.com/i674752/9cfa5ca67be3108b.png)
- 下面的 SQL 语句将返回网站的访问记录。
//以下实例中我们把 zaccess_log 作为左表,Websites 作为右表:
SELECT w.name, w.url, z.count, z.date FROM zaccess_log AS z RIGHT JOIN websites AS w ON w.id=z.site_id ORDER BY z.count DESC;
![](https://img.haomeiwen.com/i674752/967f3396c1e9d02a.png)
FULL OUTER JOIN
![](https://img.haomeiwen.com/i674752/842dfbb80ee212af.png)
//注:MySQL中不支持 FULL OUTER JOIN,你可以在 SQL Server 测试以下实例。
SELECT w.name, w.url, z.count, z.date FROM zaccess_log AS z RIGHT JOIN websites AS w ON w.id=z.site_id ORDER BY z.count DESC;
UNION
![](https://img.haomeiwen.com/i674752/81ad8d4c7db68477.png)
![](https://img.haomeiwen.com/i674752/5f5735dca291e27c.png)
![](https://img.haomeiwen.com/i674752/eaefc03b11661b99.png)