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》



本文转自莫水千流博客园博客,原文链接:http://www.cnblogs.com/zhoug2020/p/3327801.html,如需转载请自行联系原作者

相关文章
|
15天前
|
SQL
SQL JOIN
【11月更文挑战第06天】
34 4
|
21天前
|
SQL 关系型数据库 MySQL
图解 SQL 里的各种 JOIN
用文氏图表示 SQL 里的各种 JOIN,一下子就理解了。
30 2
|
2月前
|
SQL XML Java
mybatis复习03,动态SQL,if,choose,where,set,trim标签及foreach标签的用法
文章介绍了MyBatis中动态SQL的用法,包括if、choose、where、set和trim标签,以及foreach标签的详细使用。通过实际代码示例,展示了如何根据条件动态构建查询、更新和批量插入操作的SQL语句。
mybatis复习03,动态SQL,if,choose,where,set,trim标签及foreach标签的用法
|
1月前
|
SQL 分布式计算 Java
Hadoop-11-MapReduce JOIN 操作的Java实现 Driver Mapper Reducer具体实现逻辑 模拟SQL进行联表操作
Hadoop-11-MapReduce JOIN 操作的Java实现 Driver Mapper Reducer具体实现逻辑 模拟SQL进行联表操作
31 3
|
2月前
|
SQL 存储 安全
SQL Server用法
SQL Server用法
63 1
|
2月前
|
SQL XML Java
mybatis :sqlmapconfig.xml配置 ++++Mapper XML 文件(sql/insert/delete/update/select)(增删改查)用法
当然,这些仅是MyBatis功能的初步介绍。MyBatis还提供了高级特性,如动态SQL、类型处理器、插件等,可以进一步提供对数据库交互的强大支持和灵活性。希望上述内容对您理解MyBatis的基本操作有所帮助。在实际使用中,您可能还需要根据具体的业务要求调整和优化SQL语句和配置。
44 1
|
3月前
|
Java 网络架构 数据格式
Struts 2 携手 RESTful:颠覆传统,重塑Web服务新纪元的史诗级组合!
【8月更文挑战第31天】《Struts 2 与 RESTful 设计:构建现代 Web 服务》介绍如何结合 Struts 2 框架与 RESTful 设计理念,构建高效、可扩展的 Web 服务。Struts 2 的 REST 插件提供简洁的 API 和约定,使开发者能快速创建符合 REST 规范的服务接口。通过在 `struts.xml` 中配置 `&lt;rest&gt;` 命名空间并使用注解如 `@Action`、`@GET` 等,可轻松定义服务路径及 HTTP 方法。
62 0
|
3月前
|
SQL 存储 关系型数据库
|
3月前
|
SQL 数据挖掘 关系型数据库
|
3月前
|
SQL 存储 数据挖掘
"SQL JOIN大揭秘:解锁多表联合查询的终极奥义,从内到外,左至右,全连接让你数据世界畅通无阻!"
【8月更文挑战第31天】在数据库领域,数据常分散在多个表中,而SQL JOIN操作如同桥梁,连接这些孤岛,使数据自由流动,编织成复杂的信息网络。本文通过对比内连接、左连接、右连接和全连接的不同类型,并结合示例代码,展示SQL JOIN的强大功能。掌握JOIN技术不仅能高效查询数据,更是数据分析和数据库管理的关键技能。
94 0