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’
(2) 多表链接
————————表person————————
————————表school————————
* 交叉链接(也称为笛卡儿积链接)
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
(经过筛选后的链接)链接结果为
* 左外链接
select a.* , b.* from person a left outer join school b on a.id = b.school_id
链接结果为
* 右外链接
select a.* , b.* from person a right outer join school b on a.id = b.school_id
链接结果为
*全外链接
select a.* , b.* from person a full outer join school b on a.id=b.school_id
*内链接
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
链接结果为
注意:
1. 交叉链接虽然说链接所得结果最全,但是由于算得结果过于冗杂所以请视情况使用(个人看法)
2.如果弄不请左右的话可以这么理解
- 如果是 a 左外链接 b ,则是将符合链接条件的 b 与 a 符合链接条件的结合,而 a 的其他行则链接 null
- 如果是 a 右外链接 b ,则是将符合链接条件的 a 与 b 符合链接条件的结合,而 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 ;
- SQL新手新手向入门修炼(1)
- SQL新手新手向修炼(2)
- PLSQL新手新手向入门修炼(1)
- SQL新手新手向入门修炼-分析函数
- PLSQL新手新手向入门修炼(2)
- MySQL数据库入门学习(多图预警+新手向~)
- Sql Server新手学习入门
- webpack新手简单入门1
- 新手学PL/SQL (1)
- 新手学PL/SQL (1)
- [新手向] c++大数运算 (1)
- (新手向)spring-boot Gradle installation
- (新手向)Spring Boot application starters
- 新手向-----C++学习手札(一)
- (新手向)用powerdesigner生成测试数据
- X2Go Client的使用(新手向)
- 新手向:一键秒杀-扫雷
- 【新手向】emacs配置文件
- 基于Html5 websocket和Python的在线聊天室
- ORACLE删除数据报ORA 02292错误解决方法
- Pycharm教程(3)——代码的调试、运行
- Java反射机制及IoC原理
- java 发送邮件
- SQL新手新手向入门修炼(1)
- TFTP与NFS服务器配置
- Linux基础命令
- 配置web.xml中的 Invalid content was found starting with element 'init-param'.错误
- Linux中常见的命令以及Linux的目录结构
- web测试方法总结(一)
- C#之HttpWebRequest
- STM32CUBEMX_STM32F030F4P6_TIM1_CH3_PWM
- 1微机原理