数据库基本操作小摘(代码由mysql-essential-5.1.50-win32测试通过)

[此文于2010年8月22日被重新编辑]

 

      本篇所有的内容都为本人在学习SQL中的学习札记,其中参考了《SQL Cookbook》与《SQL HACKS》这两本书,其余的资源来自于网络,通过学习后发现其实SQL中的很多技巧都是关键字的多种组合,所以了解关键字的用法才是重中之重。以下知识点只是起到一个摘抄作用,如果想了解更多详细的内容可以去查看这两本书,书中包含很多不同数据库的内置函数(本文没有涉及此方面),想要深入的学习只能多加应用才是。

[插入、更新与删除]

#创建数据库:CREATE DATABASE menagerie

#插入默认值:CREATE TABLE D(id integer default 0)

#查看当前状态: STATUS

#切换字符集:SET character_set_connection=gb2312     (参考更多:http://chenboqiang.blog.51cto.com/1068057/268639

  • #从一个表向另外的表中复制行:
  •    1:  INSERT INTO dept1(deptno,dname,loc) 
       2:   SELECT deptno,dname,loc 
       3:     FROM dep2 
       4:     WHERE loc IN(‘New’,‘BOS’,) 
     
  • #复制表定义:CREATE TABLE dep_2 LIKE dept 或者
  •    1:  CREATE TABLE dept_2
       2:  AS
       3:  SELECT * 
       4:     FROM dept
       5:     WHERE 1=0
     
    #一次向多个表插入记录:目前(2007.10.1)Oracle和DB2支持

# 阻止对某列插入:

   1:  CREATE VIEW new_emps as
   2:  SELECT empno,ename,job
   3:     FROM emp

#表中编辑记录,保留原始内容不变:

   1:  SELECT depno,
   2:         ename,
   3:         sal as orig_sal
   4:         sal*.10 as new_sal
   5:         FROM emp
   6:         WHERE deptno=20
   7:         ORDER BY 1,5

#当相应行存在时更新:

   1:  UPDATE emp
   2:     SET sal=sal*1.20
   3:     WHERE empno in(SELECT empno FROM emp_bonus)

#用其他表中的值更新

   1:  UPDATE emp e SET (e.sla,e.comm)=(SELECT ns.sal,ns.sal/2
   2:                                   FROM new_sal ns
   3:                                   WHERE ns.deptno=e.deptno)
   4:  WHERE EXISTS( SELECT NULL 
   5:                FROM  new_sal ns
   6:                WHERE ns.deptno=e.deptno)

#合并记录:

   1:  MERGE INTO emp_commission ec
   2:  USING (SELECT * FROM emp) emp
   3:     ON(ec.empno=emp.empno)
   4:  WHEN matched THEN 
   5:     UPDATE SET ec.comm=1000
   6:     DELETE WHRER(sal<2000)
   7:  WHEN NOT matched THEN 
   8:     INSERT(ec.empno,ec.ename,ec.deptno,ec.coomm)
   9:     VALUES(ec.empno,ec.ename,ec.deptno,ec.coomm)  

[检索记录]

#连接列值:

   1:   select concat(ename, ' WORKS AS A ',job) as msg
   2:        from
   3:        where deptno=10

#限制返回行数:

   1:   select *
   2:         from emp limit 5

#查找空值:

   1:  select *
   2:       from emp
   3:       where comm is null

#按模式搜索:

   1:  1select ename, job
   2:      from emp
   3:      where deptno in (10,20)
   4:      and (ename like '%I%' or job like '%ER')

[查询结果排序]

#以指定次序返回结果

   1:   select ename,job,sal
   2:       from emp
   3:       where deptno = 10
   4:       order by sal asc

    ( asc升序  desc降序,order by优先次序从左到右)

#按字串排序:substr或者substring函数

[操作多个表]

#记录集的叠加:UNION 操作符用于合并两个或多个 SELECT 语句的结果集。UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。

#组合相关行:

   1:  select e.ename, d.loc
   2:        from emp e inner join dept d
   3:          on (e.deptno = d.deptno)
   4:       where e.deptno = 10

#在一个表中查找与其他表不匹配的记录:

   1:  select e.ename, e.deptno as emp_deptno, d.*
   2:        from dept d left join emp e
   3:          on (d.deptno = e.deptno)
 

[使用数字]

#平均值:avg

#最大最小值:max, min

#总和:sum

#行数:count(*)

#某列值非NULL的个数:count(comm)

#乘机:sum over

#计算不包含最大值和最小值的均值:

   1:   select avg(sal)
   2:       from emp
   3:       where sal not in (
   4:         (select min(sal) from emp),
   5:         (select max(sal) from emp)
   6:       )
 

未完待续……

 

参考文献:《SQL Cookbook》——清华大学出版社,Antbony Molinaro著,王强&王晓娟等译——ISBN 978-7-302-15493-8

               《SQL HACKS》——清华大学出版社,Andrew Cumming&Gordon Russell著,张长富等译——ISBN 978-7-302-17484-4

posted @ 2010-08-24 22:42  杰特  阅读(293)  评论(0编辑  收藏  举报