菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
115
0

SQL基础

原创
05/13 14:22
阅读数 40793

SQL基础:


前言

SQL基础整理

一、rownum行查找

  • rownum

    展示指定行的数据信息:(展示行数小于固定数值的行的列名的信息)

  • 用法:

    select 列名 from 表名 where rownum <= 数值
    (等价与MySQL中的 LIMIT 和 SQL SELECT 中的TOP)

二、LIKE(模糊查询)

  • 作用:

    LIKE操作符作用与where中的搜索条件

  • 用法:

    select 列名1 from 表名 where 列名2 LIKE 检索条件
    (展示表中列名2等于检索条件的列名1的数据信息)
    注:一般LIKE与通配符"%"一起使用(模糊查询)

  • 用法1:

    select * from 表名 where 列名 LIKE ‘%A’
    (展示表中某一列中以A结尾的所有数据信息)

  • 用法2:

    select * from 表名 where 列名 LIKE ‘%A%’
    (展示表中某一列中包含A的所有数据信息)

  • 用法3:

    select * from 表名 where 列名 LIKE ‘A%’
    (展示表中某一列中以A开头的所有数据信息)

三、通配符

符号作用
%代替一个或多个字符
_代替一个字符
[charlist]字符列中的任何单一字符
[^charlist] 或者 [!charlist]不在字符列中的任何单一字符
  • 用法:

    通配符"%" 和 “_” 一般在LIKE中使用
    例如:
    select * from 表名 where 列名 like ‘%A%’
    select * from 表名 where 列名 like ‘C_A_S’

    通配符[charlist]

    例:select * from 表名 where 列名 like ‘[ASD]%’ (查询表中某列以A或S或D开头的列的数据信息)

通配符[!charlist]
例:
select * from 表名 where 列名 like ‘[!ASD]%’
(查询表中某列不以A或S或D开头的列的数据信息)

四、in操作符

  • 作用:

    in操作符作用于where条件中规定多个值

  • 用法:

    select * from 表名 where 列名 in (值1,值2,值3,…)
    (查询表中某列的值等于 ‘值1’ 或 ‘值2’ 或 ‘值3’…的数据信息)

五、between…and…操作符

  • 作用:

    between操作符(一般用法为between…and)(包含前包含后)
    between操作符作用与where条件中,选取介于两个值之间的数据信息(可以是数值,文本或日期)

  • 用法:

    select * from 表名 where 列名 between 值1 and 值2
    (查询表中某列数据的值在 ‘值1’ 和 ‘值2’ 之间的数据信息)
    如果是只查询数字类型或者字符类型的数据,包前包后
    select * from test_hsj where id between 1 and 5;

  • 时间用法:

    用法1:

    select * FROM UPLAN WHERE CREATE_DATE 
    BETWEEN to_date('2021-01-04 00:00:00','yyyy-mm-dd hh24:mi:ss') 
    AND to_date('2021-01-05 11:39:07','yyyy-mm-dd hh24:mi:ss')
    

    如果是只查询某两个月之间的数据,会默认从每个月的1号开始查,包前包后

    用法2:

    select * from test_hsj where regdate between 
    to_date('2015-05','yyyy-MM') and to_date('2015-06','yyyy-MM')
    

    如果是只查询某两年之间的数据,会默认从1月1日开始查,包前包后

    用法3:

    select * from test_hsj where regdate between 
    to_date('2015','yyyy') and to_date('2016','yyyy')
    

    注1:
    使用通配符时’2021-01-05%'默认为当天00:00:00

    select * FROM UPLAN WHERE CREATE_DATE BETWEEN 
    to_date('2021-01-05%','yyyy-mm-dd hh24:mi:ss') 
    AND 
    to_date('2021-01-06%','yyyy-mm-dd hh24:mi:ss')
    

六、Alias(别名)

  • 作用:

    Alias(as)别名(给表或列名起别名方便记忆书写)

  • 用法:

    select 列名1 as a1,列名2 as a2 from 表名 as u where u.a2 = ‘aaa’
    (从表中查询字段2等于’aaa‘ 的两个字段)

