现在以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. bzoj3561

    3561: DZY Loves Math VI Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 240  Solved: 163[Submit][Sta ...

  2. 13.Ext.extend用法以及代码解读

    转自:http://www.blogjava.net/dragonshrimp/archive/2008/03/01/183060.html Ext.extend用法以及代码解读 概述 Ext.ext ...

  3. 如何在 ubuntu 12.04 上安装 skype(转载)

    转自:http://blog.51osos.com/linux/how-to-install-skype-in-ubuntu-12-04/ 添加Canonical Partner Repository ...

  4. 429c Leha and Function

    题目 解题报告 F(n, k)是在集合{1, 2, 3, ..., n}中所有的具有k个元素的子集中分别取最小值,相加后的期望. 例如:要求F(4, 2),根据定义有{1, 2}, {1, 3}, { ...

  5. VMWare虚拟网络编辑

    VMWare虚拟网络编辑记录. 点击"编辑->虚拟网络编辑器" 在网卡列表中选择"VMnet8"查看目前设置,点击右下角的更改设置进行网络修改. 备注:更 ...

  6. scala学习笔记2:面向对象编程部分基础

    以下主要记录的是看完scala in programming这本书Functional Objects(第六章)后的要点总结. 1,程序中可变对象(var)和不可变对象(val)使用的权衡问题 不可变 ...

  7. LN : leetcode 238 Product of Array Except Self

    lc 238 Product of Array Except Self 238 Product of Array Except Self Given an array of n integers wh ...

  8. 重新学习Java——Java基本的程序设计结构(二)

    上一节简单回顾了Java基本的一些程序设计的知识,这一节将继续根据<Java核心技术>这本书,进行这方面知识的复习与探索. 1. 字符串 Java字符串实际上就是Unicode字符序列.例 ...

  9. 启用adb wifi无线调试功能(无需root)

    1  工具 电脑.手机 2  前提 电脑和手机出于同一网段 3  步骤 以管理员方式打开cmd,运行 adb tcpip 5555(执行tcpip调试模式) adb connect  192.168. ...

  10. TOP5_3:定制简单的进度条

    结构: Activity: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xm ...