`
Nami_Sup
  • 浏览: 5223 次
文章分类
社区版块
存档分类
最新评论

1SQL语句

sql 
阅读更多

 

二、SQL中的几种连接

1.内连接
2.外连接
2.1左外连接

2.2右外连接

2.3全外连接

3.交叉连接

三、SQL语句

 

 

二、SQL中的几种连接

注:以下部分内容参考"http://www.phpddt.com/db/inner_join-outer-join.html"。

 

  1.内连接

        内连接也叫连接,是最早的一种连接。还可以被称为普通连接或者自然连接,内连接是从结果表中删除与其他被连接表中没有匹配行的所有行,所以内连接可能会丢失信息。

        使用像 =  或 <> 之类的比较运算符,根据每个表共有的列的值匹配两个表中的行,INNER JOIN产生的结果是AB的交集。

 
    

--这是内连接的简单写法
SELECT A.*, B.* FROM TB_A A, TB_B B WHERE A.ID = B.ID

--这是INNER JOIN写法
SELECT A.*, B.* FROM TB_A A INNER JOIN TB_B B ON A.ID = B.ID

--这是JOIN写法
SELECT A.*, B.* FROM TB_A A JOIN TB_B B ON A.ID = B.ID

--INNER JOIN和JOIN是一样的,并且JOIN是INNER JOIN的缩写
--内连接和左/右连接的区别:
--TABLE A ;TABLE B
--内连接:A INNER JOIN B ,在A中也有,在B中也有的数据才能查询出来
--左连接:A LEFT JOIN B,连接查询的数据,在A中必须有,在B中可以有可以没有
--右连接与左连接相反

 

  2.外连接

        外连接分为三种:左外连接,右外连接,全外连接。对应SQL:LEFT/RIGHT/FULL OUTER JOIN。

outer join则会返回每个满足第一个(顶端)输入与第二个(底端)输入的联接的行。它还返回任何在第二个输入中没有匹配行的第一个输入中的行。

        在外连接时会以一张表为基表,该表的内容会全部显示,然后加上两张表匹配的内容。如果基表的数据在另一张表没有记录。那么在相关联的结果集行中列显示为空值(NULL)。

 

    2.1左外连接

            产生表A的完全集,而B表中匹配的则有值,没有匹配的则以null值取代。


    

 

--LEFT OUTER JOIN的写法
SELECT A.*, B.* FROM TB_A A LEFT OUTER JOIN TB_B B ON A.ID = B.ID

--LEFT JOIN的写法
SELECT A.*, B.* FROM TB_A A LEFT JOIN TB_B B ON A.ID = B.ID

--带(+)操作符的写法,(+)可以理解为补充,有(+)的表就是可能有NULL的表,另一个表则有所有数据
SELECT A.*, B.* FROM TB_A A, TB_B B WHERE A.ID = B.ID(+)
--LEFT JOIN是LEFT OUTER JOIN的缩写,一般情况下我们会省略OUTER

     

    2.2右外连接

             产生表B的完全集,而A表中匹配的则有值,没有匹配的则以null值取代。


    

 

--RIGHT OUTER JOIN的写法
SELECT A.*, B.* FROM TB_A A RIGHT OUTER JOIN TB_B B ON A.ID = B.ID

--RIGHT JOIN的写法
SELECT A.*, B.* FROM TB_A A RIGHT JOIN TB_B B ON A.ID = B.ID

--带(+)操作符的写法,(+)可以理解为补充,有(+)的表就是可能有NULL的表,另一个表则有所有数据
SELECT A.*, B.* FROM TB_A A, TB_B B WHERE A.ID(+) = B.ID
--RIGHT JOIN是RIGHT OUTER JOIN的缩写,一般情况下我们会省略OUTER
--正常开发中也是LEFT JOIN用的比较多
--一个SQL语句中最好不要同时使用LEFT JOIN和RIGHT JOIN关键字
 

     2.3全外连接

            左表和右表都不做限制,所有的记录都显示,两表不足的地方用null 填充。 全外连接不支持(+)这种写法。


    

 

--FULL OUTER JOIN的写法
SELECT A.*, B.* FROM TB_A A FULL OUTER JOIN TB_B B ON A.ID = B.ID

--RIGHT JOIN的写法
SELECT A.*, B.* FROM TB_A A FULL JOIN TB_B B ON A.ID = B.ID

--可以通过is NULL将没有匹配的值找出来
SELECT A.*, B.* FROM TB_A A FULL JOIN TB_B B ON A.ID = B.ID WHERE A.ID IS NULL OR B.ID IS NULL

--FULL JOIN是FULL OUTER JOIN的缩写,一般情况下我们会省略OUTER

 

  3.交叉连接

        正常开发的时候不怎么用,百度出来的解释是:CROSS JOIN连接用于生成两张表的笛卡尔集。看起来有点拗口,我也不太明白。

        参考 vczh(知乎ID):"cross join就是不加条件限制,inner join的on还是加了条件限制的"。

        参考 知乎用户:"轮子哥教你打基础系列 cross join只是无条件内连接<专用的关键字>而已"。

 

联合主键:

ALTER TABLE tb_menus_role ADD CONSTRAINT pk_tb_menus_role PRIMARY KEY (role_id, menus_id);
--给表里的列设置联合主键,CONSTRAINT pk_后面跟一个名字,名字就是这个约束的名字,可以设置为表名,然后在括号里填你要设置的联合主键,用逗号区分

 

 在表中添加列:

ALTER TABLE tb_a ADD new_column VARCHAR2(20)

 在表中删除列:

ALTER TABLE tb_name DROP COLUMN column_name

NVL函数:

SELECT NVL(a.id_1, a.id_2) FROM tb_a a
--如果a.id_1为空,就返回a.id_2

 WHERE后面的单个条件跟多个参数:

SELECT * FROM TB_A A WHERE A.ID IN ('1','2')

 

 查找重复数据:

SELECT * FROM TB_A WHERE ID IN (SELECT ID FROM TB_A GROUP BY ID HAVING COUNT(1) >= 2)
--查找ID(列)的重复数据

 清空表数据:

TRUNCATE TABLE TB_A
--TRUNCATE比较快

 查询表的创建时间:

SELECT CREATED FROM USER_OBJECTS WHERE OBJECT_NAME='表名称'

 字符串连接函数:

CONCAT()语法:

MYSQL:CONCAT(字符串1,字符串2,字符串3,字符串N);

ORACLE:CONCAT(字符串1,字符串2)(ORACLE语法只能连接两个字符串);

SELECT SSO AS SSO FROM TB_SSO_TO_ROLE where ROLE = 'vendor' AND ROOM_TYPE = '1' AND ( VENDOR_TYPE 
LIKE CONCAT(CONCAT('%V', '2'), 'V%') or VENDOR_TYPE is null )

 添加表备注:

COMMENT ON TABLE tb_test IS '这是备注';
--修改的话直接改文本即可

 添加列备注:

COMMENT ON COLUMN tb_test.one_column IS '这是备注';
--修改的话直接改文本即可

 修改列的默认值(给已有的列添加默认值约束也适用):

ALTER TABLE tb_sso_to_role MODIFY(is_msg DEFAULT '1')

 得到的记录不重复:

SELECT DISTINCT T.ID FROM TABLE T WHERE T.USERNAME = 'AAA'
--不知道为什么INNER JOIN的表多了,有时候会有多条重复的记录,用了这个关键词根据ID避免重复就可以了

 日期差:

--这是SQL Server数据库的SQL语句
--参数1:返回值单位类型,参考(http://www.w3school.com.cn/sql/func_datadiff.asp)
--参数2:开始日期
--参数3:结束日期
--注意:参数2和参数3位置不要放反了,我是写在WHERE语句中的,位置防反以后结果集都是一样的,怎么改数据都不行,单独跑了一遍发现DATEDIFF()返回值是负的,怪不得不行
WHERE DATEDIFF(day, GETDATE(), A.PLAN_EXEC_DATE ) < 5
--这是MySQL数据库的SQL语句,参考(http://www.w3school.com.cn/sql/func_datediff_mysql.asp),没有SQL Server选择返回值类型的参数
--参数1:开始类型
--参数2:结束类型
--注意:同样是不能放反两个参数的类型
SELECT DATEDIFF('2008-12-30','2008-12-29')

 

分享到:
评论

相关推荐

    sql语句万能生成器,sql语句,sql语句生成

    SQL语句是数据库操作的核心,它用于查询、插入、更新和删除数据,是任何数据库管理系统中的基础工具。在IT行业中,编写SQL语句是一项必备技能,但手动编写和调试SQL语句可能会耗费大量时间和精力,尤其在处理复杂...

    Oracle Sql语句转换成Mysql Sql语句

    本项目提供了一个Java源码工具,能够帮助用户便捷地将Oracle SQL语句转换为MySQL SQL语句。 Oracle SQL与MySQL SQL的主要差异在于以下几个方面: 1. **数据类型**:Oracle支持的数据类型如NUMBER、LONG、RAW等在...

    sql语句说明sql语句说明sql语句说明.zip

    sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明...

    Java打印漂亮的SQL语句(被格式化的SQL语句)

    在Java编程中,调试SQL语句是开发过程中的常见任务,尤其当面对复杂且冗长的查询时。为了提高效率并使SQL语句更易于理解和分析,格式化SQL语句显得尤为重要。标题提及的"Java打印漂亮的SQL语句(被格式化的SQL语句)...

    数据库技术与应用:Chap04-1 SQL语句.pptx

    数据库技术与应用:Chap04-1 SQL语句.pptx

    SQLServer动态SQL语句的用法

    SQL Server 动态 SQL 语句的用法 SQL Server 中的动态 SQL 语句是一种灵活的查询方式,它可以根据不同的情况生成不同的 SQL 语句。动态 SQL 语句可以用来实现复杂的业务逻辑,提高查询效率和灵活性。 普通 SQL ...

    PB脚本中SQL语句写法与SQL中语句写法对照

    PB脚本中SQL语句写法与SQL中语句写法对照 PB脚本中SQL语句写法与SQL中语句写法对照是非常重要的知识点,因为PB脚本和SQL语言在写法和应用中有所不同。本文将对PB脚本中SQL语句写法和SQL中语句写法进行对比和分析。 ...

    hibernate执行原生sql语句

    "hibernate执行原生sql语句" Hibernate 是一种流行的 ORM(Object-Relational Mapping)框架,用于将 Java 对象映射到关系数据库中。然而,在一些情况下,我们需要直接执行原生 SQL 语句,而不是使用 Hibernate 的...

    sql语句sql语句sql语句sql语句.txt

    sql语句sql语句sql语句sql语句sql语句

    arcgis中的sql语句

    ### ArcGIS中的SQL语句详解 #### 一、SQL在ArcGIS中的角色与应用 SQL,全称为Structured Query Language,即结构化查询语言,是专为数据库设计的一种标准语言,用于管理和操作数据库中的数据。在ArcGIS环境中,SQL...

    sql语句、动态SQL语句基本语法

    在数据库管理系统(如MySQL、Oracle、SQL Server等)中,SQL语句是不可或缺的一部分。 1. SQL基础语法 SQL的基础语法包括SELECT、INSERT、UPDATE、DELETE四大语句,它们分别用于查询、插入、更新和删除数据。 - ...

    完成超长SQL语句执行前拆分

    1. **初始化**:首先判断原始SQL语句是否已经小于最大长度限制。如果是,则无需拆分,直接返回原始SQL语句;如果不是,则继续后续处理。 2. **计算分割次数**:根据原始SQL语句的长度与指定的最大长度,计算出需要...

    sql语句范例 全面掌握SQL语句

    全面掌握SQL语句 详细的SQL语句介绍 详细的SQL语句介绍 详细的SQL语句介绍 详细的SQL语句介绍

    oracle监听执行sql语句

    ### Oracle监听执行SQL语句详解 #### 一、Oracle监听执行概述 在Oracle数据库管理与维护过程中,有时候我们需要了解应用程序正在执行哪些SQL语句,这不仅有助于性能优化,还可以帮助我们诊断潜在的问题。通过监听...

    SQL 执行超长语句

    1. **可读性差**:随着SQL语句长度的增加,其可读性和可维护性会逐渐降低,这不仅影响开发效率,还可能导致错误的引入。 2. **性能瓶颈**:超长SQL语句往往包含大量嵌套查询或条件判断,这会直接影响到查询效率,...

    自动生成SQL语句_C#_sql_

    1. 动态SQL:在C#中,你可以使用字符串操作生成动态SQL语句,这在需要根据条件生成不同结构的SQL时非常有用。例如,你可以根据用户的选择决定是否在WHERE子句中包含某个条件。 2. 存储过程:另一种方法是使用SQL ...

    SQLTracker,抓取sql语句的工具

    1. **SQL捕获**:它可以实时捕获应用程序在运行过程中发送到数据库的所有SQL语句,这对于排查性能问题、理解业务逻辑或优化数据库操作极其有价值。 2. **无源码需求**:SQLTracker的一大亮点是无需源代码就能工作,...

    查看LINQ生成SQL语句的几种方法

    在实际开发中,有时我们需要了解LINQ查询是如何转换为SQL语句的,以便于调试和优化性能。以下将详细介绍几种查看LINQ生成SQL语句的方法。 1. **Debug.WriteLine()** 在使用LINQ查询时,可以利用`Debug.WriteLine()...

    非常好用的SQL Server 抓取SQL语句工具HOOK

    非常好用的SQL Server 抓取SQL语句工具HOOK 非常好用的SQL Server 抓取SQL语句工具HOOK 非常好用的SQL Server 抓取SQL语句工具HOOK 非常好用的SQL Server 抓取SQL语句工具HOOK

Global site tag (gtag.js) - Google Analytics