/*
开始学习之前,我们先导入几个文件,文件中包含了建表,添加数据,约束等等的一些内容
先导入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