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

来源:互联网 发布:澄海美工招聘 编辑:程序博客网 时间:2024/05/24 07:08

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)数据类型的转换


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

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

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

数据类型转换的图片

以下为时间转换为标准:

* 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 ;

原创粉丝点击