基本 SELECT 语句 查询数据(单表中的数据查询)
具体语句展示
需要注意的是在这里我使用的是PLSQL连接到oracle数据库然后登录hr用户后,在SQL语句窗口中运行的代码,hr用户默认会有很多张表可供练习。
-
选择全部列
select * from employees;
-
选择特定的列
select first_name,last_name from employees;
注意
SQL 语言大小写不敏感。
SQL 可以写在一行或者多行
关键字不能被缩写也不能分行
各子句一般要分行写。
使用缩进提高语句的可读性。 -
算术运算符在SQL中的使用
数字和日期使用的算术运算符 (+ - * /)
使用数学运算符
运算时也拥有优先级- 乘除的优先级高于加减。
- 同一优先级运算符从左向右执行。
- 括号内的运算先执行。
select first_name,last_name,2*(salary+100) from employees;
-
定义空值
空值是无效的,未指定的,未知的或不可预知的值
空值不是空格或者0。select first_name,last_name,salary,commission_pct,(salary + salary * commission_pct)*12 from employees;
这里你会发现,没有奖金的人的年薪并不会被计算,为什么呢?
那是因为含有空值的数学表达式的值都为空值
因此这时候我们需要对空值进行处理以期达到我们的预期目的,输出所有人的年薪,即使他没有奖金,代码如下:/*计算每一个员工的年薪 包括奖金 -- 当员工commission_pct为null的时候 则得到的计算结果也为null --在一个运算中 如果有null值参与 则结果为null --nvl函数 是进行空值处理 NVL(commission_pct,0) 表示对于该字段中的null在运算中使用0来替代*/ select first_name,last_name,salary,commission_pct,(salary + salary * NVL(commission_pct,0))*12 from employees;
-
列的别名
列的别名:
重命名一个列。
便于计算。
紧跟列名,也可以在列名和别名之间加入关键字‘AS’,别名使用双引号,以便在别名中包含空格或特殊的字符并区分大小写。
比如我将上面的结果命名为year_salary(as也可以省略):select first_name,last_name,salary,commission_pct,(salary + salary * NVL(commission_pct,0))*12 as year_salary from employees;
-
连接符
把列与列,列与字符连接在一起。
用 ‘||’表示。
可以用来‘合成’列。-- 连接符的使用 -- 将frist_name 和last_name 拼接起来 形成fullname select first_name ,last_name,first_name||' '||last_name full_name from employees;
-
字符串
字符串可以是 SELECT 列表中的一个字符,数字,日期。
日期和字符只能在单引号中出现。
每当返回一行时,字符串被输出一次。SELECT last_name ||' is a '||job_id "Employee Details" FROM employees;
-
重复行
在 SELECT 子句中使用关键字 ‘DISTINCT’ 删除重复行。SELECT department_id FROM employees;
select distinct department_id from employees;
-
统计
-- 统计 --查询表中的记录数 -- 在统计的时候 如果选择根据某一个字段来统计 则如果该字段包含null值 则null不会被统计 --在统计的选择中 一般可以使用* 但是* 表示根据所有的字段进行统计 效率相对较低 --所以根据某一个字段统计 是一种比较好的选择 但是不能选择包含null值的列 --一般选择主键列来作为统计列 select count(*) from employees; select count(employee_id) from employees; select count(commission_pct) from employees;
-
过滤查询(where)
•使用WHERE 子句,将不满足条件的行过滤掉。
•WHERE 子句紧随 FROM 子句。--where 后边所跟的就对数据的过滤条件 --查询id为90的部门的所有员工 select * from employees where department_id =90;
--查询last_name为Whalen的员工 -- 在过滤条件中 字符串必须使用单引号引起来 同时对值的过滤 是区分大小写 -- = 表示严格匹配 select * from employees where last_name = 'Whalen';
-
一般比较运算符
一般比较运算符--查询薪资小于等于3000的雇员信息 select * from employees where salary <= 3000; --查询工龄大于Steven的雇员信息 select * from employees where hire_date<'17-JUN-2003'; --查询不是90部门的所有的雇员信息 select * from employees where department_id <>90; select * from employees where department_id !=90;
都有结果一一对应不再赘述
-
其他比较运算符
- 使用 BETWEEN 运算来显示在一个区间内的值
- IN
- LIKE
使用 LIKE 运算选择类似的值
选择条件可以包含字符或数字:
% 代表零个或多个字符(任意个字符)。
_ 代表一个字符。 - ESCAPE
回避特殊符号的:使用转义符。例如:将[%]转为[%]、[_]转为[_],然后再加 上[ESCAPE ‘\’] 即可。 - NULL
使用 IS (NOT) NULL 判断空值。 - and or not 这些逻辑运算符
AND 要求并的关系为真
OR 要求或关系为真。
NOT 没啥说的 - 优先级
下面是一些具体应用的代码:
--工资在2500到3500之间的雇员信息 包含边界值 --使用 BETWEEN 运算来显示在一个区间内的值 select *from employees where salary between 2500 and 3500; select * from employees where salary >= 2500 and salary <= 3500; -- IN 查询雇员编号为 115 116 117 的雇员信息 select * from employees where employee_id = 115 or employee_id=116 or employee_id=117; select * from employees where employee_id in(115,116,117); --like 查询雇员名以字母A开头的雇员信息 需要结合% 、_两个通配符使用 select * from employees where first_name like 'A%'; --查询雇员名中的第二个字母为a的雇员信息 select * from employees where first_name like '_a%'; --查询雇员名字中包含字母a的雇员信息 select * from employees where first_name like '%a%'; select * from employees where first_name like '%A%';等同与 select * from employees where first_name like 'A%'; --IS NULL 查询没有奖金的雇员信息 select * from employees where commission_pct is null; --IS not NULL 查询有奖金的雇员信息 select * from employees where commission_pct is not null; SELECT job_id FROM jobs WHERE job_id LIKE 'IT\_%' escape '\';
每段都有相应的结果,不再赘述
-
ORDER BY子句的使用
使用 ORDER BY 子句排序
ASC(ascend): 升序
DESC(descend): 降序
ORDER BY 子句在SELECT语句的结尾。--ORDER BY --查询所有的雇员信息 并根据薪资进行排序 当不指明排序规则时 默认时升序 select * from employees order by salary; ----查询所有的雇员信息 并根据薪资进行排序 从大到小 降序 select * from employees order by salary desc; --查询所有的雇员信息 根据first_name 进行降序排序 --对于值为字符串的字段的排序 是根据字典顺序 select * from employees order by first_name ; --查询所有的100部门的员工信息 并根据入职时间进行升序显示 select * from employees where department_id =100 order by hire_Date;
使用别名排序
-- 计算所有的雇员的年薪(yearSalary)包含奖金 并按照年薪进行排序 select first_name ,last_name ,salary ,salary * (1 + NVL(commission_pct,0))*12 YEARSALARY from employees ORDER BY YEARSALARY;
多字段排序
在order by 后边可以跟多个字段 当第一个字段的值相同时 则根据第二个字段进行排序 并且可以分别为每个字段指定排序规则--查询所有的雇员信息 并按照入职时间排序 如果入职时间相同 则按照薪资从高到底排序 select * from employees order by hire_date desc ,salary asc;
附加部分,SQL 语句与 SQL*Plus 命令
- SQL(sql窗口中可以运行)
一种语言
ANSI 标准
关键字不能缩写
使用语句控制数据库中的表的定义信息和表中的数据 - SQL*Plus(oracle命令行窗口中可以运行)
一种环境
Oracle 的特性之一
关键字可以缩写
命令不能改变数据库中的数据的值
集中运行 - 在sql窗口中 只能执行sql语句 不能执行oracle的命令
- 使用SQLPlus可以:
描述表结构。
编辑 SQL 语句。
执行 SQL语句。
将 SQL 保存在文件中并将SQL语句执行结果保存在文件中。
在保存的文件中执行语句。
将文本文件装入 SQLPlus编辑窗口。
- 使用SQLPlus可以:
来源:CSDN
作者:yikuki
链接:https://blog.csdn.net/qq_36763661/article/details/103603744