Oracle数据库SQL语言学习笔记

1、表空间的创建

create tablespace LQ datafile 'D:\ku\LQ_01.dbf' size 200M 
autoextend 
on next 20M
maxsize 1000M;

解释:
创建表空间应该使用 create tablespace 命令;
LQ:表空间名称;
datafile ‘D:\ku\LQ_01.dbf’ :指定表空间的物理文件;
size 200M :指定物理文件的初始大小
autoextend:指定当数据量超过物理文件的存储空间时,自动增加文件大小;
on next 20M:指定每次增长的尺寸为20M;
maxsize 1000M:指定表空间的最大尺寸为1000M;

注意:
datafile:这里的‘D:\ku\’路径必须已经存在,否则无法创建表空间会报错;
执行SQL语句时,结尾的";"务必写上!!!
 

2、表空间的操作

1)本行代码可直接使用,查看所用的用户的表空间。

select user_id,username,default_tablespace from dba_users order by username;

2)本行代码可以查看所有表空间。

select * from sys.dba_tablespaces;

3) 查看表所属的表空间。

select table_name,tablespace_name from user_tables where table_name ='XXX';

4)查看表空间中有那些表。

select table_name from all_tables where tablespace_name='LQ';

5) 更改默认表空间。

alter database default tablespace LQ;

6) 修改表空间名称。

alter tablespace LQ rename to LQ1;

7) 删除表空间。

drop tablespace LQ including contents and datafiles;

8)查看所有的表空间。

select * from v$tablespace;

3、创建、修改,赋权用户

--创建用户guo 密码 guo
create user guo identified by guo;

--切换用户(要给用户添加connect权限才能切换)
conn 用户名/密码

Conn  用户名/密码@全局数据库名

--赋值权限
/*connect:是授予最终用户的典型权利,最基本的权利,能够连接到Oracle数据库中,并在对其他用户的表有访问权限时,做SELECT、UPDATE、INSERTT等操作。
resource:是授予开发人员的,能在自己的方案中创建表、序列、视图等。
dba:是授予系统管理员的,拥有该角色的用户就能成为系统管理员了,它拥有所有的系统权限。*/
grant connect,resource,dba to guo;

--把某张表的权限赋予某个用户
grant 权限名,权限名 on 表名 to 用户名;

--赋予用户表的部分列的权限
grant 权限名(列名,列名) on 表名 to 用户名;

--赋予权限时,若使用'with grant option',则获取此权限的用户可以把权限再赋予其他用户
grant 权限名 on 表名 to 用户名 with grant option;

--撤销授权
revoke 权限名 from guo;

--查看用户的权限
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = '用户名'; 

--修改密码
alter user guo identified by guo;
 
--用户解锁
alter user scott account unlock;
 
--用户加锁
alter user scott account lock;

--查看所有用户
select * from all_users;

1)把用户添加到表空间中。

alter user user_naem default tablespace tablespace_name;

2) 查看表空间的路径和id。

SELECT * FROM dba_data_files WHERE tablespace_name='tablespace_name';

 3)查看用户是否添加进去。 

select username,default_tablespace from user_users;

4、表的操作

1)创建表。

create table student(
    sno number(10) constraint pk_si_sno primary key,
    sname varchar2(10),
    sex varchar2(3),
    create_date date
    );
a、 复制另外一个表,创建。
--创建一个表,表的字段是复制另外一个表
create table 表名
as
select * from 表名2;

b、 复制另外一个表的指定字段,创建。
create table 表名(字段1,字段2)
as
select 字段1,字段2 from 表名2;

c、通过指定永远无法满足的 where 条件,还可以只将一个表的结构复制到一个新表中 。

create table 表名
as
select * from list where 1=2;

2) 插单条入数据。

insert into student (sno,sname,sex,create_date) values (1,'李四','男',sysdate);

3)插入多条数据。

insert all
	into table_name (id,name) values(10001,'wang_er')
	into table_name (id,name) values(10002,'zhang_san')
	insert into table_name (id,name) values(10003,'zhao_si')
SELECT * FROM dual;

 4)添加注释。

comment on table student is '学生信息表';
comment on column student.sno is '学号';
comment on column student.sname is '姓名';
comment on column student.sex is '性别';
comment on column student.create_date is '创建日期';

 5)修改某一行。

update student si
   set si.sex = '男'
 where si.sno = 1;

6)数据修改 

1. '增加' 一列或者多列
   alter table student add address varchar2(50);
   alter table student add (id_type varchar2(2), id_no varchar2(10));
2. '修改' 一列或者多列
   (1) 数据类型
   alter table student modify address varchar2(100);
   alter table student modify (id_type varchar(20), id_no varchar2(20));
   (2) 列名
   alter table student rename column address to new_address;
   (3) 表名
   alter table student rename to new_student_info ;
   alter table new_student rename to student_info;   
3. '删除' 一列或者多列,删除多列时,不需要关键字 column
   alter table student drop column sex;
   alter table student drop (id_type, id_no);

 7)查看用户下的所有表。

select * from user_tables;

8)将列标记为未用 

ALTER TABLE 表明 SET UNUSED(列名);

 9)删除表达所有记录,恢复到初始状态

TRUNCATE TABLE 表名;

10)列出表的列及其数据类型(仅在SQL*plus下有用)

DESC 表名;

11)删除用户

--删除当前连接用户的操作
1)首先查找当前用户的会话id
SELECT sid, serial#
FROM v$session
WHERE username = 'YOUR_USERNAME';

