sql语句基础之select查询

发布时间:2020-05-21编辑:脚本学堂
本文介绍了sql语句的基础内容,有关selec查询的语句结构与使用方法,sql 语句不区分大小写,sql查询时,数字和日期类型的数据可用算术运算符,需要的朋友参考下。

sql语句之select查询语句用法

一、sql 结构化查询语言
包括ddl(数据定义语言)、dcl(数据控制语言)、dql(数据查询语言)、dml(数据操纵语言)
 
二、sql的特点
sql 语句不区分大小写
sql 语句能输入一行或多行
关键字不能整行缩写或分离
子句通常被放置在分开的行上
缩进可提高可读性
在sql 开发工具,sql 语句能选择分号结束(;) .当你运行多个sql 语句的时候,需要分号在sql*plus中, 你要用一个分号结束每个sql 语句.(;)
 
三、sql*plus特征:
字符日期左对齐
数字右对对齐
列名默认大写
sql plus 自己的命令不需以分号“;”结束
 
四、sql查询时,数字和日期类型的数据可用算术运算符
+   加
-  减
*  乘
/  除
( ) 用于改变运算符的优先级
 
五、空值
空值一般用null表示
一般表示未知的、不确定的值,也不是空格
一般运算符与其进行运算时,都会为空
空不与任何值相等
 
表示某个列为空用:is null  不能使用comm=null这种形式
某个列不为空:is not null 不能使用comm != null 这种形式
 
空值在作升序排列时,空值会放到最后。
相反作降序排列时,空值会放在最前。
 
空值作逻辑运算时:
and运算:
f and f =f   f and t =f   f and null =f
t and f =f   t and t =t   t and null is null
null and f =fnull and t is null   null and null is null
 
就是说and的优先级是:f ->null ->t
 
or运算:
t or t =t t or f =t t or null =t
f or t =t f or f =f f or null is null
null or t =t  null or f is null null or null is null
 
or运算优先级:t ->null ->f
 
not运算:
   not t =f
   not f =t
   not null is null
 
与空值相关的函数:
nvl 函数
   格式:nvl(表达式1,表达式2)
   作用:测试表达式的值,如果表达式1为空,则返回表达式2的值;不为空,返回表达式1的值。
 
nvl2   函数
   格式:nvl2(表达式1,表达式2,表达式3)
   作用:测试表达式的值,表达式1不为空,返回表达式2的值,如果为空,则返回表达式3的值。
 
nullif  相等为空
   格式:nullif (表达式1,表达式2)(www.jb200.com)
   作用:比较表达式1和表达式2的值,如果两个相等则返回为空,否则返回表达式1的值。
 
coalesce找非空
   格式:coalesce (表达式1,表达式2,表达式3,...,表达式n)
   作用:返回第一个不为空的值,如果所有的都为空,则返回null。
 
六、select语句的用法
select *|{[distinct] column|expression [alias],...}
from table;
 
七、演示   */
 

复制代码 代码示例:
--选择所有字段
sql> set linesize 200
sql> select * from scott.emp;
 
 empno ename  job  mgr hiredate sal   comm deptno
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
  7369 smith  clerk   7902 17-dec-8080020
  7499 allen  salesman7698 20-feb-81   1600300 30
  7521 ward   salesman7698 22-feb-81   1250500 30
  7566 jones  manager 7839 02-apr-81   297520
  7654 martin salesman7698 28-sep-81   1250   1400 30
 
--选择部分字段
sql> select empno,ename,sal from scott.emp;
 
 empno ename sal
---------- ---------- ----------
  7369 smith 800
  7499 allen1600
  7521 ward 1250
 
--算术加减运算
sql> select empno,ename,sal + 300 from scott.emp;
 
 empno ename sal+300
---------- ---------- ----------
  7369 smith1100
  7499 allen1900
  7521 ward 1550
 
--优先级
sql> select empno,ename,12 * (sal + 300) from scott.emp;
 
 empno ename  12*(sal+300)
---------- ---------- ------------
  7369 smith 13200
  7499 allen 22800
  7521 ward  18600
 
sql> select empno,ename,12 * sal + 300 from scott.emp;
 
 empno ename  12*sal+300
---------- ---------- ----------
  7369 smith9900
  7499 allen   19500
  7521 ward15300
 