七、Join(连接查询)

  1. Join

    作用:
    Join(连接查询)(为了得到从多个表中查询到的完整结果)
    INNER JOIN(内连接查询)与JOIN相同,连接匹配的行
    在这里插入图片描述

    结果:
    产生的结果是多个表的交集
    图示:
    在这里插入图片描述
    用法:

    select column_name(s)
    from table 1
    INNER JOIN table 2
    ON
    table 1.column_name=table 2.column_name
    

    在这里插入图片描述

  2. LEFT JOIN(左外连接查询)

    作用:

    LEFT JOIN(左外连接查询)返回左表全部行和右表满足on条件的行,如果左表的行在右表没有匹配,那么这一行数据在右表中对应的数据用null代替

    结果:

    产生的结果是左表的全集,右表匹配则有值,没有匹配则取null
    图示:
    在这里插入图片描述
    用法:

    select * from Table A left join Table B 
    on Table A.id = Table B.id
    

    在这里插入图片描述

  3. RIGHT JOIN(右外连接查询)

    作用:
    RIGHT JOIN(右外连接查询)返回右表全部行和左表满足on条件的行,如果右表的行在左表中没有匹配则返回null
    结果:
    产生的结果是右表的全集,左表匹配则有值,没有匹配则取null
    图示:
    在这里插入图片描述

    select * from Table A right join Table B
    on Table A.id=Table B.id
    

    在这里插入图片描述

  4. FULL OUTER JOIN(全连接查询)

    作用:
    FULL OUTER JOIN(全连接查询)从左表和右表返回所有的行,如果其中一个表的数据在两一个表中没有匹配的行,则对应表的数据用null代替
    结果:
    产生左表和右表的并集。但是需要注意的是,对于没有匹配的记录,则会以null做为值。
    图示:
    在这里插入图片描述

    select column_name(s)
    from table 1
    FULL OUTER JOIN table 2
    ON table 1.column_name=table 2.column_name
    

    在这里插入图片描述
    总结join:
    1、A inner join B 取交集。
    2、A left join B 取 A 全部,B 没有对应的值为 null。
    3、A right join B 取 B 全部 A 没有对应的值为 null。
    4、A full outer join B 取并集,彼此没有对应的值为 null。
    5、对应条件在 on 后面填写。

八、UNION(合并)

  • 作用:

    UNION 操作符用于合并两个或多个SELECT语句的结果集

    *注:UNION 内部的SELECT语句必须又相同数量的列。列也必须拥有相似的数据类型。同时,每条SSELECT语句中的列顺序必须相同。

  • 用法:

    select 列名1 from 表名1 union select 列名2 from 表名2
    (合并从表1查询出的列1和从表2查询出来的列2)(列1与列2需要有相似的数据类型)

    *注1:默认UNION操作符选取的是不同的值,同时进行默认规则的排序,如果需要显示重复的值则使用 UNION ALL

    *注2:UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。

    *注3:UNION ALL 命令和 UNION 命令几乎是等效的,不过 UNION ALL 命令会列出所有的值。

  • UNION与UNION ALL区别:

    区别1:取bai结果的交集
    1、duunion: 对两个结果集进zhi行dao并集操作, 不包括重复行,相当zhuan于distinct, 同时进行默认规则的排序;
    2、union all: 对两shu个结果集进行并集操作, 包括重复行, 即所有的结果全部显示, 不管是不是重复;
    区别2:获取结果后的操作
    1、union: 会对获取的结果进行排序操作
    2、union all: 不会对获取的结果进行排序操作
    区别3:

		1、union看到结果中ID=3的只有一条
		select * from student2 where id < 4
		union
		select * from student2 where id > 2 and id < 6
		2、union all 结果中ID=3的结果有两个
		select * from student2 where id < 4
		union all
		select * from student2 where id > 2 and id < 6

总结
union all只是合并查询结果,并不会进行去重和排序操作, 在没有去重的前提下,使用union all的执行效率要比union高

九、SELECT INTO(查询插入)

  • 作用:

    SELECT INTO 语句作用:从一个表中选取数据,然后把数据插入到另一个表中(常用于创建表的备份复件或者用于对记录进行存档)

  • 用法:

    select * into 表名1 from 表名2(把从表2中查到的所有数据存储到表1中)

    select 列名 into 表名1 from 表名2(把从表2中查到的某一列数据存储到表1中)

    select * into 表名1 in 数据库名1 from 表名2(把从表2中查到的某一列数据存储到数据库1的表1中)

    也可以使用where条件查询作为条件或者join连接查询

发表评论

0/200
115 点赞
0 评论
收藏