`
hao_zhou
  • 浏览: 17821 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

SQL

    博客分类:
  • SQL
阅读更多
建立和管理表
建表
SQL> CREATE TABLE dept
  2 (deptno NUMBER(2),
  3  dname VARCHAR2(14),
  4  loc VARCHAR2(13));
Table created.

使用子查询建表
SQL> CREATE TABLE dept30
  2 AS
  3 SELECT    empno, ename, sal*12 ANNSAL, hiredate
  4 FROM    emp
  5 WHERE    deptno = 30;

Table created.

SQL> DESCRIBE dept30
Name                         Null?    Type
---------------------------- -------- -----
EMPNO                        NOT NULL NUMBER(4)
ENAME                                 VARCHAR2(10)
ANNSAL                                NUMBER
HIREDATE                              DATE

ALTER TABLE语句
使用 ALTER TABLE语句:
• 增加新列
• 修改已存在列
• 定义新列的默认值
ALTER TABLE table
ADD    (column datatype [DEFAULT expr]
   [, column datatype]...);
ALTER TABLE table
MODIFY    (column datatype [DEFAULT expr]
   [, column datatype]...);

增加列
• 使用ADD子句
SQL> ALTER TABLE dept30
  2  ADD    (job VARCHAR2(9));
Table altered.
• 新列变为最后一列
    EMPNO ENAME         ANNSAL HIREDATE  JOB
--------- ---------- --------- --------- ----
     7698 BLAKE          34200 01-MAY-81
     7654 MARTIN         15000 28-SEP-81
     7499 ALLEN          19200 20-FEB-81
     7844 TURNER         18000 08-SEP-81
...
6 rows selected.

修改列
• 可以改变列的数据类型、长度和默认值

ALTER TABLE dept30
MODIFY (ename VARCHAR2(15));
Table altered.


• 改变默认值只对将来插入起作用

删除表
SQL> DROP TABLE dept30;
Table dropped.
改变对象名
• 使用RENAME语句可以修改表、视图、同义词等对象的名称
SQL> RENAME dept TO department;
Table renamed.


• 改变对象名必须由对象所有者完成

截断表
SQL> TRUNCATE TABLE department;
Table truncated.
小结
语句 说明
CREATE TABLE 建表
ALTER TABLE 修改表结构
DROP TABLE 删除表
RENAME 修改对象名
TRUNCATE 截断表
COMMENT 增加注释






操作数据

数据操纵语言
• DML语句
– INSERT:增加行
– UPDATE:修改行
– DELETE:删除行
• 事务:由一组DML语句组成

INSERT语句
INSERT INTO table [(column [, column...])]
VALUES (value [, value...]);
• 插入新行要为每列提供值
• 值的顺序要与列的顺序保持一致
• 字符和日期值要用单引号引住

插入新行
SQL> INSERT INTO dept (deptno, dname, loc)
  2  VALUES (50, 'DEVELOPMENT', 'DETROIT');
1 row created.
SQL> INSERT INTO dept (deptno, dname )
  2  VALUES (60, 'MIS');
1 row created.

使用替代变量插入数据
SQL> INSERT INTO dept (deptno, dname, loc)
  2  VALUES   (&department_id,
  3                 '&department_name', '&location');

Enter value for department_id: 80
Enter value for department_name: EDUCATION
Enter value for location: ATLANTA

1 row created.

复制表行
SQL> INSERT INTO managers(id, name, salary, hiredate)
  2          SELECT empno, ename, sal, hiredate
  3          FROM   emp
  4          WHERE job = 'MANAGER';
3 rows created.

修改表数据UPDATE语句

UPDATE table
SET column = value [, column = value]
[WHERE condition];
更新表行
SQL> UPDATE emp
  2  SET    deptno = 20
  3  WHERE  empno = 7782;
1 row updated.
SQL> UPDATE employee
  2  SET    deptno = 20;
14 rows updated.
使用多列子查询更新
SQL> UPDATE  emp
  2  SET     (job, deptno) =
  3   (SELECT job, deptno
  4                          FROM    emp
  5                          WHERE   empno = 7499)
  6  WHERE   empno = 7698;
1 row updated.
DELETE语句
DELETE [FROM]   table
[WHERE   condition];
删除表行
SQL> DELETE FROM department
  2  WHERE dname = 'DEVELOPMENT';
1 row deleted.

SQL> DELETE FROM department;
4 rows deleted.

基于另一张表删除行
SQL> DELETE FROM emp
  2  WHERE deptno =
  3        (SELECT   deptno
  4          FROM     dept
  5          WHERE    dname ='SALES');
6 rows deleted.

提交数据
SQL> UPDATE emp
  2  SET deptno = 10
  3  WHERE empno = 7782;
1 row updated.

SQL> COMMIT;
Commit complete.

回退数据
SQL> DELETE FROM employee;
14 rows deleted.
SQL> ROLLBACK;
Rollback complete.

SQL> UPDATE...
SQL> SAVEPOINT update_done;
Savepoint created.
SQL> INSERT...
SQL> ROLLBACK TO update_done;
Rollback complete.

定义约束
CREATE TABLE [schema.]table
    (column datatype [DEFAULT expr]
[column_constraint],

[table_constraint]);

CREATE TABLE emp(
       empno  NUMBER(4),
         ename  VARCHAR2(10),
       …
       deptno  NUMBER(7,2) NOT NULL,
     CONSTRAINT emp_empno_pk
           PRIMARY KEY (EMPNO));
定义约束
• 列级约束
             column [CONSTRAINT constraint_name] constraint_type,

• 表级约束
             column,...
  [CONSTRAINT constraint_name] constraint_type
  (column, ...),

NOT NULL约束
SQL> CREATE TABLE emp(
  2  empno NUMBER(4),
  3 ename VARCHAR2(10) NOT NULL,
  4 job VARCHAR2(9),
  5 mgr NUMBER(4),
  6 hiredate DATE,
  7 sal NUMBER(7,2),
  8 comm NUMBER(7,2),
  9 deptno NUMBER(7,2) NOT NULL);

UNIQUE约束
SQL> CREATE TABLE   dept(
  2  deptno   NUMBER(2),
  3 dname   VARCHAR2(14),
  4 loc   VARCHAR2(13),
  5 CONSTRAINT dept_dname_uk UNIQUE(dname));

PRIMARY KEY约束
SQL> CREATE TABLE   dept(
  2  deptno   NUMBER(2),
  3 dname   VARCHAR2(14),
  4 loc   VARCHAR2(13),
  5 CONSTRAINT dept_dname_uk UNIQUE (dname),
  6 CONSTRAINT dept_deptno_pk PRIMARY KEY(deptno));




FOREIGN KEY约束
SQL> CREATE TABLE emp(
  2  empno NUMBER(4),
  3 ename VARCHAR2(10) NOT NULL,
  4 job VARCHAR2(9),
  5 mgr NUMBER(4),
  6 hiredate DATE,
  7 sal NUMBER(7,2),
  8 comm NUMBER(7,2),
  9 deptno NUMBER(7,2) NOT NULL,
10 CONSTRAINT emp_deptno_fk FOREIGN KEY (deptno)
11 REFERENCES dept (deptno));
FOREIGN KEY 约束关键字
• FOREIGN KEY:在表级定义时需要
• REFERENCES:指定主表及其主键列
• ON DELETE CASCADE:级联删除选项

CHECK约束
• 定义每行数据必须满足的条件
• 定义CHECK约束有以下限制
– 不允许引用伪列CURRVAL、NEXTVAL、LEVEL和ROWNUM
– 不允许调用函数SYSDATE、UID、USER和 USERENV
..., deptno NUMBER(2),
      CONSTRAINT emp_deptno_ck 
            CHECK (DEPTNO BETWEEN 10 AND 99),...

增加约束
  ALTER TABLE table
  ADD [CONSTRAINT constraint] type (column);
注意事项:增加NOT NULL约束必须使用MODIFY子句
增加约束
SQL> ALTER TABLE     emp
  2  ADD CONSTRAINT  emp_mgr_fk
  3  FOREIGN KEY(mgr) REFERENCES emp(empno);
Table altered.

删除约束
SQL> ALTER TABLE   emp
  2  DROP CONSTRAINT  emp_mgr_fk;
Table altered.

SQL> ALTER TABLE dept
  2  DROP PRIMARY KEY CASCADE;
Table altered.

禁止约束
SQL> ALTER TABLE emp
  2  DISABLE CONSTRAINT emp_empno_pk CASCADE;
Table altered.

激活约束
SQL> ALTER TABLE emp
  2  ENABLE CONSTRAINT emp_empno_pk;
Table altered.

查看约束
SQL>  SELECT constraint_name, constraint_type,
  2 search_condition
  3   FROM user_constraints
  4   WHERE table_name = 'EMP';

CONSTRAINT_NAME          C SEARCH_CONDITION
------------------------ - -------------------------
SYS_C00674               C EMPNO IS NOT NULL 
SYS_C00675               C DEPTNO IS NOT NULL
EMP_EMPNO_PK      P
...
查看约束列
SQL> SELECT constraint_name, column_name
  2  FROM user_cons_columns
  3  WHERE table_name = 'EMP';

CONSTRAINT_NAME           COLUMN_NAME
------------------------- ----------------------
EMP_DEPTNO_FK             DEPTNO
EMP_EMPNO_PK              EMPNO
EMP_MGR_FK                MGR
SYS_C00674                EMPNO
SYS_C00675                DEPTNO



子查询
SELECT 查询列表
FROM 表
WHERE 表达式 操作符
(SELECT 查询列表
       FROM 表);

• 子查询(内查询)在主查询之前执行.
• 子查询的结果用于主查询 (外查询).
使用子查询
SQL> SELECT ename
  2  FROM   emp
  3  WHERE  sal >
  4     (SELECT sal
  5               FROM   emp
  6               WHERE  empno=7566);

ENAME
----------
KING
FORD
SCOTT

执行单行子查询
SQL> SELECT   ename, job
  2  FROM     emp
  3  WHERE    job =
  4 (SELECT  job
  5      FROM     emp
  6     WHERE    empno = 7369)
  7  AND      sal >
  8 (SELECT  sal
  9 FROM emp
  10 WHERE empno = 7876);

ENAME      JOB
---------- ---------
MILLER     CLERK

在子查询中使用组函数
SQL> SELECT ename, job, sal
  2  FROM emp
  3  WHERE sal =
  4 (SELECT MIN(sal)
  5 FROM emp);

ENAME      JOB             SAL
---------- --------- ---------
SMITH      CLERK           800


在HAVING子句中使用子查询
• Oracle服务器先执行子查询.
• Oracle服务器将结果返回给主查询的HAVING子句.
SQL> SELECT deptno, MIN(sal)
  2  FROM emp
  3  GROUP BY deptno
  4  HAVING MIN(sal) >
  5 (SELECT MIN(sal)
  6 FROM emp
  7 WHERE deptno = 20);

在多行子查询中使用ANY操作符
SQL> SELECT  empno, ename, job
  2  FROM    emp
  3  WHERE   sal < ANY
  4 (SELECT sal
  5 FROM emp
  6 WHERE job = 'CLERK')
  7  AND     job <> 'CLERK';

    EMPNO ENAME      JOB
--------- ---------- ---------
     7654 MARTIN     SALESMAN
     7521 WARD       SALESMAN

在多行子查询中使用ALL操作符(多列子查询在下章)
SQL> SELECT  empno, ename, job
  2  FROM    emp
  3  WHERE   sal > ALL
  4 (SELECT avg(sal)
  5 FROM emp
  6 GROUP BY deptno);

    EMPNO ENAME      JOB
--------- ---------- ---------
     7839 KING       PRESIDENT
     7566 JONES      MANAGER
     7902 FORD       ANALYST
     7788 SCOTT      ANALYST



使用多列子查询
显示满足工资和补贴分别和部门30中的雇员的这两项匹配的雇员的姓名,部门编号,工资和补贴.
SQL> SELECT ename, deptno, sal, comm
  2  FROM emp
  3  WHERE   (sal, NVL(comm,-1)) IN
  4 (SELECT sal, NVL(comm,-1)
  5       FROM   emp
  6       WHERE  deptno = 30);

子查询中的空值
SQL> SELECT employee.ename
  2  FROM emp employee
  3  WHERE employee.empno NOT IN
  4 (SELECT manager.mgr
  5 FROM   emp manager);
no rows selected.

在FROM子句中使用子查询
SQL> SELECT  a.ename, a.sal, a.deptno, b.salavg
  2  FROM    emp a, (SELECT   deptno, avg(sal) salavg
  3                  FROM     emp
  4                  GROUP BY deptno) b
  5  WHERE   a.deptno = b.deptno
  6  AND     a.sal > b.salavg;

ENAME            SAL    DEPTNO     SALAVG
---------- --------- --------- ----------
KING            5000        10  2916.6667
JONES           2975        20       2175
SCOTT           3000        20       2175
...
6 rows selected.

分享到:
评论

相关推荐

    通过SqlCmd执行超大SQL文件

    ##通过sqlcmd执行sql文件 由于sql文件过大,超过了100M,再数据库的窗口执行,结果超出内存了,对于特别大的sql文件可以使用sqlcmd进行执行 ###1.打开cmd窗口 运行–cmd–进入到sql文件所在的文件夹。 如果是win7可...

    java sql操作工具类 java sql操作工具类

    java sql操作工具类 java sql操作工具类java sql操作工具类 java sql操作工具类java sql操作工具类 java sql操作工具类java sql操作工具类 java sql操作工具类java sql操作工具类 java sql操作工具类java sql操作...

    SQLServer_2000-2008_R2查询智能分析器RedGate_SQL_Prompt_V5.3.4.1_Crack_Keygen破解教程注册机免费

    在我个人编写SQL脚本时,至少会把SQL的格式排列成易于阅读的,因为其他人会阅读到你的SQL,无论是在程序中或是脚本文件中,良好的排版不仅让人看起来赏心悦目,在和他人之间做交流时也省时省力,不会因为揉成一团的...

    SQL优化 SQL优化软件 SQL优化工具

    SQL优化是数据库管理中的关键环节,它涉及到提升查询性能、减少资源消耗以及改善系统整体效率。SQL优化软件和工具能够帮助数据库管理员(DBA)和开发人员找出性能瓶颈,优化查询逻辑,从而提高数据库系统的响应速度...

    SQLPrompt5.3破解

    本人在Windows7 64位+SQL Server 2012环境下测试通过(系统是全新安装) 使用方法: 1,安装SQLPrompt v5.3,这个不多说。 2,安装完毕后,断开网络连接。 3,打开Visual Studio或者SQL Server Management Studio(版本...

    SQLPrompt for SQLServer2016 智能提示插件 SQL2016 提示

    SQLPrompt for SQLServer2016 智能提示插件 SQL2016 提示 SQLPrompt最新版本 绿色版 SQL Prompt 是一款拥有SQL智能提示功能的SQL Server和VS插件。SQL Prompt能根据数据库的对象名称,语法和用户编写的代码片段自动...

    sqlserver自动生成sql语句工具sqlserver转oracle

    在IT行业中,数据库管理系统是核心组成部分,SQL Server和Oracle分别是微软和甲骨文公司推出的两款广泛应用的关系型数据库系统。在企业级应用中,有时需要在不同的数据库系统间进行数据迁移或兼容性处理,这就涉及到...

    sql server 导入超大SQL脚本文件

    SQL Server 导入超大 SQL 脚本文件 SQL Server 是一种关系型数据库管理系统,广泛应用于各种行业。然而,在实际应用中,我们经常会遇到导入超大 SQL 脚本文件的问题。本文将介绍如何使用 osql 工具来导入超大 SQL ...

    Android通过webservice连接Sqlserver实例

    在Android开发中,有时我们需要与远程数据库进行交互,例如SQLServer。这个场景通常是通过Web服务,如WebService来实现。本文将详细介绍如何在Android应用中利用WebService接口连接到SQLServer数据库,实现数据的增...

    SQL SQLPrompt 9 SQL 2016/2017可用

    SQL Prompt是Redgate Software开发的一款高效SQL代码编辑工具,它为SQL Server的开发人员提供了智能提示、格式化、重构和代码分析等功能,极大地提升了编写和维护SQL代码的效率。SQL Prompt 9是该系列的最新版本,...

    SQL 语法 SQL 总结 SQL教程

    SQL 基础 SQL 首页 SQL 简介 SQL 语法 SQL select SQL distinct SQL where SQL AND & OR SQL Order By SQL insert SQL update SQL delete SQL 高级 SQL Top SQL Like SQL 通配符 SQL In SQL Between ...

    SQLMonitor oracle跟踪SQL工具

    《SQLMonitor:Oracle数据库SQL跟踪与分析利器》 在IT行业中,数据库的高效管理与优化是至关重要的。针对Oracle数据库,有一款名为SQLMonitor的工具,它专为跟踪和监控SQL语句而设计,帮助开发者和DBA们找出程序...

    AI自动生成SQL语句的开源代码 sqlcoder-main.zip

    开源的AI自动生成SQL语句源代码,这款SQLCoder-70B-Alpha在文本到SQL的转换能力上超越了包括GPT-4在内的所有通用模型,它能更准确地理解你的需求,并生成相应的SQL查询。SQLCoder2和SQLCoder-7B模型已经向公众开放,...

    Sql Server 2014 安装包

    Sql Server 2014 安装包 SQL Server 2014是微软推出的一款关系型数据库管理系统,它在企业级数据管理和分析领域扮演着重要的角色。此安装包包含两个主要组件:SQL Management Studio和SQL Server Express。 1. **...

    sqlserver驱动包 jdbc驱动 sqljdbc.jar和sqljdbc4.jar

    SQL Server驱动包是用于Java应用程序通过JDBC(Java Database Connectivity)接口与Microsoft SQL Server数据库进行交互的必备组件。本文将详细介绍这两个重要的驱动文件——sqljdbc.jar和sqljdbc4.jar,以及如何...

    sqlserver驱动包:sqljdbc4.jar

    SQL Server驱动包`sqljdbc4.jar`是微软官方提供的Java数据库连接器(JDBC),用于在Java应用程序中与Microsoft SQL Server进行通信。JDBC是Java编程语言中的一个标准API,它使得开发人员能够以标准化的方式访问各种...

    sqlservr32和sqlservr64.zip

    标题中的"sqlservr32和sqlservr64.zip"指的是SQL Server 2005服务中的两个关键组件,`sqlservr32.exe`和`sqlservr64.exe`。这两个文件是SQL Server服务的核心执行文件,分别对应于32位和64位操作系统。在Windows 8和...

    SQLTracker,抓取sql语句的工具

    SQLTracker是一款专为数据库操作监控设计的工具,它在IT领域中主要用于跟踪和记录SQL语句的执行情况。SQL(Structured Query Language)是用于管理关系数据库的编程语言,包括查询、更新、插入和删除数据等操作。SQL...

    oracle sqldeveloper连接mysql、SQLServer第三方dll

    解决oracle sqldeveloper无法连接mysql、SQLServer问题,sqlDeveloper是ORACLE数据库开发工具,自带的是无法连接MS SQL Server以及mysql的,想连接的话需要第三方工具。 使用方法: 解压出来后将2个jar放入jlib...

    sql server2019安装包

    SQL Server 2019是Microsoft推出的一款关系型数据库管理系统,是SQL Server系列中的一个重要版本。它提供了强大的数据存储、处理和分析能力,广泛应用于企业级数据库应用开发和数据分析。在本安装包中,主要包含的是...

Global site tag (gtag.js) - Google Analytics