oracle笔记,入门体验篇,基本的SQL-SELECT语句

/*

开始学习之前,我们先导入几个文件,文件中包含了建表,添加数据,约束等等的一些内容
先导入3个文件
在pl/sql中打开-------->command window
依次输入如下命令,注意导入文件的先后顺序,先导入del_data.sql再导入hr_cre.sql最后导入hr_popul.sql
@d:/del_data.sql;

@d:/hr_cre.sql;

@d:/hr_popul.sql;


基本的SQL-SELECT语句

学习计算机软件编程,学习软件开发:大处着眼,小处着手!
大处着眼(即跳出代码细节,不要钻牛角尖,跳出代码细节和跳出固定的思维模式,从宏观上或者是从全局大局的角度看待和分析问题),
小处着手(即动手能力以及深入代码的细节、深入代码底层核心,不囫囵吞枣,要精益求精)!

*/


/*

SQL语句分为以下三种类型:
DML: Data Manipulation Language 数据操纵语言
DDL:  Data Definition Language 数据定义语言
DCL:  Data Control Language 数据控制语言

DML用于查询与修改数据记录,包括如下SQL语句:
INSERT:添加数据到数据库中
UPDATE:修改数据库中的数据
DELETE:删除数据库中的数据
SELECT:选择(查询)数据
SELECT是SQL语言的基础,最为重要。


DDL用于定义数据库的结构,比如创建、修改或删除数据库对象,包括如下SQL语句:
CREATE TABLE:创建数据库表
ALTER  TABLE:更改表结构、添加、删除、修改列长度
DROP TABLE:删除表
CREATE INDEX:在表上建立索引
DROP INDEX:删除索引


DCL用来控制数据库的访问,包括如下SQL语句:
GRANT:授予访问权限
REVOKE:撤销访问权限
COMMIT:提交事务处理
ROLLBACK:事务处理回退
SAVEPOINT:设置保存点
LOCK:对数据库的特定部分进行锁定

*/

--
SELECT * 
FROM employees

/*

取别名(3种取别名的方式:1.列名后空格直接跟别名 2.列名后空
格加as关键字再跟别名 3.列名后空格直接跟别名,同时给别名加上双引号)
注意:as关键字可以省略
oracle中只有一个地方使用双引号,那就是取别名的时候会使用双引号

*/
SELECT SYSDATE AS "系统当前时间", SYSDATE AS 当前时间, SYSDATE 时间
FROM dual

--字符类型和日期类型的数据都是放在单引号中
SELECT 'hello 江西省赣州市于都县渡江大道XXXXX号' FROM dual --字符类型

/*

字符2会自动/隐式转换成数字2,隐式转换完后再和日期做运算,日
期可以做加减法运算,但是日期不能做乘除法运算,日期做乘除法没任何意义

*/

SELECT SYSDATE + '2', SYSDATE, SYSDATE - '2', SYSDATE + 2, SYSDATE - 2 FROM dual -- 日期做加减法运算
--日期类型的数据要放在单引号中
SELECT '2025-10-07' FROM dual --日期类型
--类型转换(日期类型转换成字符类型)
SELECT to_char(SYSDATE, 'yyyy-mm-dd') FROM dual --类型转换

--
SELECT employee_id, last_name, email, salary 
FROM employees

--dual可以理解成一个伪表
SELECT 8 * 9 FROM dual

--数字和日期可以使用算术运算符
--数字类型做算术运算
SELECT employee_id, last_name, salary, 12 * salary + 1000, 12 * (salary + 1000)
FROM employees

--日期类型一般都是做加减运算,不能做乘除运算,其实大家想下,日期做乘除运算也没太大的意义
SELECT employee_id, last_name, salary, hire_date, hire_date + 2, hire_date - 3
FROM employees

--SYSDATE表示系统当前时间
SELECT SYSDATE, SYSDATE + 1, SYSDATE - 2 FROM dual

/*
空值是无效的,未指定的,未知的或不可预知的值
空值不是空格或者0
*/

