oracle可以通过sqlplus工具连接,也可以通过本地客户端界面进行访问,其他访问方式后续更新。
以下主要记录一些简单的操作:
oracle登陆,通过sqlplus /nolog无用户方式登陆:
1 C:UsersAdministrator>sqlplus /nolog 2 SQL*Plus: Release 11.2.0.1.0 Production on 星期二 3月 13 10:08:51 2018 3 Copyright (c) 1982, 2010, Oracle. All rights reserved. 4 SQL>
无用户登陆过后通过conn 用户名/密码 连接到用户对应的数据库
SQL> conn scott/password 已连接。 SQL>
如果是sys用户需要如下连接
conn sys/password as sysdba 连接sys用户
查看正在连接的用户方式:
SQL> show user; USER 为 "SCOTT"
命令行界面设置显示格式:
1 SQL> set linesize 300;设置每行显示300个字节 2 SQL> set pagesize 30;设置每页显示30行
编辑文件:
SQL> ed a.sql #编辑a.sql文件
执行a.sql文件,以下仅截出一行内容做参考:
SQL> @a.sql EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- -------------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-12月-80 800 20
当然也可以通过sql>@文件路径来执行
查看当前用户所有表的信息:
1 SQL> select * from tab; 2 3 TNAME TABTYPE CLUSTERID 4 ------------------------------ ------- ---------- 5 BONUS TABLE 6 DEPT TABLE 7 EMP TABLE 8 SALGRADE TABLE
查看scott用户下的emp表完整结构,如果此用户包含这个表,也可以通过desc emp直接查看:
1 SQL> desc scott.emp 2 名称 是否为空? 类型 3 ----------------------------------------------------------------------------------------------------------------- -------- ---------- 4 5 EMPNO NOT NULL NUMBER(4) 6 ENAME VARCHAR2(10) 7 JOB VARCHAR2(9) 8 MGR NUMBER(4) 9 HIREDATE DATE 10 SAL NUMBER(7,2) 11 COMM NUMBER(7,2) 12 DEPTNO NUMBER(2)
以上数据类型:number表示数字类型,长度为4;varchar2表示是字符串类型,容纳长度为10;date表示日期;number(7,2),其中7表示整个数字长度为7,其中小数占两位,整数占5位。
对于和我一样的初学用户,建议了解scott用户下面表的所有类型即可。
查询语句:
语法:Select * |具体的列 别名 from 表名称;
消重查询语法:
语法:Select {distinct} * | 具体的列 别名 from 表名称; # 大括号表示可选操作。但是在消除重复列的过程中,如果查询多行必须保证所有列都重复才能消除掉
1 SQL> select empno 编号 from emp; 2 3 编号 4 ---------- 5 7369 6 7499 7 7521 8 7566 9 7654 10 7698 11 7782 12 7788 13 7839 14 7844 15 7876 16 7900 17 7902 18 7934 19 20 已选择14行。
查询雇员编号,工作,显示自己想要的格式:
实现这种功能,可以使用字符串连接操作,使用"||"表示。如果加入一些显示信息的话,所有其他的固定信息使用”单引号“括起来。如下所示:
1 SQL> select '编号是' || empno || '的雇员,姓名是:'|| ename ||',工作是:' ||job from emp; 2 3 '编号是'||EMPNO||'的雇员,姓名是:'||ENAME||',工作是:'||JOB 4 -------------------------------------------------------------------------------- 5 编号是7369的雇员,姓名是:SMITH,工作是:CLERK 6 编号是7499的雇员,姓名是:ALLEN,工作是:SALESMAN 7 编号是7521的雇员,姓名是:WARD,工作是:SALESMAN 8 编号是7566的雇员,姓名是:JONES,工作是:MANAGER 9 编号是7654的雇员,姓名是:MARTIN,工作是:SALESMAN 10 编号是7698的雇员,姓名是:BLAKE,工作是:MANAGER 11 编号是7782的雇员,姓名是:CLARK,工作是:MANAGER 12 编号是7788的雇员,姓名是:SCOTT,工作是:ANALYST 13 编号是7839的雇员,姓名是:KING,工作是:PRESIDENT 14 编号是7844的雇员,姓名是:TURNER,工作是:SALESMAN 15 编号是7876的雇员,姓名是:ADAMS,工作是:CLERK 16 17 '编号是'||EMPNO||'的雇员,姓名是:'||ENAME||',工作是:'||JOB 18 -------------------------------------------------------------------------------- 19 编号是7900的雇员,姓名是:JAMES,工作是:CLERK 20 编号是7902的雇员,姓名是:FORD,工作是:ANALYST 21 编号是7934的雇员,姓名是:MILLER,工作是:CLERK 22 23 已选择14行。
查询过程中使用四则运算,例如输入每个雇员的姓名以及年薪:
1 SQL> select ename,sal*12 from emp; 2 3 ENAME SAL*12 4 ---------- ---------- 5 SMITH 9600 6 ALLEN 19200 7 WARD 15000 8 JONES 35700 9 MARTIN 15000 10 BLAKE 34200 11 CLARK 29400 12 SCOTT 36000 13 KING 60000 14 TURNER 18000 15 ADAMS 13200 16 17 ENAME SAL*12 18 ---------- ---------- 19 JAMES 11400 20 FORD 36000 21 MILLER 15600 22 23 已选择14行。
1 SQL> select '姓名是:'|| ename||':年薪:'||sal*12 from emp; 2 3 '姓名是:'||ENAME||':年薪:'||SAL*12 4 ---------------------------------------------------------------- 5 姓名是:SMITH:年薪:9600 6 姓名是:ALLEN:年薪:19200 7 姓名是:WARD:年薪:15000 8 姓名是:JONES:年薪:35700 9 姓名是:MARTIN:年薪:15000 10 姓名是:BLAKE:年薪:34200 11 姓名是:CLARK:年薪:29400 12 姓名是:SCOTT:年薪:36000 13 姓名是:KING:年薪:60000 14 姓名是:TURNER:年薪:18000 15 姓名是:ADAMS:年薪:13200 16 17 '姓名是:'||ENAME||':年薪:'||SAL*12 18 ---------------------------------------------------------------- 19 姓名是:JAMES:年薪:11400 20 姓名是:FORD:年薪:36000 21 姓名是:MILLER:年薪:15600 22 23 已选择14行。
条件查询:
语法:Select {distinct} | 具体的列 别名 from 表名称 {where 条件()}
范例:查询每月可以得到奖金的雇员信息,comm字段非空即可,这里使用is not null表示 SQL> select * from emp where comm is not null; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- -------------- ---------- ---------- ---------- 7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30 7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30 7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30 7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
1 当要查询同事满足两个要求的查询需要使用运算符。or,and等 2 范例:查询员工工资大于1500,并且获取奖金的雇员信息 3 SQL> select * from emp where comm is not null and sal>1500; 4 5 EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO 6 ---------- ---------- --------- ---------- -------------- ---------- ---------- ---------- 7 7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
sql语法中between...and...的用法:
注意:between...and...不仅支持数字,同时还支持日期
1 查找emp表中工资大于1500且小于3000所有员工的所有信息 2 SQL> select * from emp where sal between 1500 and 3000; 3 4 EMPNO ENAME JOB MGR HIREDATE SAL COMM 5 DEPTNO 6 ---------- ---------- --------- ---------- -------------- ---------- ---------- 7 ---------- 8 7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 9 30 10 7566 JONES MANAGER 7839 02-4月 -81 2975 11 20 12 7698 BLAKE MANAGER 7839 01-5月 -81 2850 13 30 14 7782 CLARK MANAGER 7839 09-6月 -81 2450 15 10 16 7788 SCOTT ANALYST 7566 19-4月 -87 3000 17 20 18 7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 19 30 20 7902 FORD ANALYST 7566 03-12月-81 3000
查找日期在81年1月1日到81年12月31日入职员工信息
1 SQL> set linesize 260 2 SQL> select * from emp where hiredate between '1-1月-81'and '31-12月-81'; 3 4 EMPNO ENAME JOB MGR HIREDATE SAL COMM 5 DEPTNO 6 ---------- ---------- --------- ---------- -------------- ---------- ---------- 7 ---------- 8 7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 9 30 10 7521 WARD SALESMAN 7698 22-2月 -81 1250 500 11 30 12 7566 JONES MANAGER 7839 02-4月 -81 2975 13 20 14 7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 15 30 16 7698 BLAKE MANAGER 7839 01-5月 -81 2850 17 30 18 7782 CLARK MANAGER 7839 09-6月 -81 2450 19 10 20 7839 KING PRESIDENT 17-11月-81 5000 21 10 22 7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 23 30 24 7900 JAMES CLERK 7698 03-12月-81 950 25 30 26 7902 FORD ANALYST 7566 03-12月-81 3000 27 20
范例:查找出姓名是smith的雇员信息
1 SQL> select * from emp where ename='SMITH'; 2 3 EMPNO ENAME JOB MGR HIREDATE SAL COMM 4 DEPTNO 5 ---------- ---------- --------- ---------- -------------- ---------- ---------- 6 ---------- 7 7369 SMITH CLERK 7902 17-12月-80 800 8 20
范例:查出雇员编号是7369,7499,7521雇员的具体信息
1 SQL> select * from emp where empno=7369 or empno=7499 or empno=7521; 2 3 EMPNO ENAME JOB MGR HIREDATE SAL COMM 4 DEPTNO 5 ---------- ---------- --------- ---------- -------------- ---------- ---------- 6 ---------- 7 7369 SMITH CLERK 7902 17-12月-80 800 8 20 9 7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 10 30 11 7521 WARD SALESMAN 7698 22-2月 -81 1250 500 12 30
以上对于制定了查询的范围,特别是针对具体的某一个值的时候,可以使用in操作符来完成
语法格式:字段 in ( 值1,值2,...,值n),同样此语句也可以做非运算 。语法格式:字段 not in ( 值1,值2,...,值n)。这里面的值同样适用于字符串操作,但是要注意,字符串操作的时候需要使用单引号('str')标识。
select * from emp where empno in(7369,7499,7521); //此查询语句结果同于上面语句的执行结果
模糊查找:在sql中主要使用like来提供模糊查找功能,想深入了解的话可以参考正则表达式部分,后续会补充更新:
like语句使用的过程中,通常使用以下两种通配符(”%“,可以匹配任意长度内容;”_“,可以匹配一个长度内容)
范例:要求查询姓名中第二个字母是m的所有员工信息。
1 SQL> select * from emp where ename like '_M%'; 2 3 EMPNO ENAME JOB MGR HIREDATE SAL COMM 4 DEPTNO 5 ---------- ---------- --------- ---------- -------------- ---------- ---------- 6 ---------- 7 7369 SMITH CLERK 7902 17-12月-80 800 8 20
要求查询出雇员信息中包含字母M的雇员信息,此时表示可以在任意位置出现字母m。
Select * from emp where ename like ‘%M%;
但是要提醒大家的是:如果在使用like过程中,没有指定查询关键字,则表示查询全部。
同样,通配符也适合日期的查找功能:
范例,查出1981年入职的雇员信息:
1 SQL> select * from emp where hiredate like '%81%'; 2 3 EMPNO ENAME JOB MGR HIREDATE SAL COMM 4 DEPTNO 5 ---------- ---------- --------- ---------- -------------- ---------- ---------- 6 ---------- 7 7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 8 30 9 7521 WARD SALESMAN 7698 22-2月 -81 1250 500 10 30 11 7566 JONES MANAGER 7839 02-4月 -81 2975 12 20 13 7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 14 30 15 7698 BLAKE MANAGER 7839 01-5月 -81 2850 16 30 17 7782 CLARK MANAGER 7839 09-6月 -81 2450 18 10 19 7839 KING PRESIDENT 17-11月-81 5000 20 10 21 7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 22 30 23 7900 JAMES CLERK 7698 03-12月-81 950 24 30 25 7902 FORD ANALYST 7566 03-12月-81 3000 26 20 27 28 已选择10行。
运算符:不等于在sql中可以使用”<>“,“!=”表示,在python中也是这两种表示方式,其他的开发语言里面通常只有"!="形式
sql中排序操作:使用order by来对相应表中具体的行进行排序:
语法格式: Select {distinct} * | 具体的列 别名 from 表名称 {where 条件($)} { order by 排序的字段1,排序的字段2 asc|desc}
范例,将emp表中员工的薪资按照从低到高进行排序:
1 SQL> select * from emp order by sal; 2 3 EMPNO ENAME JOB MGR HIREDATE SAL COMM 4 DEPTNO 5 ---------- ---------- --------- ---------- -------------- ---------- ---------- 6 ---------- 7 7369 SMITH CLERK 7902 17-12月-80 800 8 20 9 7900 JAMES CLERK 7698 03-12月-81 950 10 30 11 7876 ADAMS CLERK 7788 23-5月 -87 1100 12 20 13 7521 WARD SALESMAN 7698 22-2月 -81 1250 500 14 30 15 7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 16 30 17 7934 MILLER CLERK 7782 23-1月 -82 1300 18 10 19 7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 20 30 21 7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 22 30 23 7782 CLARK MANAGER 7839 09-6月 -81 2450 24 10 25 7698 BLAKE MANAGER 7839 01-5月 -81 2850 26 30 27 7566 JONES MANAGER 7839 02-4月 -81 2975 28 20 29 30 EMPNO ENAME JOB MGR HIREDATE SAL COMM 31 DEPTNO 32 ---------- ---------- --------- ---------- -------------- ---------- ---------- 33 ---------- 34 7788 SCOTT ANALYST 7566 19-4月 -87 3000 35 20 36 7902 FORD ANALYST 7566 03-12月-81 3000 37 20 38 7839 KING PRESIDENT 17-11月-81 5000 39 10
从高到低排序的话可以在后面加上desc,如select * from emp order by sal desc;具体结果我这边就不展示了