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:00select * 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(连接查询)
-
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
-
LEFT JOIN(左外连接查询)
作用:
LEFT JOIN(左外连接查询)返回左表全部行和右表满足on条件的行,如果左表的行在右表没有匹配,那么这一行数据在右表中对应的数据用null代替
结果:
产生的结果是左表的全集,右表匹配则有值,没有匹配则取null
图示:
用法:select * from Table A left join Table B on Table A.id = Table B.id
-
RIGHT JOIN(右外连接查询)
作用:
RIGHT JOIN(右外连接查询)返回右表全部行和左表满足on条件的行,如果右表的行在左表中没有匹配则返回null
结果:
产生的结果是右表的全集,左表匹配则有值,没有匹配则取null
图示:
select * from Table A right join Table B on Table A.id=Table B.id
-
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连接查询