SQL 基础:Select语句,各种join,union用法
一、基本的SELECT语句
1. “*”的注意事项:在SELECT语句中,用*来选取所有的列,这是一个应该抵制的习惯。
虽然节省了输入列名的时间,但是也意味着获得的数据比真正需要的数据多的多。相应的,也会降低应用程序的性能及网络性能。
良好的规则是只选所需。
2. join子句
join是用来定义如何从多个表中选取数据并组合成一个结果集。
join必需是因为(1)我们所要获取的所有信息并不都在一个表中,或者(2)所要返回的信息都在一个表中,但是其上设置的条件信息却在另一个表中。
join的共同点是通过记录的连接列,把一条记录同一条或者多条其他记录进行匹配,从而产生出是这些记录的超级的记录。
2.1 INNER JOIN
INNER JOIN只返回进行联接的字段上匹配的记录。INNER JOIN是在做排除。
自引用是为了某种原因把一个表联接回它自身。
INNER JOIN是默认的联接方式。
2.2 OUTER JOIN
OUTER JOIN有左右联接之分,而INNER JOIN没有左右联接之分。
RIGHT(LEFT) OUTER JOIN是既想要包含右侧表中的所有行,以及左侧表中有匹配记录的行。
2.3 FULL JOIN
FULL JOIN联接,就是要包含位于联接两侧的表中所有的行。
2.4 CROSS JOIN
CROSS JOIN没有ON联接符,并且将join一侧表中的每一条记录与另一侧的表中所有的记录联接起来。即联接表中的笛卡尔积。
CROSS JOIN可用于提供样本数据和科学数据
3. WHERE子句
一些常用且不太熟悉的操作符:
BETWEEN: <列> BETWEEN num1 AND num2
LIKE: LIKE "ANY%" %代表0个或者多个任意字符。_代表单个任意字符。[]表示括号中包含的任意单个字符。^排除下一个。
EXISTS: EXISTS 查询语句。
4. ORDER BY
你知道吗?查询的返回结果通常是以字母或者数字顺序方式给出,这是偶然的。
以何种方式给出,在没有指定的情况下,通常取决于SQLServer认为哪一种汇集数据的方式开销最小。因此,返回的结果通常是基于表中数据的物理顺序或者SQLServer用来找寻数据所使用的某个索引。
默认是升序ASC,降序是DESC。
如果对顺序有要求,建议在SQL语句中显式标明。
ORDER BY 子句可以基于查询中使用的任何表中的任何字段来进行排序,无论该列是否包含在SELECT列表中。
5. 使用GROUP BY 子句聚集数据
一旦在查询语句中使用了GROUP BY,SELECT列表中的每一列要么包含在GROUP BY列表中,要不包含在聚集中。
当聚集不与GROUP BY一起使用时,聚集只能与其他聚集一起位于SELECT列表中,而不能与列名搭配出现在SELECT列表中。
除了COUNT(*) 之外,任何聚集函数都会忽略NULL值。
6. HAVING子句
在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。
仅当查询语句中有GROUP BY子句时使用HAVING子句。
WHERE子句应用到形成组的每一行上,HAVING子句应用到组的聚集上。
7. DISTINCT子句
DISTINCT消除重复数据。如果值是相同的,则该值出现一次。
DISTINCT出现在列表的开始处,或者出现在COUNT中。
二、基本的INSERT语句
1. 基本结构
INSERT [INTO] table_name [table_column_list] VALUES (data_value_list)
INTO是可以省略的。
table_column_list建议都显式给出,一是增强可读性,二是以后即使是表的结构发生改变,也不会有所影响。
2. INSERT INTO ... SELECT语句
批量插入数据。
INSERT [INTO] <表名> [<列表名>] <SELECT 语句>
三、UPDATE语句更改现有数据
UPDATE<表名>
SET <列> = <值> [, <列> = <值>]
[FROM <一个或者多个表>]
[WHERE <约束条件>]
UPDATE 可以从一个表中生成数据,但是只影响一个表。
四、DELETE语句
DELETE
[FROM] <表名>
[FROM] <表的列表/JOIN联接>
WHERE <搜索条件>
有关DELETE的一个小例子:
films表 actors表
filmId | filmname | yearmade filmId | firstname | lastname
1 'host' 1984 1 'li' 'si'
2 'shit' 1999 2 'wang' 'wu'
3 'liu' 'li'
从actors表中删除在films表中没有匹配的行:
DELETE FROM actors
FROM actors a
LEFT JOIN films f on a.filmId = f.filmId
WHERE f.filmname is null;
MySQL 语法:delete a.* from actors a left join films f on a.yearmade = f.yearmade where f. yearmade is null
MySQL不支持双FROM。
五、UNION
UNION可以让两个或者更多个查询产生单个结果集。
JOIN水平的合并数据,而UNION垂直的合并数据。
UNION的几个要点:
1. 要进行UNION的SELECT 列表中列的数量是相同的。
2. 合并的结果集返回的标头仅取第一个查询。
3. 数据类型必须相同或者隐式兼容。
4. 返回默认是DISTINCT而非ALL。
《END》
SQL 基础:Select语句,各种join,union用法的更多相关文章
- oracle(sql)基础篇系列(一)——基础select语句、常用sql函数、组函数、分组函数
花点时间整理下sql基础,温故而知新.文章的demo来自oracle自带的dept,emp,salgrade三张表.解锁scott用户,使用scott用户登录就可以看到自带的表. #使用ora ...
- oracle(sql)基础篇系列(一)——基础select语句、常用sql函数、组函数、分组函数
花点时间整理下sql基础,温故而知新.文章的demo来自oracle自带的dept,emp,salgrade三张表.解锁scott用户,使用scott用户登录就可以看到自带的表. #使用oracle用 ...
- SQL update select语句
SQL update select语句 最常用的update语法是:UPDATE <table_name>SET <column_name1> = <value>, ...
- SQL基础-----DML语句
之前已经介绍过SQL基础之DDL(数据库定义语言)语句,http://www.cnblogs.com/cxq0017/p/6433938.html(这是地址) 这篇文章主要介绍DML语句(数据库操纵语 ...
- 基础select语句详解
在数据库操作语句中,使用最频繁,也被认为最重要的是 SELECT 查询语句.我们已经在不少地方用到了 SELECT * FROM table_name; 这条语句用于查看一张表中的所有内容. 而 SE ...
- 【SQL】SQL 中Select语句完整的执行顺序
SQL Select语句完整的执行顺序: 1.from子句组装来自不同数据源的数据: 2.where子句基于指定的条件对记录行进行筛选: 3.group by子句将数据划分为多个分组: 4.使用聚集函 ...
- 用sql的select语句从数据库中获取数据
基本的select语句 select语句中的算数表达式和NULL值 列的别名 使用连接符操作,literal character strings,alternative quote operator, ...
- sql中select语句的逻辑执行顺序
下面是SELECT语句的逻辑执行顺序: FROMONJOINWHEREGROUP BYWITH CUBE or WITH ROLLUPHAVINGSELECTDISTINCTORDER BYTOP M ...
- SQL之SELECT语句执行顺序及子句功能
1.select 语句的执行顺序 SELECT a.id,a.`product_name`,a.`agreement_copies` i,b.id as statusId from `opmp_pro ...
- SQL SERVER SELECT语句中加锁选项的详细说明 [转]
SQL Server提供了强大而完备的锁机制来帮助实现数据库系统的并发性和高性能.用户既能使用SQL Server的缺省设置也可以在select 语句中使用“加锁选项”来实现预期的效果. 本文介绍了S ...
随机推荐
- div弹出层的效果带关闭按钮
下面我做的这个是个进度条的弹出层 <style type="text/css"> #tuxiang { width: 57px; } /*div弹出框的css*/ .t ...
- Oracle建表添加数据
- day17算法
http://www.360doc.com/content/14/0804/11/1073512_399302715.shtml
- (转) 坚持完成这套学习手册,你就可以去 Google 面试了
坚持完成这套学习手册,你就可以去 Google 面试了 系统 指针 value Google 面试 阅读6138 本文为掘金投稿,译文出自:掘金翻译计划 原文地址:Google Interv ...
- redis 集群环境搭建-redis集群管理
集群架构 (1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽. (2)节点的fail是通过集群中超过半数的节点检测失效时才生效. (3)客户端与redi ...
- EF学习笔记——通用增删改查方案
http://blog.csdn.net/leftfist/article/details/25005307 我刚接触EF未久,还不知道它有什么强大之处,但看上去,EF提供了一般的增删改查功能.以往用 ...
- 【python】进程
multiprocessing 如果你打算编写多进程的服务程序,Unix/Linux无疑是正确的选择.由于Windows没有fork调用,难道在Windows上无法用Python编写多进程的程序? 由 ...
- 用友的凭证update
select pk_glorgbook from bd_glorgbook where glorgbookcode='0100-0001';--0001N510000000006K4X ' and p ...
- zxing 一维码部分深入分析与实际应用,识别卡片数量,Android数卡器
打算修改zxing 源码应用到其它方面,所以最近花了点时间阅读其源码,无意中找到这篇博客,条码扫描二维码扫描——ZXing android 简化源码分析 对过程的分析还是可以参考的.原作者给出的一个基 ...
- [HTML5]HTML语义(Semantics)
HTML 是有含义的 语义指的是计算机语言定义的符号有其规范的含义,HTML中的标签.属性和属性值都有其约定的含义. 语义和默认样式有所不同,默认样式是浏览器设定的一些常用标签的表现形式,而语义化的主 ...