SQL新手新手向入门修炼(1)

SQL新手新手向入门修炼(1)

由于本人对于plSQL理解有限,如果在文章中出现什么什么漏洞,或者问题欢迎大家指出。

本文就以下几点进行展开:

1. select语句
2. 条件限制及排序
3. 单行操作函数

1.select语句(难度 —— 基础)

(1) 基本语法

select 目标列 (別名) from 表名 (別名)

多列select:

select username 姓名 ,nickname 昵称 from s_customer

多行select:

select * from s_customer

在语句中能够进行一系列的操作,如字符串的链接,基础的算数运算(这个点等到分组的时候再进行概括)等


字符串的链接

select username || ’ is ’ || id “person’s id” from person where username = ‘tom’

person’s id
tom is 5



(2) 多表链接


————————表person————————

username nickname id
tom to 5
kitty ki 12
ninic ni 23



————————表school————————

school school_id
primary school 5
middle school 12
high school 20



* 交叉链接(也称为笛卡儿积链接)

select a.* , b.* from person a inner join school b on a.id=b.school_id
或者
select a.* , b.* from person a , school b where a.id=b.school_id

(经过筛选后的链接)链接结果为

username nickname id school school_id
tom to 5 primary school 5
kitty ki 12 middle school 12



* 左外链接

select a.* , b.* from person a left outer join school b on a.id = b.school_id

链接结果为

username nickname id school school_id
tom to 5 primary school 5
kitty ki 12 middle school 12
ninic ni 23



* 右外链接

select a.* , b.* from person a right outer join school b on a.id = b.school_id

链接结果为

username nickname id school school_id
tom to 5 primary school 5
kitty ki 12 middle school 12
high school 20



*全外链接

select a.* , b.* from person a full outer join school b on a.id=b.school_id

username nickname id school school_id
tom to 5 primary school 5
kitty ki 12 middle school 12
ninic ni 23
high school 20



*内链接

select
a.username a_username, a.nickname a_nickname,
b.username b_username , b.id b_id
from person a inner join person b
on a.username = b.username

链接结果为

a_username a_nickname b_username b_id
tom to tom 5
kitty ki kitty 12
ninic ni ninic 23

注意:

1. 交叉链接虽然说链接所得结果最全,但是由于算得结果过于冗杂所以请视情况使用(个人看法)

2.如果弄不请左右的话可以这么理解

  • 如果是 a 左外链接 b ,则是将符合链接条件的 ba 符合链接条件的结合,而 a 的其他行则链接 null
  • 如果是 a 右外链接 b ,则是将符合链接条件的 ab 符合链接条件的结合,而 b 的其他行则链接 null

3.对于多表链接只需要从前往后依次进行链接,用之前表链接的结果继续与后面的表进行链接,最后通过使用where 语句对所得表进行筛选得出想要的结果

4.可以使用 Distinct 删除表中得到的重复行


2.条件限制及排序语句(难度 —— 基础)

(1) 条件限制

基本语法

select 列名 from 表名 where 限制条件

举例:选取person表中的id为5的username,nickname

select username , nickname from person where id = 5;

1)限制条件——逻辑范围
常用的有 > , < , = , <= ,>= , <>(不等于) ,between … and … , in(a,b,c),like(模糊查询,可使用统配符%),is null (注意不能使用 = null)


主要需要注意的like的使用

*    %表示代替 0 个或 多 个字符
*    _ 表示 1 个字符
*    当需要表示含有字符 % 时,需要使用标识转移字符 escape
*    select * from table where name like '%\%%' escape ''

举例:在person表中查找username中含有o,开头为k,第二个字母为i的人员的所有信息

select * from person username like ‘%o%’

select * from person username like ‘k%’

select * from person username like ‘_i%’

2)限制条件——逻辑判断
常用的有 AND , OR , NOT

*  AND 表示返回的结果几个条件全需要满足
*  OR  表示返回的结果满足条件中的其中一个即可
*  NOT 表示返回的结果不能包含目标条件
(2) 排序语句

基本语法

select 列名 form 表名 where 限制条件 order by 排序条件

  • DESC 表示降序
  • ASC 表示升序

举例:请将person表中的所有数据根据进行排序

select * from person order by id desc;

3.单行操作函数(难度 —— 基础)

敏感的数据库我们就要用敏感的方式去对待他,滑稽

(1)相关操作函数


1)字符串函数

* TRIM()/LTRIM()/RTIRM():去空格。只能去掉头和尾的空格,中间的不理。
    trim('heoArefdou')-->heoArefdou

* CONCAT:合成。双竖线只能在select语句里面用,这个可用于任何语句。
    Concat('Good','String')-->GoodString

* SUBSTR:截取。
     Substr('String',1,3)-->Str
       第一个数字“1”,表示从第几个开始截取;
       若要从倒数第几个开始,用负数,如“-2”表示倒数第2个。
       上式中第2个数字“3”表示截取多少个。

* LENGTH:统计长度。
    Length('String')-->6

* NVL:转换空值,上面已有

* INSTR : 计算当前字符在字符串中所处的位
    Instr('HelloWorld', 'W') ----> 6 

* LPAD:表示10位数,不足的使用 * 补足 ,数字在后
     LPAD (salary,10,'*') ----> *****24000 
* RPAD:表示10位数,不足的使用 * 补足 ,数字在前
     RPAD (salary, 10, '*') ----> 24000*****

* TRIM : 还有将指定字符从字符串中删除的功能
    TRIM('H' FROM 'HelloWorld') ----> elloWorld 
* ---------------------------------------------------
* NVL(ex1,ex2) : 如果 ex1 为空,则返回 ex2 ;ex1 不为空,则返回ex1

