4、高级查询和函数

一、DML、函数、高级查询

--为scott用户解锁
SQL> alter user scott account unlock;
用户已更改。

--为scott设置密码
SQL> alter user scott identified by tiger;
用户已更改。

--切换用户连接
SQL> conn scott;
输入口令: tiger
已连接。

--删除学生成绩表中成绩列
alter table stuinfo drop column score;

--添加班级列
alter table stuinfo add(classno varchar2(12));

--查看表结构
desc stuinfo;

--查询序列
select sequence_name from user_sequences;

--插入语句
SQL> insert into stuinfo values(seq_stuinfo.nextval,‘holly‘,‘TB07‘);

已创建 1 行。

SQL> insert into stuinfo values(seq_stuinfo.nextval,‘汤帅‘,‘TB07‘);

已创建 1 行。

SQL> insert into stuinfo values(seq_stuinfo.nextval,‘陆毅文‘,‘TB07‘);

已创建 1 行。

SQL> insert into stuinfo values(seq_stuinfo.nextval,‘张宗奇‘,‘TB07‘);

已创建 1 行。

SQL> insert into stuinfo values(seq_stuinfo.nextval,‘周强‘,‘TB07‘);

已创建 1 行。

SQL> insert into stuinfo values(seq_stuinfo.nextval,‘董演‘,‘TB07‘);

已创建 1 行。

SQL> insert into stuinfo values(seq_stuinfo.nextval,‘薛东‘,‘TB07‘);

已创建 1 行。

SQL> insert into stuinfo values(seq_stuinfo.nextval,‘钱涛‘,‘TB07‘);

已创建 1 行。

--修改学生成绩表结构
SQL> alter table stuscore modify(english number(3,1),chain number(3,1),history number(3,1));

SQL> desc stuscore;
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
ID NOT NULL NUMBER
SID NOT NULL NUMBER
ENGLISH NUMBER(3,1)
CHAIN NUMBER(3,1)
HISTORY NUMBER(3,1)
EXAMTIME DATE

--插入学生成绩信息
SQL> insert into stuscore values(seq_stuscore.nextval,1,50.5,34.5,35.5,to_date(‘2014-4-4‘,‘yyyy-mm-dd‘));

已创建 1 行。

SQL> insert into stuscore values(seq_stuscore.nextval,2,70.5,64.5,85.5,to_date(‘2014-4-8‘,‘yyyy-mm-dd‘));

已创建 1 行。

SQL> insert into stuscore values(seq_stuscore.nextval,3,70.5,64.5,85.5,to_date(‘2014-4-8‘,‘yyyy-mm-dd‘));

已创建 1 行。

SQL> insert into stuscore values(seq_stuscore.nextval,4,70.5,64.5,85.5,to_date(‘2014-4-8‘,‘yyyy-mm-dd‘));

已创建 1 行。

SQL> insert into stuscore values(seq_stuscore.nextval,5,70.5,64.5,85.5,to_date(‘2014-4-8‘,‘yyyy-mm-dd‘));

已创建 1 行。

SQL> insert into stuscore values(seq_stuscore.nextval,6,70.5,64.5,85.5,to_date(‘2014-4-8‘,‘yyyy-mm-dd‘));

已创建 1 行。

SQL> insert into stuscore values(seq_stuscore.nextval,7,70.5,64.5,85.5,to_date(‘2014-4-8‘,‘yyyy-mm-dd‘));

已创建 1 行。

SQL> insert into stuscore values(seq_stuscore.nextval,8,70.5,64.5,85.5,to_date(‘2014-4-8‘,‘yyyy-mm-dd‘));

已创建 1 行。

二、简单查询、模糊查询、条件查询、单行函数

--切换sqlplus
>sqlplus
Enter user-name: system
Enter password:accp
Connected to:
Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - Production
With the Partitioning, OLAP and Data Mining options

--解锁scott测试用户
SQL> alter user scott account unlock;

User altered.

--为scott用户设置密码
SQL> alter user scott identified by tiger;

User altered.

--切换scott用户登录
SQL> conn scott;
Enter password:tiger;
Connected.
--1.基本查询
--1.1查询员工职位
SQL> select distinct job from emp;

--1.2查询每个员工的职位(员工是唯一的,职位是可以重复的)
SQL> select ename,job from emp;

--2.算术操作符
--2.1查询每一个员工的姓名、职位、年薪
SQL> select ename,job,sal*12 from emp;

