本文中所用到的实例用户为oracle的scott用户
怎么启用scott用户:https://blog.csdn.net/qq_38170766/article/details/105381500
SQL语句分类
-
数据查询语句
SELECT
-
数据操纵语句(DML)
INSERT:添加记录
UPDATE:更新记录,通常与WHERE一起使用,如果不使用则更新全表数据
DELETE:删除记录
-
数据定义语句(DDL)
CREATE:创建语句,创建数据库、表、视图等
ALTER:更改系统参数语句,如更改alter system set shared_pool_size
DROP:删除一个对象,如删除表、索引或者序列号等
RENAME:重命名一个对象
TRUNCATE:截断一个表
-
事务控制语句
COMMIT:提交由DML语句操作的事务
ROLLBACK:用于回滚DML语句操作的事务
-
数据控制语句
GRANT:用于授予用户访问某对象的特权
REVOKE:用于挥手用户访问某对象的特权
SQL查询语句
如果用户需要查询数据库中的数据时就需要用到SELECT语句,SQL查询语句的关键字有SELECT、FROM、WHERE。
-
SELECT语句的语法及书写要求
一个简单的SELECT语句必须要包含SELECT子句和FROM子句,SELECT表明要查找的列,FROM表明要查询的表
具体语法如下:
SELECT * | { [DISTINCT] column | expression [alias],...} FROM tablename
- SELECT:选择一个列或者多个列
- *:查询所有的列
- DISTINCT:去掉列中重复的值
- column | expression:选择列的名字或者表达式
- alias:为列指定不同的标题
- FROM tablename:要查询的表的名字
-
简单查询
下面的操作可以看到要查询dept表中的所有列中的内容,你可以采用*或者输入所有列的名称中间用,号隔开,这两种方式都可以查询到dept中的所有数据。
SQL> select * from dept;
DEPTNO DNAME LOC
---------- ---------------------------- --------------------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL> select deptno,dname,loc from dept;
DEPTNO DNAME LOC
---------- ---------------------------- --------------------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
使用其他用户(system)查询scott的dept表数据
下面的操作可以看到,当使用system登录到数据库之后直接查询dept表,查询出错,因为system用户并没有创建dept表,所以要想查询dept必须写成 scott.dept 表明查询scott用户的dept表。
因为system是系统管理员,所以system也有操作scott用户表的权限。
SQL> conn system/oracle;
已连接。
SQL> select * from dept;
select * from dept
*
第 1 行出现错误:
ORA-00942: 表或视图不存在
SQL> select*from scott.dept;
DEPTNO DNAME LOC
---------- ---------------------------- --------------------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
-
查询指定的列
下面的操作可以看到,我只想查询loc列以及dname列,我只需要指定我需要查询的列名即可,同时select语句中列名的顺序也会影响到最后结果输出的列顺序。
SQL> select loc,dname from dept;
LOC DNAME
-------------------------- ----------------------------
NEW YORK ACCOUNTING
DALLAS RESEARCH
CHICAGO SALES
BOSTON OPERATIONS
-
WHERE子句
对一个表来说,如果用户需要查询表中特定的数据而不是所有的数据时,则需要用到WHERE子句来限制查询条件了。
WHERE可以限定查询的行的要求,从而帮助我们查询到满足一定条件的数据。
查询dept表中所有列,其中LOC为'CHICAGO'的数据
下面的操作可以看到,where子句中loc的条件是会区分大小写的,这个在实际应用的时候需要注意。
SQL> select * from dept where loc = 'chicago';
未选定行
SQL> select * from dept where loc = 'CHICAGO';
DEPTNO DNAME LOC
---------- ---------------------------- --------------------------
30 SALES CHICAGO
查询dept表中所有列,其中DEPTNO小于30的数据
SQL> select * from dept where deptno < 30;
DEPTNO DNAME LOC
---------- ---------------------------- --------------------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
-
SQL语句使用列的别名
从下面的操作可以看出几点:
- 可以使用 列名 as “别名” 或者 列名 as 别名 的方式,但是别名不加双引号的情况不支持中文
- 可以使用 列明 别名 或者 列名 "别名" 的方式,但是别名不加双引号不支持中文
- 可以上述两种方式组合使用但是不加双引号的情况与加双引号的情况不能同时出现
SQL> select loc as 部门号 from dept;
select loc as 部门号 from dept
*
第 1 行出现错误:
ORA-00911: 未识别标识符
SQL> select loc "部门号" from dept;
部门号
--------------------------
NEW YORK
DALLAS
CHICAGO
BOSTON
SQL>select loc as location,deptno as "部门编号",dname "部门名称" from dept;
ERROR:
ORA-01740: 标识符中缺失双引号
SQL> select deptno as "部门编号",dname "部门名称" from dept;
部门编号 部门名称
---------- ----------------------------
10 ACCOUNTING
20 RESEARCH
30 SALES
40 OPERATIONS
SQL> select deptno as dept_number,dname dept_name from dept;
DEPT_NUMBER DEPT_NAME
----------- ----------------------------
10 ACCOUNTING
20 RESEARCH
30 SALES
40 OPERATIONS
-
SELECT查询中运算符的使用
https://blog.csdn.net/qq_38170766/article/details/105383660
-
SELECT查询中函数的使用
https://blog.csdn.net/qq_38170766/article/details/105384786
数据操纵语言(DML)
数据操纵语言实现对表中数据的各种操作,如增、删、改
-
INSERT语句
INSERT语句就是向表中添加一条数据。
语句格式为:INSERT INTO tablename (col1,col2,col3....) VALUES (val1,val2,val3.....)
tablename:插入数据表的名字,要求用户对该表有操作权限。
col:该表中的列名,可以使一列,也可以是多列,如果要向每一列都插入一个值,则可以不使用col,但是需要用户清楚该表的列名和属性。
val:要插入对应列的值,其数据类型必须与column的数据类型相匹配。
查询表中列的数据类型
SQL> desc dept;
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
DEPTNO NOT NULL NUMBER(2)
DNAME VARCHAR2(14)
LOC VARCHAR2(13)
向dept表中插入一条数据
SQL> INSERT INTO dept (DEPTNO,DNAME,LOC) VALUES (50,'MARKETING','NEW YORK');
已创建 1 行。
SQL> select * from dept;
DEPTNO DNAME LOC
---------- ---------------------------- --------------------------
50 MARKETING NEW YORK
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
由于dept的DNAME、LOC两个字段没有NOT NULL约束,所以可以不添加值
SQL> INSERT INTO dept (DEPTNO) VALUES (60);
已创建 1 行。
SQL> select * from dept;
DEPTNO DNAME LOC
---------- ---------------------------- --------------------------
50 MARKETING NEW YORK
60
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
已选择6行。
如果需要从领一张表中拿数据插入,以下是语法结构:
INSERT INTO tablename (col1,col2...) SELECT col1,col2... FROM anotherTablename Where ...
-
UPDATE语句
UPDATE语句就是向表中更新数据。
语句格式为:UPDATE tablename col1=val1 ,col2=val2... WHERE coln=valn;
tablename:要更新的表名
col:要更新的列名
val:要更新的值
WHERE:更新的条件
SQL> select* from dept;
DEPTNO DNAME LOC
---------- ------------------------------------------ ---------------------------------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
50 TEST
SQL> UPDATE dept SET dname='test',loc='test' WHERE deptno=50;
已更新 1 行。
SQL> select* from dept;
DEPTNO DNAME LOC
---------- ------------------------------------------ ---------------------------------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
50 test test
-
DELETE语句
DELETE语句就是向表中更新数据。
语句格式为:DELETE FROM tablename WHERE col=val;
tablename:要删除的表名
col:要删除的列名标记
val:删除的值
WHERE:删除的条件,如果不加WHERE则整个表的内容都将被删除
SQL> DELETE FROM dept WHERE deptno=50;
已删除 1 行。
SQL> select*from dept;
DEPTNO DNAME LOC
---------- ------------------------------------------ ---------------------------------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON