SQL语言基础

来源:互联网 发布:配置虚拟机网络环境 编辑:程序博客网 时间:2024/05/06 04:00

  SQL(Structured Query Language,结构化查询语言)是一种在关系数据库中定义和操纵数据的标准语言,是用户与数据库之间交流的接口.这里把SQL语言的基础给写下来,所谓万丈高楼从地起,基础的掌握度决定你的走向.

 SQL语言分为以下几类:

数据定义语言(Data Definition Language,DDL):用于定义,修改,删除数据库模式对象,进行权限管理等.DDL语言包括创建,修改,删除或者重命名模式对象(create ,alter,drop,rename)的语句,输出表中所有行但不能够删除表(truncate)的语句,管理权限(grant,revoke)的语句,审核数据库使用(audit,noaudit)语句,以及在数据字典中添加说明(comment)语句.使用DDL语言定义模式对象时,会将其定义保存在数据库字典中.DDL语言是自动提交的.

数据操纵语言(Data Manipulation Language ,DML):用语查询,生成,修改,删除数据库中的数据.MDL语句用于查询数据(select),添加新行数据(insert),修改现有行数据(update),删除现有行语句(delete),合并数据(merge)的语句,以及查看一个SQL行计划(explain plan)和锁定一个数据库表以限制访问(lock table)的语句。

事务控制(Transaction Control):用于把一组DML语句组合起来形成一个事务并进行事务控制.使用这些语句可以把这些语句组合所做的修改保存起来(commit)或者撤消这些修改(rollback).它包括在事务中设置一个保存点(savepoint)的语句,以实现可能出现的回朔操作,还包括设置事务属性(set transaction)的语句.

会话控制(Session Control):用于控制一个会话(session,指从与数据库连接开始到断开之间的时间过程)的属性.它包括用于控制会话属性(alter session)的语句,以及切换角色(set role)的语句.

系统控制(System Control):用于管理数据库的是属性.只有一条语句,即alter system.

  查询数据是数据库的核心操作.查询数据是关系代数,关系演算在SQL语言中的主要体现.所以今天就把最基础的东西写出来看看.

简单的看我们怎么来查看表的结构.例如要显示表A的结构:

SQL>DESC table_name
效果:
名称        是否为空?    类型
__________________________________
ID         NOT NULL     NUMBER(2)
NAME                    VARCHAR2(14)
LOC                     VARCHAR2(14)
Oracle对SQL的重要的改进之一就是增加了描述命令describe.
基本查询:
基本查询是指针对一个表的查询,其语法是:
SELECT *| [column1 [AS alias1], column2 [AS alias2], ...] from table
WHERE condition_expression
ORDER BY column [ASC|DESC]

查询所有列
如果要查询所有列,只需要在SELECT关键子后面指定星号(*)便可.例如:
SQL> SELECT * FROM dept;
效果:
DEPTNO       DENAME        LOC
___________________________________
10           ACCOUNTING    NEW YORK
20           RESEARCH      DALLAS
30           SALES         CHICAGO

查询指定列
当只需要查询某些列时,在SELECT关键字后面指定列名即可(还可以用AS指定别名),个列
之间用","隔开即可.例如:
SQL> SELECT deptno,dname AS 部门名称 from dept;
效果:
deptno            部门名称
____________________________
10                ACCOUNTING
20                RESEARCH
30                SALES

取消重复行
使用DISTINCT关键字可以取消重复行.例如:
SQL> SELECT DISTINCT deptno ,job FROM emp;
效果:
DEPTNO         JOB
___________________________
    10         CLERK
    20         MANAGER
    30         SALESMAN
使用表达式
可以在查询列中使用表达式来连接字符(使用||连接字符串),改变显示的格式(使用函数TO_CHAR),计算
显示的数据(如使用+,-,*,/)etc.例如:
SQL> SELECT ename|| '是一位' || job AS 雇员细节,
2    TO_CHAR(hiredate,'YYYY_MM_DD') AS 雇佣时间,
3    sal*1.2
4    FROM emp;
效果:
雇员细节                雇佣时间        SAL*1.2
SMITH 是一位 CLERK      1980_12_17     960
JONES 是一位 MANAGER    2005_2_21      30000

