SQL操作数据——SQL组成,查询基础语法,where,Oracle常用函数等

来源:互联网 发布:不要root的录像软件 编辑:程序博客网 时间:2024/05/18 00:42

      • SQL组成
        • DML数据操作语言
        • DCL数据控制语言
        • DQL数据查询语言
        • DDL数据定义语言
      • 查询基础语法
      • 记录筛选 where 子句
          • 记录筛选 where 子句 实例练习
        • 实例练习
      • Select语句中的列表达式
        • 实例练习
      • Oracle常用函数
        • Oracle常用函数
        • Oracle常用数字函数
          • 数字函数 实例练习题
        • Oracle常用日期函数
          • 日期函数 实例练习题
        • Oracle常用转换函数
          • 转换函数 实例练习题
      • Oracle练习题


SQL组成:

DML(数据操作语言)

插入、删除和修改数据库中的数据
INSERT、UPDATE、DELETE等。

DCL(数据控制语言)

用来控制存取许可、存取权限等。
GRANT、REMOKE等。

DQL(数据查询语言)

用来查询数据库中的数据。
SELECT等。

DDL(数据定义语言)

用来建立数据库、数据库对象和定义表的列。
CREATE TABLE、DROP TABLE等。


查询基础语法

语法:

SELECT <列名>FROM <表名>[WHERE <查询条件表达式>][ORDER BY <排序的列名>[ASCDESC]]     ----默认为ASC

记录筛选 where 子句

where子句:

关系运算 >、<、=、!、<>、>=、<=
逻辑运算 not 、 and 、 or
IS NULL(是否为空)
BETWEEN (在某两个值之间)
IN(一系列值中)
LIKE(相似值的比较)
EXITS(是否存在符合条件的数据)
UNIQUE(是否唯一)
ALL/ANY(一组数据的所有/其中的任何一个)

记录筛选 where 子句 实例练习
--查询里面不是CLERK的人员信息select * from emp where job<>'CLERK';--查询所有的销售人员或者办事人员select * from emp where job='SALESMAN'or job='CLERK';--查询所有的销售人员或者办事人员并且工资大于1250select * from emp where (job='SALESMAN'or job='CLERK') and sal>1250;--查询奖金为空的所有人信息select * from emp where comm is NUll or comm=0;--查询所有办事人员,销售人员,管理者select * from emp where job in('CLERK','SALESMAN','MANAGER');--查询姓名之中 姓名以M开头的所有人-- % 匹配符 ,匹配0个或多个任意字符select * from emp where ename like 'M%';--查询姓名以S结尾的select * from emp where ename like '%S';--查询姓名之中包含A的select * from emp where ename like '%A%';-- EXISTS 是否存在满足条件的语句-- 查询select * from emp WHERE EXISTS (select * from emp where sal>4000);

模糊查询中:

% 代表任意0至多个字符
_ 代表任意一个字符

实例练习

该实例是在表scott中操作。

实例练习:--查询里面不是CLERK的人员信息select * from emp where job<>'CLERK';--查询所有的销售人员或者办事人员select * from emp where job='SALESMAN'or job='CLERK';--查询所有的销售人员或者办事人员并且工资大于1250select * from emp where (job='SALESMAN'or job='CLERK') and sal>1250;--查询奖金为空的所有人信息select * from emp where comm is NUll or comm=0;--查询所有办事人员,销售人员,管理者select * from emp where job in('CLERK','SALESMAN','MANAGER');--查询姓名之中 姓名以M开头的所有人-- % 匹配符 ,匹配0个或多个任意字符select * from emp where ename like 'M%';--查询姓名以S结尾的select * from emp where ename like '%S';--查询姓名之中包含A的select * from emp where ename like '%A%';-- EXISTS 是否存在满足条件的语句-- 查询select * from emp WHERE EXISTS (select * from emp where sal>4000);

Select语句中的列表达式

– 列表达式
– 开始:case 结束:end 当…条件:when 就then 否则else

– 字符串拼接
select ename,’基本工资:’||sal from emp

– 字段别名
select ename name,’基本工资:’||sal s from emp

实例练习:

