现在以MySQL为模板。学习的方法和别的数据库写法上会有不同,但是思路基本一致。
用到的数据库表的格式:
+----+--------------+---------------------------+-------+---------+| id | name | url | alexa | country |+----+--------------+---------------------------+-------+---------+| 1 | Google | https://www.google.cm/ | 1 | USA || 2 | 淘宝 | https://www.taobao.com/ | 13 | CN || 3 | 菜鸟教程 | http://www.runoob.com/ | 4689 | CN || 4 | 微博 | http://weibo.com/ | 20 | CN || 5 | Facebook | https://www.facebook.com/ | 3 | USA || 7 | stackoverflow | http://stackoverflow.com/ | 0 | IND |+----+---------------+---------------------------+-------+---------+Website+-----+---------+-------+------------+| aid | site_id | count | date |+-----+---------+-------+------------+| 1 | 1 | 45 | 2016-05-10 || 2 | 3 | 100 | 2016-05-13 || 3 | 1 | 230 | 2016-05-14 || 4 | 2 | 10 | 2016-05-14 || 5 | 5 | 205 | 2016-05-14 || 6 | 4 | 13 | 2016-05-15 || 7 | 3 | 220 | 2016-05-15 || 8 | 5 | 545 | 2016-05-16 || 9 | 3 | 201 | 2016-05-17 |+-----+---------+-------+------------+access_log
LIMIT:限定语句
适合在成千上万条的记录中检索前几个,并非所有数据库都支持TOP语句。
select * from learn limit 8;
MySQL 不支持top
和percent
写法。
SQL别名
通过使用 SQL,可以为表名称或列名称指定别名。基本上,创建别名是为了让列名称的可读性更强。
列别名
分列别名:
SELECT name AS n, alexa AS aFROM Website;
合并列
SELECT name, CONCAT(url, ', ', alexa, ', ') AS site_infoFROM Website;
结果如下:按照自己的格式显示了出来
+----------+------------------------------+| name | site_info |+----------+------------------------------+| 淘宝 | https://www.taobao.com/, 1, || BaiDu | www.baidu.com, 255, || 随便一个 | NULL || 修改一下 | NULL || 京东 | www.jingdong.com, 5, || 京东 | NULL |+----------+------------------------------+6 rows in set
表的别名:通过使用别名让 SQL 更简短
select w.name,w.name,a.date from Website as w,access_log as awhere a.site_id = w.id ;
JOIN
SQL join 用于把来自两个或多个表的行结合起来。
格式:select col,... from table inner/full/right/left join table2 on ...;
FULL JOIN
:全连接,显示两个表的所有信息(即是没有匹配,on的条件为假)。MySQL不支持全连接INNER JOIN
:内连接。显示的是表相关的信息(on的条件为真,此时on和where形同)LEFT JOIN
:左表是主表。返回的是主表和别的表的相关信息。RIGHT JOIN
:右表是主表。
UNOIN
操作符合并两个或多个 SELECT 语句的结果。
语法:
SELECT column_name(s) FROM table1UNIONSELECT column_name(s) FROM table2;
下面是UNION
和 select ... from table1,table2;
的区别:
+----+----------+-------------------------+------------+| id | name | url | alexa |+----+----------+-------------------------+------------+| 2 | 淘宝 | https://www.taobao.com/ | 1 || 3 | BaiDu | www.baidu.com | 255 || 4 | 随便一个 | www.kengni.com | NULL || 0 | 修改一下 | b | NULL || 5 | 京东 | www.jingdong.com | 5 || 5 | 京东 | www.jingdong.com | NULL || 1 | 3 | 45 | 2016-05-10 || 2 | 4 | 69 | NULL |+----+----------+-------------------------+------------+此时的列名字是根据table1来绝对的。+-----+---------+-------+------------+----+----------+-------------------------+-------+| aid | site_id | count | date | id | name | url | alexa |+-----+---------+-------+------------+----+----------+-------------------------+-------+| 1 | 3 | 45 | 2016-05-10 | 2 | 淘宝 | https://www.taobao.com/ | 1 || 2 | 4 | 69 | NULL | 2 | 淘宝 | https://www.taobao.com/ | 1 || 1 | 3 | 45 | 2016-05-10 | 3 | BaiDu | www.baidu.com | 255 || 2 | 4 | 69 | NULL | 3 | BaiDu | www.baidu.com | 255 || 1 | 3 | 45 | 2016-05-10 | 4 | 随便一个 | www.kengni.com | NULL || 2 | 4 | 69 | NULL | 4 | 随便一个 | www.kengni.com | NULL || 1 | 3 | 45 | 2016-05-10 | 0 | 修改一下 | b | NULL || 2 | 4 | 69 | NULL | 0 | 修改一下 | b | NULL || 1 | 3 | 45 | 2016-05-10 | 5 | 京东 | www.jingdong.com | 5 || 2 | 4 | 69 | NULL | 5 | 京东 | www.jingdong.com | 5 || 1 | 3 | 45 | 2016-05-10 | 5 | 京东 | www.jingdong.com | NULL || 2 | 4 | 69 | NULL | 5 | 京东 | www.jingdong.com | NULL |+-----+---------+-------+------------+----+----------+-------------------------+-------+
所以前者是表的上下对接,后者是左右直接拼接。UNION主要对同一结构的多个表有用。
INSERT INTO SELECT:复制信息
从一个表复制数据,然后把数据插入到一个已存在的表中。目标表中任何已存在的行都不会受影响。
复制所有的信息到目标表中:
INSERT INTO table2SELECT * FROM table1;
复制部分信息到目标表中:
INSERT INTO table2(column_name(s))SELECT column_name(s)FROM table1;
创建一个新表,并且复制table2的结构和数据:
CREATE TABLE table1 SELECT * FROM table2;
欢迎进一步交流本博文相关内容:
博客园地址 : CSDN地址 : 也可以致信进行交流 : 欢迎转载 , 但请指明出处 : )