zoukankan      html  css  js  c++  java
  • Database | DQL&DML

    SQL(Structured Query Language,结构化查询语言),面向集合的描述性非过程化语言,用于访问和处理关系数据库的标准语言。
    SQL 是一种 ANSI 标准,所以存在多种不同版本的 SQL 语言。但就 SQL 查询和更新而言,Oracle、MySql 等数据库系统的实现大同小异,基本可以互通移植。

    • DQL(Data Query Language,数据查询语言),即 SQL 查询,DQL 语句即 SELECT 查询块。
    • DML(Data Manipulation Language,数据操作语言),即 SQL 更新,DML 语句即 INSERT 插入、UPDATE 更新、DELETE 删除。

    1. SQL查询★

    SELECT 语句的一般格式:

    SELECT [DISTINCT] <目标列表达式> [AS] <别名>
    FROM <表/视图> [AS] <别名>
    [WHERE <查询条件>]
    [GROUP BY <分组列> [HAVING <分组条件>]]
    [ORDER BY <排序列> [ASC|DESC]];
    

    1.1 单表查询

    1.1.1 简单查询:SELECT

    SELECT [DISTINCT] <目标列表达式> [AS] <别名>
    FROM <表/视图> [AS] <别名>
    

    1.查询全部列:使用通配符*实现查询全部。

    SELECT *
    FROM <表/视图>
    

    2.去除重复行:DISTINCT

    SELECT DISTINCT <目标列>
    FROM <表/视图>
    

    3.指定别名(Alias):

    <列名/表名> <别名>
    <列名/表名> AS <别名>
    

    1.1.2 查询条件:WHERE

    SELECT <目标列表达式> [AS] <别名>
    FROM <表/视图> [AS] <别名>
    WHERE <查询条件>
    

    查询条件

    1.比较运算:><=>=<=!=/<>

    2.确定范围:BETWEEN...AND...

    <列名> [NOT] BETWEEN <下限> AND <上限>
    

    3.确定集合:IN

    <列名> [NOT] IN (值1, 值2...)
    

    4.模式匹配:LIKE

    <列名> [NOT] LIKE '<匹配模式>'
    
    通配符 描述
    % 替代一个或多个字符
    _ 替代一个字符
    [charlist] 字符序列中的任何单一字符
    [!charlist]
    [^charlist]
    不在字符序列中的任何单一字符

    5.空值:IS NULL

    <列名> IS [NOT] NULL
    

    6.多重条件(逻辑运算):ANDORNOT

    <条件表达式> AND <条件表达式>
    <条件表达式> OR <条件表达式>
    NOT <条件表达式>
    

    AND优先级>OR优先级

    1.1.3 查询排序:ORDER BY

    ORDER BY 子句将查询结果按指定列进行升序 (ASC)降序 (DESC) 排序。

    ORDER BY <排序列> [ASC|DESC]
    

    ORDER BY 子句只能对最终查询结果排序。不能对内层查询使用。

    1.1.4 聚集函数

    聚集函数 描述
    COUNT(*) 统计记录行数
    COUNT([DISTINCT]<列名>) 统计列中值个数
    SUM([DISTINCT]<列名>) 计算列值总和
    AVG([DISTINCT]<列名>) 计算列值平均值
    MAX([DISTINCT]<列名>) 求列值最大值
    MIN([DISTINCT]<列名>) 求列值最小值

    注意:
    ①只有COUNT(*)计算空值,其余聚集函数都跳过空值。
    ②WHERE 子句中不能用聚集函数,聚集函数只能用于 SELECT 子句和 GROUP BY 中的 HAVING 子句。

    1.1.5 分组查询:GROUP BY

    GROUP BY 子句将查询结果按某一列或多列的值分组,值相等的为一组。

    GROUP BY <分组列> HAVING <分组条件>
    

    分组的目的是为了细化聚集函数的作用对象,分组后聚集函数将作用于每一个组,即每一组都有一个聚集函数值。

    WHERE 子句与 HAVING 子句区别
    ①WHERE 子句作用于基本表/视图,不能使用聚集函数。
    ②HAVING 子句作用于组。

    1.2 连接查询

    连接查询:使用连接运算符实现多表查询

    1.2.1 交叉连接

    交叉连接:笛卡儿积。

    ①隐式连接:

    SELECT <目标列>
    FROM <表1>, <表2>
    

    ②使用 JOIN 连接:

    SELECT <目标列>
    FROM <表1> CROSS JOIN <表2>
    

    消除笛卡尔积:使用关联字段。

    1.2.2 内连接

    内连接:查询与连接条件匹配的所有行,但不去除重复属性列。

    ①隐式连接:

    SELECT <目标列>
    FROM <表1>, <表2>
    WHERE <表1>.<关联属性> <比较运算符> <表2>.<关联属性>
    

    ②使用 JOIN 连接:

    SELECT <目标列>
    FROM <表1> [INNER] JOIN <表2> 
    ON <表1>.<关联属性> <比较运算符> <表2>.<关联属性> 
    

    1.等值连接

    等值连接:当比较运算符为=时的内连接,不去除重复属性列。

    ①隐式连接:

    SELECT <目标列>
    FROM <表1>, <表2>
    WHERE <表1>.<关联属性> = <表2>.<关联属性>
    

    ②使用 JOIN 连接:

    SELECT <目标列>
    FROM <表1> [INNER] JOIN <表2> 
    ON <表1>.<关联属性> = <表2>.<关联属性>
    

    2.非等值连接

    非等值连接:当比较运算符不为=时的内连接,不去除重复属性列。

    ①隐式连接:

    SELECT <目标列>
    FROM <表1>, <表2>
    WHERE <表1>.<关联属性> <比较运算符> <表2>.<关联属性>
    

    ②使用 JOIN 连接:

    SELECT <目标列>
    FROM <表1> [INNER] JOIN <表2> 
    ON <表1>.<关联属性> <比较运算符> <表2>.<关联属性>
    

    3.自身连接

    自身连接:一个表与其自身进行等值连接。

    ①隐式连接:

    SELECT <目标列>
    FROM <表> FIR, <表2> SEC
    WHERE FIR.<关联属性> = SEC.<关联属性>
    

    ②使用 JOIN 连接:

    SELECT <目标列>
    FROM <表> FIR [INNER] JOIN <表2> SEC
    ON FIR.<关联属性> = SEC.<关联属性>
    

    4.自然连接

    自然连接:去除重复属性列的等值连接,消除了笛卡儿积。

    SELECT *
    FROM <表1> NATURAL JOIN <表2>
    

    1.2.3 外连接

    外连接:主表内容全部显示。未匹配到,用NULL填充。

    1.左外连接

    左外连接:以左表为主表,右表为从表。即使右表中没有匹配,也返回左表所有行。

    SELECT <目标列>
    FROM <表1> LEFT [OUTER] JOIN <表2>
    ON <表1>.<关联属性> = <表2>.<关联属性>
    

    Oracle特有写法:从表以 (+) 表示。

    SELECT <目标列>
    FROM <表1>, <表2>
    WHERE <表1>.<关联属性> = <表2>.<关联属性>(+)
    

    2.右外连接

    右外连接:以右表为主表,左表为从表。即使左表中没有匹配,也返回右表所有行。

    SELECT <目标列>
    FROM <表1> RIGHT [OUTER] JOIN <表2>
    ON <表1>.<关联属性> = <表2>.<关联属性>
    

    Oracle特有写法:从表以 (+) 表示。

    SELECT <目标列>
    FROM <表1>, <表2>
    WHERE <表1>.<关联属性>(+) = <表2>.<关联属性>
    

    3.全外连接

    全外连接:返回左表和右表中的所有数据。未匹配字段显示为NULL。

    SELECT <目标列>
    FROM <表1> FULL [OUTER] JOIN <表2>
    ON <表1>.<关联属性> = <表2>.<关联属性>
    

    1.2.4 指定关联字段

    ①隐式连接-使用WHERE子句指定关联字段:

    SELECT <目标列>
    FROM <表1>, <表2>
    WHERE <表1>.<关联属性> <比较运算符> <表2>.<关联属性>
    

    ②JOIN连接-使用ON指定关联字段:

    SELECT <目标列>
    FROM <表1> JOIN <表2> 
    ON <表1>.<关联属性> <比较运算符> <表2>.<关联属性>
    

    ③JOIN连接-使用USING指定关联字段:

    SELECT <目标列>
    FROM <表1> JOIN <表2> 
    USING (<关联属性>)
    

    USING等价于ON指定等值同名的关联字段。

    1.3 子查询

    查询块:临时表

    SELECT <目标列>
    FROM <表>
    WHERE <查询条件>
    

    1.3.1 嵌套查询

    嵌套查询:将一个查询块嵌套在另一个查询块的WHERE/HAVING条件子句中。

    SELECT <目标列>
    FROM <表>
    WHERE <列名> <运算符/谓词> 
    	(SELECT <目标列>
    	 FROM <表>
    	 WHERE <查询条件>)
    

    1.带有比较运算符的子查询

    当子查询返回单值时,可以使用比较运算符连接。

    SELECT <目标列>
    FROM <表>
    WHERE <列名> <比较运算符>
    	(SELECT <目标列>
    	 FROM <表>
    	 WHERE <查询条件>)
    

    比较运算符:><>=<=!=<>=

    2.带有IN的子查询

    当子查询返回一个集合时,一般使用IN进行连接。IN在嵌套查询中最为常用。

    SELECT <目标列>
    FROM <表>
    WHERE <列名> IN
    	(SELECT <目标列>
    	 FROM <表>
    	 WHERE <查询条件>)
    

    3.带有ANY或ALL的子查询

    SELECT <目标列>
    FROM <表>
    WHERE <列名> <比较运算符>ANY
    	(SELECT <目标列表达式>
    	 FROM <表>
    	 WHERE <查询条件>)
    

    <比较运算符>ALL:与子查询结果的所有值进行比较运算。
    <比较运算符>ANY:与子查询结果的任意某个值进行比较运算。

    1.3.2 派生查询

    派生查询:将一个查询块嵌套在另一个查询块的FROM子句中,子查询生成的派生表成为了主查询的查询对象。

    SELECT <目标列>
    FROM <表>, (SELECT <目标列> FROM <表> WHERE <查询条件>) [AS] <别名>
    WHERE <查询条件>
    

    注意:必须为子查询生成的派生表指定别名。

    1.4 集合查询

    集合查询:多个查询结果进行集合运算。

    SELECT <目标列> FROM <表> WHERE <查询条件>
    	<集合运算谓词>
    SELECT <目标列> FROM <表> WHERE <查询条件>
    

    注意:参加集合操作的各查询结果的列数必须相同,对应项的数据类型也必须相同。

    集合运算 谓词
    并集(去重复) UNION
    并集(不去重复) UNION ALL
    交集 INTERSECT
    差集 MINUS

    2. SQL更新

    2.1 SQL插入:INSERT

    INSERT INTO <表> (列名, 列名...) VALUES(值, 值...)
    

    INSERT简写-按表的列顺序插入一行数据:

    INSERT INTO <表> VALUES(值, 值...)
    

    2.2 SQL修改:UPDATE

    UPDATE <表> SET 列名 = 值, 列名 = 值... 
    [WHERE <修改条件>]
    

    2.3 SQL删除:DELETE

    DELETE FROM <表> 
    [WHERE <删除条件>]
    
  • 相关阅读:
    利用 FFmpeg 和 ImageMagick, AVI 转 GIF(不失真)
    TinyMCE textarea 输入框外部程序动态修改方法
    eclipse快速向下复制行
    ${factoryList }后面有空格不影响
    pre标签
    js备忘录_2
    eclipse 中 大小写切换:ctrl+shift+x 转为大写 ctrl+shift+y 转为小写
    js备忘录_1
    缓存
    myeclipse bug
  • 原文地址:https://www.cnblogs.com/liziczh/p/9353041.html
Copyright © 2011-2022 走看看