*  NVL2(ex1,ex2,ex3) : 如果 ex1 为空 ,则返回 ex3 ; ex1不为空 ,则返回 ex2

* NULLIF(ex1,ex2) : 如果 ex1 = ex2 则返回 null ,否则返回 ex1,ex1 不能为空

* COALESCE(ex1,ex2,ex3,....) : 如果 ex1 不为空,则返回 ex1 否则返回 NULL,否则直到找到一个值不为空,返回该值,若全为空则返回 NULL

2)大小写函数

* LOWER:转小写
    lower('SQLCourse')-->sqlcourse

* UPPER:转大写
    upper('SQLCourse')--->SQLCOURSE

*INITCAP:首字母转大写,其余转小写
    initcap('SQLCourse')-->SqlCourse

3)数字操作函数

*  Round : 用于四舍五入的进位操作
    Round(10.2126,3)      -----> 10.213

*  Trunc :用于数字的截取操作
    Trunc(10.2126, 3)     -----> 10.212

*  Mod : 用于数字的求余运算
    Mod (1600,300)          -----> 100

4)日期操作函数

* MONTHS_BETWEEN :计算两个月份之间月份间隔,可使用Tranc或Round进行截断
 Months_Between('01-SEP-95','11-JAN-94')--->19.6774194

* ADD_MONTHS : 计算当前月份加上指定月份后所得的日期
Add_Months('11-JAN-94',6)---> 11-Jul-94 

* NEXT_DAY : 计算当前日期的下个指定礼拜
Next_Day('01-SEP-95','FRIDAY') ---> 8-Sep-95 
NEXT_DAY ('01-SEP-95',1) --->  3-Sep-95 
NEXT_DAY (to_date('1995-09-01','YYYY-MM-DD'),1) ---> 3-Sep-95 

* LAST_DAY: 计算当前月份的最后一天
Last_Day('01-FEB-95') --->  28-Feb-95

* ROUND : 按照月份进行四舍五入,一般在15号之后则进至下个月,之前的则仍留在本月;按年进行四舍五入则,在6月后的进至下个月,6月及之前的仍留在本年
Round('25-JUL-95','MONTH') ---> 1-Aug-95 
ROUND('25-JUL-95' ,'YEAR') ---> 1-Jan-96 

* TRUNC: 对当前月份进行截断
Trunc('25-JUL-95' ,'MONTH') ---> 1-Jul-95 
*TRUNC: 对当前的年份进行截断
Trunc('25-JUL-95','YEAR') ---> 1-Jan-95 

注意:

<1> 在语句外进行对sql全局变量的修改使用以下语句(语句内要修改文件类型则是使用类型转换)

alter session set () = ‘()’
例如更改当前系统日期格式
alter session set NLS_DATE_FORMAT = ‘DD-MON-RR’

<2>对日期进行数据运算以 1 为一天,1/24 为一小时进行加减乘除

5)数据类型的转换


讲道理这张图很关键!!!

讲道理这张图很关键!!!

讲道理这张图很关键!!!

SQL新手新手向入门修炼(1)_第1张图片

以下为时间转换为标准:

* YYYY  4位数字表示的年份 
* YEAR  英文描述的年份 
* MM  2位数字表示的月份 
* MONTH  英文描述的月份 
* MON  三个字母的英文描述月份简称 
* DD  2位数字表示的日期 
* DAY  英文描述的星期几 
* DY  三个字母的英文描述的星期几简
* HH24:MI:SS AM  时分秒的格式化 
* DDspth  英文描述的月中第几天 
* fm  格式化关键字,可选 

举例:

select username , to_char(hire_date, ’ fmDD “is of ” MONTH YYYY’) hire_date from person

注意:
日期格式转换还存在着 YY 与 RR 这两种年份日期格式,要注意这两种格式的区别:

  • YY 一般都是当前世纪(无需注意处于年份),
    比如现在身处19世纪,
    则你输入’1-MON-19’,’1-MON-99’ , 所查询出的年份都处于19世纪;
    比如现在身处20世纪,
    则你输入’1-MON-19’,’1-MON-99’ , 所查询出的年份都处于20世纪;
  • RR 一般是就近原则(需要注意所处年份区间即1-50,51-99),
    比如现在身处19世纪(51-99),
    则你输入’1-MON-19’,’1-MON-99’ , 前者处于20世纪,后者处于19世纪;
    比如现在身处20世纪(1-50),
    则你输入’1-MON-19’,’1-MON-99’ , 前者处于20世纪,后者处于19世纪。

以下为数字转换为标准:

* 9  表示一个数字 
* 0  强制显示0 
* $  放一个美元占位符 
* L  使用浮点本地币种符号 
* .  显示一个小数点占位符 
* ,  显示一个千分位占位符 

举例:

select to_char(money , ‘$999.999.00’) salary from person

6)条件表达式

  • case 语句
  • decode 函数

CASE语句语法及举例

语法
select username
case 条件列
when ‘条件列的条件’ then 所期望改变的目标数据
….
else 所期望改变的目标数据 “别名”
from employee ;

举例
select username ,salary
case id
when ‘1’ then salary * 1.1
when ‘2’ then salary * 1.2
else salary * 1.3 “new_salary”
from employee ;

DECODE语句语法及举例

语法
select username
decode (条件列
‘条件列的条件’ 所期望改变的目标数据 ,
….
所期望改变的目标数据) 别名
from employee ;

举例
select username , salary
decode ( id
‘1’ salary * 1.1,
‘2’ salary * 1.2,
‘salary * 1.3) new_salary
from employee ;

你可能感兴趣的:(数据库技术,plsql)