--2.2查询每一个员工的姓名、职位、年薪(每个员工奖金300)
SQL> select ename,job,(sal+300)*12 as income from emp;

--2.3公司每年年给大家奖金300同时,年底都会多发一个月基本工资
SQL> select ename,job,(sal+300)*12+sal as income from emp;

--2.4.数据类表显示中文字段
SQL> select ‘员工编号:‘|| empno||‘;员工姓名:‘||ename from emp;

--3..限定查询
--3.1查询员工编号为7839员工
SQL> select empno,ename,job ,sal from emp where empno=7839;

--4.关系运算
--4.1查询工资高于1500的员工信息
select empno,ename,job ,sal from emp where sal>1500;

--4.2查询工资在1500到300之间的员工信息
select empno,ename,job ,sal from emp where sal>=1500
and sal<=3000;

--4.3查询职位是办事员CLERK 或销售人员SALESMAN的全部信息
SQL> select empno,ename,job,sal from
emp where job=‘CLERK‘ or job=‘SALESMAN‘;

--4.4查询职位是办事员CLERK或销售人员SALESMAN的信息,并且要求这些员工的工资大于1500
select empno,ename,job,sal from emp
where (job=‘CLERK‘ or job=‘SALESMAN‘) AND sal>1500;

--4.5查询所有不是办事员CLERK的员工信息
select empno,ename,job,sal from emp where job !=‘CLERK‘;

select empno,ename,job,sal from emp where job <>‘CLERK‘;

select empno,ename,job,sal from emp where not job=‘CLERK‘;

--5.判断是否为空:is (not) null
--5.1查询所有领取奖金的员工信息
select empno,ename,job,sal,comm from emp
where comm is not null;

select empno,ename,job,sal,comm from emp
where not comm is null;

--6.指定范围的判断:in操作符

--6.1查询所有不领取奖金的员工信息
SQL> select empno,ename,job,sal,comm from emp
where comm is null;

--6.2查询员工编号是7369,7566,7788的员工信息
select empno,ename,job,sal,comm from emp
where empno=7369 or empno=7566 or empno=7788;

select empno,ename,job,sal,comm from emp
where empno in(7369 ,7566 ,7788 );

--7.模糊查询like
--7.1查询员工姓名中以字母A开头的全部信息
select empno,ename,job,sal,comm from emp
where ename like ‘A%‘;

--7.2查询员工姓名中第二个字母为A的全部信息
select empno,ename,job,sal,comm from emp
where ename like ‘_A%‘;

--7.3查询员工姓名中包含字母为A的全部信息
select empno,ename,job,sal,comm from emp
where ename like ‘%A%‘;

--7.4查询员工姓名中不包含字母为A的全部信息
select empno,ename,job,sal,comm from emp
where ename not like ‘%A%‘;

--8.数据排序:默认升序asc,降序desc
--8.1 查询所有员工信息,要求工资升序排列
select empno,ename,job,sal,comm from emp
order by sal;

select empno,ename,job,sal,comm from emp
order by sal asc;

--8.2 查询所有员工信息,要求工资降序排列
select empno,ename,job,sal,comm from emp
order by sal desc;

--8.2 查询所有员工信息,要求工资sal降序排列,雇佣日期hiredate升序
select empno,ename,job,sal,comm from emp
order by sal desc,hiredate asc;

--9.单行函数
--9.1 字符函数
--(1)转换为大写:
select upper(‘hello‘) from dual;

--(2)转换为小写:
select lower(ename),sal from emp;

--(3)动态输入
SQL> select empno,ename,sal from emp where ename=‘&str‘;
Enter value for str: SMITH
old 1: select empno,ename,sal from emp where ename=‘&str‘
new 1: select empno,ename,sal from emp where ename=‘SMITH‘

EMPNO ENAME SAL
---------- ---------- ----------
7369 SMITH 800

--输入时通过upper转换成大写
SQL> select empno,ename,sal from emp where ename=upper(‘&str‘);
Enter value for str: smith
old 1: select empno,ename,sal from emp where ename=upper(‘&str‘)
new 1: select empno,ename,sal from emp where ename=upper(‘smith‘)

EMPNO ENAME SAL
---------- ---------- ----------
7369 SMITH 800

--(4)将每个员工的首字母大写,其余全部小写
select initcap(ename) from emp;