select sal,sal+comm from emp-- 显示员工各项工资明细和各项工资总和select '基本工资:'||sal sal,',奖金:'||comm comm, case  when comm is null    then sal  when comm=0    then sal  else sal+commend totalfrom emp-- 列表达式-- 开始:case 结束:end 当...条件:whenthen 否则else-- 显示员工各项工资之和大于2000的雇员信息select * from emp wherecase   when comm is null    then sal  else sal+commend >2000

Oracle常用函数

使用函数可以大大提高SELECT语句操作数据库的能力。

Oracle中函数划分为单行函数和多行函数。

单行函数作用于数据库表的某一行并返回一个值。

字符函数 数字函数 日期函数 转换函数 其他函数

多行函数基于数据库表多行进行运算,返回一个值。

Oracle常用函数:

这里写图片描述

Oracle常用数字函数

这里写图片描述

数字函数 实例练习题
-- 数字函数--ROUND 四舍五入的操作select round(3.1415926,2) from dual--TRUNC 舍弃指定位置的内容select trunc(3.6415926,3) from dualselect trunc(255,-2) from dual--MOD 取模,取余数select mod(10,3) from dual

Oracle常用日期函数

这里写图片描述

日期函数 实例练习题
-- 日期函数--获取当前日期 sysdate 当前系统时间select ename,sysdate from emp--得到3天以后的时间select sysdate+3 from dual--获取日期的最后一天 , 获取当月最后一天select last_day(sysdate) from dualselect last_day(hiredate) from empselect * from emp where last_day(hiredate)='31-12月 80'-- 下个星期几的日期 next_dayselect next_day(sysdate,'星期一') from dual--求出若各个月以后的日期 add_months--加减月份select add_months(sysdate,3) from dual--months_between 获取两个日期间的间隔月份select trunc(months_between('1-2月 17', sysdate)) from dual

Oracle常用转换函数

这里写图片描述

转换函数 实例练习题
-- ORACLE 数据库中的三种数据:NUMBER,CHAR,DATE--转换函数--TO_CHAR 将日期或者是数字变为字符串显示select sysdate||'' from dualselect to_char(sysdate,'yyyy-mm-dd') from dualselect to_char(123456789,'999,999,999,999') from dual--TO_DATE 将字符串变为DATE数据显示select to_char(to_date('1999-1-1 20:20:20','yyyy-mm-dd hh24:mi:ss'),'yy-mm-dd hh24:mi:ss') from dual--TO_NUMBER  将字符串变为数字显示select to_number('123')+123 from dualselect '123'+'123' from dual

Oracle练习题

--找出佣金高于薪金的60%的员工。select * from emp where sal>(sal+comm)*0.6--找出各月倒数第3天受雇的所有员工。select ename,last_day(hiredate)-3 from emp--找出早于12年前受雇的员工。select ename,add_months(sysdate,-12*12) from emp--显示正好为5个字符的员工的姓名。select ename from emp where ename like'_____'select ename from emp where length(ename)=5-- 显示满10年服务年限的员工的姓名和受雇日期。select ename,hiredate from emp where months_between(sysdate,hiredate)/12 >10 ;--显示在一个月为30天的情况所有员工的日薪金,忽略余数。select last_day(sysdate) from empselect sal/30 sal from emp where last_day(hiredate)select trunc(sal/30) sal from emp where  to_char(last_day(hiredate),'dd')=30--显示所有员工姓名、加入公司的年份和月份,按受雇日期所有月排序,若月份相同则将最早年份的员工排在最前面。select ename,to_char(hiredate,'yyyy-mm')from emp order by to_char(hiredate,'mm') ASC ,to_char(hiredate,'mm') DESC--找出在(任何年份的)2月受聘的所有员工。select ename, hiredate from emp where to_number(to_char(hiredate,'mm'))=2--对于每个员工,显示其加入公司的天数。select trunc(to_number(sysdate-hiredate)) from emp--以年月日的方式显示所有员工的服务年限。select hiredate,trunc((sysdate-hiredate)/365) 年,trunc(mod((sysdate-hiredate),365)/30) 月,trunc( mod (mod((sysdate-hiredate),365),30) ) 日from emp;
原创粉丝点击