--null,记录中comm存在为null的情况
sql> select empno,ename,sal,comm from scott.emp;
 
 empno ename sal   comm
---------- ---------- ---------- ----------
  7369 smith 800
  7499 allen1600300
  7521 ward 1250500
  7566 jones2975
 
--与null运算,结果为null
sql> select empno,ename,sal,comm + 300 from scott.emp;
 
 empno ename sal   comm+300
---------- ---------- ---------- ----------
  7369 smith 800
  7499 allen1600600
  7521 ward 1250800
  7566 jones2975
 
--将comm不为null的记录的comm乘以
sql> select empno,ename,sal,comm * 12 from scott.emp  where comm is not null
 
 empno ename salcomm*12
---------- ---------- ---------- ----------
  7499 allen1600   3600
  7521 ward 1250   6000
  7654 martin   1250  16800
  7844 turner   1500  0
 
--字段别名,字段后用as 别名,as可以省略
sql> select empno,ename as empname,sal salary from scott.emp;
 
 empno empnamesalary
---------- ---------- ----------
  7369 smith 800
  7499 allen1600
  7521 ward 1250
  7566 jones2975
--distinct,过滤重复行
sql> select distinct empno,ename from scott.emp;
 
--连接操作符,通过二个垂直的条描述(||),注意,日期和文字数值一定嵌入在单引号里面
sql> select empno,ename || ' is a ' ||job as position from scott.emp;
 
 empno position
---------- -------------------------
  7369 smith is a clerk
  7499 allen is a salesman
  7521 ward is a salesman
 
--desc table_name,显示表结构信息
sql> desc scott.emp
 name  null?type
 ----------------------------------------- -------- ----------------------------
 empno not null number(4)
 ename  varchar2(10)
 jobvarchar2(9)
 mgrnumber(4)
 hiredate   date
 salnumber(7,2)
 comm   number(7,2)
 deptno number(2)
 
 --nvl的用法
 sql> select empno,ename,nvl(to_char(comm),'not applicable') from scott.emp;
 
 empno ename  nvl(to_char(comm),'notapplicable')
---------- ---------- ----------------------------------------
  7369 smith  not applicable
  7499 allen  300
  7521 ward   500
  7566 jones  not applicable
 
--nvl2的用法
sql> select empno,ename,sal,nvl2(to_char(comm),12 * (sal + comm),sal) as income from scott.emp;
 
 empno ename sal income
---------- ---------- ---------- ----------
  7369 smith 800800
  7499 allen1600  22800
  7521 ward 1250  21000
  7566 jones2975   2975
 
--nullif的用法
--等价于case when expr1 = expr2 then null else expr1 end
  sql> select e.last_name, nullif(e.job_id, j.job_id) "old job id"
  2 from hr.employees e, hr.job_history j
  3 where e.employee_id = j.employee_id
  4 order by last_name, "old job id";
 
last_name old job id
------------------------- ----------
de haan   ad_vp
hartstein mk_man
kaufling  st_man
kochhar   ad_vp
kochhar   ad_vp
raphaely  pu_man
taylorsa_rep
taylor
whalenad_asst
whalen
 
--下面是使用case when的等价用法
sql> select e.last_name, case when e.job_id = j.job_id then null else e.job_id end as "old job id"
  2  from hr.employees e, hr.job_history j
  3  where e.employee_id = j.employee_id
  4  order by last_name, "old job id";
 
last_name old job id
------------------------- ----------
de haan   ad_vp
hartstein mk_man
kaufling  st_man
kochhar   ad_vp
kochhar   ad_vp
raphaely  pu_man
taylorsa_rep
taylor
whalenad_asst
whalen
 
--coalesce的用法
--当coalesce(exp1,exp2)包含两个表达式时,等价于case when exp1 is not null then exp1 else exp2 end
--coalesce (expr1, expr2, ..., exprn), for n>=3
--当n >= 3时,等价于
--case when expr1 is not null then expr1
--   else coalesce (expr2, ..., exprn) end
sql> select product_id, list_price, min_price,
  2  coalesce(0.9*list_price, min_price, 5) "sale"
  3  from oe.product_information
  4  where supplier_id = 102050
  5  order by product_id, list_price, min_price, "sale"
 
product_id list_price  min_price   sale
---------- ---------- ---------- ----------
  1769 48  43.2
  177073 73
  2378305247  274.5
  2382850731765
  33555