`
hao_zhou
  • 浏览: 17597 次
  • 性别: 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)和开发人员找出性能瓶颈,优化查询逻辑,从而提高数据库系统的响应速度...

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

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

    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能根据数据库的对象名称,语法和用户编写的代码片段自动...

    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模型已经向公众开放,...

    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...

    Oracle Sql语句转换成Mysql Sql语句

    在数据库管理领域,Oracle SQL和MySQL SQL是两种广泛使用的SQL方言,它们在语法和功能上存在一定的差异。当需要将一个基于Oracle SQL的应用程序迁移到MySQL环境时,就需要进行SQL语句的转换工作。本项目提供了一个...

    kettle链接SQL server驱动 sqljdbc

    在Kettle中配置SQL Server数据库连接时,我们需要依赖特定的数据库驱动,这就是SQL JDBC驱动。 SQL JDBC驱动是微软提供的Java Database Connectivity (JDBC) 驱动,使得Java应用程序能够与SQL Server进行交互。有两...

Global site tag (gtag.js) - Google Analytics