SQL学习笔记:一些高级语句
现在以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 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;
下面是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 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学习笔记:一些高级语句的更多相关文章
- linQ学习笔记之三高级语句
linq语句查询执行的时机 第一步获取数据源 int [] obejct = new int[]{1,2,3,4,5,6,7,8,9} 第二步定义查询 var even = numbers.where ...
- SQL学习笔记:高级教程
SQL语法 LIMIT select col from table limit number select * from table limit number LIKE select * from t ...
- 1.2(SQL学习笔记)高级数据过滤
一.AND 通过WHERE可以进行条件过滤,但只限于单个条件. 通过AND就可以连接多个条件,AND代表了和,即AND两边的条件全部满足才会通过筛选. 这就类似编程语言中的&&. 以下 ...
- PL/SQL学习笔记之循环语句
一:基本循环 LOOP 循环体: 退出循环: )IF condition THEN exit; END IF; ) exit WHEN condition; END LOOP; 二:WHILE循环 W ...
- 【SQL Server学习笔记】Delete 语句、Output 子句、Merge语句
原文:[SQL Server学习笔记]Delete 语句.Output 子句.Merge语句 DELETE语句 --建表 select * into distribution from sys.obj ...
- matlab学习笔记9 高级绘图命令_2 图形的高级控制_视点控制和图形旋转_色图和颜色映像_光照和着色
一起来学matlab-matlab学习笔记9 高级绘图命令_2 图形的高级控制_视点控制和图形旋转_色图和颜色映像_光照和着色 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 < ...
- matlab学习笔记9 高级绘图命令_1 图形对象_根对象,轴对象,用户控制对象,用户菜单对象
一起来学matlab-matlab学习笔记9 高级绘图命令_1 图形对象_根对象,轴对象,用户控制对象,用户菜单对象 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 <matl ...
- Hadoop学习笔记(7) ——高级编程
Hadoop学习笔记(7) ——高级编程 从前面的学习中,我们了解到了MapReduce整个过程需要经过以下几个步骤: 1.输入(input):将输入数据分成一个个split,并将split进一步拆成 ...
- ORALCE PL/SQL学习笔记
ORALCE PL/SQL学习笔记 详情见自己电脑的备份数据资料
- Oracle之PL/SQL学习笔记
自己在学习Oracle是做的笔记及实验代码记录,内容挺全的,也挺详细,发篇博文分享给需要的朋友,共有1w多字的学习笔记吧.是以前做的,一直在压箱底,今天拿出来整理了一下,给大家分享,有不足之处还望大家 ...
随机推荐
- 如何在Java生态圈选择一个轻量级的RESTful框架?
在微服务流行的今天,我们会从纵向和横向分解代码的逻辑,将一些独立的无状态的代码单元实现为微服务,可以将它们发布到一些分布式计算单元或者Docker中,并在性能需要的时候及时地创建更多的服务单元.微服务 ...
- bzoj 4300: 绝世好题【dp】
设f[i][j]表示数列到i为止最后一项第j位为1的最大子序列长度,每次从i-1中1<<j&a[i]!=0的位+1转移来 然后i维是不需要的,答案直接在dp过程中去max即可 #i ...
- 10.12NOIP模拟题(1)
#include<iostream> #include<cstdio> #include<cstring> #include<queue> #defin ...
- ACM博弈论总结
一.Bash博弈 1.问题模型:只有一堆n个物品,两人轮流从这堆物品中取物,最多取m个,最后取光者胜. 2.解决思路:当n=m+1时,由于一次最多取m个,无论先取者拿走多少个,后取者都能一次拿走剩余的 ...
- ACM_区间调度问题(贪心)
Meetings 系列一 Time Limit: 2000/1000ms (Java/Others) Problem Description: 多年之后的广财ACM编协如日中天,下系多个部门,且编协成 ...
- EditText(1)EditText的类型和回车键的行为
1,常见类型 <EditText android:id="@+id/email_address" android:layout_width="fill_parent ...
- 使用Oracle的DBMS_SQL包执行动态SQL语句
引用自:http://blog.csdn.net/ggjjzhzz/archive/2005/10/17/507880.aspx 在某些场合下,存储过程或触发器里的SQL语句需要动态生成.Oracle ...
- 构建一个.net的干货类库,以便于快速的开发 - 工具类
相信每一个开发的框架都会有一个工具类,工具类的作用有很多,通常我会将最常用的方法放在工具类里 取得用户IP 取得网站根目录的物理路径 枚举相关 非法关键字检查 绝对路径改为相对路径 获取小数位(四舍五 ...
- 致创业者:APP已死 服务永生
前几日,有位创业者和我讲他在带领团队做一个将爱踢球的人集中在一起的App,我告诉他你的创业方向错了.原因在于你的目的是要为爱踢球的人提供服务,而你现在却在竭尽全力的做App,你应该做的是设计你为爱踢球 ...
- 通信协议------Http、TCP、UDP
CP HTTP UDP: 都是通信协议,也就是通信时所遵守的规则,只有双方按照这个规则“说话”,对方才能理解或为之服务. TCP HTTP UDP三者的关系: TCP/IP是个协议组, ...