2)断开当前用户的连接
ALTER SYSTEM KILL SESSION 'sid,serial#';

3)删除用户
drop user user_name cascade;

 5、order by的使用

order by可以对查询到的数据按照某一列进行排序操作,排序时加上后缀关键字asc或desc。

asc是按升序排列,可以省略。

desc是按降序排列,不能省略。

order by可以指定多个列名,表示同时按多个列值对输出结果排序,列名之间用逗号隔开。排序的方法是先按第一个列值排序,如果有多个记录在第一列的取值相同,那么它们之间的排序就有第二列的值决定,以此类推。

6、group by的使用

使用group by子句可以将具有相同特征的行组织成一组,使得每一组的各行得到唯一的结果。单独使用group by,相当于在select子句中加上distinct或unique限制符,可以剔除查询结果中在指定列伤出现的重复值。

SELECT 列名 FROM 表名 GROUP BY 列名;

 (两个列名要相同)

7、having语句的使用 

having用于子句中,其相当于一个过滤器,剔除不需要的组,在having子句中可以使用聚组1函数。

--例子
select 列名,count(*) number,... from 表明 group by 列名 having count(*) > 2;

8、聚组函数

avg(平均值)、sum(求和)、max(最大值)、min(最小值)(他们使用的对象必须是数值类型的)、count(求行)、

SELECT COUNT(*),SUM(AGE),AVG(AGE),MAX(AGE),MIN(AGE) FROM USERS;

9、通配符

10、子查询

子查询语句必须用括弧括起来,且子查询语句不得带有order by子句。

一般我们将带有子查询的select语句称为嵌套查询,引用子查询的select语句成为外层查询,子查询本身称为内层查询。

子语句返回的结果必须是原子值,即不能是由多个属性值组成。其可以分为三种情况:无值,单值或多值。

11、存储过程的错误

在应用程序中创建存储过程,一旦发现语法错误,数据库服务器便会设置通信去SQLCA和全局区SQL_STATE的值。通信区SQLCA的SQLCODE域的值被设置未一个负数,出错位置记录在SQLERROR域中,同时SQLSTATE的值被设置未42000.在应用成勋中应当编写一些代码,用于检测这些错误,并采取适当的行为。

12、语句使用

1)打开时间显示功能,执行SQL语句时会显示执行时间。

set time on;

2)打开计时功能,执行SQL语句时会显示执行时间。

set timing on;

3)打开回显功能,执行SQL语句时会显示执行的SQL语句。

set echo on;

上面的三个语句通常用于调试和性能优化。通过打开时间显示功能和计时功能,可以了解每个SQL语句的执行时间,从而判断性能瓶颈所在。通过打开回显功能,可以在执行SQL语句时查看实际执行的SQL语句,有助于排查语法错误和逻辑错误。

4)查看表的名称,字段,属性,大小,代码要在编辑器里编写,然后点击运行。

SELECT TABLE_NAME,   /*表名*/
       COLUMN_NAME,  /*字段名*/
       DATA_TYPE,    /*字段类型*/
       DATA_LENGTH,   /*字段长度*/
       DATA_PRECISION,  /*number类型有效位数*/
       DATA_SCALE     /*number类型小数点后位数*/
  FROM ALL_TAB_COLS
 WHERE TABLE_NAME = '表名';

5)复制表的内容到另外一个新建的表

insert 表名1(select * from 表名2);

6)模糊查询 

select 字段1,字段2 from 表名
where 字段 like '%字母'
 -- 一个下划线(_)只匹配一个字符
select 字段1,字段2 from 表名
where 字段 like 'S___l'

 13、操作符

1)Union操作符的使用

 

2)intersect操作符的使用

3)minus 操作符

返回仅由第一个查询选定并且没有被第二个查询选定的所有不同行
差集运算:找两个查询结果的差集:包括1不包括2

eg:

select orderno from order_detail
minus
select orderno from order_master;

 4)连接符

外连接符(+),表示如果连接条件不满足,则返回NULL值。

14、关键字

1)as关键字

在SQL语句中,AS关键字用于为查询结果中的列或表达式指定别名。它可以用于以下几个方面:

a. 列别名:AS关键字可以在SELECT语句中为列指定别名,使查询结果中的列具有更具描述性的名称。例如:

 SELECT column_name AS alias_name
   FROM table_name;

   这样查询结果中的列将以alias_name作为列名显示。

b. 表别名:AS关键字可以在FROM子句中为表指定别名,使查询语句更简洁。例如:

  SELECT column_name
   FROM table_name AS alias_name;

 这样在查询语句中可以使用alias_name代替table_name来引用表。

 别名A是表ORDERS的别名,不是临时表TEMP的别名。

CREATE TABLE TEMP AS
SELECT A.ID
FROM ORDERS A WHERE A.USER_ID='1'
AND A.PRODUCT IS NOT NULL;

c. 表达式别名:AS关键字可以在SELECT语句中为表达式指定别名,使查询结果中的表达式具有更具描述性的名称。例如:

 SELECT column_name + 1 AS alias_name
   FROM table_name;

   这样查询结果中的表达式将以alias_name作为列名显示。

整个子语句的结果被赋予别名b。

(Select * from ydzw.chenlh_jttf_sjzc Where end_date>to_char(sysdate-1,'yyyymmdd')) b

总之,AS关键字在SQL语句中用于为列、表或表达式指定别名,以提高查询结果的可读性和可理解性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北木ww

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值