INITCAP(EN
----------
Smith
Allen
Ward
Jones

-(5)查询每个员工姓名的长度
SQL> select ename,length(ename) from emp

ENAME LENGTH(ENAME)
---------- -------------
SMITH 5
ALLEN 5

--(6)将姓名中所有的A替换为_
SQL> select replace(ename,‘A‘,‘_‘) from emp;

REPLACE(EN
----------
SMITH
_LLEN;

--(7)截取字符串
--substr(字段,开始点); 开始点是从1开始,表示从开始点开始截取到最后
SQL> select ename,substr(ename,3) from emp;

ENAME SUBSTR(ENAME,3)
---------- ----------------
SMITH ITH
ALLEN LEN

----substr(字段,开始点,长度);开始点是从1开始,
SQL> select ename,substr(ename,2,3) from emp;

ENAME SUBSTR
---------- ------
SMITH MIT
ALLEN LLE

--要求截取雇员姓名的后三个字母
select ename,substr(ename,-3) from emp;

select ename,substr(ename,length(ename)-2) from emp;

SQL> select ename,substr(ename,-3,3) from emp;

ENAME SUBSTR
---------- ------
SMITH ITH

--(8)数字函数
--round(数字|列[,保留的小数的位数] :四舍五入
SQL> select round(903.53) from dual;

ROUND(903.53)
-------------
904

--取模(取余数)
SQL> select mod(10,3) from dual;

MOD(10,3)
----------
1

SQL> select mod(9,3) from dual;

MOD(9,3)
----------
0
--舍去小数部分
SQL> select trunc(93.6) from dual;

TRUNC(93.6)
-----------
93

--(9)日期函数
--获取每个雇员到今天为止的雇佣天数
select ename,hiredate,TRUNC(sysdate-hiredate) from emp;

--获取本月最后一天
SQL> select last_day(sysdate) from dual;

LAST_DAY(SYSDA
--------------
31-12月-15

--获取下一个指定星期的日期
SQL> select next_day(sysdate,‘星期一‘) from dual;

NEXT_DAY(SYSDA
--------------
07-12月-15

--求出四个月后日期
select add_months(sysdate,4) from dual;

--求出每个雇员到今天为止的雇佣月份
--select ename, trunc(months_between(sysdate,hiredate)) from emp;

(10)转换函数
--to_char()转成字符串
SQL> select to_char(sysdate,‘yyyy-mm-dd‘) from dual;

TO_CHAR(SY
----------
2015-12-03

--分别截取年月日
SQL> select to_char(sysdate,‘yyyy-mm-dd‘) as 日期,to_char(sysdate,‘yyyy‘) as 年
2 to_char(sysdate,‘mm‘) as 月,to_char(sysdate,‘dd‘) as 日
3 from dual;

日期 年 月 日
---------- ---- -- --
2015-12-03 2015 12 03

SQL> select to_char(sysdate,‘yyyy-mm-dd‘) 日期,to_char(sysdate,‘yyyy‘) 年
2 to_char(sysdate,‘mm‘) 月,to_char(sysdate,‘dd‘) 日
3 from dual;

日期 年 月 日
---------- ---- -- --
2015-12-03 2015 12 03
--获取字符串的年月日 时分秒 ,单个值有0
SQL> select to_char(sysdate,‘yyyy-mm-dd hh24:mi:ss‘) from dual;

TO_CHAR(SYSDATE,‘YY
-------------------
2015-12-03 11:55:35

--获取字符串的年月日 时分秒,单个值没有0
SQL> select to_char(sysdate,‘fmyyyy-mm-dd hh24:mi:ss‘) from dual;

TO_CHAR(SYSDATE,‘YY
-------------------
2015-12-03 11:55:35

--查询的带金钱符号¥
SQL> select to_char(9999999999,‘L999,999,999,999‘) from dual;

TO_CHAR(9999999999,‘L999,9
--------------------------
¥9,999,999,999

--将字符串转换为date
SQL> select to_date(‘1999-12-2‘,‘yyyy-mm-dd‘) from dual;

TO_DATE(‘1999-
--------------
02-12月-99

--将字符串转为数字
SQL> select to_number(‘1‘)+to_number(‘2‘) from dual;

TO_NUMBER(‘1‘)+TO_NUMBER(‘2‘)
-----------------------------
3

时间: 2024-11-07 21:51:31

4、高级查询和函数的相关文章

数据库——基础(数据库操作,表格操作)——增加高级查询

笔记 LAMP:Linx(操作系统) A(阿帕奇)——网页的应用程序 M(Mysql):体积小,应用简单 P(PHP) 第一步:搭建网页环境——A\M\P WAMP:用WAMP搭建环境 DW:更好的显示 数据库的基本操作: 数据库——表结构——字段(列) 每一行数据成为一条数据(记录) 特点:关系型数据库,有严格的规范 1.必须有主键:能够唯一标识一条数据的字段 2 T-SQL:通用的数据库操作语句 自增长列code(主键列) ;连接键表 最后一个字段不加 ,#注释 创建表:create tab

MYSQL中的多类型查询及高级查询操作

离散查询select * from car where price=30 or price=40 or price=50 or price=60;select * from car where price in(30,40,50,60)取出数据select * from car where price not in(30,40,50,60)去掉数据 聚合函数(统计查询)select count(*) from carselect count(code) from car #取所有的数据条数sel

数据库基础学习4--表格的 增 删 改 查(简单查询与高级查询)

一.增 C:create 增加,创建,向数据库里面添加数据. insert into Fruit values('K009','苹果',3.0,'高青',90,'') insert into Fruit(Ids,Name,Price,Source,Numbers) values('K010','苹果',3.0,'高青',90) 二.改 U:update修改,从数据库表里面修改数据. update Fruit set Source='烟台' where Ids='K001' 三.删 D:delet

SQL Server T-SQL高级查询(转)

高级查询在数据库中用得是最频繁的,也是应用最广泛的.   ? 基本常用查询   --select select * from student; --all 查询所有 select all sex from student; --distinct 过滤重复 select distinct sex from student; --count 统计 select count(*) from student; select count(sex) from student; select count(di

Jeecg高级查询器

一.背景       对于用户来讲查询功能按易用性分三个层次: 1. 最简单查询操作是一个输入框,全文检索,如百度,后台实现技术使用搜索引擎,需要设计和建立索引,技术较为复杂,适用于文档和信息数据库检索,但是结果很难精确控制. 2. 其次是定义字段查询,很多企业信息系统大多用的是这种查询,针对模块特定字段的查询有针对性.使用门坎低,适用于企业内部信息管理系统模块定制. 3. 最后一种是专门针对数据模型灵活的查询编辑器,使用难度最高,但是查询结果可以灵活和精确的控制,适用于有一定IT知识并对数据相

mongodb进阶一之高级查询

上篇文章我们讲了mongodb的crud基本操作 http://blog.csdn.net/stronglyh/article/details/46812579 这篇我们来说说mongodb的进阶--------------高级查询 一:各种查询 1:条件操作符 <, <=, >, >= 这个操作符就不用多解释了,最经常使用也是最简单的. db.collection.find({ "field" : { $gt: value } } ); // 大于: fiel

Linq——高级查询方法入门

一,Lambda表达式 lambda表达式刚开始用的时候还很不习惯,因为以前用惯了那种先foreach,再逐个判断的麻烦形式,刚开始用lambda都会在脑子里转一下,变成自己让自己舒服的格式,但是写过几行代码后,就会喜欢上这种形式,首先,它比较简洁,其次,和LINQ组合起来用感觉非常贴近SQL: 二,LINQ高级查询内容简介 LINQ的写法有两种,一种是语句形式,一种是方法形式,但是语句形式支持的功能貌似不足方法强大,所以,有些时候写语句形式的LINQ表达式还要加入方法.在编译的时候,也是将语句

第三章 MySQL高级查询(一)

第三章 MySQL高级查询(一) 一.SQL语言的四个分类 1.       DML(Data Manipulation Language)(数据操作语言):用来插入,修改和删除表中的数据,如INSERT,UPDATE,DELECT. 2.       DDL(Data Definition Language)(数据定义语言):创建或删除数据库对象操作,有CREATE,DROP,ALTER三个语法组成. 3.       DQL (STructured Query Language)(数据查询语

oracle高级查询(实例基于scott用户四张表)

oracle高级查询(实例基于scott用户四张表) 分组查询 多表查询 子查询 综合实例 ======================================================================= scott用户的四张表(emp,dept,bonus,salgrade) 没有这四张表的可参考http://blog.csdn.net/love_legain/article/details/54311040进行创建 -----------------------