当前位置:   article > 正文

Oracle与MySql数据库概述、环境、sql、查询、条件_orcal和mysql的基本知识

orcal和mysql的基本知识

目录

1 数据库

1.1 历史

1.2 特点

1. 实现数据共享

2. 减少数据的冗余度

3. 数据的独立性

4. 数据实现集中控制

5. 数据一致性和可维护性,以确保数据的安全性和可靠性

6. 故障恢复

2 oracle环境

2.1 概述

2.2 服务

 2.3 界面

2.4 登录

2.5 会话

2.6 用户

 2.7 导入

 3 数据库对象

4 sql

5 select

5.3 别名

5.4 拼接

5.5 nvl

5.7 format

6 sqlplus

7 排序

8 条件查询


1 数据库

1.1 历史

数据库技术,是之前60年代开始兴起的一门信息管理自动化的新兴学科,是计算机科学中的一个重要分支。
随着计算机应用的不断发展,数据处理越来越占主导地位,数据库技术的应用也越来越广泛。
数据管理是数据库的核心任务,内容包括对数据的分类、组织、编码、储存、检索和维护。
从数据管理的角度看,数据库技术到目前共经历了以下几个阶段:
人工管理阶段
文件系统阶段
数据库系统阶段


人工管理阶段
计算机诞生的初期(20世纪50年代后期之前),这个时期的计算机主要用于科学计算。从硬件看,没有磁盘等直接存取的存储设备;从软件看,没有操作系统和管理数据的软件,数据处理方式是批处理。
这个时期数据管理的特点是:
数据不保存
该时期的计算机主要应用于科学计算,一般不需要将数据长期保存,只是在计算某一课题 时将数据输入,用完后不保存原始数据,也不保存计算结果。
没有对数据进行管理的软件系统程序员不仅要规定数据的逻辑结构,而且还要在程序中设计物理结构,包括存储结构、存取方法、输入输出方式等。因此程序中存取数据的子程序随着存储的改变而改变,数据与程序不具有一致
性。
没有文件的概念
数据的组织方式必须由程序员自行设计。

一组数据对应于一个程序,数据是面向应用的
即使两个程序用到相同的数据,也必须各自定义、各自组织,数据无法共享、无法相互利用和互相参照,从而导致程序和程序之间有大量重复的数据。
 

文件系统阶段
计算机不仅用于科学计算,而且还大量用于管理数据的阶段(从50年代后期到60年代中期)。在硬件方面,外存储器有了磁盘等直接存取的存储设备。在软件方面,操作系统中已经有了专门用于管理数据的软件,称为文件系统。
这个时期数据管理的特点是:
数据需要长期保存在外存上供反复使用
由于计算机大量用于数据处理,经常对文件进行查询、修改、插入和删除等操作,所以数据需要长期保留,以便于反复操作。
程序之间有了一定的独立性

操作系统提供了文件管理功能和访问文件的存取方法,程序和数据之间有了数据存取的接口,程序可以通过文件名和数据打交道,不必再寻找数据的物理存放位置,至此,数据有了物理结构和逻辑结构的区别,但此时程序和数据之间的独立性尚还不充分。
文件的形式已经多样化
由于已经有了直接存取的存储设备,文件也就不再局限于顺序文件,还有了索引文件、链表文件等,因而,对文件的访问可以是顺序访问,也可以是直接访问。
数据的存取基本上以记录为单位


数据库系统阶段:
从60年代后期开始。在这一阶段中,数据库中的数据不再是面向某个应用或某个程序,而是面向整个企业(组织)或整个应用的。
这个时期数据管理的特点是:
采用复杂的结构化的数据模型
数据库系统不仅要描述数据本身,还要描述数据之间的联系。这种联系是通过存取路径来实现的。
较高的数据独立性
数据和程序彼此独立,数据存储结构的变化尽量不影响用户程序的使用。
最低的冗余度
数据库系统中的重复数据被减少到最低程度,这样,在有限的存储空间内可以存放更多的数据。
数据控制功能
数据库系统具有数据的安全性,以防止数据的丢失和被非法使用;具有数据的完整性,以保护数据的正确、有效和相容;具有数据的并发控制,避免并发程序之间的相互干扰;具有数据的恢复功能,在数据库被破坏或数据不可靠时,系统有能力把数据库恢复到最近某个时刻的正确状态。