使用WHERE字句
如果并不想查询出所有的数据,而只是想查询出满足条件的数据,那么就可以用WHERE了.如果表达式为
TRUE,则查询出该行,否则就不查询出该行.可以在WHERE字句中使用列名或者表达式,但不能用别名.
下面是编写表达式时,需要使用的各种操作符:
操作符                                 含义
====================================================
比较操作符
=                                      等于
<>                                     不等于
>=                                     大于等于
<=                                     小于等于
>                                      大于
<                                      小于
逻辑操作符
AND                                    与
OR                                     或
NOT                                    非
其他操作符
IN和NOT IN                             成员
BETWEEN...AND...                       范围(在上限和下限之间)
IS NULL和IS NOT NULL                   找出NULL值或非NULL值
LIKE                                   模式匹配(或模糊查询)
在WHERE字句中使用数值时,既可用单引号也可不用;使用字符值,日期,都必须用单引号,并且日期格式必须符合
数据库中支持的日期格式.
[例]查询1983年1月1日之后的雇员(符合默认的日期格式)
SQL> SELECT ename,hiredate FROM emp
     WHERE hiredate > '01-1月-83';
效果:
ENAME                          HIREDATE
____________________________________________
SCOTT                          19-4月-87
FEIYANG                        23-5月-2005
ADMIN                          11-4月-86
[例]查询1983年1月1日后的雇员(不符合默认的日期格式)
SQL> SELECT ename,hiredate FROM emp
     WHERE hiredate > TO_DATE('1983-01-01','YYYY-MM-DD');
效果:
ENAME                         HIREDATE
_______________________________________________
SCOTT                          19-4月-87
FEIYANG                        23-5月-2005
ADMIN                          11-4月-86
许多情况下需要指定多个条件,这个条件就需要用逻辑操作符来连接形成一个新的条件.
[例]查询在部门编号为20工作的,工资高于2500元或岗位是CLREK(注意字符串的大小写)的所有雇员信息.
SQL> SELECT deptno,sal,job,ename FROM emp
     WHERE deptno = 20
     AND (sal > 2500 or job = 'CLERK');
DEPTNO      SAL      JOB        ENAME
___________________________________________
     20     800      CLERK      FEIYANG
     20     2000     CLERK      BIANYUAN
     30     10000    CLERK      XIANGENG  
[例]查询在部门编号为20和30工作的,岗位不是CLERK或SALESMAN的所有雇员的信息.
SQL> SELECT deptno,sal,job,ename FROM emp
     WHERE deptno in(20,30)
     AND NOT (job='CLERK' OR job='SALESMAN');
效果:
DEPTNO         SAL        JOB       ENAME
    20         3000       MANAGER   BILLGATES
    30         5000       ANALYST   JOHN
当用字符串作为查询条件,但并不完全确定字符串而只知道它的某些特征时,就需要用模糊查询了.
[例]查询姓名的首字符为A或第二个字符为A的所有雇员信息.
SQL> SELECT ename,sal,deptno FROM emp
     WHERE ename LIKE 'A%' OR ename LIKE '_A%';
效果:
   ENAME                SAL                  DEPTNO
_______________________________________________________
   FEIYANG              20000                30
   XIANGENG             1234000              20
   BIANYUAN             4000000              30

使用ORDER BY字句
 当执行SELECT时,默然情况下会按照插入行数据的次序来显示返回行数据.但有时可以使用ORDER BY字句来将
返回的数据按照升序排列.当在SELECT语句中同时包含多个字句(FROM,WHERE,GROUP BY,HAVING,ORDER BY)时
,ORDER BY字句必须是最后一条字句.
可以在ORDER BY字句中指定一个或者多个列(包括表达式),返回行将先按照ORDER BY字句中的第一个序列来排序,然后
按照第二个,依次类推.
[例]以部门编号降序已经姓名升序来查询工资在1500~3 000员的雇员信息.
SQL> SELECT deptno,ename,sal,comm FROM emp
     WHERE sal BETWEEN 1500 ADN 3000
     ORDER BY deptno DESC,ename;
效果:
 DEPTNO      ENAME          SAL             COMM
__________________________________________________
     30      ALLEN          1600             300
     20      BLARK          2850               
     10      CLERK          2000             0                

原创粉丝点击