唐抉的个人博客

Oracle Sql语句查库

字数统计: 929阅读时长: 3 min
2023/02/21

数据库连接工具:DBeaver

本文中使用的数据库连接工具是DBeaver,其是一款免费且跨平台的数据库连接工具。其优势是会在首次链接数据库时,下载所需驱动,解决了数据库版本不兼容的问题。

该工具的下载地址为:Download | DBeaver Community,直接根据安装指示点击下一步即可完成安装。

安装好后打开软件,点击左上角的图标新建连接:

在弹出的窗口里选择Oracle,填好相应的信息后,点击完成。然后会弹出下载驱动文件的页面,点击下载驱动:

在左方便可看到已连接的数据库,右键数据库名字-SQL编辑器-SQL编辑器便可打开一个可以编写sql语句的脚本编辑器,其他模块的使用方法与pgAdmin 、Navicat等工具的相同。

模糊查询

查询test_table表中名字含有“张三”的数据:

1
2
3
4
5
select * from test_table
WHERE name like '%张三%'
-- %张三,表示匹配结尾为张三的数据
-- 张三%,表示匹配开头为张三的数据
-- %张三%,表示匹配任意位置含有张三的数据

查询语句中含有变量

查询test_table表中年龄等于参数year值的数据,其中year参数的值在运行sql语句时输入:

1
2
3
4
select * from test_table a
WHERE a.old=:year
-- test_table a,即设置表格test_table的别名为a,后续可用a来代替表格test_table
-- :year,表示变量year

查询test_table表中名字含有参数search值的数据,其中search参数的值在运行sql语句时输入:

1
2
3
4
select * from test_table
WHERE name like '%'||:search||'%'
-- :search,表示变量search
-- ||:search||中,||为连接符,类似于Python中print里的+号,即'%'||:search||'%'等价于Python中的print里的('%'+search+'%')

查询test_table表中学号为参数num值的名字,其中num参数的值在运行sql语句时输入:

1
2
3
4
select distinct name from test_table a
WHERE a.snum=to_char(:num)
-- to_char函数用来将数组转为字符串
-- distinct参数用来去除重复数据

查询test_table表中名字为参数search值的数据,所查询的结果中含有参数值的数据排在前面:

1
2
3
4
select  * from test_table
WHERE name like '%'||:search||'%'
order by (case when name like '%'||:search||'%' then 0 end)
-- case 条件 then 0 end,表示满足条件的数据排在第0位,即满足条件的数据优先显示

左连接查询

进行左连接(Left join)时,查询将左边表格T1中的每一行都与右边表格T2中的行进行比较,返回的结果会有以下三种情况:

  • 若T1中的某条记录在T2中刚好只有一条记录可以匹配,则返回的结果中会生成一个新的行
  • 若T1中的某条记录在T2中有N条记录可以匹配,则返回的结果中也会生成N个新的行,这些行所包含的T1的字段值是重复的
  • 若T1中的某条记录在T2中没有可以匹配的记录,则返回的结果中会生成一个新的行,该行所包含的T2的字段值是NULL

例如,左表为T1,其有如下数据:右表为T2,其有如下数据:

将两者进行左连接查询,即需要返回左表中所有行的数据以及右表中包含number行的数据:

1
2
3
4
5
6
select * from T1 
left join T2
on T1.num=T2.number
-- T1的num列引用T2表中的number列。其中num列的部分值是无效的
-- 若要过滤掉所有name为NULL的记录,可以增加以下where子句
where number is not null

查询结果如下:

去除NULL记录后的查询结果如下:

CATALOG
  1. 1. 数据库连接工具:DBeaver
  2. 2. 模糊查询
  3. 3. 查询语句中含有变量
  4. 4. 左连接查询