针对数据库系统,数据模型是它的核心。按照数据模型发展,数据库技术可从以下三个方面反映:
1. 第一代数据库系统 层次和网状数据库管理系统
层次和网状数据库的代表产品,是IBM公司在1969年研制出的层次模型数据库管理系统。层次数
据库是数据库系统的先驱,而网状数据库则是数据库概念、方法、技术的奠基。
2. 第二代数据库系统 关系数据库管理系统(RDBMS)
1970年,IBM公司的研究员E.F.Codd在题为《大型共享数据库数据的关系模型》的论文中提出了数据库的关系模型,为关系数据库技术奠定了理论基础。到了80年代,几乎所有新开发的数据库系统都是关系型的。真正使得关系数据库技术实用化的关键人物是James Gray。Gray在解决如何保障数据的完整性、安全性、并发性以及数据库的故障恢复能力等重大技术问题方面发挥了关键作用。关系数据库系统的出现,促进了数据库的小型化和普及化,使得在微型机上配置数据库系统成为可能。
3. 第三代数据库系统 目前此阶段仍处于发展中
随着互联网的发展和技术的不断进步,单独使用关系型数据库已经不能满足现在的需求,于是慢慢产生了很多新的数据库技术。第三代数据库支持多种数据模型,并和多种技术相结合,例如分布式计算、并行计算、人工机智、大数据计算等,同时也广泛应用在各个领域。


1.2 特点

数据库的主要特点有:

1. 实现数据共享

数据共享包含所有用户可同时存取数据库中的数据,也包括用户可以用各种方式通过接口使用数据库,并提供数据共享。


2. 减少数据的冗余度

同文件系统相比,由于数据库实现了数据共享,从而避免了用户各自建立应用文件。减少了大量重复数据,减少了数据冗余,维护了数据的一致性。


3. 数据的独立性

数据的独立性包括数据库中数据库的逻辑结构和应用程序相互独立,也包括数据物理结构的变化不影响数据的逻辑结构。


4. 数据实现集中控制

文件管理方式中,数据处于一种分散的状态,不同的用户或同一用户在不同处理中其文件之间毫无关系。利用数据库可对数据进行集中控制和管理,并通过数据模型表示各种数据的组织以及数据间的联系。


5. 数据一致性和可维护性,以确保数据的安全性和可靠性

安全性控制:以防止数据丢失、错误更新和越权使用;
完整性控制:保证数据的正确性、有效性和相容性;
并发控制:使在同一时间周期内,允许对数据实现多路存取,又能防止用户之间的不正常
交互作用;
故障的发现和恢复:由数据库管理系统提供一套方法,可及时发现故障和修复故障;


6. 故障恢复

由数据库管理系统提供一套方法,可及时发现故障和修复故障,从而防止数据被破坏。数据库系统能尽快恢复数据库系统运行时出现的故障,可能是物理上或是逻辑上的错误。比如对系统的误操作造成的数据错误等。


2 oracle环境

2.1 概述

1977年6月,Larry Ellison(拉里,埃里森)与Bob Miner和Ed Oates在硅谷共同创办了一家名为软件开发
实验室(Software Development Laboratories,SDL)的计算机公司,这就是ORACLE公司的前身。
如今,ORACLE(甲骨文)公司,已经是全球最大的企业级软件公司,它的软件和硬件产品众多,其中
oracle数据库更是其核心的软件产品,同时它还收购了SUN公司,从而获取了对java语句的“掌控权”。
作为企业级数据库的主打产品,Oracle数据库在众多关系型数据库之中,表现突出,性能优越。但是
oracle数据库的价格昂贵,如果再考虑到搭载oracle的服务器和存储设备的话,那么需要付出的成本也会
更高。
oracle的版本很多,除了这些商用的收费版本之后,还有一些免费版本,例如我们现在安装使用的版本。


2.2 服务

Oracle数据库安装成功后,系统中会增加几个和oracle相关的服务:

