zoukankan      html  css  js  c++  java
  • SQL基本操作(工作中够用了)

    以下文章内容都是我自己从平时学习SQL语言时整理而来,写这篇文章是希望我或大家在使用能更方便的查询。
    如果有不完整或不正确的地方请大家指出~谢谢大家

    基本SQL操作

    创建数据库

    CREATE DATABASE DB_name
    

    插入数据

    INSERT INTO DB_name   
    VALUE{value1,value2}
    

    更新数据

    UPDATE table_name
    SET Age=11
    WHERE ID='123'
    

    Alter

    Alter 是不对表格本身内容修改的,对表格框架修改。

    ALTER table_name
    ADD state VARCHAR(2)  #增添新列
    
    ALTER table_name
    DROP COLUMN state    #删除列
    
    ALTER table_name
    MODIFY id INT       #把id列改成数字类型
    
    ALTER table_name    #修改列名
    CHANGE 'id' 'student_id' VARCHAR(5)
    

    逻辑运算符

    1.LIKE
    WHERE url LIKE '%google%' #字符串匹配,在url中寻找中间字符串为google的url,%代表0或多个字符

    2.IN
    WHERE id IN (1001,1002) #表示寻找id为1001,1002的行

    3.NOT
    NOT 与 LIKE IN连用,表示否定

    主键(PK): 表中唯一的一列,这一列中不可重复。 标志列。
    外键(FK):外键是另一个表的主键
    注意:两个表就是通过主外键进行连接。

    JOIN

    1. 多表链接:
    INNER JOIN:

     FROM A
     JOIN B
     ON  A.FK =B.PK  #合集包括A、B表单共有的
    

    LEFT JOIN:

     FROM A
     LEFT JOIN B
     ON  A.FK =B.PK  #合集只包括A、B表单共有的,和A表中没在B中匹配到的行
    

    RIGHT JOIN:

     FROM A
     RIGHT JOIN B
     ON  A.FK =B.PK  #合集只包括A、B表单共有的,和B表中没在A中匹配到的行
    

    Union:
    竖向连接两张表,两张表的列数必须相同。

    2. 别名:
    FROM tablename AS t1
    JOIN tablename2 AS t2 # AS可省略

    3. 外连接 OUTER JOIN = FULL OUTER JOIN :
    外连接,它将返回内连接的结果,以及被连接的表格中没有匹配的行。

    4. ON子句
    ON A.FK=B.PK #A表的外键和B表的主键

    聚合函数

    1. NULL
      NULL是一种数据类型,表示 SQL 中没有数据;
      查询时:WNERE name IS NULL #查询name为NULL值的行

    2. COUNT()
      COUNT(*) #一行记录中只要一列有数据,则计数
      COUNT(COLUMN_name) #空值不计数

    3. SUM()
      sum(col_name) #垂直聚合,只对数值进行计算总和,SUM 将忽略 NULL 值,当做0处理

    4. MAX() MIN()
      MAX() #返回最大值
      MIN() #返回最小值
      它们都可以用在非数字列上。MIN 将返回最小的数字、最早的日期或按字母表排序的最之前的非数字值,具体取决于列类型

    5. AVG()
      AVG() #返回平均值,只对值列;忽略分子和分母中的 NULL 值;

    GROUP BY函数

    GROUP BY() #在使用聚合函数时,对关键列进行分组;如果SELECT语句中有字段没进行聚合,则必须写入GROUP BY函数
    GROUP BY 始终在 WHERE 和 ORDER BY 之间

    DISTINCT函数

    DISTINCT 看做仅返回特定列的唯一值的函数 ?后面的行会怎么出现

    HAVING()

    HAVING SUN(money)>10000 # 过滤聚集列,当筛选条件有聚合函数时,用HAVING

    日期时间函数

    DATE_TRUNC:SELECT DATE_TRUNC('month',DATE) (如果数据2015.01~2017.12,行会把每年的每月都列出来) 使你能够将日期截取到日期时间列的特定部分。常见的截取依据包括日期、月份 和 年份。

    DATE_PART: SELECT DATE_PART('month',DATE) (如果数据2015.012017.12,行只会列出0112个月份,但每个月份是包含所有年的)可以用来获取日期的特定部分,但是注意获取 month 或 dow 意味着无法让年份按顺序排列。而是按照特定的部分分组,无论它们属于哪个年份。

    CASE 语句

    CASE WHEN condition THEN result #进行条件选择,分情况生成新列
    ELSE result END ;
    注意:
    1) CASE 语句始终位于 SELECT 条件中。
    2) CASE 必须包含以下几个部分:WHEN、THEN 和 END。ELSE 是可选组成部分,用来包含不符合上述任一 CASE 条件的情况。
    3)你可以在 WHEN 和 THEN 之间使用任何条件运算符编写任何条件语句(例如 WHERE),包括使用 AND 和 OR 连接多个条件语句。
    4)你可以再次包含多个 WHEN 语句以及 ELSE 语句,以便处理任何未处理的条件。

    总体顺序:

      SELECT
            CASE WHEN condition THEN result
            ELSE result END ;
      FROM
      JOIN
      ON
      WHERE
      GROUP BY
      HAVING      #有WHERE时不需要用HAVING
      ORDER BY
      LIMIT
    

    高级SQL语句

    子查询

    就是查询语句嵌套查询语句
    格式

    SELECT *
    FROM (SELECT id,channel, COUNT(*) as events
          FROM web_events
          GROUP BY 1,2
          ORDER BY 3 DESC) sub
    GROUP BY channel
    ORDER BY 2 DESC;
    

    注意:在条件语句中编写子查询时,不能包含别名。

    WITH语句

    把要嵌套的查询语句先定义在开头,后面直接带入

    WITH table1_name AS (SELECT *
                          FROM 1 ),
         table2_name AS (SELECT *
                          FROM 2)
    
    SELECT  *
    FROM table1
    JOIN table2
    ON   table1.id=table2.id
    

    注意:在使用 WITH 创建多个表格时,需要在每个表格后面加一个逗号,但是在引向最终查询的最后一个表格后面不需添加

    SQL数据清理

    1.清理和重新整理混乱的数据。
    1. LEFT(): left函数可以从字符串左侧输出一定数量的字符 。

    2. RIGHT(): right函数则是从右侧 。

    3. LENGTH(): 获取字符串的长度。

    4. POSITION():获取字符和列,并提供该字符在每行的索引。第一个位置的索引在 SQL 中是1
      例:POSITION(',' IN city_state) 获取逗号的索引。

    5. STRPOS(): 和 POSITION 提供的结果相同,但是语法不太一样.
      例:STRPOS(city_state, ‘,’)

    6. LOWER(): 把字符串全变成小写

    7. UPPER(): 把字符串全变成大写

    8. CONCAT(first_name, ' ', last_name):拼接两列字符串。
      或者使用双竖线:first_name || ' ' || last_name, 也可以达到相同效果。
      注意:POSITION 和 STRPOS 都区分大小写,因此查找 A 的位置与查找 a 的结果不同。

    2.将列转换为不同的数据类型。
    1. TO_DATE:将英文月份改成数字,DATE_PART('month', TO_DATE(month, 'month'))
      例:将'JULY' 改成 '6'

    2. CAST(): 将拼接成的字符串'2014-9-19' 变成时间类型'2014-09-19'.

    3. :: :两个冒号是对数据列转变数据类型。
      例 age::INT,将age字符串类型转换成数字类型

    3.处理 NULL 的技巧
    1. COALESCE():COALESCE来处理NULL值,COALESCE('name','0')把name列中空值变成0
      这样 COUNT()、AVGAGE()函数就可以包含其计算。
  • 相关阅读:
    Lock、synchronized和ReadWriteLock,StampedLock戳锁的区别和联系以及Condition
    Spring Boot + Spring Cloud 实现权限管理系统 后端篇(十一):集成 Shiro 框架
    Spring Cloud之路:(七)SpringBoot+Shiro实现登录认证和权限管理
    XSS过滤JAVA过滤器filter 防止常见SQL注入
    shiro jwt 构建无状态分布式鉴权体系
    JSON Web Token 入门教程
    C#实现WinForm DataGridView控件支持叠加数据绑定
    C#实现WinForm窗体逐渐显示效果
    定义通用的可通过lambda表达式树来获取属性信息
    C#实现通用数据过滤窗体
  • 原文地址:https://www.cnblogs.com/xubin97/p/10372798.html
Copyright © 2011-2022 走看看