--空值不同于0,凡是空值参与的运算,结果都为空(null)
SELECT last_name, commission_pct AS "奖金率", salary, salary * (commission_pct + 1)  
FROM employees

--列的别名
SELECT employee_id AS id, last_name name, salary "Annual Salary" --as可以省略
FROM employees

--正确
SELECT department_id, last_name, salary AS sal
FROM employees
ORDER BY sal DESC --使用别名排序

--正确
SELECT department_id, last_name, salary AS "sal"
FROM employees
ORDER BY salary DESC

--会报错
SELECT department_id, last_name, salary AS "sal"
FROM employees
ORDER BY sal DESC --使用别名排序(注意:别名加了双引号后再使用别名排序会报错)

/*

连接符:
把列与列,列与字符连接在一起
用||表示。
可以用来合成列

*/
--注意:在oracle中,字符类型和日期类型的数据都是放在''单引号中,那哪里会用到双引号呢?只有在给列取别名的时候才会用到""双引号

--||符号是连接的作用,类似于java中的System.out.println(123 + "hello" + 123) //结果为123hello123
SELECT 32 || 46, 'axc' || 'wqe', 968 || 'tyu' AS "My Result"
FROM dual

--
SELECT last_name || '`s job_id is ' || job_id AS detailsinfo, last_name || '`s email is ' || email email, email 
FROM employees

--
SELECT last_name || '`s hire_date is ' || hire_date AS detail
FROM employees

--
SELECT last_name, department_id
FROM employees

--
SELECT DISTINCT last_name, department_id
FROM employees

--DISTINCT关键字表示去重(去除重复的)
SELECT DISTINCT department_id
FROM employees
--
SELECT DISTINCT (department_id)
FROM employees

--DISTINCT关键字表示去重(去除重复的)
SELECT DISTINCT department_id, employee_id
FROM employees

--
SELECT DISTINCT(department_id), employee_id
FROM employees
--
SELECT DISTINCT(department_id), (employee_id)
FROM employees

/*

什么是SQL 
1.一种语言(全称是Structural query language 结构化查询语言)
2.关键字不能缩写
3.使用语句控制数据库中的表的定义信息和表中的数据


什么是SQL*Plus
1.一种环境/一个工具
2.Oracle 的特性之一
3.关键字可以缩写
describe employees --查看employees表的表结构(可以缩写成 desc employees)
edit 可以缩写成ed

*/

/*

小总结
1. 对于日期型数据, 做 *, / 运算不合法

2. 包含空值的数学表达式的值都为空值

3. 别名使用双引号!

4. oracle 中连接字符串使用 "||", 而不是 java 中的 "+"

5. 日期和字符只能在单引号中出现. 输出 last_name`s email is email
select last_name || ' `s email is ' || email
from employees

6. distinct 关键字, 以下语法错误
select last_name, distinct department_id
from employees


*/

--以下会错误
select last_name, distinct department_id
from employees


/*

练习题

*/

--1.SQL*PLUS命令可以控制数据库吗? 否!

--2.下面的语句是否可以执行成功  可以
select last_name , job_id , salary as sal
from employees; 

--3.下面的语句是否可以执行成功  可以
select  *  from employees;
 
--4.找出下面语句中的错误  标点符号需要是英文格式下的。
--以下标点符号没有用英文的标点符号
select employee_id , last_name,
salary * 12  “ANNUAL  SALARY”
from employees;

--以下是正确的,标点符号用的都是英文的标点符号
select employee_id, last_name,
salary * 12  "ANNUAL  SALARY"
from employees;

--5.显示表departments的结构,并查询其中的全部数据
--desc departments;
select * from departments;

--6.显示出表employees中的全部job_id(不能重复)
Select distinct job_id from employees;

--显示出表employees的全部列,各个列之间用逗号连接,列头显示成OUT_PUT
SELECT last_name || ',' || job_id || ',' || salary AS "OUT_PUT"
FROM employees;

--
select employee_id || ',' || last_name || ',' || salary  OUT_PUT
from employees