这里面有俩个服务较为重要:
OracleServiceXE服务,如果不启动的话,Oracle无法正常使用,也不能使用sqlplus登录到oracle数据库中
OracleXETNSListener服务,如果不启动的话,就无法使用oracle自带管理系统登录到数据库中,之后也无法在代码中使用JDBC连接到数据库中
服务界面,可以从控制面板中找到并打开,也可以在运行(windows键+R)中输入命令
(services.msc)


 2.3 界面

Oracle自带管理系统登录地址:http://127.0.0.1:8080/apex/
成功安装了oracle
相关服务已经启动
8080端口没有被占用

可以使用 system 用户登录,登录密码是安装oracle过程中,自己手动输入的密码:

 登录后,可以界面来创建自己的账号:
例如,

 

 输入用户名和密码,选中赋予的权限,然后点击创建即可:

 注意,自己单独使用时,密码不要写的太复杂了,建议和用户名一致,这样方便记忆
注意,之后尽量使用自己新建的账户登录,不要使用管理员账户,因为权限太大,容易误操作

登录后,可以界面来执行sql语句:
 

 

 

 在编辑框中,用鼠标选中要执行的sql语句,然后ctrl+enter 即可执行被选中的sql语句

2.4 登录

sqlplus 是oracle自带的工具,可以使用其命令登录到oracle数据中,并执行用户编写的sql语句。
查看系统中 sqlplus 命令的所在位置:

 在 sqlplus 中,使用指定账号,登录到oracle数据库中:
例如,

  1. sqlplus 用户名/密码
  2. //普通用户登录
  3. sqlplus briup/密码
  4. //管理员用户登录
  5. sqlplus system/密码
  6. //使用DBA的身份登录,这种情况不需要密码,但是这种情况需要当操作系统的用户有权限才行
  7. sqlplus "/as sysdba"

登录成功后,可以查看当前登录的账号是谁:
 

show user

登录成功后,如果要清屏:
 

  1. //Windows系统中
  2. $CLS
  3. //或者
  4. $cls
  5. //Ubuntu系统中
  6. !clear

登录成功后,也可以直接退出:
 

exit

2.5 会话

登录成功后,默认的会话是中文的:

 可以通过命令修改当前会话的语言环境: 会话修改为英文环境

alter session set nls_language=english;

 也可以修改回来:修改为简体中文环境

alter session set nls_language='simplified chinese';

2.6 用户

创建用户:
使用管理员登录后,还可以使用命令创建一个新的用户,并设置密码以及授权

  1. //创建用户test1,设置密码test1
  2. create user test1 identified by test1;
  3. //把角色connect和resource授权给test1账号
  4. grant connect,resource to test1;

 这里角色代表相关权限的集合:
connect 角色,基本的连接
resource 角色,程序开发
DBA 角色,数据库管理

切换用户:
创建成功后,界面中也可以看到:

  1. conn
  2. //或者
  3. conn 用户名/密码

创建成功后,界面中也可以看到:
 

 删除用户:

drop user test1 cascade;

 2.7 导入

