• SQL基本语句


    1 DISTINCT

    不同值,作用于所有列

    比如,table表长下面这样

    ABC
    121
    131
    122
    select distinct A,B 
    from table
    
    • 1
    • 2
    AB
    12
    13
    select A,B 
    from table
    
    • 1
    • 2
    AB
    12
    13
    12

    2 LIMIT

    -- 取前n行 
    select *
    from table
    limit n 
    
    -- 取第m行起的n行 
    select *
    from table
    limit n offset m
    
    -- 取第m行起的n行 
    select *
    from table
    limit n,m
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    3 order by n

    按select的第n个列排序:order by n

    -- 按select的第1个列排序,也即按A排序
    select A,B
    from table
    order by 1
    
    升序(默认)ASC
    order by 1 ASCorder by 1
    
    降序:DESC
    order by 1 DESC
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    4 where中的符号

    比较、BETWEEN、NULL
    符号意义
    <>不等于
    !<不小于
    !>不大于
    BETWEEN A AND B在A,B之间
    IS NULL是NULL
    where中何时使用引号?

    字符串比较时用

    IN
    1. 取一组由括号分隔,在圆括号里的值,比or快
    2. 可以包含其他select语句
    1.第一种用法
    select * 
    from table
    where A in (1,2)
    
    2.第二种用法
    select * 
    from table
    where A in (select ...)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    NOT

    否定跟在其后的条件

    -- 找到A不为1的行
    select * 
    from table
    where not A=1
    
    • 1
    • 2
    • 3
    • 4

    5 通配符

    %

    匹配任何字符出现任意次数(0-n次),但不能匹配NULL

    'Fish%'可匹配:

    匹配不匹配
    Fish123fish
    FishasdfFish

    '%'唯一不匹配:NULL

    _

    下划线:匹配任何字符出现一次

    []

    指定字符集

    例子解释匹配
    [YO]%匹配以Y或O为开头的词Yeah,Oh,Y,O
    [^YO]%匹配不以Y或O为开头的词are,she,he

    6 函数

    函数解释
    UPPER()转大写
    LOWER()转小写
    LEFT()左边字符
    RIGHT()右边字符
    LENGTH()长度
    SUBSTR()提取字符串组成
    SOUNDEX()返回念起来的样子
    YEAR()取年份
    ABS()绝对值
    EXP()指数
    PI()pi值
    SQRT()平方根
    COS()cos
    SIN()sin
    TAN()tan

    7 汇总数据

    聚集函数

    函数解释
    AVG()平均值
    COUNT()计算行数
    MAX()最大值
    MIN()最小值
    SUM()取和

    用上DISTINCT

    avg(price) 所有价值的平均
    avg(distinct price) 不同价值的平均
    
    • 1
    • 2
    1. DISTINCT不能用在count()
    2. DISTINCT用在max,min前无意义

    8 group by

    基本使用

    • 按列A分组,NULL会作为一个分组:group by A
      在group by时,用having
    • where是分组前过滤
    • having是分组后过滤

    select子句顺序

    • select
    • from
    • where
    • group by
    • having
    • order by

    9 子查询

    嵌套在其他查询中的查询

    1. where A in (select …)
    2. select A,B,(select …) as C

    10 联结表

    10.1 简单联结表

    1. 用where
    from tableA,tableB
    where tableA.a=tableB.a
    
    • 1
    • 2
    1. INNER JOIN
    from tableA
    inner join tableB
    on tableA.a=tableB.a
    
    • 1
    • 2
    • 3

    10.2 高级联结表

    自联结

    相同的两个表的联结;
    为了防止歧义,最好用别名。

    最好用自联结,而避免使用子查询

    自然联结

    至少有一列不止出现在一个表中

    外联结

    联结包含在相关表中没有关联的行

    联结种类语句解释
    内联结INNER JOIN … ON …
    左外联结LEFT OUTER JOIN … ON …左边的表 all in
    右外联结RIGHT OUTER JOIN … ON …右边的表 all in
    全外联结FULL OUTER JOIN … ON …左右的表全 all in

    11 组合查询 UNION

    组合数条SQL查询

    SELECT ...
    UNION
    SELECT ...
    
    • 1
    • 2
    • 3
    • 规则
      • 组合两条或以上的语句
      • 每个查询必须包含相同的列-表达式-聚集函数(次序不需相同)
      • 数据类型不必相同,但需兼容
      • 包含或取消重复的行,除非UNION ALL
    • 若需要排序
      • order by:对所有排

    12 插入数据 INSERT

    插入整行

    insert into [tablename]
    values('xxx','xxx',...)
    
    • 1
    • 2

    更安全的写法

    INSERT INTO [tablename](attrA,attrB,...)
    values('xxx','xxx',...)
    
    • 1
    • 2

    插入部分行

    插入检索出的数(可方便地插多行)

    insert into [tablename1](attrA,attrB,...)
    select attrA,attrB,...
    from [tablename2]
    
    • 1
    • 2
    • 3

    从一表复制到新表

    create table [newtablename] 
    select *
    from [oldtablename]
    
    • 1
    • 2
    • 3

    13 更新数据 UPDATE

    使用时要小心,稍不注意,更新所有行

    UPDATE [tablename]
    SET ...=xxx
    WHERE ...
    
    • 1
    • 2
    • 3

    14 删除数据 DELETE

    删除部分行

    delete from [tablename]
    where ...
    
    • 1
    • 2

    删除所有行

    truncate [tablename]
    
    • 1

    15 创建和操纵表

    15.1 创建表

    create table [tablename]
    {
    -- [attrname] [type]  null/not null,
    	Attr_A  char(num)  null,
    	Attr_B  decimal(m,n)  not null,
    	Attr_C  varchar( )  null
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    注意点:
    ①null为default
    ②创造新表时,指定的表名必须不存在,否则会报错
    ③只有not null的列可作为主键
    ④null和’'不一样

    15.2 加列和删列 alter table

    给已有表加列

    alter table [tablename]
    add [attrname] [type];
    
    • 1
    • 2

    给已有表删列

    alter table [tablename]
    drop column [attrname];
    
    • 1
    • 2

    15.3 删除表

    drop table [tablename]
    
    • 1

    15.4 重命名表

    RENAME [oldtablename] [newtablename] 
    
    • 1

    16 使用视图

    视图,是虚拟的表,只包含使用时动态检索数据的查询

    16.1 创建视图

    create view [viewname] as ...
    select ....
    
    • 1
    • 2

    16.2 取消视图

    drop view [viewname];
    
    • 1

    17 事务

    17.1 管理事务处理

    事务:指一组SQL语句
    回退:指撤销指定SQL语句的过程
    提交:指将未存储的SQL结果写入数据库表
    保留点:指事务处理中设置的临时占位符,可对它发布回退

    17.2 控制事务处理

    -- 开始事务
    begin transaction
    -- 提交事务
    commit transaction
    
    • 1
    • 2
    • 3
    • 4

    17.3 使用rollback

    可尝试下列语句查看效果

    delete from [tablename];
    rollback;
    
    • 1
    • 2

    17.4 使用commit

    作用:进行明确的提交

    17.5 使用保留点

    -- 使用格式: savepoint [savepoint_name]
    savepoint delete1;
    
    • 1
    • 2

    回退到保留点

    -- 使用格式: rollback to [savepoint_name]
    rollback to delete1;
    
    • 1
    • 2
  • 相关阅读:
    《第一堂棒球课》:王牌捕手·棒球2号位
    踩坑日记 uniapp 底部 tabber遮挡住购物车结算
    从源码看vue(v2.7.10)的computed的实现原理
    从零学习Python:json和文件操作
    【Django】model模型—模型继承
    【软考】14.2 统一建模语言UML/事务关系图
    mybatis批量插数据
    【单片机毕业设计】【mcuclub-jj-052】基于单片机的电脑散热底座的设计
    电脑重装系统
    vue和react的区别
  • 原文地址:https://blog.csdn.net/twi_twi/article/details/126601798