DML:数据操作语言
注意:增加改查中查询最为重要,是核心,也最有含金量。
就是说,这节!很重要
一。选择【查询】
先说选择的语法结构[最简版]
1。查询所有字段
select * from 表名;
2.查询指定字段
从表名中选择字段名,字段名,字段名;
3.获取系统时间【通过sysdate来获取系统时间】
从双重选择sysdate;
二。算术操作符【+ - * /】
这节也很简单
列如:
select studentname,(studentage/2)+2-18/3 from t_student;
首先他也是执行算术操作符优先级的,其他的没什么了
。别名三
首先说别名就要注意两点
1.别名要用双引号括起来
2.通过作为别名起
起别名的英文分给字段与表两个的
首先是字段
还是用刚刚的例子
select studentname "stuName",(studentage/2)+2-18/3"age" from t_student;
这里面的“stuName”与“age”是可以换我们怎样正确书写分类中翻译的
或者查询的英文的所有信息
选择学生名为“stuName”,(学生/ 2)+ 2-18 / 3作为“年龄”来自t_student;
然后说表起别名
select s.字段名1,s.字段名2 from 表名 s;
四。连接操作||
【在oracle中字符串用单引号括起来】
列如:
select表段名1 ||':'||字段名2“编写的字段名字”来自表名;
这样他就输出的是:以“编写的名字“为字段名,表里面是”字段名1:字段名2“
||其实起到的效果相当于java里的+
五。其中子句【凡后面加查询条件】
其中子句里右分两组
1.比较操作符【=,>,<,> =,<=,!=,<>}
2.逻辑操作符【or,and,not,in,like,between ... and,null】
先说说比较操作符,
这里面其实都很简单,有但两个需要说一下其他的举个例子就一带而过了
列:查询年龄为20岁的学生的信息
SELECT * FROM t_student from studentage=20;
而这里面主要说“!=”与“<>”
这两个都是不等于的意思
列如:
查询年龄不等于20的学生的信息
(他是有三种解决方案的)
select * from t_student where studentage<>20;
select * from t_student where studentage!=20;
select * from t_student where studentage>20 or studentage<20;
然后说说逻辑操作符
首先说这些单词都是什么意思
or(或者),
and(并且),
not(不),
in(在..里面),
like(像),
beteen ..and..(在......之间),
null(空值),
null(默认)
那我们就再举个例子
如:查询学生姓名为张三并且年龄大于20岁的人
SELECT * FROM t_student where studentname='张三' and studentage>20;
或者:查询年龄为18,27,30的学生的信息
SELECT * FROM t_student where studentage in (18,27,30);
select * from t_student studentage=18 or studentage=27 or studentage=30;
这样类似的方法,其他的我就不细说了,还是主要说说一些不太好理解的
like(像)可以理解为:模糊查询
他的英文有俩符号的
%:代表0个或多个字符
_:代表任意一个字符
怎么用?还是用例子
列如:查询所有姓张的学生的信息
select * from t_student where studentname like '张%';
select * from t_student where studentname like '张__';
或者是包涵某个字的,这些是都可以实现找到的
between...and...
还是例子说话
查询年龄在18-25之间的学生信息
select * from t_student where studentage>=18 and studentage<=25;
然后就是空值null
列:查询生日为空的学生的信息
select * from t_student where birthday is null;
当然他也可以和别的搭配
如:和是null是为空值,不是null是不为空值,或者不null不为空值,等等,
六。order by排序
排序也分俩个
asc:升序[默认]
desc:降序
不废话,上例子:按照年龄对学生进行降序排列
select * from t_student order by studentage asc;
select * from t_student order by studentage desc;
按照年龄对学生进行降序排列并且按照体重进行升序排列[多字段排序]
select * from t_student order by studentage desc,weight asc;
七。聚合函数
额...这个就分的多咯
min():最小值
max():最大值
avg():平均值
sum():求和
count():总个数
例如:
查询班级中最小的年龄
select min(studentage)from t_student;
最大值,最小值,求和和平均值都一样
查看个个班中学生的总个数
select count(*) from t_student;
select count(id) from t_student;
select count(1) from t_student;
select count(birthday) from t_student;
有人要问了*是什么?
上面忘了说,*代表的是全部字段
还有,那为什么id和1也可以实现与*相同的作用?
为什么在别处找不到或没见过别人用?
这因为我在数据库管理员在数据库上写在程序时看到的
照他解释,1个与ID也可以实现一样的作用,
但要注意,ID是自己定义出来的字段,
还要自己去定义添加数字,不是凭空出来的,,,
在这里我插一句
教大家一个decode的相关资料:(值,值1,结果1,值2,结果2,最终结果)
列如:
select decode(10,1,'a',2,'b',3,'c','kong') from dual;
意思很简单,在值10中,符合哪个输出哪个值后对应的结果,否则,输出最终结果,比如:
还可以这样用:
select decode(性别,1,'男','女')as sex,count(id)from t_student group by sex;
八。数学函数
分五个:
abs()绝对值
ceil()向上取整
floor()向下取整
trunc()截断函数
round()四舍五入函数
就先拿:abs()说
select abs(-3) from dual;
select abs(studentage-100) from t_student;
向上取整与向下取整和四舍五入就不用我说了吧?
trunc()截取
select dual(3.98)from dual; \\ 输出的是3
select dual (3.98,1)from dual; \\ 输出的是3.9(保留一位小数)
select trunc(334.98,-1)from dual; \\ 输出的是330(向前取整!!)
九。字符串函数
重点来了啊!
1.concat(字符串1,字符串2)
连接两个字符串
select concat(studentname,'来到某某')||'公司' from t_student;
2.initcap( '字符串')
使字符串首字母变为大写
3.instr(源字符串,要搜索的字符)
在一个字符串中搜索指定的字符,发现报道查看指定的字符的位置
里面的字符可以多写,但里面的要用逗号隔开,相当于java中indexOf
4.length(字符串)
返回字符串的长度
5.lower(字符串)
返回字符串,并将所有的字符小写
select lower('AbFCV') from dual;
6.upper (字符串)
返回字符串,并将所有的字符大写
select upper('abcdFG') from dual;
7.rpad | lpad(源字符串,总长度,填充的字符)
在字符串的右(左)边粘贴字符
select replace('abcdeaa' ,'a','M')from t_student; \\输出为MbcdeMM
8.rtrim | ltrim(源字符串,查找的字符串)
删除右(左)边出现的字符串
select ltrim('abcd','ab'); \\输出为:bc
9.substr(源字符串,开始位置,要截取的个数)
取子字符串,从开始开始,取计数个
select substr('abcd',1,2)from dual; \\输出为:ab
select substr('abcd',2,2)from dual; \\输出为:bc
10.replace(源字符串,要查找的字符串,替换的字符串)
替换字符串
select replace('abcdeaa', 'a', 'M') from dual;
11.reverse(源字符串)
反转字符串中的每个字符
select reverse('abc') from dual;
十。转换函数
1.to_char():将其转换为字符串类型
在实战中通常通过to_char()将日期类型转换为字符串类型
例如:
select to_char(sysdate,'yyyy-MM-dd')from dual; \ \输出为:当前时间的年月日
select to_char(sysdate,'yyyy-MM-dd HH:mi:ss')来自双重; \\输出为:当前时间的年月日时分秒(12小时制)
select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss')from dual; \\输出为:当前时间的年月日时分秒(24小时制)
2.to_date():其将转换为日期类型
在日常开发中通常通过TO_DATE()将字符串类型转换为日期类型
例如:
select to_date('2017-10-13','yyyy-MM-dd')from dual; \\输出为:2017 \ 10 \ 13
select to_date('2017-10-13 15:23:10', 'yyyy-MM-dd HH24:mi:ss')from dual; \\输出为:2017/10/13 15:23:10
十一。日期和时间函数
三个
1.add_months()增加或者减去月份
例如:
select add_months(sysdate, 2) from dual;\\输出为:当前时间加两个月的时间
2.last_day()返回所在月份的最后一天
例如:
select last_day(sysdate) from dual;
select last_day(to_date('2017-02-10','yyyy-MM-dd')) from dual;
3.next_day()给出日期和星期之后计算下一个星期的日期
例如:
select next_day(sysdate, '星期五') from dual;
十二。其他函数
1.nvl(值1,值2)如果值1不为空则显示值1,否则显示值2
举个例子:
select nvl(birthday,sysdate) from t_student;\\输出为:如果生日不为空则显示生日,否则显示sysdate(当前时间的意思)
2.nvl2(值1,值2,值3)如果值1不为空则显示值2,如果为空显示值3
例如:
select nvl2(birthday,sysdate,to_date('2017-02-10', 'yyyy-MM-dd')) from t_student;
\\输出为:如果生日不为空则显示SYSDATE(当前时间的意思),如果为空显示2017年2月10日