首先提供一个.sql文件供我们操作
链接: https://pan.baidu.com/s/1YdTBZ03bX_Dd2yjMq8DGwA
提取码:l1b3
SQL
SQL语言是属于第四代编程语言,主要用来操作关系型数据库的一门语言
简单来说:
关系型数据库是以⼆维表的形式去存储数据,同时表与表之间存在着⼀定的关系。
⾮关系型数据库不是以⼆维表的形式存储数据
语言代数:
第⼀代语⾔:机器语⾔ ⾯向机器。 是通过⼆进制代码对及其进⾏操作。
第⼆代语⾔: 汇编语⾔ ⽤针对指令的符号代替⼆进制代码。
第三代语⾔: ⾼级开发语⾔ C、C++ Java 语⾔更加简单,操作更⽅便
第四代语⾔: SQL 只需要告诉计算机需要做什么, ⽽如何做,不需要告诉计算机。更加接近⾃然语⾔
SQL语言分类
DQL (Data Query Language)
数据查询语⾔,⽤于检索数据库中的数据,主要是 SELECT 语句,它在操作数据库时较为频繁
DML (Data Manipulation Language)
数据操纵语⾔ ⽤于改变数据库中的数据,主要包括 INSERT , UPDATE , DELETE 3条语句
DDL(Data Define Langage)
数据定义语⾔,⽤来建⽴、修改、删除数据库对象
TCL (Transaction Control Language)
事务控制语⾔ ⽤于维护数据的⼀致性,包括 COMMIT , ROLLBACK , SAVEPOINT 3条语句
DCL(Data Control Language)
⽤于执⾏权限授予和权限收回操作,主要包括 GRANT , REVOKE 两条命令
Oracle
公司:甲骨文
老板:拉里·埃里森
Oracle Database,简称Oracle,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。
当我们安装⼀个Oracle软件时,安装的是Oralce服务器,当我们想要操作Oralce服务器上⾯的数据
时,需要使⽤客户端去进⾏远程连接Oracle服务器,⽽不是直接在Oracle服务器上操作。
sqlplus :
Oracle服务器官⽅提供的⼀个客户端,⽤来连接Oalce服务器
数据库对象
·⽤户(User)(常用)
·表(Table)(常用)
·触发器(Trigger)
·视图(View)
·存储过程(StoredProcedure)
·索引(Index)
·缺省值(Default)
·图表(Diagram)
·规则(Rule)
用户
oracle服务器其实只有⼀个数据库,但是区分⽤户,也就是可以通过不同的⽤户操作同⼀个数据库。
mysql 是区分数据库,同⼀个⽤户可以操作多个数据库
用户登录
我们在安装Oracle时,默认提供给我们一个管理员用户,用户名为system,密码是安装时所填写的密码
语法:sqlplus ⽤户名/密码(也可以只执行sqlplus,等待系统提示你输入用户名和密码,只不过这样子输入密码光标不会移动,打字快了容易打错)
例如:登录管理员用户
sqlplus system/system
用户创建
由于system用户的权限比较大,不熟练的我们做很多操作容易带来数据库的错误,所以我们需要创建自己的用户
语法: create user 用户名 identified by 密码;
例如:创建一个用户名密码都是glb的用户
create user glb identified by glb;
当前我们创建的这个用户是没有任何权限的,我们要想通过这个用户去操作数据库服务器,必须先赋予权限。
用户授权
数据库中权限分类:
DBA: 拥有全部特权,是系统最⾼权限,只有DBA才可以创建数据库结构。
RESOURCE:拥有Resource权限的⽤户只可以创建实体,不可以创建数据库结构。
CONNECT:拥有Connect权限的⽤户只可以登录Oracle,不可以创建实体,不可以创建数据库结构。
语法:grant 权限/⻆⾊ to ⽤户名;
例如:给用户glb授权
grant resource,connect to glb;
切换用户
我们很多时候需要从⼀个数据库⽤户切换到另⼀个数据库⽤户这种情况我们是不需要退出当前⽤户可以直接操作的。
语法:conn ⽤户名/密码
例如:从当前的system用户切换到glb用户
conn glb/glb
除此之外还提供了查看当前⽤户的命令。
show user;
sql脚本
所谓的sql脚本就是以 .sql 结尾的文件,且文件里面都是sql语句或者注释
执行脚本
@xxx/xx.sql
start xxx/xx.sql
如果脚本中包含了英文日期,需要先设置日期环境
alter session set nls_language='english';
创建脚本
新建⼀个⽂件,往⾥⾯写⼊sql,并且将后缀名修改为 .sql 即可。
DQL
·查询当前用户下所有的表
select table_name from user_tables;
表是由列和⾏组成,在数据库中,列名称为 字段名 ,⼀列称为⼀个字段。如果我们想要查看⼀
张表⾥⾯的字段,可以使⽤特殊的语句
查看表结构
desc tableName
对表中的字段进⾏详细的描述称为表的数据字典
s_emp表的数据字典
基本查询
·查询某张表所有或者指定的数据内容
语法:
select * from 表名;
select 字段名,字段名 ... from 表名;
; 代表sql语句的结束
* 代表查询所有,不建议使⽤ * 效率太低
字段名 表示查询指定的列中数据
查看s_emp表中的id和last_name数据
select id,last_name from s_emp;
查询s_emp表中的所有数据
select * from s_emp;
列值计算
语法
select 字段名 运算符 数值 from 表名
运算符 : + , - , * , /
查询员⼯的名字和年薪
select last_name,salary * 12 from s_emp;
查看每个员⼯的员⼯id,名字和⽉薪涨100以后的年薪
select last_name,salary + 100 * 12 from s_emp;(错误)
select last_name,(salary + 100) * 12 from s_emp;(正确)
注意事项:
查询永远都不会改变表中数据值
乘除的优先级⾼于加减
优先级相同时,按照从左到右运算
可以使⽤括号改变优先级
列起别名
查询员⼯名和年薪
select last_name,salary * 12 from s_emp;
发现这个列的名字已经改变,同时这个列名有时候也不符合我们的需求,所以我们可以给列起别名
语法:
select 字段名 [as] 别名 from 表名;
as 可以省略不要
注意:别名可以⽤双引号包裹起来,以便包含特殊字符,只有此处会⽤双引号,其他的地⽅都是单引号
查看员⼯的员⼯id,名字和年薪,年薪列名为annual
select id,last_name,salary * 12 as annual from s_emp;
select id,last_name,salary * 12 as "annual" from s_emp;
/* sql 是不区分⼤⼩写,但是如果双引号包裹起来,⾥⾯的别名写了什么就是什么,区分⼤⼩写 */
多列拼接
把多个列的数据拼接成⼀个列
语法
select 字段1 || 字段2 from 表名;
查看员⼯的员⼯id,全名
select id,last_name ||frist_name from s_emp;
select id,last_name || '.' ||frist_name from s_emp;
查看员⼯的员⼯id,全名和职位名称,全名和职位名称合并成⼀列显示,且格式为:姓名:xxx-xx,职 位:xxx
select id,'姓名: ' || last_name || '-' || first_name || ', 职位: ' || title info from s_emp;
数据去重
将重复的数据去掉
语法:
select distinct 字段1,字段2 from 表名;
查询公司里面的已有职位名称:
select distinct title from s_emp;
注意:
distinct 关键词只能放在select关键词的后面
如果distinct 后面跟了多个列名,那么完全一样的才会被当做重复的数据去除掉
数据排序
把查询出来的数据进行排序展示
排序使⽤order by⼦句,asc升序,desc降序 默认为升序
该⼦句只对查询记录显示调整,并不改变查询结果,所以执⾏权最低,即最后执⾏
语法:
select col_name,...
from tb_name
order by col_name [asc|desc],...
order by 后⾯还可以跟数字,表示使⽤select后⾯的第⼏个列进⾏排序
null值排序规则(排序是⽆限⼤)
升序排列,默认情况下,null值排后⾯
降序排序,默认情况下,null值排前⾯
限制查询
限制查询指的是根据⼀些特定的条件对数据进⾏筛选
语法:
select col_name,...
from tb_name
where col_name ⽐较操作表达式
逻辑操作符(and|or)
col_name ⽐较操作表达式;
比较符
= > < >= <=
不等于:三个都表示不等于的意思
!= <> ^=
逻辑⽐较符
BETWEEN ... AND ...
between x and y:在什么范围之内 [x,y]
LIKE
即值不是精确的值的时候使⽤
通配符,即可以代替任何内容的符号
% :通配0到多个字符
_ : 当且仅当通配⼀个字符
转义字符:
默认为\,可以指定 指定的时候⽤escape 符号指明即可,转义字符只能转义后⾯的⼀个字符
Is nul
对null值操作特定义的操作符,不能使⽤=
逻辑操作符
and:且逻辑
or: 或逻辑
注意:and优先级⽐or优先级要⾼
not:⾮逻辑
NOT BETWEEN AND
NOT IN
NOT LIKE
IS NOT NULL
温馨提示:
1.本文的操作均在命令提示符(cmd)下实现
2.SQL语⾔编写的语句,称为SQL语句,SQL语⾔不区分⼤⼩写,需要注意SQL命令的末尾是要加 ; 的,否则命令无法执行
3./可以执行上一条sql命令
4.无论SQL语句多长,只要有order by 排序,一定是最后执行的
5.插入varchar类型字符串一定要加' '
6.like是模糊查询
7.转义字符只推荐使用\,表意性强
8.当一行命令写不下时,可以直接回车,生成新的一行继续写
9.本文的命令均不会改变表里面的数据