现在以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 不支持toppercent写法。

SQL别名

通过使用 SQL,可以为表名称或列名称指定别名。基本上,创建别名是为了让列名称的可读性更强。

列别名

分列别名

SELECT name AS n, alexa AS a
FROM Website;

合并列

SELECT name, CONCAT(url, ', ', alexa, ', ') AS site_info
FROM 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 a
where 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 table1
UNION
SELECT column_name(s) FROM table2;

下面是UNIONselect ... 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 table2
SELECT * FROM table1;

复制部分信息到目标表中:

INSERT INTO table2
(column_name(s))
SELECT column_name(s)
FROM table1;

创建一个新表,并且复制table2的结构和数据:

CREATE TABLE table1 SELECT * FROM table2;

欢迎进一步交流本博文相关内容:

博客园地址 : http://www.cnblogs.com/AsuraDong/

CSDN地址 : http://blog.csdn.net/asuradong

也可以致信进行交流 : xiaochiyijiu@163.com

欢迎转载 , 但请指明出处  :  )


SQL学习笔记:一些高级语句的更多相关文章

  1. linQ学习笔记之三高级语句

    linq语句查询执行的时机 第一步获取数据源 int [] obejct = new int[]{1,2,3,4,5,6,7,8,9} 第二步定义查询 var even = numbers.where ...

  2. SQL学习笔记:高级教程

    SQL语法 LIMIT select col from table limit number select * from table limit number LIKE select * from t ...

  3. 1.2(SQL学习笔记)高级数据过滤

    一.AND 通过WHERE可以进行条件过滤,但只限于单个条件. 通过AND就可以连接多个条件,AND代表了和,即AND两边的条件全部满足才会通过筛选. 这就类似编程语言中的&&. 以下 ...

  4. PL/SQL学习笔记之循环语句

    一:基本循环 LOOP 循环体: 退出循环: )IF condition THEN exit; END IF; ) exit WHEN condition; END LOOP; 二:WHILE循环 W ...

  5. 【SQL Server学习笔记】Delete 语句、Output 子句、Merge语句

    原文:[SQL Server学习笔记]Delete 语句.Output 子句.Merge语句 DELETE语句 --建表 select * into distribution from sys.obj ...

  6. matlab学习笔记9 高级绘图命令_2 图形的高级控制_视点控制和图形旋转_色图和颜色映像_光照和着色

    一起来学matlab-matlab学习笔记9 高级绘图命令_2 图形的高级控制_视点控制和图形旋转_色图和颜色映像_光照和着色 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 < ...

  7. matlab学习笔记9 高级绘图命令_1 图形对象_根对象,轴对象,用户控制对象,用户菜单对象

    一起来学matlab-matlab学习笔记9 高级绘图命令_1 图形对象_根对象,轴对象,用户控制对象,用户菜单对象 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 <matl ...

  8. Hadoop学习笔记(7) ——高级编程

    Hadoop学习笔记(7) ——高级编程 从前面的学习中,我们了解到了MapReduce整个过程需要经过以下几个步骤: 1.输入(input):将输入数据分成一个个split,并将split进一步拆成 ...

  9. ORALCE PL/SQL学习笔记

    ORALCE  PL/SQL学习笔记 详情见自己电脑的备份数据资料

  10. Oracle之PL/SQL学习笔记

    自己在学习Oracle是做的笔记及实验代码记录,内容挺全的,也挺详细,发篇博文分享给需要的朋友,共有1w多字的学习笔记吧.是以前做的,一直在压箱底,今天拿出来整理了一下,给大家分享,有不足之处还望大家 ...

随机推荐

  1. bzoj2521

    最小生成树+最小割 ...我太zz了,没看出来全体减1是一个加1,看见后就是sb题了... 我们发现根据克鲁斯卡尔的过程,我们把边从小到大加入,如果两点已经相连就跳过,那么我们把所有小于等于这条边的边 ...

  2. bzoj4810

    http://www.lydsy.com/JudgeOnline/problem.php?id=4810 问题就在于怎么快速查询 我们先用莫队转移,但是没办法快速地查询,那么我们就用bitset这个东 ...

  3. JS判断字符串中是否存在某个字符

    用String类中的indexOf函数,例如:String str="we find out sth";if(str.indexOf("o")==-1){ // ...

  4. [Shell学习笔记] read命令从键盘或文件中获取标准输入(转载)

    转自:http://www.1987.name/151.html read命令是用于从终端或者文件中读取输入的内部命令,read命令读取整行输入,每行末尾的换行符不被读入.在read命令后面,如果没有 ...

  5. BZOJ4543/BZOJ3522 [POI2014]Hotel加强版(长链剖分)

    题目好神仙--这个叫长链剖分的玩意儿更神仙-- 考虑dp,设\(f[i][j]\)表示以\(i\)为根的子树中到\(i\)的距离为\(j\)的点的个数,\(g[i][j]\)表示\(i\)的子树中有\ ...

  6. [Usaco2018 Open]Talent Show

    Description FarmerJohn要带着他的N头奶牛,方便起见编号为1-N,到农业展览会上去,参加每年的达牛秀!他的第i头奶牛重量为wi,才艺水平为ti,两者都是整数.在到达时,Farmer ...

  7. E - Cheap Kangaroo(求多个数的最大公约数)

    Description There are N kangaroos going out to eat at an Indian restaurant. The ith kangaroo wants t ...

  8. Window对象与DOM

    目前,前端插件数不胜数,比如有移动端滑动特效插件Swiper,下拉刷新的iScroll,弹出框插件layer,还有我们经常使用的JQuery,jquery.mobile等,这些插件能够满足我们日常的基 ...

  9. mysql之命令行导入导出

    命令介绍 mysqldump:导出命令,在系统”命令提示符“窗口直接使用,如果提示没有此命令(前提是已经安装成功mysql),在环境变量中的path添加mysql,即path=D:\xxx\mysql ...

  10. FCC 基础JavaScript 练习7

    1. Math.random()用来生成一个在0(包括0)到1(不包括1)之间的随机小数,因此Math.random()可能返回0但绝不会返回1. 提示随后的函数都会在return执行前调用,所以我们 ...