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多字的学习笔记吧.是以前做的,一直在压箱底,今天拿出来整理了一下,给大家分享,有不足之处还望大家 ...
随机推荐
- [APIO2018]Circle selection
https://www.zybuluo.com/ysner/note/1257597 题面 在平面上,有\(n\)个圆,记为\(c_1,c_2,...,c_n\).我们尝试对这些圆运行这个算法: 找到 ...
- EasyUI Form表单提交
转自:https://www.cnblogs.com/net5x/articles/4576926.html Form(表单) 使用$.fn.form.defaults重写默认值对象 form提供了各 ...
- Maven package打包webapp项目遇到的问题
环境Java: JDK_1.7.0_79Eclipse: Mars(4.5.0)Maven: 3.3.3最近公司同事重构某Java web项目,完成之后发现部署启动总是不成功 Caused by: o ...
- 命令搜索命令(whereis、which)
一.whereis命名 解释:搜索系统命令所在的位置,不能查询文件 语法:whereis 命令 -b 之查找可执行的文件在哪里 -m 只查找帮助文件 二.which 命令 解释:能搜索命令所在位置, ...
- Python基础 — NumPy
NumPy--简介 Numpy(Numerical Python的简称)是一个由多维数组对象和用于处理数组的例程集合组成的库. Numpy内部解除了Python的PIL(全局解释器锁),运算效率极 ...
- 靶形数独 2009年NOIP全国联赛提高组(搜索)
靶形数独 2009年NOIP全国联赛提高组 时间限制: 4 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 小城和小华都是热爱数 ...
- JS中定时器的返回数值ID值
定时器会返回一个数字值id,可以由clearInterval(id)或clearTimeout(id)来实现对对应定时器的清除. setInterval()/setTimeout()BOM中的Wind ...
- Quartz定时调度jar包的执行Demo分享
1.Quartz简介 Quartz框架的核心是调度器.调度器负责管理Quartz应用运行时环境.调度器不是靠自己做所有的工作,而是依赖框架内一些非常重要的部件.Quartz不仅仅是线程和线程管理. ...
- 1051 复数乘法(C#)
一.题目内容如下: 复数可以写成 ( 的常规形式,其中 A 是实部,B 是虚部,i 是虚数单位,满足 1:也可以写成极坐标下的指数形式 (,其中 R 是复数模,P 是辐角,i 是虚数单位,其等价于三角 ...
- mysql left join 出现的结果会重复
left join 基本用法 MySQL left join 语句格式 A LEFT JOIN B ON 条件表达式 left join 是以A表为基础,A表即左表,B表即右表. 左表(A)的记录会全 ...