在后的练习和使用中,会涉及到三张表,需要把表和对应的数据导入到oracle中

 

 

 查看当前用户,有哪些表:

  1. show user;
  2. select table_name from user_tables;

 需要导入的sql文件: table.sql

  1. alter session set nls_language=english;
  2. CREATE TABLE s_dept(
  3. id NUMBER(7) CONSTRAINT s_dept_id_nn NOT NULL,
  4. name VARCHAR2(25) CONSTRAINT s_dept_name_nn NOT NULL,
  5. region_id NUMBER(7),
  6. CONSTRAINT s_dept_id_pk PRIMARY KEY (id),
  7. CONSTRAINT s_dept_name_region_id_uk UNIQUE (name, region_id)
  8. );
  9. INSERT INTO s_dept VALUES (10, 'Finance', 1);
  10. INSERT INTO s_dept VALUES (31, 'Sales', 1);
  11. INSERT INTO s_dept VALUES (32, 'Sales', 2);
  12. INSERT INTO s_dept VALUES (33, 'Sales', 3);
  13. INSERT INTO s_dept VALUES (34, 'Sales', 4);
  14. INSERT INTO s_dept VALUES (35, 'Sales', 5);
  15. INSERT INTO s_dept VALUES (41, 'Operations', 1);
  16. INSERT INTO s_dept VALUES (42, 'Operations', 2);
  17. INSERT INTO s_dept VALUES (43, 'Operations', 3);
  18. INSERT INTO s_dept VALUES (44, 'Operations', 4);
  19. INSERT INTO s_dept VALUES (45, 'Operations', 5);
  20. INSERT INTO s_dept VALUES (50, 'Administration', 1);
  21. COMMIT;
  22. ------------------------------------------
  23. CREATE TABLE s_emp(
  24. id NUMBER(7) CONSTRAINT s_emp_id_nn NOT NULL,
  25. last_name VARCHAR2(25) CONSTRAINT s_emp_last_name_nn NOT NULL,
  26. first_name VARCHAR2(25),
  27. userid VARCHAR2(8),
  28. start_date DATE,
  29. comments VARCHAR2(255),
  30. manager_id NUMBER(7),
  31. title VARCHAR2(25),
  32. dept_id NUMBER(7),
  33. salary NUMBER(11, 2),
  34. commission_pct NUMBER(4, 2),
  35. CONSTRAINT s_emp_id_pk PRIMARY KEY (id),
  36. CONSTRAINT s_emp_userid_uk UNIQUE (userid),
  37. CONSTRAINT s_emp_commission_pct_ck
  38. CHECK (commission_pct IN (10, 12.5, 15, 17.5, 20)));
  39. INSERT INTO s_emp VALUES (1, 'Velasquez', 'Carmen', 'cvelasqu',to_date('03-MAR-
  40. 90 8:30', 'dd-mon-yy hh24:mi'), NULL, NULL, 'President',50, 2500, NULL);
  41. INSERT INTO s_emp VALUES (2, 'Ngao', 'LaDoris', 'lngao','08-MAR-90', NULL, 1,
  42. 'VP, Operations',41, 1450, NULL);
  43. INSERT INTO s_emp VALUES (3, 'Nagayama', 'Midori', 'mnagayam','17-JUN-91', NULL,
  44. 1, 'VP, Sales',31, 1400, NULL);
  45. INSERT INTO s_emp VALUES (4, 'Quick-To-See', 'Mark', 'mquickto','07-APR-90',
  46. NULL, 1, 'VP, Finance',10, 1450, NULL);
  47. INSERT INTO s_emp VALUES (5, 'Ropeburn', 'Audry', 'aropebur','04-MAR-90', NULL,
  48. 1, 'VP, Administration',50, 1550, NULL);
  49. INSERT INTO s_emp VALUES (6, 'Urguhart', 'Molly', 'murguhar','18-JAN-91', NULL,
  50. 2, 'Warehouse Manager',41, 1200, NULL);
  51. INSERT INTO s_emp VALUES (7, 'Menchu', 'Roberta', 'rmenchu','14-MAY-90', NULL,
  52. 2, 'Warehouse Manager',42, 1250, NULL);
  53. INSERT INTO s_emp VALUES (8, 'Biri', 'Ben', 'bbiri','07-APR-90', NULL, 2,
  54. 'Warehouse Manager',43, 1100, NULL);
  55. INSERT INTO s_emp VALUES (9, 'Catchpole', 'Antoinette', 'acatchpo','09-FEB-92',
  56. NULL, 2, 'Warehouse Manager',44, 1300, NULL);
  57. INSERT INTO s_emp VALUES (10, 'Havel', 'Marta', 'mhavel','27-FEB-91', NULL, 2,
  58. 'Warehouse Manager',45, 1307, NULL);
  59. INSERT INTO s_emp VALUES (11, 'Magee', 'Colin', 'cmagee','14-MAY-90', NULL, 3,
  60. 'Sales Representative',31, 1400, 10);
  61. INSERT INTO s_emp VALUES (12, 'Giljum', 'Henry', 'hgiljum','18-JAN-92', NULL, 3,
  62. 'Sales Representative',32, 1490, 12.5);
  63. INSERT INTO s_emp VALUES (13, 'Sedeghi', 'Yasmin', 'ysedeghi','18-FEB-91', NULL,
  64. 3, 'Sales Representative',33, 1515, 10);
  65. INSERT INTO s_emp VALUES (14, 'Nguyen', 'Mai', 'mnguyen','22-JAN-92', NULL, 3,
  66. 'Sales Representative',34, 1525, 15);
  67. INSERT INTO s_emp VALUES (15, 'Dumas', 'Andre', 'adumas','09-OCT-91', NULL, 3,
  68. 'Sales Representative',35, 1450, 17.5);
  69. INSERT INTO s_emp VALUES (16, 'Maduro', 'Elena', 'emaduro','07-FEB-92', NULL, 6,
  70. 'Stock Clerk',41, 1400, NULL);
  71. INSERT INTO s_emp VALUES (17, 'Smith', 'George', 'gsmith','08-MAR-90', NULL, 6,
  72. 'Stock Clerk',41, 940, NULL);
  73. INSERT INTO s_emp VALUES (18, 'Nozaki', 'Akira', 'anozaki','09-FEB-91', NULL, 7,
  74. 'Stock Clerk',42, 1200, NULL);
  75. INSERT INTO s_emp VALUES (19, 'Patel', 'Vikram', 'vpatel','06-AUG-91', NULL, 7,
  76. 'Stock Clerk',42, 795, NULL);
  77. INSERT INTO s_emp VALUES (20, 'Newman', 'Chad', 'cnewman','21-JUL-91', NULL, 8,
  78. 'Stock Clerk',43, 750, NULL);
  79. INSERT INTO s_emp VALUES (21, 'Markarian', 'Alexander', 'amarkari','26-MAY-91',
  80. NULL, 8, 'Stock Clerk',43, 850, NULL);
  81. INSERT INTO s_emp VALUES (22, 'Chang', 'Eddie', 'echang','30-NOV-90', NULL, 9,
  82. 'Stock Clerk',44, 800, NULL);
  83. INSERT INTO s_emp VALUES (23, 'Patel', 'Radha', 'rpatel','17-OCT-90', NULL, 9,
  84. 'Stock Clerk',34, 795, NULL);
  85. INSERT INTO s_emp VALUES (24, 'Dancs', 'Bela', 'bdancs','17-MAR-91', NULL, 10,
  86. 'Stock Clerk',45, 860, NULL);
  87. INSERT INTO s_emp VALUES (25, 'Schwartz', 'Sylvie', 'sschwart','09-MAY-91',
  88. NULL, 10, 'Stock Clerk',45, 1100, NULL);
  89. COMMIT;
  1. CREATE TABLE s_region(
  2. id NUMBER(7) CONSTRAINT s_region_id_nn NOT NULL,
  3. name VARCHAR2(50) CONSTRAINT s_region_name_nn NOT NULL,
  4. CONSTRAINT s_region_id_pk PRIMARY KEY (id),
  5. CONSTRAINT s_region_name_uk UNIQUE (name)
  6. );
  1. INSERT INTO s_region VALUES (1, 'North America');
  2. INSERT INTO s_region VALUES (2, 'South America');
  3. INSERT INTO s_region VALUES (3, 'Africa / Middle East');
  4. INSERT INTO s_region VALUES (4, 'Asia');
  5. INSERT INTO s_region VALUES (5, 'Europe');
  6. COMMIT;

注意,第一行的会话环境的修改!
将 table.sql 文件放置在桌面上,并且使用 sqlplus 命令从桌面路径下登录到oracle:

 注意,sql文件需要放到桌面上,因为默认使用的是相对路径
注意,除此之外,也可以直接用鼠标把sql文件拖拽到命令窗口中,那么就会默认使用绝对路径

然后使用导入sql文件命令: @table.sql

 导入完成后,查看是否成功:

 注意,oracle中的表名、列名(字段名)、SQL语句等是不区分大小写的(大小写不敏感)

 3 数据库对象

数据库对象是数据库的组成部分,常常用 CREATE 命令进行创建,可以使用 ALTER 命令修改,用 DROP
执行删除操作。常见的数据库对象有:
用户(user)
表(table)
视图(view)
索引(index)
触发器(trigger)
存储过程(procedure)
同义词(synonym)
序列(sequence)
在学习的过程中,所接触到的内容,都与这些oralce数据库对象有关系

4 sql

SQL(Structured Query Language),结构化查询语言,是专门操作关系型数据库的一种语言
SQL语言属于第四代编程语言:
第一代编程语言,机器语言,是面向机器的,通过二进制代码对其计算机操作
第二代编程语言, 汇编语言,使用指令对应的符号,来代替二进制代码
第三代编程语言,高级开发语言 ,例如C、C++ Java等,语言更加简单,操作更方便
第四代编程语言,只告诉计算机需要做什么,不需要告诉计算机怎么做,更加接近自然语言
例如,
 

select name from tbl_student;

这时候只是告诉计算机,我们需要查看表中的name字段的值,但是没说该怎么做。
 

sql语句的分类:
DQL (Data Query Language),数据查询语言
用于检索数据库中的数据,主要是 SELECT 语句
DML (Data Manipulation Language),数据操纵语言
用于改变数据库中的数据,主要是 INSERT , UPDATE , DELETE 语句
DDL(Data Define Langage),数据定义语言
用来建立、修改、删除数据库对象,主要是 CREATE 、 ALTER 、 DROP 、 TRUNCATE 语句
TCL (Transaction Control Language),事务控制语言
用于维护数据的一致性,主要是 COMMIT , ROLLBACK , SAVEPOINT 语句
DCL(Data Control Language),数据控制功能
用于执行权限授予和权限收回操作,主要是 GRANT , REVOKE 语句
注意,DML语句需要事务的支持(产生事务),DDL语句会自动提交事务


sql、sqlplus、pl/sql的区别:
sql,结构化的查询语句,操作关系型数据库的语言
sqlplus,oracle数据库软件自带工具,可以接收用户输入的sql语句,然后将sql执行结果显示出来
pl/sql,程序化的sql语句,在sql语句的基础上加入一定的逻辑操作,如 if for 等


注意,不同的关系型数据库中,sql语句的基本语法都是相同的,但是在特殊的情况下,也会有稍许差异,后面遇到了在具体来分析。


5 select

数据库中的表,分为行和列,数据就存储这这个结构中:

 数据库中数据,就是存储一张一张,这样的表中:

5.1 基础
select语句,可以通过列名,把一行行的数据给查询出来,语法为:
 

select [distinct] *{col_name1,col_name2,..} from tb_name;

注意1,语法中出现的中括号[],表示该部分可有可无
注意2,*号表示所有列
注意3,col_name1,col_name2代表列名,如果有多个可以逗号分开


例如,查看s_dept表中的所有记录
 

  1. select *
  2. from s_dept;

例如,查看s_dept表中所有记录的指定三个字段:id,name,region_id
 

  1. select id,name,region_id
  2. from s_dept;

例如,查看所有员工的id,名字(last_name)和薪资(salary)
 

  1. select id,last_name,salary
  2. from s_emp;

5.2 运算
例如,查看每个员工的员工id,名字和年薪
 

  1. select id,last_name,salary*12
  2. from s_emp;

注意,select语句永远不会对原始数据进行修改
例如,查看每个员工的员工id,名字和月薪涨100以后的年薪
 

  1. select id,last_name,(salary+100)*12
  2. from s_emp;

5.3 别名

语法:
 

select old_column [as] new_column_name from tb_name;

注意,中括号里面的as是可选的
例如,查看员工的员工id,名字和年薪,年薪列名为annual
 

  1. select id,last_name,salary*12 as annual
  2. from s_emp;

或者
 

  1. select id,last_name,salary*12 annual
  2. from s_emp;

5.4 拼接

 语法:
 

select col_name||'spe_char'||col_name from tb_name

例如,查看员工的员工id,全名
 

  1. select id,first_name||last_name
  2. from s_emp;

例如,查看员工的员工id,全名和职位名称,全名和职位名称合并成一列显示,且格式为:姓名,职位、名称
 

  1. select id,first_name||last_name
  2. from s_emp;

例如,查看员工的员工id,全名和职位名称,全名和职位名称合并成一列显示,且格式为:姓名,职位、名称
 

  1. select id,first_name||' '||last_name||','||title as name
  2. from s_emp;

注意,数据库中的字符串,需要使用单引号括起来

5.5 nvl

使用nvl函数可以将null进行替换
语法
 

select nvl(col_name,change_value) from tb_name;

例如,查看所有员工的员工id,名字和提成,如果提成为空,显示成0
 

  1. select id,last_name,nvl(commission_pct,0) commission_pct
  2. from s_emp;

5.6 distinct
该关键字可以将重复数据去除。
语法:
 

  1. select distinct col_name,col_name...
  2. from tb_name;

注意,distinct关键词只能放在select关键词后面
例如,下面sql的语法错误!
 

  1. select id,distinct title
  2. from s_emp;

如果 distinct 关键词后面如果出现多列,表示多列联合

  1. select distinct dept_id,title
  2. from s_emp;


复的记录。
例如,
 

  1. //test表中的数据为:
  2. id id2
  3. 1 2
  4. 1 3
  5. 2 4
  6. 3 4
  7. 3 4
  8. select distinct id,id2
  9. from test;
  10. //查询结果为:
  11. id id2
  12. 1 2
  13. 1 3
  14. 2 4

例如,查看所有员工的职位名称和部门id,同职位同部门的只显示一次
 

  1. select distinct dept_id,title
  2. from s_emp;

5.7 format

使用 format 可以将查询结果显示的宽度进行调整。
例如,
 

  1. select id,last_name
  2. from s_emp;

运行结果为:
 

  1. ID LAST_NAME
  2. ---------- --------------------------------------------------
  3. 1 Velasquez
  4. 2 Ngao
  5. 3 Nagayama
  6. 4 Quick-To-See
  7. 5 Ropeburn
  8. 6 Urguhart
  9. 7 Menchu

使用 format 调整last_name列所占的宽度,其实就是“-”的个数
例如,
 

  1. //表示last_name列的下方有15个“-”
  2. column last_name format a15
  3. //或者简写为
  4. col last_name for a15;
  5. select id,last_name
  6. from s_emp;

运行结果:
 

  1. ID LAST_NAME
  2. ---------- ---------------
  3. 1 Velasquez
  4. 2 Ngao
  5. 3 Nagayama
  6. 4 Quick-To-See
  7. 5 Ropeburn
  8. 6 Urguhart
  9. 7 Menchu

可以清除设置的格式:
 

  1. clear column
  2. //或者
  3. clear col

注意,format只能设置字符类型的字段列


6 sqlplus

使用 sqlplus 登录之后,可以使用buff(缓存)来存储/执行/修改上一条运行的sql语句 。
buff中只能存储一条sql语句,但是这条sql语句可能有很多行
每次放入新的sql语句,会把之前的覆盖掉
每次执行sql语句,都会把这个sql语句放到buff里面
sqlplus 相关的命令:
l 查看缓存中的sql语句
a 在[定位]的那一行后面追加新的内容
i 在[定位]的那一行下面插入新的一行
c 替换[定位]的那一行中的某些字符串 ,格式为:c/老的字符串/新的字符串
del 删除[定位]的那一行内容
n 后面加内容可以重写这一行
$ 后面跟一个终端命令,例如$cls清屏,linux中使用!
/ 执行缓存sql命令
注意,使用 l 命令查看buff中的sql后,可以直接输入行数,然后回车,这就是定位到了这一行


注意,使用 l 命令查看buff中的sql后,可以直接输入行数,然后回车,这就是定位到了这一行
如果要清空buff中的sql:
 

clear buffer

其他的一些命令:
 

  1. save test.sql //buff中的sql语句保存在test.sql文件中
  2. get test.sql //test.sql中的内容在加载到buff中,但是没有运行
  3. start test.sql //test.sql中的内容在加载到buff中并且执行
  4. @test.sql //test.sql中的内容在加载到buff中并且执行
  5. edit file_name //使用系统默认编辑器去编辑文件

spool 命令:可以记录操作的过程
 

  1. spool file_name //将接下来的sql语句以及sql的运行结果保存到文件中
  2. sql1
  3. result1
  4. sql2
  5. result2
  6. ...
  7. spool off //关闭spool功能

7 排序

查询数据的时候进行排序,就是根据某个字段的值,按照升序或者降序的情况将记录显示出来
语法:
 

  1. select col_name,...
  2. from tb_name
  3. order by col_name [asc|desc]

注意1,order by语句,只对查询记录显示调整,并不改变查询结果,所以执行权最低,最后执行
注意2,排序的默认值是asc:表示升序desc:表示降序
注意3,如果有多个列排序,后面的列排序的前提是前面的列排好序以后有重复(相同)的值。
例如,
 

  1. //假设test表中有以下数据
  2. id id2
  3. 1 2
  4. 2 3
  5. 3 4
  6. 4 1
  7. 4 2
  8. select id,id2
  9. from test
  10. order by id asc,id2 desc;
  11. //查询结果:
  12. id id2
  13. 1 2
  14. 2 3
  15. 3 4
  16. 4 2
  17. 4 1

注意,先升序排第一列,如果第一列有重复的值,再降序排第二列,以此类推
注意,上面的asc可以省去不写,因为是默认值


例如,查看员工的id,名字和薪资,按照薪资的降序排序显示,工资相同就按名字升序排
 

  1. select id,last_name,salary
  2. from s_emp
  3. order by salary desc,last_name;

8 条件查询

语法:
 

  1. select col_name,...
  2. from tb_name
  3. where col_name 比较操作表达式

注意1,限制查询条件,使用where子句
注意2,条件可以多个,使用逻辑操作符或者小括号进行条件的逻辑整合
注意3,where子句的优先级别最高
注意4,比较操作表达式由操作符和值组成


逻辑比较操作符
 

= > < >= <= !=
不等于操作符,以下三个都表示不等于的意思,经常用的是 !=
!= <> ^=

例如,查看员工工资小于1000的员工id和名字
 

  1. select id,last_name,salary
  2. from s_emp
  3. where salary < 1000;

between and 操作符,表示在俩个值之间
例如,查看员工工资在700 到 1500之间的员工id和名字
 

  1. select id,last_name,salary
  2. from s_emp
  3. where salary between 700 and 1500;

in() ,表示值在一个指定的列表中
例如,查看员工号1,3,5,7,9员工的工资

  1. select id,last_name,salary
  2. from s_emp
  3. where id in (1,3,5,7,9);

like ,模糊查询,在值不精确的时候使用
% ,通配0到多个字符
_ ,通配一个字符,并且是一定要有一个字符
\ ,转义字符,需要使用 escape 关键字指定,转义字符只能转义后面的一个字符


例如,查看员工名字以C字母开头的员工的id,工资

  1. select id,last_name,salary
  2. from s_emp
  3. where last_name like 'C%';

注意,数据库中的字符串,需要使用单引号括起来


例如,查看员工名字长度不小于5,且第四个字母为n字母的员工id和工资
 

  1. select id,last_name,salary
  2. from s_emp
  3. where last_name like '___n_%';

例如,查看员工名字中包换一个_的员工id和工资

  1. select id,last_name,salary
  2. from s_emp
  3. where last_name like '%\_%' escape '\';

is null ,判断值为null的时候使用,null值的判断不能使用等号
例如,查看员工提成为为空的员工的id和名字
 

  1. select id,last_name,commission_pct
  2. from s_emp
  3. where commission_pct is null;

注意,类似的,还有 is not null


and 、 or ,逻辑操作符,当条件有多个的时候可以使用
注意,and比or的优先级要高
例如,查看员工部门id为41且职位名称为Stock Clerk(存库管理员)的员工id和名字
 

  1. select id,last_name,dept_id,title
  2. from s_emp
  3. where
  4. dept_id = 41
  5. and
  6. title = 'Stock Clerk';

例如,查看员工部门为41 或者 44号部门,且工资大于1000的员工id和名字
 

  1. select id,last_name,dept_id,title
  2. from s_emp
  3. where
  4. salary > 1000
  5. and
  6. ( d
  7. ept_id = 41
  8. or
  9. dept_id = 44
  10. );

例如,查看员工部门为41且工资大于1000,或者44号部门的员工id和名字
 

  1. select id,last_name,dept_id,title
  2. from s_emp
  3. where
  4. salary > 1000
  5. and
  6. dept_id = 41
  7. or
  8. dept_id = 44;

注意,以上俩个sql语句,执行的结果是不一样的,它们的区别就是第一个sql在条件中多了个小括号
 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/458649
推荐阅读
相关标签
  

闽ICP备14008679号