博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL学习笔记:一些高级语句
阅读量:6794 次
发布时间:2019-06-26

本文共 4959 字,大约阅读时间需要 16 分钟。

现在以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 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;

下面是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 table2SELECT * FROM table1;

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

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

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

CREATE TABLE table1 SELECT * FROM table2;

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

博客园地址 :
CSDN地址 :
也可以致信进行交流 :
欢迎转载 , 但请指明出处  :  )


转载于:https://www.cnblogs.com/AsuraDong/p/7185764.html

你可能感兴趣的文章
我的友情链接
查看>>
linux下修改path
查看>>
几行代码,让你的app动感起来--Android Design Support Library使用
查看>>
Jquery实现回车键Enter切换焦点
查看>>
spring cloud(第二部)服务注册与发现
查看>>
Azure IaaS云服务对应多个VIP
查看>>
SNMP协议
查看>>
CentOS下搭建SVN服务器
查看>>
Lync部署之Lync Mobile在Server上的设置
查看>>
Access字符串处理函数整理
查看>>
check_mk error 二 on centos
查看>>
2015年9月30日梳理重点的作业
查看>>
php数组排序
查看>>
ERROR 1045 (28000): Access denied for user 'roort'
查看>>
Sqlite
查看>>
Echart饼状图中心加固定文字及计算结果
查看>>
我的友情链接
查看>>
TCPIP协议号
查看>>
我的友情链接
查看>>
修改/etc/resolv.conf重启之后自动还原
查看>>