/*

开始学习之前,我们先导入几个文件,文件中包含了建表,添加数据,约束等等的一些内容
先导入3个文件
在pl/sql中打开-------->command window
依次输入如下命令,注意导入文件的先后顺序,先导入del_data.sql再导入hr_cre.sql最后导入hr_popul.sql
@d:/del_data.sql;

@d:/hr_cre.sql;

@d:/hr_popul.sql;


基本的SQL-SELECT语句

学习计算机软件编程,学习软件开发:大处着眼,小处着手!
大处着眼(即跳出代码细节,不要钻牛角尖,跳出代码细节和跳出固定的思维模式,从宏观上或者是从全局大局的角度看待和分析问题),
小处着手(即动手能力以及深入代码的细节、深入代码底层核心,不囫囵吞枣,要精益求精)!

*/


/*

SQL语句分为以下三种类型:
DML: Data Manipulation Language 数据操纵语言
DDL:  Data Definition Language 数据定义语言
DCL:  Data Control Language 数据控制语言

DML用于查询与修改数据记录,包括如下SQL语句:
INSERT:添加数据到数据库中
UPDATE:修改数据库中的数据
DELETE:删除数据库中的数据
SELECT:选择(查询)数据
SELECT是SQL语言的基础,最为重要。


DDL用于定义数据库的结构,比如创建、修改或删除数据库对象,包括如下SQL语句:
CREATE TABLE:创建数据库表
ALTER  TABLE:更改表结构、添加、删除、修改列长度
DROP TABLE:删除表
CREATE INDEX:在表上建立索引
DROP INDEX:删除索引


DCL用来控制数据库的访问,包括如下SQL语句:
GRANT:授予访问权限
REVOKE:撤销访问权限
COMMIT:提交事务处理
ROLLBACK:事务处理回退
SAVEPOINT:设置保存点
LOCK:对数据库的特定部分进行锁定

*/

--
SELECT *
FROM employees

/*

取别名(3种取别名的方式:1.列名后空格直接跟别名 2.列名后空
格加as关键字再跟别名 3.列名后空格直接跟别名,同时给别名加上双引号)
注意:as关键字可以省略
oracle中只有一个地方使用双引号,那就是取别名的时候会使用双引号

*/
SELECT SYSDATE AS "系统当前时间", SYSDATE AS 当前时间, SYSDATE 时间
FROM dual

--字符类型和日期类型的数据都是放在单引号中
SELECT 'hello 江西省赣州市于都县渡江大道XXXXX号' FROM dual --字符类型

/*

字符2会自动/隐式转换成数字2,隐式转换完后再和日期做运算,日
期可以做加减法运算,但是日期不能做乘除法运算,日期做乘除法没任何意义

*/

SELECT SYSDATE + '2', SYSDATE, SYSDATE - '2', SYSDATE + 2, SYSDATE - 2 FROM dual -- 日期做加减法运算
--日期类型的数据要放在单引号中
SELECT '2025-10-07' FROM dual --日期类型
--类型转换(日期类型转换成字符类型)
SELECT to_char(SYSDATE, 'yyyy-mm-dd') FROM dual --类型转换

--
SELECT employee_id, last_name, email, salary
FROM employees

--dual可以理解成一个伪表
SELECT 8 * 9 FROM dual

--数字和日期可以使用算术运算符
--数字类型做算术运算
SELECT employee_id, last_name, salary, 12 * salary + 1000, 12 * (salary + 1000)
FROM employees

--日期类型一般都是做加减运算,不能做乘除运算,其实大家想下,日期做乘除运算也没太大的意义
SELECT employee_id, last_name, salary, hire_date, hire_date + 2, hire_date - 3
FROM employees

--SYSDATE表示系统当前时间
SELECT SYSDATE, SYSDATE + 1, SYSDATE - 2 FROM dual

/*
空值是无效的,未指定的,未知的或不可预知的值
空值不是空格或者0
*/

--空值不同于0,凡是空值参与的运算,结果都为空(null)
SELECT last_name, commission_pct AS "奖金率", salary, salary * (commission_pct + 1)  
FROM employees

