一、基本的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用法的更多相关文章

  1. oracle(sql)基础篇系列(一)——基础select语句、常用sql函数、组函数、分组函数

        花点时间整理下sql基础,温故而知新.文章的demo来自oracle自带的dept,emp,salgrade三张表.解锁scott用户,使用scott用户登录就可以看到自带的表. #使用ora ...

  2. oracle(sql)基础篇系列(一)——基础select语句、常用sql函数、组函数、分组函数

    花点时间整理下sql基础,温故而知新.文章的demo来自oracle自带的dept,emp,salgrade三张表.解锁scott用户,使用scott用户登录就可以看到自带的表. #使用oracle用 ...

  3. SQL update select语句

    SQL update select语句 最常用的update语法是:UPDATE <table_name>SET <column_name1> = <value>, ...

  4. SQL基础-----DML语句

    之前已经介绍过SQL基础之DDL(数据库定义语言)语句,http://www.cnblogs.com/cxq0017/p/6433938.html(这是地址) 这篇文章主要介绍DML语句(数据库操纵语 ...

  5. 基础select语句详解

    在数据库操作语句中,使用最频繁,也被认为最重要的是 SELECT 查询语句.我们已经在不少地方用到了 SELECT * FROM table_name; 这条语句用于查看一张表中的所有内容. 而 SE ...

  6. 【SQL】SQL 中Select语句完整的执行顺序

    SQL Select语句完整的执行顺序: 1.from子句组装来自不同数据源的数据: 2.where子句基于指定的条件对记录行进行筛选: 3.group by子句将数据划分为多个分组: 4.使用聚集函 ...

  7. 用sql的select语句从数据库中获取数据

    基本的select语句 select语句中的算数表达式和NULL值 列的别名 使用连接符操作,literal character strings,alternative quote operator, ...

  8. sql中select语句的逻辑执行顺序

    下面是SELECT语句的逻辑执行顺序: FROMONJOINWHEREGROUP BYWITH CUBE or WITH ROLLUPHAVINGSELECTDISTINCTORDER BYTOP M ...

  9. SQL之SELECT语句执行顺序及子句功能

    1.select 语句的执行顺序 SELECT a.id,a.`product_name`,a.`agreement_copies` i,b.id as statusId from `opmp_pro ...

  10. SQL SERVER SELECT语句中加锁选项的详细说明 [转]

    SQL Server提供了强大而完备的锁机制来帮助实现数据库系统的并发性和高性能.用户既能使用SQL Server的缺省设置也可以在select 语句中使用“加锁选项”来实现预期的效果. 本文介绍了S ...

随机推荐

  1. python数据结构与算法——完全树 与 最小/大堆

    # 完全树 最小堆 class CompleteTree(list): def siftdown(self,i): """ 对一颗完全树进行向下调整,传入需要向下调整的节 ...

  2. YHLMR009 交货单查询

    *********************************************************************** * Title : YHLMR009 * * Appli ...

  3. php开发工具。。

    看了好多决定用phpstorm. hahaha PHP还是挺好玩的 但是貌似犯蠢一下,MAC自带有php环境: 我还下了一个XAMPP,不过无所谓啦. 都可以用

  4. Date get period

    /** * get period for last year * @param time * @return */ public static DatePeriodDTO getLastYear(lo ...

  5. Windows 2003上 SaltStack/Salt 和 psutil 可能存在的问题及解决

    今天把salt安装在windows 2003上,发现无法启动,随之而来的是一个有一个的坑,让我们一起逐个排查. 问题一(salt无法启动) salt无法启动,错误结果如图:

  6. SQL总结(六)触发器

    SQL总结(六)触发器 概念 触发器是一种特殊类型的存储过程,不由用户直接调用.创建触发器时会对其进行定义,以便在对特定表或列作特定类型的数据修改时执行. 触发器可以查询其他表,而且可以包含复杂的 S ...

  7. Linux下访问网站

    1.将打包的文件解压到/usr/local/tomcat7/webapps/ROOT下 2.将8080端口开启 3.通过浏览器访问,结果返回来的状态时Aborted,出现 严重: The web ap ...

  8. 使用新浪云(SAE)实现基于mySql和微信公众平台的关键字请求响应服务

    本例是作者初次尝试微信公众平台开发之作,实现传统的关键字请求响应功能.即:用户发关键字,公众号通过关键字进行检索, 在mysql数据库中读取与关键字相关的信息,并返回给用户.本例在微信订阅号(开发者模 ...

  9. 读CopyOnWriteArrayList有感

    除了加锁外,其实还有一种方式可以防止并发修改异常,这就是将读写分离技术(不是数据库上的). 先回顾一下一个常识: 1.JAVA中“=”操作只是将引用和某个对象关联,假如同时有一个线程将引用指向另外一个 ...

  10. C语言操作mysql

    php中 mysqli, pdo 可以用 mysqlnd 或 libmysqlclient 实现 前者 从 php 5.3.0起已内置到php中, 并且支持更多的特性,推荐用 mysqlnd mysq ...