Oracle-SQL简单查询语句处理
- 格式:docx
- 大小:21.97 KB
- 文档页数:12
Oracle-SQL简单查询语句处理笔记一数据处理及进展–数据:是指所有能输入到计算机中并被计算机程序处理的符号的总称。
数据处理:是指对各种形式的数据进行收集、储存、加工和传播的一系列活动的综合。
其目的是从大量的、原始的数据中抽取、推导出对人们有价值的信息。
数据处理的3个阶段:•人工管理阶段•文件系统阶段•数据库系统阶段关系型数据库•数据模型–是数据库系统中,用于抽象、表示、处理现实世界中数据的一种形式架构。
•数据模型三层次概念模型:是现实世界到信息世界的第一层抽象,常用E-R 图表示。
逻辑模型:是用户从数据库所看到的模型,是具体的DBMS 所支持的数据模型,常用的包括层次模型、网状模型、关系模型。
物理模型:是面向计算机物理表示的模型,描述了数据在储存介质上的组织结构,它不但与具体的DBMS有关,而且 V1.0 还与操作系统和硬件有关关系型数据库•关系模型关系模型有关系数据结构、关系操作集合和关系完整性约束三部分组成的。
关系数据结构:在关系模型中,现实世界的实体以及实体间的各种联系均用关系来表示。
在用户看来,关系就是一张由行和列组成的二维数据表。
关系操作:包括:选择、投影、连接、增加、删除、修改等。
关系完整性约束:包括实体完整性、参照完整性和用户定义的完整性。
算术运算符•算术运算符优先级乘除优先于加减相同优先权的表达式按照从左至右的顺序依次计算括弧可以提高优先权,并使表达式的描述更为清晰空值NULL•空值NULL –空值是指一种无效的、未赋值、未知的或不可用的值。
空值不同于零或者空格。
列别名好处:方便查看用来重新命名列的显示标题,如果SELECT语句中包含计算列,通常使用列别名来重新定义列标题。
•使用列别名的方法方式1:列名列别名方式2:列名 AS 列别名•以下三种情况列别名两侧需要添加双引号列别名中包含有空格列别名中要求区分大小写列别名中包含有特殊字符连接操作符使用 || 去连接,相当于java中的 + 号呢。
1009.oracle中SQL查询语法select * from user_tables;user_tables 是Oracle 的数据字典,查看当前账户Scott拥有的信息select * from emp where ename=’SMITH’;SELECT * FROM EMP WHERE ENAME=’SMITH’;sql 语句不区分⼤⼩写,where条件区分⼤⼩写;Oracle语句可以不⽤分号SQL语句分号结尾,半⾓。
select * from emp; *不要随便⽤,数据太多,运⾏不完。
*是查看员⼯表的所有列,没有where条件查看所有⾏。
select empno,sal from emp; --逗号算连接符1、查看表结构desc emp;查看表的字段employee 员⼯empno员⼯编号ename员⼯姓名job 职位mgr员⼯上级hiredate雇佣⽇期sal薪⽔comm.提成/奖⾦deptno部门编号deptno 部门编号主键dname部门名称loc地点grade ⼯资等级losal低范围hisal⾼范围②查询语句单条件条件查询select * from emp where sal<2000;查看⼯资低于2000的的所有员⼯信息。
select * from emp where ename=’SMITH’;查看姓名是SMITH的员⼯的所有信息SELECT*FROM EMP WHERE ENAME='simth';where 语句区分⼤⼩写(数据的⼤⼩写)。
查询排序select * from emp order by sal;查看所有员⼯的⼯资,并按由低到⾼排序。
select * from emp order by sal desc;查看所有员⼯的⼯资,并按由⾼到低排序。
select * from emp order by 6;查看所有员⼯的⼯资,并按由⾼到低排序。
Oracle SQL中,使用TO_CHAR函数将科学计数法表示的数值转换为小数形式--查询语句在Oracle SQL中,可以使用TO_CHAR函数将科学计数法表示的数值转换为小数形式。
下面是一个示例查询语句:
SELECT TO_CHAR(number_column, 'FM99999999999999990.9999999999999999') AS decimal_value
FROM your_table;
在上述示例中,number_column是包含科学计数法数值的列名,your_table是你要查询的表名。
TO_CHAR函数的第一个参数是要进行格式化的数值列,第二个参数是格式模型。
在格式模型中,FM表示去除值中的前导空格,9表示数值占位符,.表示小数点。
你可以根据需要调整模型中的位数。
通过这个查询语句,科学计数法表示的数值将被转换为小数形式,并作为decimal_value列的结果返回。
注意,如果想要将结果直接作为数值处理,而不是字符串形式,可以在查询语句中使用CAST函数将其转换为合适的数值类型,例如:
SELECT CAST(TO_CHAR(number_column, 'FM99999999999999990.9999999999999999') AS NUMBER) AS decimal_value
FROM your_table;
这样,返回的结果将是数值类型的小数值。
oracle数据库分页查询sql语句Oracle数据库分页查询是在大型数据集中查询数据时一个非常重要的技术。
当我们需要从一个包含大量数据的表或视图中检索数据时,分页查询可以极大地提高数据查询的效率和性能。
接下来我们将为您介绍如何分步骤使用Oracle数据库分页查询SQL语句。
第一步:了解分页查询的基本概念在进行分页查询之前,我们需要了解一些关键的概念。
分页查询是按特定的大小和数量返回结果集的查询。
在本文中,我们将默认每一页大小为10行数据。
首先,我们需要拆分需要检索的数据集,以便按页检索。
我们需要确定数据总量,然后计算出总页数,以便我们可以按页检索数据。
第二步:编写SQL语句在Oracle数据库中,我们可以使用ROWNUM关键字将查询的结果进行限制。
ROWNUM是Oracle数据库中的行号,它允许我们限制从表中检索的行的数量。
我们可以使用以下SQL语句来检索从第1页开始的前10行数据:SELECT *FROM(SELECT a.*, ROWNUM rnFROM (SELECT * FROM table_name ORDER BY field_name) aWHERE ROWNUM <= 10 )WHERE rn >= 1;解释: 首先,我们使用订单序列进行排序,这将确保我们按顺序返回行。
其次,我们使用ROWNUM将查询结果行数限制为10行。
这里的子查询将返回前10行数据和相关行数,则在主查询中我们将第一行到第十行的数据检索出来。
第三步:实现分页查询现在我们已经可以在第一页上检索10行数据,接下来我们需要实现分页查询功能。
我们可以使用以下SQL语句来实现:SELECT *FROM(SELECT a.*, ROWNUM rnFROM (SELECT * FROM table_name ORDER BY field_name) aWHERE ROWNUM <= (pageNumber * pageSize) )WHERE rn >= ((pageNumber-1) * pageSize) + 1;解释:在这里pageNumber代表当前页码数,pageSize代表每页显示的记录数,如pageSize = 10,第1页 = 1*10,第2页=2*10。
oracle查询序列的sql语句Oracle是一种主流的关系数据库管理系统,广泛应用于各行各业的数据管理工作。
而在Oracle数据库中,序列是一种重要的构件,可以帮助我们生成唯一的数字ID,便于在数据库中进行管理。
本文将介绍关于如何查询Oracle数据库中的序列的SQL语句,帮助大家更好地进行相关操作。
首先,我们需要了解Oracle数据库中的序列是什么。
序列是一种特殊的数据库对象,其主要功能是能够生成一系列唯一的整数值。
一般情况下,我们可以通过创建序列来对某个表的主键列进行赋值。
而在查询序列的操作中,我们通常需要用到的是以下几个SQL语句:1. 创建序列在Oracle数据库中,我们可以使用如下SQL语句来创建一个新的序列:CREATE SEQUENCE sequence_nameSTART WITH 1INCREMENT BY 1NOMAXVALUENOCYCLE;这个SQL语句的作用是创建一个名为sequence_name的新序列,其起始值为1,每次递增的步长为1,最大值不设限,不允许循环使用。
2. 查看序列如果我们想要查看某个序列的当前值,可以使用如下的SQL语句:SELECT sequence_name.CURRVALFROM dual;这个SQL语句的作用是从名为dual的虚拟表中查询出sequence_name序列的当前值。
3. 查看下一个序列值如果我们想要获取某个序列的下一个值,可以使用如下的SQL语句:SELECT sequence_name.NEXTVALFROM dual;这个SQL语句的作用是从名为dual的虚拟表中查询出sequence_name序列的下一个值。
通过以上三个SQL语句的应用,我们可以很方便地查询Oracle 数据库中的序列信息。
如果我们对序列的使用有更复杂的需求,还可以结合其他SQL语句进行更详细的操作。
需要注意的是,在使用这些SQL语句的过程中,我们需要对数据库进行相关权限的授予,以确保操作的安全与可靠。
oracleSQL: Structure Query Language常见数据类型Char(n) 定长字符串Varchar2(n) 变长字符串Number(m,p) 数字类型Date 日期类型SQL语句分类1.查询语句:SELECT2.DML语句(数据操作语言)INSERT/UPDA TE/DELETE/MERGE3.DDL语句(数据定义语言)CREATE/ALTER/DROP/TRUNCATE4.DCL语句(数据控制语言)GRANT/REVOKE5.事务控制语句:COMMIT/ROLLBACK/SA VEPOINT一.SELECT 语句1.基本查询格式SELECT {*,column[alias], ...}FROM table;例子SELECT * FROM departments;SELECT department_id,department_nameFROM departments;带算数表达式的查询语句SELECT last_name,salary,salary*12FROM employees;SELECT last_name,salary,salary*12+100FROM employees;包含连接表达式的SELECT语句SELECT last_name || job_id FRM employees;SELECT last_name||' work at' || job_id FROM employees;包含字段别名的SELECT语句SELECT lastname "姓名",salary "薪水" FROM employees.包含文本字符串的SELECT语句SELECT last_name|| ' is a ' || job_id AS "Employee Details" FROM employees;去重关键字DISTINCTSELECT DISTINCT department_id FROM employees;取得日期格式的查询语句SELECT * FROM v$nls_parameters;取得当前日期日期的查询语句SELECT sysdate FROM DUAL;2.带限制条件的查询语句格式SELECT [DISTINCT] {*, column [alias], ...}FROM table[WHERE condition(s)]包含比较操作符的查询语句SELECT last_name FROM employees WHERE salary<=1500;常见操作符> < >= <= = <>BETWEEN ...ANDIN (list)LIKEIS NULL例子SELECT * FROM employees WHERE manageer_id IN(1,2,3);SELECT last_name FROM employees WHERE last_name IS NULL;包含通配符的SELECT语句%表示零或多个字符_表示一个字符例子SELECT last_name FROM employees WHERE last_name LIKE '_A%';WHERE条件的逻辑运算逻辑运算符ANDORNOT例子SELECT * FROM employee WHERE salary>1 AND job_id='C';SELECT * FROM employee WHERE job_id NOT IN('Clerk','Manager');SELECT * FROM employee WHERE (job_id="A" OR job_id='C') AND salary>1000;包含排序的查询语句排序关键字ORDER BYASC 升序缺省DESC 降序例子SELECT * FROM employees ORDER BY hire_date DESC;SELECT * FROM employees ORDER BY hire_date DESC, salary ASC;2.函数函数的基本格式Function_name(column|expression,[arg1,arg2,...])字符函数LOWER,UPPER,INITCAP,CONCA T,SUBSTR,LENGTH,INSTR,LPAD,RPAD,TRIM,REPLACE.LOW强制小写UPPER强制大学INITCAP首字母大写例子SELECT * FROM employees WHERE LOWER(last_name) ='blake';字符串连接CONCA T取子串SUBSTR找到子instr INSTR补位函数LPAD去除特殊trim TRIMreplace REPLACE例子SELECT replace('oracle SQL','oracle','training') test FROM DUAL把oracle SQL中的oracle 替换成trainingSELECT last_name,CONCAT(last_name job) CAN, LENGTH(last_name) LEN,INSTR(last_name,'A') INSFROM employeesWHERE SUBSTR(job_id,1,5)='SALES'四舍五入round截取trunc求模mod例子SELECT round(45.123,2) “小数点后两位”,round(45.123,0) “取整”FROM SYS.DUAL SELECT MOD(salary,1000) FROM employees;日期类型函数SELECT sysdate FROM DUAL;oracle中日期类型的缺省显示格式是DD-MM-YY日期计算函数MONTHS_BETWEEN,ADD_MONTHS,NEXT_DAY,LAST_DAY,ROUND,TRUCE,MONTHS_ BETWEEN转换函数类型转换只能发生在数字与字符或者日期与自负之间,数字与日期之间不能发生转换to_char---TO_CHAR(date,'fmt')TO_DA TETO_NUMBERTo_char日期转换如果有一个fm元素,可以去掉前面的零SELECT last_name,TO_CHAR(hire_date,'fmDD Month YYYY') AS HIREDATEFROM employees;数字转换SELECT TO_CHAR(salary,'$99.99') FROM employees;TO_DATESELECT TO_DATE('01-5月-04') FROM DUAL;SELECT TO_DATE('2004-5-1' ,'yyyy-mm-dd') FROM DUAL;TO_NUMBERSELECT TO_NUMBER('123456') FROM DUALSELECT TO_NUMBER('$123,456.00','$999,999,00') FROM DUAL;其他函数NVL(expr1,expr2)将空值转换为一个替换值NVL2(expr1,expr2,expr3)如果为空,返回expr2,不为空,返回expr3NULLIF(expr1,expr2)如果两个值相等,返回空,不相等,返回第一个值CASE表达式SELECT last_name,job_id,salaryCASE job_idWHEN 'IT_PROG' THEN 1.10*salaryWHEN 'ST_CLERK' THEN 1.15*salaryWHEN 'SA_REP' THEN 1.20*salaryELSE salaryEND "REVISED_SALARY"FROM employees;DECODE和CASE具有相同功能但是用法不同的函数SELECT job_id,salary,DECODE(job_id, ' A' ,salary*1.1,'B',salary*1.2,'C',salary*1.2,salary)REVISED_SALARYFROM employees;分组函数A VG求平均值COUNT求记录数MAX求最大值,对于日期类型,越早的日子被认为值越小,空值被当做无穷大处理MIN求最小值SUM求和例子SELECT A VG(commission_pct)FROM employees;GROUP BY格式SELECT column,group_functionFROM table[WHERE condition][GROUP BY group_by_expression][ORDER BY column]规则:1.分组函数不能出现在WHERE语句中,相同的功能应该由HA VING关键字实现2.出现在SELECT列表中的字段如果出现的位置不是在组函数中,那么必须出现在GROUP BY子句中3.在GROUP BY子句中出现的字段,可以不出现在查询列表中常见错误语句SELECT department_id,count(last_name) FROM employees;HA VING例子SELECT department_id,MAX(Salary)FROM employeesGROUP BY department_idHA VING MAX(salary)>1000;SELECT column,group_functionFROM table[WHERE condition][GROUP BY group_by_expression][HA VING group_condition][ORDER BY column];3.多表连接多表连接的种类等值连接,非等值连接,外连接,自连接常见错误如果做多表连接的时候没写WHERE条件,会得到两个表的笛卡尔乘积等值连接SELECT e.employee_id, st_nameFROM employees e ,departments dWHERE e.department_id=d.department_id非等值连接SELECT st_name,e.salary ,j.grade_levelFROM employees e,job_grades jWHERE e.salaryBETWEEN j.lowest_sal AND j.highest_sal;外连接左外连接将产生以表达式右边字段为依据的查询结果,也就是说,显示将以右边字段中的所有数据作为依据,显示右边表的所有数据,一集左边表与右边匹配的数据。
oracle sql 查询满足条件的1条记录全文共四篇示例,供读者参考第一篇示例:Oracle SQL 是一种用于管理和查询数据库的强大工具,通过它我们可以轻松地从数据库中检索出满足条件的记录。
在数据库中,通常会有大量的数据需要进行查询和分析,有时候我们需要找到满足特定条件的一条记录。
下面将介绍如何使用Oracle SQL 来查询并满足条件的一条记录。
我们需要了解如何编写查询语句来搜索满足条件的记录。
在Oracle SQL 中,查询语句通常使用SELECT 语句来检索数据,而WHERE 子句用于指定筛选条件。
以下是一个基本的SELECT 查询语句的结构:SELECT 列名1, 列名2, ...FROM 表名WHERE 条件;在这个语句中,我们需要指定要检索的列名和表名,然后通过WHERE 子句来定义条件。
假设我们有一个名为“员工”的表,表中包含员工的姓名、部门和工资信息。
我们想要查找工资大于5000 的员工记录,我们可以编写如下查询语句:这个查询语句将返回满足条件的所有员工记录,但是如果我们只想要找到其中的一条记录怎么办呢?在Oracle SQL 中,可以使用ROWNUM 关键字来限制返回记录的数量,通过将ROWNUM 与条件和ORDER BY 子句一起使用,可以得到满足条件的一条记录。
以下是一个示例查询语句:SELECT *FROM 员工WHERE 工资> 5000AND ROWNUM = 1ORDER BY 工资DESC;在这个查询语句中,我们限制了返回的记录数为1 条,并按照工资的降序排列。
这将返回工资最高的员工记录。
还可以使用子查询来获取满足条件的一条记录。
子查询是一个嵌套在主查询中的查询语句,可以用来进一步筛选数据。
在这个查询语句中,我们首先使用子查询获取了销售部门的员工姓名,然后在主查询中使用该姓名作为条件来获取对应的员工记录。
在使用Oracle SQL 进行查询满足条件的一条记录时,可以通过限制返回记录数量、使用ORDER BY 子句进行排序,或者使用子查询来实现。
oracle查询视图sql语句在Oracle数据库中,查询视图SQL语句可以帮助我们快速查询出符合条件的数据。
它可以实现检索出表中所有字段或者指定字段,筛选出满足条件的数据,有助于我们快速查找所需数据,更有助于数据分析和报表制作。
本文将介绍Oracle查询视图SQL语句的语法及具体应用,以及相关技巧,从而帮助读者更好的使用Oracle查询视图的SQL语句。
一、Oracle查询视图的SQL语句1.法Oracle查询视图的SQL语句的基本语法为:SELECT [字段列表]FROM图名[WHERE件][GROUP BY段][HAVING件][ORDER BY段][LIMIT数][OFFSET移量]①字段列表:SELECT子句中使用有逗号分隔的字段名称,如果为空,表示查询出所有字段②视图名:包含有查询视图的名称,多个视图可使用JOIN关键字进行连接③WHERE条件:查询条件,可以使用各种比较运算符和逻辑运算符进行条件组合④GROUP BY字段:分组字段,使用逗号分隔多个字段⑤HAVING条件:分组条件,和WHERE条件一样,也可以使用各种比较运算符和逻辑运算符进行组合⑥ORDER BY字段:排序字段,使用有逗号分隔的字段名称或字段序号,DESC表示降序,ASC表示升序⑦LIMIT行数:限制返回行数,指定查询结果的最大行数⑧OFFSET偏移量:偏移量,指定返回结果从查询结果的第几行开始2.体应用(1)索表中所有字段:SELECT * FROM图名;(2)索指定字段:SELECT段1,段2,段3 FROM图名;(3)选数据:SELECT段1,段2,段3 FROM图名 WHERE件;(4)组统计:SELECT段1,段2,合函数(字段3) FROM图名 GROUP BY段1,段2;(5)合筛选:SELECT段1,段2,合函数(字段3) FROM图名 WHERE 件 GROUP BY段1,段2 HAVING件;(6)序:SELECT段1,段2,段3 FROM图名 ORDER BY段1 ASC,段2 DESC;(7)页:SELECT段1,段2,段3 FROM图名 LIMIT 10 OFFSET 20;三、Oracle查询视图的技巧1.化复杂查询通过JOIN和子查询,可以将复杂的查询变得简单并提高查询性能。
SQL查询语句大全集锦一、简单查询简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。
它们分别说明所查询列、查询的表或视图、以及搜索条件等。
例如,下面的语句查询testtable表中姓名为“张三”的nickname字段和email字段。
代码:SELECT `nickname`,`email`FROM `testtable`WHERE `name`='张三'(一) 选择列表选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变量和全局变量)等构成。
1、选择所有列例如,下面语句显示testtable表中所有列的数据:代码:SELECT * FROM testtable2、选择部分列并指定它们的显示次序查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。
例如:代码:SELECT nickname,email FROM testtable3、更改列标题在选择列表中,可重新指定列标题。
定义格式为:列标题=列名列名列标题如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列标题:代码:SELECT 昵称=nickname,电子邮件=email FROM testtable4、删除重复行SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认为ALL。
使用DISTINCT选项时,对于所有重复的数据行在SELECT返回的结果集合中只保留一行。
5、限制返回的行数使用TOP n [PERCENT]选项限制返回的数据行数,TOP n说明返回n行,而TOP n PERCENT 时,说明n是表示一百分数,指定返回的行数等于总行数的百分之几。
例如:代码:SELECT TOP 2 * FROM `testtable`代码:SELECT TOP 20 PERCENT * FROM `testtable`(二) FROM子句FROM子句指定SELECT语句查询及与查询相关的表或视图。
oracle基础SQL语句多表查询⼦查询分页查询合并查询分组查询groupbyhaving。
select语句学习. 创建表create table user(user varchar2(20), id int);. 查看执⾏某条命令花费的时间set timing on;. 查看表的结构desc 表名;. 查询所有列select * from 表名;. 查询指定列select 某列名1,某列名2 from 表名;. 取消重复⾏select distinct 某列名1,某列名2 from 表名;其中distinct作⽤在后⾯多列,只有每⾏完全相同才会被滤去. 给某列或者某个表取别名select 某列名 as 其他名 from 表名 as 其他名;. 如何处理null值nvl函数的使⽤:select nvl(某列名,0) from 表名当此列为null时将值置为0. 对时间类型的数据的处理select 某列1,某列2 from 表名 where 列名='1-1⽉-1982';oracle默认的时间格式如上like%表⽰0到多个字符_表⽰单个字符select 某列名 from 表名 where 列名 like G%;返回⾸字母为G的列inselect 某列名 from 表名 where 列名 in(条件a,条件b,条件c);等同于 select 某列名 from 表名 where 列名 = 条件a,列名 = 条件b,列名 = 条件c;null的处理select 某列名 from 表名 where 列名 is null;不是⽤等号也不能将null写成''order byselect 某列名 from 表名 order by 列名 asc;从低到⾼asc可省略select 某列名 from 表名 order by 列名 desc;从⾼到低select 某列名 from 表名 order by 列名1 asc,列名2 desc;其中列1和列2之间的逻辑要正确select 某列名*2 as 别名 from 表名 order by 表名 asc;使⽤别名排序达到⼀个很好的效果max分组函数:在没有使⽤order by的时候select后要么全是分组函数,要么就是没有分组函数select max(列名) from emp;select 列名1 from 表名 where 列名2=(select max(列名2) from 表名);select 列名1, max(列名2) from 表名;错误,min avg sum count 使⽤类似group by 和 having的使⽤group by⽤于对查询的结果进⾏分组统计having ⽤于限制分组显⽰的结果select avg(列名),max(列名) ,列名x from 表名 group by 列名x;select avg(列名),max(列名) ,列名x,列名y from 表名 group by 列名x,列名y;先按列名x分组再按列名y分组select avg(列名),max(列名) ,列名x from 表名 group by 列名x having avg(列名)>2000;显⽰ >2000 的组1 分组函数只能出现选择列表、having、order by⼦句中2 如果在select语句中同时包含有group by ,having,order by那么他们的顺序是group by ,having,orderby3 在选择列中如果有列、表达式、和分组函数,那么这些列和表达式必须有⼀个出现在group by⼦句中,否则会出错select 列名1,avg(列名2),max(列名3) from 表名 group by 列名1 having avg(列名2)<2000;其中列名1就⼀定要出现在group by 中多表查询将表取个别名就⾏了对多张表多表查询:使⽤select时:第⼀步:select ?,?,? from talbe1 a1,table2 a2 where a1.x between a2.x and a2.y;第⼀步:select a1.x,a2.y,a1.z from talbe1 a1,table2 a2 where a1.x between a2.x and a2.y;实现的功能是:显⽰表1的x、表2的y、表1的z,条件是表1的x在表2的x和y之间;对⼀张表进⾏“多表查询”(⾃连接):将⼀张表取多个别名进⾏操作:select ?,?,? from talbe1 a1,table1 a2 where a1.x between a2.x and a2.y;数据库在执⾏每个⼦句sql是从左到右执⾏的,⼦句与⼦句先执⾏后⾯的。
oracle查询表结构sql语句1. 查询表结构的SQL语句在Oracle数据库中,可以使用以下SQL语句查询表的结构信息:1.1. 查询所有表的结构```SELECT owner, table_name, column_name, data_type, data_length, nullableFROM all_tab_columnsORDER BY owner, table_name, column_id;```该语句会返回所有表的所有列的结构信息,包括所属用户(owner)、表名(table_name)、列名(column_name)、数据类型(data_type)、数据长度(data_length)和是否可为空(nullable)等。
1.2. 查询指定表的结构```SELECT column_name, data_type, data_length, nullableFROM all_tab_columnsWHERE owner = 'SCHEMA_NAME' AND table_name = 'TABLE_NAME' ORDER BY column_id;```将上述语句中的'SCHEMA_NAME'替换为要查询表所属的用户,'TABLE_NAME'替换为要查询的表名,可以获取指定表的结构信息。
1.3. 查询表的主键信息```SELECT cols.table_name, cols.column_name, cons.constraint_nameFROM all_constraints cons, all_cons_columns colsWHERE cons.constraint_type = 'P'AND cons.constraint_name = cols.constraint_nameAND cons.owner = cols.ownerAND cols.table_name = 'TABLE_NAME'AND cols.owner = 'SCHEMA_NAME';```将上述语句中的'SCHEMA_NAME'替换为要查询表所属的用户,'TABLE_NAME'替换为要查询的表名,可以获取指定表的主键信息。
OracleSQL语法查询一、数学函数SELECT ROUND(123.35) FROM DUAL;//123SELECT TRUNC(123.45) FROM DUAL;//123SELECT ROUND(123.45,-1) FROM DUAL;//120SELECT TRUNC(123.45,-1) FROM DUAL;//120二、字符串函数SELECT LENGTH('HELLO') FROM DUAL;//5SELECT LPAD('ABC',5,'*') FROM DUAL;//**ABCSELECT REPLACE('ABCDEFG','DE','WW') S1,REPLACE('ABCDEFG','DE') S2 FROM DUAL; SELECT SUBSTR('ABCDEFG',1,3) S1,SUBSTR('ABCDEFG',5,5) S2 FROM DUAL;三、日期函数SELECT TO_CHAR(SYSDATE,'DD-MON-YY HH:MI:SS'),ADD_MONTHS(SYSDATE,3) FROM DUAL; SELECT SYSDATE,LAST_DAY(SYSDATE),LAST_DAY(SYSDATE) + 1 FROM DUAL;SELECT MONTHS_BETWEEN(SYSDATE,'25-12月-06') FROM DUAL;SELECT NEXT_DAY(SYSDATE,'星期一') FROM DUAL;1.创建用户connect system/manager@eis create user oracle_admin identified by oracle_admin;grant connect,dba to oracle_admin;alter user oracle_admin default tablespace users quota unlimited on users;alter user oracle_admin temporary tablespace temp;2.修改密码connect oracle_admin/oracle_admin@eis alter user oracle_admin identified by welcome;3.解除账号锁定connect oracle_admin/oracle_admin@eis alter user oe account unlock;connect oe/oe@eis;4.修改表空间设置(将默认表空间设置为user,临时表空间为temp)select tablespace_name,contents from dba_tablespacesorder by tablespace_name;alter user hr default tablespace users temporary tablespace temp;5.修改表空间配额connect oracle_admin/oracle_admin@eis alter user hr quota unlimited on users quota 10M on temp quota 0M on system;6.建立和删除用户connect oracle_admin/oracle_admin@eis create user dropme identified by doomed default tablespace users temporary tablespace temp quota unlimited on users;grant create table,create session to dropme;connect dropme/doomed@eiscreate table demo (name varchar2(20)) connect oracle_admin/oracle_admin@eis drop user dropme cascade;7.处理日期数据connect oracle_admin/oracle_admin create table test1 (name varchar2(20),birth date);insert into test1(name,birth)values('zhangliyong',to_date('1972-10-28','yyyy-mm-dd'));select * from test1;8.处理timestampconnect oracle_admin/oracle_admincreate table test2(name varchar2(20),birth date,t_timestamp timestamp);insert into test2(name,birth,t_timestamp)values('zhangliyong',sysdate,sysdate);commit;select * from test2;insert into test2(name,birth,t_timestamp)values('sun',sysdate,timestamp'2002-02-22 18:00:03.000123 pst');commit;select * from test2;9.判断我们所处的时区select dbtimezone from dual;一、创建表结构1、创建新表CREATE TABLE 表名(列名数据类型 [默认值|NOT NULL] 约束,列名数据类型 [默认值|NOT NULL] 约束,...)2、复制表(带数据)CREATE TABLE 表名1 AS SELECT * FROM 表名2;3、复制表结构(不带数据)CREATE TABLE 表名1 AS SELECT * FROM 表名2 WHERE 1 = 2;二、修改表结构1、添加列:ALTER TABLE 表名 ADD 列名数据类型 [默认值|NOT NULL] 约束;2、修改列ALTER TABLE 表名 MODIFY 列名数据类型 [默认值|NOT NULL] 约束;3、删除列ALTER TABLE 表名DROP COLUMN 列名4、给表重命名ALTER TABLE 表名 RENAME TO 新表名;5、给列重命名ALTER TABLE 表名 RENAME COLUMN 列名 TO 新列名;6、给列添加约束(主键、外键、唯一、检查)ALTER TABLE 表名 ADD CONSTRAINT 约束名约束类型(列名);约束类型:PRIMARY KEY/FOREIGN KEY/CHECK/UNIQUE7、删除约束ALTER TABLE 表名 DROP CONSTRAINT 约束名;8、启用或禁用约束ALTER TABLE 表名 DISABLE|ENABLE CONSTRAINT 约束名;9、把表放在或取出数据库的内存区ALTER TABLE 表名 CACHE|NOCACHE;三、删除表结构DROP TABLE 表名CASCADE CONSTRAINTS;1.INSERT (往数据表里插入记录的语句)INSERT INTO 表名(字段名1, 字段名2, ……) VALUES ( 值1, 值2, ……);INSERT INTO 表名(字段名1, 字段名2, ……) SELECT (字段名1, 字段名2, ……) FROM 另外的表名;字符串类型的字段值必须用单引号括起来, 例如: ’GOOD DAY’如果字段值里包含单引号’需要进行字符串转换, 我们把它替换成两个单引号''.字符串类型的字段值超过定义的长度会出错, 最好在插入前进行长度校验.日期字段的字段值可以用当前数据库的系统时间SYSDATE, 精确到秒或者用字符串转换成日期型函数TO_DATE(‘2001-08-01’,’YYYY-MM-DD’),TO_DATE()还有很多种日期格式, 可以参看ORACLE DOC.年-月-日小时:分钟:秒的格式YYYY-MM-DD HH24:MI:SSINSERT时最大可操作的字符串长度小于等于4000个单字节, 如果要插入更长的字符串, 请考虑字段用CLOB类型,方法借用ORACLE里自带的DBMS_LOB程序包.INSERT时如果要用到从1开始自动增长的序列号, 应该先建立一个序列号CREATE SEQUENCE 序列号的名称(最好是表名+序列号标记) INCREMENT BY 1 START WITH 1 MAXVALUE 99999 CYCLE NOCACHE;其中最大的值按字段的长度来定, 如果定义的自动增长的序列NUMBER(6),最大值为999999 INSERT 语句插入这个字段值为: 序列号的名称.NEXTVAL2.DELETE (删除数据表里记录的语句)DELETE FROM表名 WHERE 条件;注意:删除记录并不能释放ORACLE里被占用的数据块表空间. 它只把那些被删除的数据块标成unused.如果确实要删除一个大表里的全部记录, 可以用 TRUNCATE 命令, 它可以释放占用的数据块表空间TRUNCATE TABLE 表名;此操作不可回退.3.UPDATE (修改数据表里记录的语句)UPDATE表名 SET 字段名1=值1, 字段名2=值2, …… WHERE 条件;如果修改的值N没有赋值或定义时, 将把原来的记录内容清为NULL, 最好在修改前进行非空校验;值N超过定义的长度会出错, 最好在插入前进行长度校验..注意事项:A. 以上SQL语句对表都加上了行级锁,确认完成后, 必须加上事物处理结束的命令 COMMIT 才能正式生效,否则改变不一定写入数据库里.如果想撤回这些操作, 可以用命令ROLLBACK 复原.B. 在运行INSERT, DELETE 和 UPDATE 语句前最好估算一下可能操作的记录范围,应该把它限定在较小 (一万条记录) 范围内,否则ORACLE处理这个事物用到很大的回退段. 程序响应慢甚至失去响应. 如果记录数上十万以上这些操作, 可以把这些SQL语句分段分次完成, 其间加上COMMIT 确认事物处理.1.CREATE (创建表, 索引, 视图, 同义词, 过程, 函数, 数据库链接等)ORACLE常用的字段类型有:CHAR 固定长度的字符串VARCHAR2 可变长度的字符串NUMBER(M,N) 数字型M是位数总长度, N是小数的长度DATE 日期类型创建表时要把较小的不为空的字段放在前面, 可能为空的字段放在后面创建表时可以用中文的字段名, 但最好还是用英文的字段名创建表时可以给字段加上默认值, 例如 DEFAULT SYSDATE这样每次插入和修改时, 不用程序操作这个字段都能得到动作的时间创建表时可以给字段加上约束条件例如不允许重复 UNIQUE, 关键字 PRIMARY KEY2.ALTER (改变表, 索引, 视图等)改变表的名称ALTER TABLE 表名1 RENAME TO 表名2;在表的后面增加一个字段ALTER TABLE表名 ADD 字段名字段名描述;修改表里字段的定义描述ALTER TABLE表名 MODIFY字段名字段名描述;给表里的字段加上约束条件ALTER TABLE 表名ADD CONSTRAINT 约束名PRIMARY KEY (字段名);ALTER TABLE 表名 ADD CONSTRAINT 约束名 UNIQUE (字段名);把表放在或取出数据库的内存区ALTER TABLE 表名 CACHE;ALTER TABLE 表名 NOCACHE;3.DROP (删除表, 索引, 视图, 同义词, 过程, 函数, 数据库链接等)删除表和它所有的约束条件DROP TABLE 表名 CASCADE CONSTRAINTS;4.TRUNCATE (清空表里的所有记录, 保留表的结构)TRUNCATE 表名;SELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……] WHERE 条件;字段名可以带入函数例如: COUNT(*), MIN(字段名), MAX(字段名), AVG(字段名), DISTINCT(字段名), TO_CHAR(DATE字段名,'YYYY-MM-DD HH24:MI:SS')NVL(EXPR1, EXPR2)函数解释:IF EXPR1=NULLRETURN EXPR2ELSERETURN EXPR1DECODE(AA﹐V1﹐R1﹐V2﹐R2....)函数解释:IF AA=V1 THEN RETURN R1IF AA=V2 THEN RETURN R2..…ELSERETURN NULLLPAD(char1,n,char2)函数解释:字符char1按制定的位数n显示,不足的位数用char2字符串替换左边的空位字段名之间可以进行算术运算例如: (字段名1*字段名1)/3查询语句可以嵌套例如: SELECT …… FROM(SELECT …… FROM表名1, [表名2, ……] WHERE 条件) WHERE 条件2;两个查询语句的结果可以做集合操作例如: 并集UNION(去掉重复记录), 并集UNION ALL(不去掉重复记录), 差集MINUS, 交集INTERSECT分组查询SELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……] GROUP BY字段名1 [HAVING 条件] ;两个以上表之间的连接查询SELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……] WHERE表名1.字段名 = 表名2. 字段名[ AND ……] ;SELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……] WHERE表名1.字段名 = 表名2. 字段名(+) [ AND ……] ;有(+)号的字段位置自动补空值查询结果集的排序操作, 默认的排序是升序ASC, 降序是DESCSELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……]ORDER BY字段名1, 字段名2 DESC;字符串模糊比较的方法INSTR(字段名, ‘字符串’)>0字段名LIKE ‘字符串%’ [‘%字符串%’]每个表都有一个隐含的字段ROWID, 它标记着记录的唯一性.1.索引 (INDEX)CREATE INDEX 索引名ON 表名 ( 字段1, [字段2, ……] );ALTER INDEX 索引名 REBUILD;一个表的索引最好不要超过三个 (特殊的大表除外), 最好用单字段索引, 结合SQL语句的分析执行情况,也可以建立多字段的组合索引和基于函数的索引ORACLE8.1.7字符串可以索引的最大长度为1578 单字节ORACLE8.0.6字符串可以索引的最大长度为758 单字节ORACLE DOC上说字符串最大可以建索引的长度约是:数据块的大小(db_block_size)*40%2.视图 (VIEW)CREATE VIEW 视图名AS SELECT …. FROM …..;ALTER VIEW视图名 COMPILE;视图仅是一个SQL查询语句, 它可以把表之间复杂的关系简洁化.3.同义词 (SYNONMY)CREATE SYNONYM同义词名FOR 表名;CREATE SYNONYM同义词名FOR 表名@数据库链接名;4.数据库链接 (DATABASE LINK)CREATE DATABASE LINK数据库链接名CONNECT TO 用户名IDENTIFIED BY 密码USING ‘数据库连接字符串’;数据库连接字符串可以用NET8 EASY CONFIG或者直接修改TNSNAMES.ORA里定义.数据库参数global_name=true时要求数据库链接名称跟远端数据库名称一样数据库全局名称可以用以下命令查出SELECT * FROM GLOBAL_NAME;查询远端数据库里的表SELECT …… FROM 表名@数据库链接名;1.GRANT 赋于权限常用的系统权限集合有以下三个:CONNECT(基本的连接), RESOURCE(程序开发), DBA(数据库管理)常用的数据对象权限有以下五个:ALL ON 数据对象名, SELECT ON 数据对象名, UPDATE ON 数据对象名,DELETE ON 数据对象名, INSERT ON 数据对象名, ALTER ON 数据对象名GRANT CONNECT, RESOURCE TO 用户名;GRANT SELECT ON 表名 TO 用户名;GRANT SELECT, INSERT, DELETE ON表名 TO 用户名1, 用户名2;2.REVOKE 回收权限REVOKE CONNECT, RESOURCE FROM 用户名;REVOKE SELECT ON 表名 FROM 用户名;REVOKE SELECT, INSERT, DELETE ON表名 FROM 用户名1, 用户名2;子查询(SUBQUERY)是指嵌入在其他SQL语句中的一个查询。
Oracle查询语句select*from scott.emp ;1.--dense_rank()分析函数(查找每个部门工资最高前三名员工信息)select*from(select deptno,ename,sal,dense_rank()over(partition by deptno order by sal desc)a from scott.emp) where a<=3order by deptno asc,sal desc;结果:--rank()分析函数(运行结果与上语句相同)select*from(select deptno,ename,sal,rank()over(partition by deptno order by sal desc) a from scott.emp )where a<=3order by deptno asc,sal desc;结果:--row_number()分析函数(运行结果与上相同)select*from(select deptno,ename,sal,row_number()over(partition by deptno order by sal desc)a from scott.emp) where a<=3order by deptno asc,sal desc;--rows unbounded preceding 分析函数(显示各部门的积累工资总和)select deptno,sal,sum(sal)over(order by deptno asc rows unbounded preceding)积累工资总和from scott.emp ;结果:--rows 整数值 preceding(显示每最后4条记录的汇总值)select deptno,sal,sum(sal)over(order by deptno rows3 preceding)每4汇总值from scott.emp ;结果:--rows between 1 preceding and 1 following(统计3条记录的汇总值【当前记录居中】)select deptno,ename,sal,sum(sal)over(order by deptno rows between1preceding and1following)汇总值from scott.emp ; 结果:--ratio_to_report(显示员工工资及占该部门总工资的比例) select deptno,sal,ratio_to_report(sal)over(partition by deptno)比例from scott.emp ;结果:--查看所有用户select*from dba_users ;select count(*)from dba_users ;select*from all_users ;select*from user_users ;select*from dba_roles ;--查看用户系统权限select*from dba_sys_privs ;select*from user_users ;--查看用户对象或角色权限select*from dba_tab_privs ;select*from all_tab_privs ;select*from user_tab_privs ;--查看用户或角色所拥有的角色select*from dba_role_privs ;select*from user_role_privs ;-- rownum:查询10至12信息select*from scott.emp a where rownum<=3and a.empno not in(select b.empno from scott.emp b where rownum<=9);结果:--not exists;查询emp表在dept表中没有的数据select*from scott.emp a where not exists(select*from scott.dept b where a.empno=b.deptno);结果:--rowid;查询重复数据信息select*from scott.emp a where a.rowid>(select min(x.rowid) from scott.emp x where x.empno=a.empno);--根据rowid来分页(一万条数据,查询10000至9980时间大概在0.03秒左右)select*from scott.emp where rowid in(select rid from(select rownum rn,rid from(select rowid rid,empno from scott.emp order by empno desc)where rownum<10)where rn>=1)order by empno desc;结果:--根据分析函数分页(一万条数据,查询10000至9980时间大概在1.01秒左右)select*from(select a.*,row_number()over(order by empno desc) rk from scott.emp a )where rk<10and rk>=1;结果:--rownum分页(一万条数据,查询10000至9980时间大概在0.01秒左右)select*from(select t.*,rownum rn from(select*from scott.emp order by empno desc)t where rownum<10)where rn>=1;select*from(select a.*,rownum rn from(select*from scott.emp) a where rownum<=10)where rn>=5;--left outer join:左连接select a.*,b.*from scott.emp a left outer join scott.dept b on a.deptno=b.deptno ;--right outer join:右连接select a.*,b.*from scott.emp a right outer join scott.dept b on a.deptno=b.deptno ;--inner joinselect a.*,b.*from scott.emp a inner join scott.dept b on a.deptno=b.deptno ;--full joinselect a.*,b.*from scott.emp a full join scott.dept b on a.deptno=b.deptno ;select a.*,b.*from scott.emp a,scott.dept b wherea.deptno(+)=b.deptno ;select distinct ename,sal from scott.emp a group by sal having;select*from scott.dept ;select*from scott.emp ;--case when then end (交叉报表)select ename,sal,case deptno when10then'会计部'when20 then'研究部'when30then'销售部'else'其他部门'end部门from scott.emp ;结果:select ename,sal,case when sal>0and sal<1500then'一级工资'when sal>=1500and sal<3000then'二级工资'whensal>=3000and sal<4500then'三级工资'else'四级工资'end 工资等级from scott.emp order by sal desc;结果:--交叉报表是使用分组函数与case结构一起实现select姓名,sum(case课程when'数学'then分数end)数学,sum(case课程when'历史'then分数end)历史from学生group by姓名;--decode 函数select姓名,sum(decode(课程,'数学',分数,null))数学,sum(decode(课程,'语文',分数,null))语文,sum(decode(课程,'历史','分数',null))历史from学生group by姓名;--level。
oracle常用经典SQL查询常用SQL查询:1、查看表空间的名称及大小select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_sizefrom dba_tablespaces t, dba_data_files dwhere t.tablespace_name = d.tablespace_namegroup by t.tablespace_name;2、查看表空间物理文件的名称及大小select tablespace_name, file_id, file_name,round(bytes/(1024*1024),0) total_spacefrom dba_data_filesorder by tablespace_name;3、查看回滚段名称及大小select segment_name, tablespace_name, r.status,(initial_extent/1024) InitialExtent,(next_extent/1024) NextExtent,max_extents, v.curext CurExtentFrom dba_rollback_segs r, v$rollstat vWhere r.segment_id = n(+)order by segment_name;4、查看控制文件select name from v$controlfile;5、查看日志文件select member from v$logfile;6、查看表空间的使用情况select sum(bytes)/(1024*1024) as free_space,tablespace_namefrom dba_free_spacegroup by tablespace_name;SELECT A.TABLESPACE_NAME,A.BYTES TOTAL,B.BYTES USED, C.BYTES FREE, (B.BYTES*100)/A.BYTES "% USED",(C.BYTES*100)/A.BYTES "% FREE"FROM SYS.SM$TS_A V AIL A,SYS.SM$TS_USED B,SYS.SM$TS_FREE CWHERE A.TABLESPACE_NAME=B.TABLESPACE_NAME ANDA.TABLESPACE_NAME=C.TABLESPACE_NAME;7、查看数据库库对象select owner, object_type, status, count(*) count# from all_objects group by owner, object_type, status;8、查看数据库的版本Select version FROM Product_component_versionWhere SUBSTR(PRODUCT,1,6)='Oracle';9、查看数据库的创建日期和归档方式Select Created, Log_Mode, Log_Mode From V$Database;10、捕捉运行很久的SQLcolumn username format a12column opname format a16column progress format a8select username,sid,opname,round(sofar*100 / totalwork,0) || '%' as progress,time_remaining,sql_textfrom v$session_longops , v$sqlwhere time_remaining <> 0and sql_address = addressand sql_hash_value = hash_value/11。
《Oracle》考核报告姓名:班级:学号:成绩:ORACLE的SQL查询语句1、查询语句 (SELECT) 基本格式:SELECT字段名1, 字段名2, ……FROM 表名1, [表名2, ……+WHERE 条件;其中:1、字段名可以带入函数。
例如: COUNT(*),MIN(字段名),MAX(字段名), AVG(字段名),DISTINCT(字段名),TO_CHAR(DATE字段名,'YYYY-MM-DD HH24:MI:SS'),NVL(EXPR1, EXPR2)函数等。
2、字段名之间可以进行算术运算。
3、查询语句可以嵌套。
例如: SELECT …… FROM(SELECT …… FROM表名1, [表名2, ……+ WHERE 条件) WHERE 条件2;4、两个查询语句的结果可以做集合操作。
例如: 并集UNION(去掉重复记录),并集UNION ALL(不去掉重复记录),差集MINUS,交集INTERSECT。
分组查询:SELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……+GROUP BY字段名1[HAVING 条件] ;两个以上表之间的连接查询1、SELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……+WHERE 表名1.字段名= 表名2. 字段名* AND ……+ ;2、SELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……+WHERE 表名1.字段名= 表名2. 字段名(+) * AND ……] ;(有(+)号的字段位置自动补空值)查询结果集的排序操作:默认的排序是升序ASC, 降序是DESC SELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……+ORDER BY字段名1, 字段名2 DESC;字符串模糊比较的方法INSTR(字段名, ‘字符串’)>0字段名LIKE ‘字符串%’*‘%字符串%’+每个表都有一个隐含的字段ROWID, 它标记着记录的唯一性.2、查询语句 (SELECT)举例:1、各个部门平均、最大、最小工资、人数,按照部门号升序排列。
Oracle-SQL简单查询语句处理笔记一数据处理及进展–数据:是指所有能输入到计算机中并被计算机程序处理的符号的总称。
数据处理:是指对各种形式的数据进行收集、储存、加工和传播的一系列活动的综合。
其目的是从大量的、原始的数据中抽取、推导出对人们有价值的信息。
数据处理的3个阶段:•人工管理阶段•文件系统阶段•数据库系统阶段关系型数据库•数据模型–是数据库系统中,用于抽象、表示、处理现实世界中数据的一种形式架构。
•数据模型三层次概念模型:是现实世界到信息世界的第一层抽象,常用E-R 图表示。
逻辑模型:是用户从数据库所看到的模型,是具体的DBMS 所支持的数据模型,常用的包括层次模型、网状模型、关系模型。
物理模型:是面向计算机物理表示的模型,描述了数据在储存介质上的组织结构,它不但与具体的DBMS有关,而且 V1.0 还与操作系统和硬件有关关系型数据库•关系模型关系模型有关系数据结构、关系操作集合和关系完整性约束三部分组成的。
关系数据结构:在关系模型中,现实世界的实体以及实体间的各种联系均用关系来表示。
在用户看来,关系就是一张由行和列组成的二维数据表。
关系操作:包括:选择、投影、连接、增加、删除、修改等。
关系完整性约束:包括实体完整性、参照完整性和用户定义的完整性。
算术运算符•算术运算符优先级乘除优先于加减相同优先权的表达式按照从左至右的顺序依次计算括弧可以提高优先权,并使表达式的描述更为清晰空值NULL•空值NULL –空值是指一种无效的、未赋值、未知的或不可用的值。
空值不同于零或者空格。
列别名好处:方便查看用来重新命名列的显示标题,如果SELECT语句中包含计算列,通常使用列别名来重新定义列标题。
•使用列别名的方法方式1:列名列别名方式2:列名 AS 列别名•以下三种情况列别名两侧需要添加双引号列别名中包含有空格列别名中要求区分大小写列别名中包含有特殊字符连接操作符使用 || 去连接,相当于java中的 + 号呢。
消除重复行使用DISTINCT 关键字习题整理一:简单的查询语句(查询oracle已经创建的表格,使用用户scott普通用户登陆)说明:Oracle常用的测试表:(可以通过自己创建测试表测试,最好不改变自带的oracle表哈)Emp 员工表(员工编号empno,员工名字ename,工资sal,职位job,部门编号deptno,奖金comm)Dept 部门表(部门编号deptno,部门名称dname,地址loc)BONUS 奖金表(同上)练习1笔记:在关于oracle的性能问题中,使用指定的列查询(如第2题)比使用select* (如第1题)会效率高很多,虽然结果一样,但是执行起来更加优化,这与关乎到有没有命中索引的问题。
• 1.使用两种方式查询所有员工(EMP)信息select * from emp;• 2.查询(EMP)员工编号、员工姓名、员工职位、员工月薪、工作部门编号。
selectempno,ename,job,sal,deptno from emp;练习2笔记:在oracle中,sqlplus以及在sql developer中,可以使用/*注释文字*/或者 --注释文字来注释文字,在编写程序的习惯中,好的习惯是对自己的程序编写好注释,这样方便其他人查看自己的代码。
• 1.员工转正后,月薪上调20%,请查询出所有员工转正后的月薪。
select empno,ename,job,sal*(1+0.2),deptno from emp;• 2.员工试用期6个月,转正后月薪上调转正后月薪上调20%,请查询出所有员工工作第一年的年薪所得(不考虑奖金部分,年薪的试用期6个月的月薪+转正后6个月的月薪)select empno,ename,job,6*sal+6*sal*(1+0.2),deptnofrom emp;练习3错误笔记:在起别名的时候,注意,别名如果是中文,需要写上双引号,单引号是报错的。
• 1.员工试用期6个月,转正后月薪上调20%,请查询出所有员工工作第一年的所有收入(需考虑奖金部分),要求显示列标题为员工姓名,工资收入,奖金收入,总收入。
select ename "员工姓名",sal "工资收入",comm "奖金收入" ,6*sal+6*sal*(1+0.2)+12*comm "总收入" from emp;练习3• 1.员工试用期6个月,转正后月薪上调20%,请查询出所有员工工作第一年的所有收入(需考虑奖金部分),要求显示列标题为员工姓名,工资收入,奖金收入,总收入。
select ename "员工姓名",sal "工资收入",comm "奖金收入" ,6*sal+6*sal*(1+0.2)+12*comm "总收入"from emp;练习4• 1.员工试用期6个月,转正后月薪上调20%,请查询出所有员工工作第一年的所有收入(需考虑奖金部分),要求显示格式为:XXX的第一年总收入为XXX。
--笔记:需要使用连接符号||,同时,在连接符号中,需要单引号连接Select ename || '的第一年总收入为' ||(6*sal+6*sal*(1+0.2)+12*comm) from emp;• 2.查询员工表中一共有哪几种岗位类型。
--笔记:需要去掉重复的job。
distinct写在字段前边select distinct job from emp;练习5在SQL*Plus中,可以使用DESCRIBE 命令来查看表结构--使用desc table查看表结构desc emp;课后作业• 1.分别选择员工表、部门表、薪资等级表中的所有数据。
select *from emp;select * from dept;select * from bonus;• 2.分别查看员工表、部门表、薪资等级表的表结薪资等级表的表结构。
desc emp; --查看員工表desc dept;--查看部门表desc bonus;--查看薪资--第三章限制数据查询练习1• 1.查询职位为SALESMAN的员工编号、职位、入职日期。
select empno,job,hiredate from emp where job='SALESMAN';• 2.查询1985年12月31日之前入职的员工姓名及入职日期。
--笔记:在填写日期的时候,需要格式: '日-某月-年份',例如:30-12月-1985,不添加月这个中文会报错。
select empno,hiredate from emp where hiredate < '31-12月-1985';• 3.查询部门编号不在10部门的员工姓名、部门编号。
select empno,deptno from emp where deptno <> 10;练习2• 1.查询入职日期在82年至85年的员工姓名,入职日期。
select empno,hiredate from emp where hiredate between '1-1月-1982'and '31-12月-1985';• 2.查询月薪在3000到5000的员工姓名,月薪。
select ename,salfrom emp where sal between 3000 and 5000; select ename,salfrom emp where sal >=3000 and sal <=5000;• 3.查询部门编号为10或者20的员工姓名,部门编号。
select ename,deptno from emp where deptno in (10,20);select ename,deptno from emp where deptno =10 ordeptno=20;• 4.查询经理编号为7902 7566 7788 7902, 7566, 7788的员工姓名,经理编号。
select ename,mgrfrom emp where mgr in(7902,7566,7788,7902,7566,7788);练习3• 1.查询员工姓名以A开头的员工姓名。
--使用like关键字。
select ename fromemp where ename like 'A_%';• 2.查询员工姓名倒数第2个字符为T的员工姓名。
select ename fromemp where ename like '%_T_';• 3.查询奖金为空的员工姓名,奖金。
--判断是否为空,用Nullselect ename,commfrom emp where comm is null;练习4• 1.查询工资超过2000并且职位是MANAGER,或者职位是SALESMAN的员工姓名、职位、工资select ename,job,sal from emp where sal >2000 andjob='MANAGER';• 2.查询工资超过2000并且职位是 MANAGER或SALESMAN的员工姓名、职位、工资。
select ename,job,sal from emp where sal >2000 andjob='MANAGER' or job='SALESMAN';• 3.查询部门在10或者20,并且工资在3000到5000之间的员工姓名之间的员工姓名、部门、工资。
select ename,deptno,sal from emp where sal >2000 and sal<5000 and deptno in(10,20);• 4.查询入职日期在81年,并且职位不是SALES开头的员工姓名、入职日期、职位。
select ename,hiredate,job from emp where job not like'SALES_%'and hiredate <'31-12月-81' and hiredate > '1-1月-81' ;• 5.查询职位为SALESMAN或MANAGER,部门编号为10或者20,姓名包含A的员工姓名、职位、部门编号。
select ename,job,deptno from emp where job ='SALESMAN' or job ='MANAGER'and deptno in(10,20) and ename like 'A%';练习5• 1.查询部门在20或30的员工姓名,部门编号,并按照工资升序排序。