SQL标准DDL DML语言相关知识

1DDL数据定义语言部分

 (1) 定义基本表的语法:

  CREATE TABLE <表格> (<列名> <数据类型 > [列级约束条件]  

                   [,<列名> <数据类型 > [列级约束条件]......]

                   [,<表级约束条件>]......);

例如创建一个Student表,语句如下:

CREATE TABLE Student(

   Sno CHAR(10) NOT NULL UNIQUE,

   Sname CHAR(20),

   Ssex CHAR(2),

   Sage INT,

   Sdept CHAR(15)

)

一些基本数据类型说明如下:

    DATE 日期型,格式为YYY-MM-DD

    TIME 时间型,格式为HH.MM.SS.XX

    TIMESTAMP 日期加时间

    FLOAT  双字长浮点数

INT 全字长二进制数

修改基本表语法格式如下;

    ALTER TABLE <表名>

     [ADD <新列名> <数据类型> [完整性约束]]

     [DROP <完整性约束名>]

     [MODIFY <列名> <数据类型>];

例如:ALTER TABLE Student ADD Scome INT;  /*添加字段*/

     ALTER TABLE Student DROP Scome;  /*删除字段*/

删除基本表语法格式如下:

        DROP TABLE <表名>

例如删表: DROP TABLE Student;

(2)索引相关操作

建立索引语法格式如下:

CREATE [UNIQUE][CLUSTER] INDEX <索引名>

  ON <表名> (<列名> [<次序>] [,<列名> [<次序>]])

/*次序默认为ASC升序排列,DESC为降序排列

  UNIQUE是建立一个逻辑上的索引,每一个索引值对应一

  个唯一的数据记录,是逻辑上的排序。CLUSTER表示建立

  一个聚簇索引,是物理上的排序,适用于查找比较频繁,

  数据更新比较少的情况,根据情况选择合适的索引建立,

  索引是系统自动存取会自动选择合适的索引作为存取路

  径,用户不必也不能选择索引

*/

删除索引语法如下:

  DROP INDEX <索引名>

(3)建立视图语法如下:

      CREATE VIEW <视图名> [(<列名>[,<列名>]...)]

        AS <子查询>

      [WITH CHECK OPTION]

/*

WITH CHECK OPTION对操作进行视图定义检查,DML操作

都限制在指定列内;创建视图时最好指定视图的列名,可

以在基本表添加列或者更改过后还能够使用,能够正确工

;:CREATE VIEW V_STudent Sno,Sname,Sage

AS

SELECT Sno,Sname,Sage FROM Student

DROP VIEW  V_STudent进行删除

*/

2DML数据控制语言

  查询数据的语法构成如下:

   SELECT [ALL]|[DISTINCT] <目标列表达式> [,<目标列表达式>]...

      FROM <表名或视图>[,<表名或视图名>]....

      [WHERE <条件表达式>]

      [GROUP BY <列名1> [HAVING <条件表达式>]]

      [ORDER BY <列名2> [ASC|DESC]];

/*

 ALL表示查询所有数据,DISTINCT表示查询数据显示不重复

 GROUP用于对指定的列进行分组,HAVING表示分组过后满足

 条件才能被选择出来,ORDER BY用于根据指定列进行排序

 */

带条件的查询,下面列出常用的查询条件:

常用的查询条件

比较

‘=,>,<,>=,<=,<>,!=,!<等

确定范围

BETWEEN AND,NOT BETWEEN AND

确定集合

IN,NOT IN

字符匹配

LIKE,NOTLIKE

空值

IS NULL,IS NOT NULL

多重条件

AND,OR

/* BETWEEN AND用于确定范围,用于查找值是否在范围内:

  SELECT * FROM Student WHERE Sage BETWEEN 20 AND 23

  

  IN用于确定集合,用来确定查找值是否在这个集合内部:

  SELECT * FROM Student WHERE Sdepe IN ('IS','CS')

  

  [NOT] LIKE '<匹配串>' [ESCAPE '<换码字符>']

  LIKE用于模糊查询,常用来查询字符匹配问题.%(百分号)

  代表任意长度的字符串,_(下划线)表示单个字符:

  SELECT * FROM WHERE Sname LIKE '%'表示查询所有姓

  李的学生;另外可以用 ESCAPE来转换这两个字符,如果查询

  中的字符串含有这两个特殊字符;

  SELECT * FROM Course WHERE Cname LIKE 'DB\_Design'

  ESCAPE '\'

  

  涉及空值的查询,用谓词IS NULL来判断:SELECT * FROM SC

  WHERE Grade IS NOT NULL

  

  常用集函数:

  COUNT(DISTINCT|ALL *)

  COUNT(DISTINCT|ALL <列名>)

  SUM(DISTINCT|ALL <列名>)

  MAX(DISTINCT|ALL <列名>)

  MIN(DISTINCT|ALL <列名>)

  AVG(DISTINCT|ALL <列名>)

  

  GROUP BY用于分组,将根据指定的列进行分组。将相同的分成一组

  ,查询中只能使用集函数和指定分组的列:SELECT Sage COUNT(*) FROM

  Student GROUP BY Sage HAVING COUNT(*)>20

  

  另外还ANYALL谓词查询,ANY是指其中的任意一个值,ALL是指查询中

  的所有值:

  SELECT * FROM Student WHERE Sage<ALL(SELECT Sage FROM Student

   WHERE Sdept='IS') AND Sdept<>'IS'意思是在Student表中查询比IS

   中所有年龄都大的学生

   

   EXISTS谓词查询,EXISTS代表存在量词。不返回任何实际数据,只产生

   逻辑值TrueFalse:SELECT Sname FROM Student WHERE EXISTS(SELECT

   * (通常采用,因为并不返回实际内容)

   FROM SC WHERE SC.Sno=Student.Sno AND SC.Cno='1')意思是从Student

   中取出一个SnoSC里面的进行比较,如果相等就返回真值否则返回假。

*/

SQL语句书写顺序如下:

SELECT-FROM-WHERE-GROUP BY-HAVING-ORDER BY

SQL语句执行顺序如下:

FROM-WHERE-GROUP BY-HAVING-SELECT-ORDER BY

数据更新语法

插入数据语法:  INSERT INTO <表名> ([<属性列1>[,<属性列2>]....)

               VALUES(<常量1>[,<常量2>]....)

数据更新语法:  UPDATE <表名>

               SET <列名>=<表达式>[,<列名>=<表达式>]...

               [WHERE <条件>];

/*

INSERT INTO SC(Sno,Cno) VALUES('95020','1');  /*插入数据到指定列*/

UPDATE Student SET Sage=22 WHERE Sno='95001';  /*更新指定列*/

*/

猜你喜欢

转载自blog.csdn.net/lovequanquqn/article/details/51362149