--列的别名
SELECT employee_id AS id, last_name name, salary "Annual Salary" --as可以省略
FROM employees

--正确
SELECT department_id, last_name, salary AS sal
FROM employees
ORDER BY sal DESC --使用别名排序

--正确
SELECT department_id, last_name, salary AS "sal"
FROM employees
ORDER BY salary DESC

--会报错
SELECT department_id, last_name, salary AS "sal"
FROM employees
ORDER BY sal DESC --使用别名排序(注意:别名加了双引号后再使用别名排序会报错)

/*

连接符:
把列与列,列与字符连接在一起
用||表示。
可以用来合成列

*/
--注意:在oracle中,字符类型和日期类型的数据都是放在''单引号中,那哪里会用到双引号呢?只有在给列取别名的时候才会用到""双引号

--||符号是连接的作用,类似于java中的System.out.println(123 + "hello" + 123) //结果为123hello123
SELECT 32 || 46, 'axc' || 'wqe', 968 || 'tyu' AS "My Result"
FROM dual

--
SELECT last_name || '`s job_id is ' || job_id AS detailsinfo, last_name || '`s email is ' || email email, email
FROM employees

--
SELECT last_name || '`s hire_date is ' || hire_date AS detail
FROM employees

--
SELECT last_name, department_id
FROM employees

--
SELECT DISTINCT last_name, department_id
FROM employees

--DISTINCT关键字表示去重(去除重复的)
SELECT DISTINCT department_id
FROM employees
--
SELECT DISTINCT (department_id)
FROM employees

--DISTINCT关键字表示去重(去除重复的)
SELECT DISTINCT department_id, employee_id
FROM employees

--
SELECT DISTINCT(department_id), employee_id
FROM employees
--
SELECT DISTINCT(department_id), (employee_id)
FROM employees

/*

什么是SQL
1.一种语言(全称是Structural query language 结构化查询语言)
2.关键字不能缩写
3.使用语句控制数据库中的表的定义信息和表中的数据


什么是SQL*Plus
1.一种环境/一个工具
2.Oracle 的特性之一
3.关键字可以缩写
describe employees --查看employees表的表结构(可以缩写成 desc employees)
edit 可以缩写成ed

*/

/*

小总结
1. 对于日期型数据, 做 *, / 运算不合法

2. 包含空值的数学表达式的值都为空值

3. 别名使用双引号!

4. oracle 中连接字符串使用 "||", 而不是 java 中的 "+"

5. 日期和字符只能在单引号中出现. 输出 last_name`s email is email
select last_name || ' `s email is ' || email
from employees

6. distinct 关键字, 以下语法错误
select last_name, distinct department_id
from employees


*/

--以下会错误
select last_name, distinct department_id
from employees


/*

练习题

*/

--1.SQL*PLUS命令可以控制数据库吗? 否!

--2.下面的语句是否可以执行成功  可以
select last_name , job_id , salary as sal
from employees;

--3.下面的语句是否可以执行成功  可以
select  *  from employees;
 
--4.找出下面语句中的错误  标点符号需要是英文格式下的。
--以下标点符号没有用英文的标点符号
select employee_id , last_name,
salary * 12  “ANNUAL  SALARY”
from employees;

--以下是正确的,标点符号用的都是英文的标点符号
select employee_id, last_name,
salary * 12  "ANNUAL  SALARY"
from employees;

--5.显示表departments的结构,并查询其中的全部数据
--desc departments;
select * from departments;

--6.显示出表employees中的全部job_id(不能重复)
Select distinct job_id from employees;

--显示出表employees的全部列,各个列之间用逗号连接,列头显示成OUT_PUT
SELECT last_name || ',' || job_id || ',' || salary AS "OUT_PUT"
FROM employees;

--
select employee_id || ',' || last_name || ',' || salary  OUT_PUT
from employees

你可能感兴趣的:(oracle笔记,入门体验篇,基本的SQL-SELECT语句)