千家信息网

数据库ORACLE基本语句集锦

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,--建表FAMILYINFCREATE TABLE FAMILYINFO( FNO NUMBER CONSTRAINT FC001 PRIMARY KEY,--把字段fno约束为主键
千家信息网最后更新 2026年10月31日数据库ORACLE基本语句集锦


--建表FAMILYINF

CREATE  TABLE  FAMILYINFO(     FNO NUMBER CONSTRAINT FC001 PRIMARY KEY,--把字段fno约束为主键     FNAME VARCHAR2(20) CONSTRAINT FC002 NOT NULL,--把字段FNAME的约束条件设为"不能为空"     SEX VARCHAR2(20) DEFAULT 'MALE'CONSTRAINT FC003 CHECK(SEX IN('MALE','FEMALE'))

,--把字段'SEX'的约束条件设为'性别默认条件下为'MALE',如果自己填写只能填写'MALE'或'FEMALE'

     FAGE NUMBER,     REL VARCHAR2(20),--家庭成员关系字段     HOBITNO NUMBER CONSTRAINT FC004 REFERENCES HOBITINFO(HNO) ON DELETE SET NULL);

--约束条件设为,表'HOBITINFO'中字段'HNo'的外键,删除引用表中字段时,设为空值



--建兴趣表HOBITINF

CREATE TABLE HOBITINFO(    HNO NUMBER CONSTRAINT HC001 PRIMARY KEY,   --将' HNO'设为主键    HNAME VARCHAR2(20) CONSTRAINT HC002 NOT NULL--将'HNAME'约束条件设为'不能为空');


--删除表HOBITINFO

DROP TABLE HOBITINFO;


--添加信息

INSERT INTO HOBITINFO VALUES(1,'MOVIE');INSERT INTO HOBITINFO VALUES(2,'CG');;


--DDL ALTER TABLE (修改表)

ALTER TABLE FAMILYINFO RENAME TO PCFAMILY;--将FAMILYINFO的表名重命名为PCFAMILYALTER TABLE PCFAMILY ADD(--添加列即字段及其属性    HEIGH VARCHAR2(5),    SX VARCHAR2(10) CONSTRAINT PC002 NOT NULL--字段SX创建"不能为空"的约束条件);ALTER TABLE PCFAMILY MODIFY(--修改字段的属性    HEIGH CHAR(20));ALTER TABLE PCFAMILY DROP COLUMN HEIGH;--删除字段HEIGHALTER TABLE PCFAMILY RENAME COLUMN SX TO SX1;--修改约束字段名ALTER TABLE PCFAMILY DROP COLUMN SX1;--删除约束字段--DDL 之 DROP TABLE(删除表)DROP TABLE HOBITINFO CASCADE CONSTRAINTS;--DDL 之 TRUNCATE TABLE 清空表记录TRUNCATE TABLE PCFAMILY;

--DML 之 INSERT(插入,添加记录)

INSERT INTO PCFAMILY(FNO,SEX,FNAME,FAGE) VALUES(4,'NANE','LIU'||'DAYE',45+20);

--如果指定插入字段顺序,则values里的信息就要对照前面指定的字段填写

INSERT INTO PCFAMILY VALUES();--学生表CREATE TABLE STUDENT(    SNO NUMBER CONSTRAINT SC001 PRIMARY KEY,    SNAME VARCHAR2(10) CONSTRAINT SC002 NOT NULL,    SSEX VARCHAR(10) CONSTRAINT S003 CHECK(SSEX IN ('M','F')));

--老师表

CREATE TABLE TEACHER(     TNO NUMBER CONSTRAINT TC001 PRIMARY KEY,     TNAME VARCHAR2(10) CONSTRAINT TC002 NOT NULL);

--课程表

CREATE TABLE COURSE(     CNO NUMBER CONSTRAINT CC001 PRIMARY KEY,     CNAME VARCHAR2(20) CONSTRAINT CC002 NOT NULL,     TNO NUMBER CONSTRAINT CC003 REFERENCES TEACHER(TNO)

);

--成绩表

CREATE TABLE SCORE(     SNO NUMBER CONSTRAINT SSC001 REFERENCES STUDENT(SNO),     CNO NUMBER CONSTRAINT SSC002 REFERENCES COURSE(CNO),     GRADE VARCHAR2(20),     CONSTRAINT SSC003 PRIMARY KEY(SNO,CNO));

--查询表是否建立成功已经存在

SELECT * FROM STUDENT;SELECT * FROM TEACHER;SELECT * FROM COURSE;SELECT * FROM SCORE;DROP TABLE STUDENT;DROP TABLE TEACHER;DROP TABLE COURSE;DROP TABLE SCORE;INSERT INTO STUDENT VALUES(1,'aaaa','M');INSERT INTO STUDENT VALUES(2,'bbbb','M');INSERT INTO STUDENT VALUES(3,'cccc','F');INSERT INTO TEACHER VALUES(1,'AAAA');INSERT INTO TEACHER VALUES(2,'BBBB');INSERT INTO TEACHER VALUES(3,'CCCC');INSERT INTO COURSE VALUES(1,'yw',2);INSERT INTO COURSE VALUES(2,'sx',3);INSERT INTO COURSE VALUES(3,'yy',2);INSERT INTO SCORE VALUES(1,2,89);INSERT INTO SCORE VALUES(2,3,120);INSERT INTO SCORE VALUES(3,1,110);--DML 之UPDATEUPDATE SCORE SET GRADE=GRADE-1;UPDATE SCORE SET GRADE=GRADE+1 WHERE SNO=2;UPDATE SCORE SET GRADE=GRADE+1 WHERE SNO=2 AND CNO=3;

-------------------------------------------------------------------------------------------

DROP删除为物理删除,delete删除为逻辑删除。



-- DQL 之 SELECT

SELECT CHR(107) HAHA FROM DUAL;SELECT CURRENT_DATE FROM DUAL;SELECT TRUNC(ABS(MONTHS_BETWEEN(DATE'1998-08-08',CURRENT_DATE)/12)) AGE FROM DUAL; SELECT SNO AS 学号, SNAME 学生姓名 FROM STUDENT;SELECT ALL SSEX FROM STUDENT;SELECT DISTINCT SSEX FROM STUDENT;SELECT UNIQUE SSEX FROM STUDENT;SELECT * FROM SCORE WHERE GRADE < 60;SELECT ROWID,ROWNUM,STUDENT.* FROM STUDENT;SELECT * FROM STUDENT WHERE ROWNUM = 1;SELECT * FROM STUDENT WHERE ROWNUM <= 2;SELECT * FROM (SELECT ROWNUM AS RN,STUDENT.* FROM STUDENT) WHERE RN = 2;SELECT CNO,AVG(GRADE) FROM SCORE GROUP BY CNO;SELECT CNO,AVG(GRADE) FROM SCORE GROUP BY CNO HAVING AVG(GRADE) > 80;SELECT SSEX,COUNT(SNO) FROM STUDENT GROUP BY SSEX;SELECT SNO FROM SCORE WHERE CNO = 'C001' AND GRADE = (SELECT MAX(GRADE) FROM SCORE WHERE CNO = 'C001');SELECT SNO FROM SCORE WHERE CNO = 'C001' AND GRADE >= ALL(SELECT GRADE FROM SCORE WHERE CNO = 'C001');SELECT * FROM SCORE ORDER BY CNO ASC,GRADE DESC;SELECT * FROM STUDENT,SCORE WHERE STUDENT.SNO = SCORE.SNO;SELECT SNAME FROM STUDENT,SCOREWHERE STUDENT.SNO = SCORE.SNO AND CNO = 'C001' AND GRADE = (SELECT MAX(GRADE) FROM SCORE WHERE CNO = 'C001');SELECT * FROM STUDENT INNER JOIN SCORE ON STUDENT.SNO = SCORE.SNO;SELECT * FROM STUDENT INNER JOIN SCORE USING(SNO);SELECT * FROM STUDENT CROSS JOIN SCORE WHERE STUDENT.SNO = SCORE.SNO;SELECT * FROM STUDENT NATURAL INNER JOIN SCORE;SELECT * FROM STUDENT LEFT OUTER JOIN SCORE ON STUDENT.SNO = SCORE.SNO;SELECT * FROM STUDENT RIGHT OUTER JOIN SCORE USING(SNO);SELECT * FROM STUDENT FULL OUTER JOIN SCORE USING(SNO);-- 查询考试不及格的学生姓名和挂科的科目名称SELECT SNAME,CNAMEFROM (SCORE LEFT JOIN STUDENT USING(SNO))     LEFT JOIN COURSE USING(CNO)WHERE GRADE < 60;-- 查询所有java考试成绩高于平均分的学生的姓名和成绩SELECT SNAME,GRADEFROM (SCORE LEFT JOIN STUDENT USING(SNO))     LEFT JOIN COURSE USING(CNO)WHERE CNAME = 'JAVA'AND GRADE > (    SELECT AVG(GRADE) FROM SCORE LEFT JOIN COURSE USING(CNO)    WHERE CNAME = 'JAVA');select * from (SELECT  *  from   test   RIGHT   JOIN   t_grade  using(ID) )  a  where `数学` > 90-- 查询同时参加了C001和C002科目考试的学生编号SELECT SNO FROM(SELECT SNO,CNO FROM SCORE WHERE CNO = 'C001')INNER JOIN(SELECT SNO,CNO FROM SCORE WHERE CNO = 'C002')USING(SNO);-- 查询lili同学参加的所有科目考试中成绩最高的那门科目的授课老师名字SELECT TNAME,CNAME FROMTEACHER LEFT JOIN COURSE USING(TNO)WHERE CNO IN (      SELECT CNO FROM      SCORE LEFT JOIN STUDENT USING(SNO)      WHERE SNAME = 'LILI'      AND GRADE = ( SELECT MAX(GRADE) FROM                    SCORE LEFT JOIN STUDENT USING(SNO)                    WHERE SNAME = 'LILI'      ));-- 查询库存目前还有多少CREATE TABLE CLOTHER_STORE(    CTYPE VARCHAR2(10),    STORENUM NUMBER);CREATE TABLE CLOTHER_SALE(    CTYPE VARCHAR2(10),    SALENUM NUMBER);INSERT INTO CLOTHER_STORE VALUES('T-SHIRT',600);INSERT INTO CLOTHER_STORE VALUES('COAT',700);INSERT INTO CLOTHER_SALE VALUES('T-SHIRT',140);INSERT INTO CLOTHER_SALE VALUES('T-SHIRT',165);INSERT INTO CLOTHER_SALE VALUES('COAT',90);INSERT INTO CLOTHER_SALE VALUES('COAT',78);SELECT CTYPE,STORENUM-SNUM AS KCSY FROMCLOTHER_STORE LEFT JOIN(SELECT CTYPE,SUM(SALENUM) SNUM FROM CLOTHER_SALE GROUP BY CTYPE)USING(CTYPE);-- 切换到scott用户SELECT * FROM EMP;SELECT * FROM DEPT;

-----------------------------华丽分割线-----------------------------------


以下是SQL练习内容


--1. 列出至少有一个员工的所有部门。

SELECT DISTINCT DEPTNO,DNAME FROMEMP LEFT JOIN DEPT USING(DEPTNO);

--2. 列出薪金比"SMITH"多的所有员工。

SELECT * FROM EMP WHERE SAL > (SELECT SAL FROM EMP WHERE ENAME = 'SMITH');

--3. 列出所有员工的姓名及其直接上级的姓名。

SELECT E.ENAME 员工姓名,B.ENAME 上级姓名 FROMEMP E LEFT JOIN EMP B ON E.MGR = B.EMPNO;

--4. 列出受雇日期早于其直接上级的所有员工。

SELECT E.ENAME 员工姓名,E.HIREDATE 员工受雇日期,B.ENAME 上级姓名,B.HIREDATE 上级受雇日期FROM EMP E LEFT JOIN EMP B ON E.MGR = B.EMPNOWHERE E.HIREDATE < B.HIREDATE;

--5. 列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门。

SELECT DNAME,EMP.* FROM EMP RIGHT JOIN DEPT ON EMP.DEPTNO = DEPT.DEPTNO;

--6. 列出所有"CLERK"(办事员)的姓名及其部门名称。

SELECT ENAME,DNAME FROM EMP LEFT JOIN DEPT USING(DEPTNO) WHERE JOB = 'CLERK';

--7. 列出最低薪金大于1500的各种工作。

SELECT JOB FROM EMP GROUP BY JOB HAVING MIN(SAL) > 1500;

--8. 列出在部门"SALES"(销售部)工作的员工的姓名,假定不知道销售部的部门编号。

SELECT ENAME FROM EMP LEFT JOIN DEPT USING(DEPTNO) WHERE DNAME = 'SALES';

--9. 列出薪金高于公司平均薪金的所有员工。

SELECT * FROM EMP WHERE SAL > (SELECT AVG(SAL) FROM EMP);

--10.列出与"SCOTT"从事相同工作的所有员工。

SELECT * FROM EMP WHERE JOB = (SELECT JOB FROM EMP WHERE ENAME = 'SCOTT') AND ENAME <> 'SCOTT';

--11.列出薪金等于部门30中员工的薪金的所有员工的姓名和薪金。

SELECT ENAME,SAL FROM EMP WHERE SAL = ANY(SELECT SAL FROM EMP WHERE DEPTNO = 30) AND DEPTNO <> 30;

--12.列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金。

SELECT ENAME,SAL FROM EMP WHERE SAL > ALL(SELECT SAL FROM EMP WHERE DEPTNO = 30) AND DEPTNO

<> 30;

--13.列出在每个部门工作的员工数量、平均工资和平均服务期限。

SELECT DEPTNO,COUNT(EMPNO) 员工数量,ROUND(AVG(SAL),2) 平均工资,       ROUND(AVG(MONTHS_BETWEEN(CURRENT_DATE,HIREDATE))/12,2) 平均服务年限FROM EMP RIGHT JOIN DEPT USING(DEPTNO)GROUP BY DEPTNO;


--14.列出所有员工的姓名、部门名称和工资。

SELECT ENAME,DNAME,SAL FROM EMP LEFT JOIN DEPT USING(DEPTNO);

--15.列出所有部门的详细信息和部门人数。

SELECT DEPT.DEPTNO,DNAME,LOC,COUNT(EMPNO) FROMDEPT LEFT JOIN EMP ON EMP.DEPTNO = DEPT.DEPTNOGROUP BY DEPT.DEPTNO,DNAME,LOC;

--16.列出各种工作的最低工资。

SELECT JOB,MIN(SAL) FROM EMP GROUP BY JOB;

--17.列出各个部门的MANAGER(经理)的最低薪金。

SELECT MIN(SAL) FROM EMP WHERE JOB = 'MANAGER';

--18.列出所有员工的年工资,按年薪从低到高排序。

SELECT ENAME,SAL*12+NVL(COMM,0) 年薪 FROM EMP ORDER BY 年薪;

--19.列出经理人的名字。

SELECT ENAME FROM EMP WHERE JOB = 'MANAGER' OR JOB = 'PRESIDENT';

--20.不用组函数,求出薪水的最大值。

SELECT SAL FROM (SELECT SAL FROM EMP ORDER BY SAL DESC) WHERE ROWNUM = 1;

--21.列出薪资第2高到第8高的员工。

SELECT SAL FROM(SELECT ROWNUM RN,SAL FROM(SELECT SAL FROM EMP ORDER BY SAL DESC))WHERE RN >= 2 AND RN <= 8;

-- 切换回普通用户

-- union, INTERSECT,MINUSCREATE TABLE A1 (    V1 NUMBER,    V2 VARCHAR2(10));CREATE TABLE A2 (    V3 NUMBER,    V4 VARCHAR2(10),    V5 VARCHAR2(10));INSERT INTO A1 VALUES(10,'A001');INSERT INTO A1 VALUES(11,'A002');INSERT INTO A2 VALUES(10,'A001','HAHA');INSERT INTO A2 VALUES(12,'A003','HEIHEI');INSERT INTO A2 VALUES(13,'A004','HOHO');SELECT * FROM A1 UNION (SELECT V3,V4 FROM A2);SELECT * FROM A1 UNION ALL (SELECT V3,V4 FROM A2);SELECT * FROM A1 INTERSECT (SELECT V3,V4 FROM A2);SELECT * FROM A1 MINUS (SELECT V3,V4 FROM A2);

-- 带锁查询

UPDATE CLOTHER_STORE SET STORENUM = 600 WHERE CTYPE = 'T-SHIRT';SELECT * FROM CLOTHER_STORE FOR UPDATE WAIT 5;UPDATE CLOTHER_STORE SET STORENUM = STORENUM - 400 WHERE CTYPE = 'T-SHIRT';-- DCL 之 COMMITSELECT * FROM STUDENT;DELETE FROM STUDENT WHERE SNO = 'S011';COMMIT;-- DCL 之 ROLLBACK 和 SAVEPOINTSELECT * FROM CLOTHER_SALE;UPDATE CLOTHER_SALE SET SALENUM = SALENUM + 10;ROLLBACK;UPDATE CLOTHER_SALE SET SALENUM = SALENUM + 10;SAVEPOINT CPD;UPDATE CLOTHER_SALE SET SALENUM = SALENUM + 10;ROLLBACK TO SAVEPOINT CPD;-- DCL 之 GRANTGRANT CREATE VIEW TO LUYY124;GRANT UPDATE ANY TABLE TO LUYY124;-- DDL 之 REVOKEREVOKE CREATE VIEW FROM LUYY124;-- CREATE VIEWCREATE OR REPLACE VIEW STUDENT_VIEW ASSELECT * FROM (STUDENT LEFT JOIN SCORE USING(SNO)) LEFT JOIN COURSE USING(CNO);SELECT * FROM STUDENT_VIEW;SELECT SNAME,CNAME FROM STUDENT_VIEW WHERE GRADE < 60;SELECT * FROM SCORE;UPDATE SCORE SET GRADE = GRADE + 1 WHERE SNO = 'S001' AND CNO = 'C001';CREATE OR REPLACE VIEW STUDENT_VIEW AS SELECT * FROM SCORE;UPDATE STUDENT_VIEW SET GRADE = GRADE - 1 WHERE SNO = 'S001' AND CNO = 'C001';-- CREATE INDEXCREATE INDEX SNAME_INDEX ON STUDENT(SNAME ASC) ;SELECT * FROM STUDENT WHERE SNAME = 'LILI';DROP INDEX SNAME_INDEX;


员工 字段 部门 姓名 薪金 条件 工作 查询 上级 工资 信息 名称 学生 科目 最低 年薪 日期 考试 同时 名字 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网高科技 南京欣网互联网络科技有限公司 互联网科技工作委员会毛军 今日互联网科技 金融科技 互联网金融 互联网医疗科技 科技服务与互联网 唐信互联网科技 深圳前海聚择互联网科技有限公司 科技互联网的估值 知域互联网科技有限公司大骗子 乌苏新华互联网科技做什么的 明优互联网科技有限公司 群盈汇互联网科技有限公司 上海科技产业互联网平台 上海京穆互联网科技有限公司 互联网科技职业技能培训学校 悟空问答互联网科技 第三届互联网大会安防黑科技 东风日产互联网科技公司叫什么 科技与互联网发展 丰台科技园 互联网 深圳前海聚择互联网科技有限公司 互联网教育科技公司vipkid 重庆互联网医院沙龙医盟信息科技 昊天互联网科技有限公司 云鲸互联网络科技有限公司 玉溪新华互联网科技怎么选 保山浩联互联网科技有限公司 互联网大会出现的黑科技
0