• Java SQL基础


    SQL基础

    1、DataBase

    • 创建:CREATE DATABASE DATABASE_NAME ;
    • 使用:USE DATABASE_NAME ;
    • 删除:DROP DATABASE DATABASE_NAME ;

    2、Table

    创建

    CREATE TABLE TABLE_NAME (
        COLUMNS TYPES
        ......
    ) [CHARACTER SET UTF8] ;

    删除

    1) TRUNCATE 。清空表内容,保留表结构。效率非常高,且不记录日志。

    TRUNCATE TABLE TABLE_NAME ;

    2) DELETE 。删除表内容,按条件删除。若无删除条件,则将表内容全部删除。不影响表结构。很少使用。

    -- 按条件删除指定内容,使用十分至少,一般由改状态字段来实现伪删除(set isDelete=true)
    DELETE FROM TABLE_NAME WHERE CONDITION ;
    -- 清空表,与TRUNCATE作用相同,但将记录日志,且效率低
    DELETE FROM TABLE_NAME ;

    3) DROP 。删除表内容及表结构。

    DROP TABLE TABLE_NAME;

    表结构

    查看

    DESC TABLE_NAME ;

    修改

    -- 增加字段
    ALTER TABLE TABLE_NAME ADD COLUMNS TYPES, ... ;
    -- 修改字段
    ALTER TABLE TABLE_NAME MODIFY COULMNS TYPES, ... ;
    -- 删除字段
    ALTER TABLE TABLE_NAME DROP COLUMNS;

    增加

    INSERT INTO TABLE_NAME (COLUMNS TYPES , ...) VALUES (VALS , ...) ;

    删除

    DELETE FROM TABLE_NAME WHERE CONDITION ;

    修改

    UPDATE TABLE_NAME SET COLUMN_NAME=VAL WHERE CONDITION ;

    3、查询SELECT

    基本查询语句

    -- 查询表所有字段内容
    SELECT * FROM TABLE_NAME ;
    
    -- 按条件查询所有字段内容
    SELECT * FROM TABLE_NAME WHERE CONDITION ;
    
    -- 按条件查询指定字段内容
    SELECT COLUMNS, ... FROM TABLE_NAME WHERE CONDITION ;

    条件查询

    -- IN 查询, 判断字段值是否在指定内容之中
    SELECT * FROM TABLE_NAME WHERE COLUMN_NAME IN (VAL1, VAL2, ...) ;
    
    -- EXISTS 查询,与 IN 效果类似,EXISTS之内为一个SELECT子查询,并将外部字段作为参数传入内部查询
    -- EXISTS函数中参数只要有结果,则返回TRUE
    SELECT * FROM TABLE_NAME WHERE EXISTS (SELECT * FROM SUB_TABLE WHERE TABLE_COLUMN=SUB_TAB_COLUMN) ;

    模糊查询

    -- LIKE + 通配表达式 实现模糊查询
    SELECT * FROM TABLE WHERE A LIKE "N%" ;

    SQL常用通配符:

    单个占位符: _

    匹配0到N个字符: %

    匹配所有: *

    子查询:将查询结果作为一个表或字段值成为SELECT、IN等的操作对象

    -- SELECT 子查询,注意标要取别名
    SELECT * FROM (SELECT A, B, C FROM TABLE1)D ;
    
    -- WHERE 子查询
    SELECT * FROM TABLE1 WHERE A=(SELECT MAX(B) FROM TABLE2) ;
    
    -- IN 子查询
    SELECT * FROM TABLE1 WHERE A IN (SELECT B FROM TABLE2) ;

    联合查询

    -- UNION ALL 查询,将多个查询结果进行拼接,使之在同一个表中展示
    -- 唯一条件:各查询字段数必须一致,否则将报错
    SELECT A, B, C FROM TABLE1 UNION ALL SELECT D, E, F FROM TABLE2 ;
    
    -- 当某个字段数不足时,通过拼接 '' 空字段等使之字段数相同
    SELECT A, B, C FROM TABLE1 UNION ALL SELECT D, E, '' FROM TABLE2 ;

    分组查询

    -- 分组查询: 即将查询结果按字段进行分组
    -- WHERE 条件需放在分组查询前
    SELECT * FROM TABLE1 WHERE CONDITIONS GROUP BY A, B ;
    
    -- 对分组查询结果进行筛选时,WHERE条件将不再起作用,WHERE为查询时过滤,HAVING为查询后过滤,此时用到HAVING 关键字
    SELECT * FROM TABLE1 WHERE CONDITIONS GROUP BY A, B HAVING CONDITIONS;

    常用分组聚合函数

    MAX()   MIN()  AVG()  SUM()  COUNT()

    COUNT函数将参数所有非空值进行统计,返回统计值

    当不分组时,函数的默认参数为所有对象的值

    排序

    SELECT * FROM TABLE1 WHERE CONDITION GROUP BY A HAVING CONDITION ORDER BY B ;

    默认为升序排序 ASC

    降序排序

    SELECT * FROM TABLE1 WHERE CONDITION GROUP BY A HAVING CONDITION ORDER BY B DESC ;

    分页查询

    SELECT * FROM TABLE ORDER BY A LIMIT M, N ;

    LIMIT后跟一个或者两个参数。当参数为一个时,代表限制前N条数据被查询。当参数为两个时,第一个参数为偏移量,第二个参数为被查询的条目数,即展示内容为第 m+1至第 m+n 条。

    通过分页查询与排序的结合,可以轻易取得排在第n位的数据: ORDER BY A LIMIT N-1, 1 ;

    连接查询

    内连接

    取所被连接表的交集

    SELECT * FROM TABLE_A INNER JOIN TABLE_B ON A_ID=B_ID ;

    被连接的两表:TABLE_A 、TABLE_B

    连接条件:A_ID = B_ID

    左连接

    取所连接表的左表值

    SELECT * FROM TABLE_A LEFT JOIN TABLE_B ON A_ID=B_ID ;

    假如A表共有18行,但可以与B表进行关联内容(A_ID=B_ID)只有15行,如果是INNER JOIN内连接,所得连接结果为15行,但左连接取值为左表的所有值,所以连接结果仍为18行,且右表所没有的3行将展示为空(NULL)

    右连接

    与左连接相类似,取值为右表所有值

    多表关联

    SELECT * FROM TABLE_A  A INNER JOIN TABLE_B B ON A.ID=B.ID INNER JOIN TABLE_C C ON C.C_ID=B.C_ID;
    -- 连接的WHERE实现
    SELECT * FROM TABLE_A A, TABLE_B B, TABLE_C C WHERE A.ID=B.ID AND B.C_ID=C.C_ID;
  • 相关阅读:
    php中字符与字节的区别
    sql把两值之和当作条件进行查询
    Intel® Neural Compute Stick 2
    使用OpenCV的VideoCapture 读取.mp4文件时出现以下错误:Unable to stop the stream: Inappropriate ioctl for device
    更换Raspbian Buster源
    OpenCV之cv2函数 2
    OpenCV中cv2的用法
    OpenVINO 对象识别 real_time_object_detection Movidius
    树莓派和计算棒实现图形识别 RaspBerry Pi4 with OpenVino and Movidius
    树莓派无线网卡老是掉线
  • 原文地址:https://www.cnblogs.com/JuanF/p/9502795.html
Copyright © 2020-2023  润新知