SQL(Struct Query Language)是结构化查询语言的简称,是一种在关系型数据库中定义和操纵数据的标准语言。
不要使用面向对象的思想学习SQL,因为它不是面向对象的语言
目标
- SQL语言简介(了解)
- 从数据库数据检索数据(重点)
- 子查询(重点)
- Oracle常用函数(掌握)
1 SQL语言简介
1.1 SQL的特点
SQL语句通常用于完成一些数据库的操作任务,例如增加、修改、删除、查询数据以及对数据库对象(表、视图、索引、过程、函数、触发器等等)的一些列操作。巧妙运用SQL语句能够简化编程起到事半功倍效果。
程序员或者数据库管理员使用SQL语句能够完成下面的操作:
创建用户、创建表空间、创建表
- create user
- create tablespace
- create table
删除用户、删除表空间、删除表
- drop user
- drop tablespace
- drop table
改变数据库系统环境设置
- set pagesize
- set linesize
- set newpage
用户授权
- grant
为数据库的表建立索引
- create index
修改数据库表结构
- 通过alter table 关键字新建、删除、修改表个字段
对数据库中的数据进行添加、修改、删除、查询
- 通过insert into、update、delete from、select....from语句对数据库表中的数据进行增删改查
SQL语言主要的特点如下:
1. 集合性
SQL语句执行返回一个结果集。例如:使用select查询一个结果集、使用delete from语句删除表中的多条数
据、使用update语句批量修改多条数据
2. 统一性
SQL语句为许多任务提供了统一的命令
查询数据使用select from关键字
在表中插入、修改、删除数据使用insert into、update、delete from关键字
创建、删除、修改数据对象
- 创建数据对象使用create关键字
- 修改数据对象使用alter关键字
- 删除数据对象使用drop关键字
控制对数据和数据对象的读写
- commit关键字提交数据
- rollback关键字回滚数据
保证数据的完整性和一致性,每一种约束都有自己统一的关键字
- 主键约束使用primary key关键字
- 外键约束使用foreign key关键字
- 唯一约束使用unique关键字
- 检查约束使用check关键字
- 非空约束使用not null关键字
- 默认约束使用default关键字
3. 非过程化
SQL语句是一个非过程化语言,因为它没有分支、循环结构
4. 简单
SQL只有几个命令动词就可以实现对数据库以及数据的查询和管理。下面的表讲解了SQL语言的分类,以及对应的关键字(命令动词)
SQL的分类 | 关键字(命令动词) | 职责 |
数据定义语 言(DDL) | create、drop、alter | 创建、删除、修改数据对象 |
数据查询语 言(DQL) | select、into、from、where、group by、having、order by | 从数据库表中检索(查询)数据。特征:读 |
数据操纵语 言(DML) | delete、update、insert | 改变数据库表中的数据。特征:写 |
数据控制语 言(DCL) | grant、revoke | 用于执行权限授予和权限回收操作 |
事务控制语 言(TCL): | commit、rollback | 用于执行权限授予和权限回收操作 |
1.2 SQL的编写规则
- SQL关键字不区分大小写、既可以使用大写格式、又可以使用小写格式、或者大小写混用。
- 对象名(表名称)、列名称不区分大小写
- 字符值区分大小写
如果SQL语句很长,可以将其分行显示,提高阅读性
select empno 员工编号, ename 员工姓名, job 职位
from emp
where empno = 7369
小结:本单元主要对SQL语言做了一个宏观上的总体介绍,后面还会针对每个关键字进行详细讲解
2 用户模式
在Oracle数据库中,为了方便管理创建的数据库对象(表、视图、索引等等),引入了模式的概念,某个用户创建的数据库对象都属于该用户模式。例如在 scott 模式下创建了 student 表,那该表就属于scott模式。
Student表此时就是一个数据对象,它在scott用户下面创建的,只能属于scott用户
模式也叫作用户 模式 等价于 用户
Oracle数据库里面的数据库对象(表、视图、索引等等)都是跟着用户(模式)走的。创建用户(模式)的目的:为了更好的管理数据对象(表、视图、索引等等)
2.1 模式与数据库对象关系
模式是数据库对象的集合,一个模式对应多个数据库对象。例如:sys模式、scott模式等等。在一个模式(sys)内部不可以直接访问其他模式(scott)的数据库对象,即使在具有访问权限的情况下,也需要指定模式名称才可以访问其
它模式的数据库对象。
例如:使用sys模式登录,在sys模式(用户)下访问scott模式(用户)的emp表
select * from scott.emp;
scott.emp表示scott模式(用户)下的emp表
小结:
- 模式(用户)用来管理数据库对象的,一个模式(用户)下面可以有多个数据对象
- 某个数据对象(emp表)只能属于一个模式(用户)
- 必须指定模式名称才可以访问其它模式的数据库对象 scott.emp
2.2 scott模式(用户)
scott模式(用户)是Oracle数据库经典的模式(用户),该模式演示了一个很简单的人力资源管理的数据结构。我们通常使用它进行学习。在Oracle19c中并没有scott用户需要我们手动创建并激活
dept部门表
属性英文名 | 属性中文名 |
deptno | 部门编号 |
dname | 部门名称 |
loc | 部门所在位置 |
emp雇员表
属性英文名 | 属性中文名 |
empno | 雇员编号 |
ename | 雇员姓名 |
jop | 雇员职位 |
mgr | 雇员对应领导编号 |
hiredate | 雇员的雇佣日期 |
sal | 雇员的基本工资 |
comm | 奖金或补助 |
deptno | 所在部门 |
salgrade工资等级
属性英文名 | 属性中文名 |
ename | 雇员名字 |
jop | 雇员职位 |
sal | 雇员工资 |
comm | 雇员奖金 |
小结:
1. 模式(用户)拥有数据库对象(表、视图、索引等等),数据对象被模式(用户)拥有。
一个模式(用户)下面有多个数据对象
一个数据库对象只属于一个模式(用户)
2. 在工作中我们通常说数据库对象(表、视图、索引等等)是跟着用户走的。
3 数据检索(查询)
用户对表或视图用的最多的操作就是检索(查询)数据。检索数据可以通过select语句来实现,该语句由多个子句组成,通过这些子句对数据库表进行各种操作,最终得到用户想要的查询结果。select基本语法格式如下:
在数据检索(查询)语句中SELECT和FROM子句必须有,其它关键字可选
[] 表示可选
|表示或者
3.1 简单的查询
只包含select和from子句的查询就是简单查询
- 连接scott用户,查询员工表所有的列
小结:
1. 上面的查询语句表示:从emp表中检索数据,然后选择表中所有的列
2. 先执行from关键字确定要查询哪张表,然后执行select选择表中的列
- 查询指定的列
指定查询表中某些列名称,这些列名称跟在select关键字后面,每个列名称之间使用逗号分隔。法如下
例如:查询员工表的:员工编号、员工姓名、基本工资、职位
- 为列指定别名
列别名就是指列的小名,使用列别名可以提高查询语句的可读性
- select语句中的算术运算符 + - * /
算数运算符大多数情况下用在select后面的列中,对列值进行算数运算
通常只对数值类型的列进行算数运算
- select语句中的比较运算符
- 比较运算符通常对where或者having关键字后面的条件进行判断,如果条件成立就提取数据,否则就过滤
数据。Oracle的比较运算符:= , >, >=,< ,<= , != , <>
注意:Oracle比较运算符有两个不等于 != <>
小结:
- from关键字确定要查询那张表
- where关键字用来做条件判断(行过滤),如果条件成立就提取数据,否则就过滤数据。
- select用来选择表中指定的列进行查询
- 关键字执行顺序from-->where-->selec
注意:WHERE执行之前通过from就已经产生了一个查询结果集,where条件判断是在结果集里面进行的