在SQL中,最常用的向表格中添加数据的方法是使用INSERT语句。但是,用INSERT语句每次只能插入一个元组。用带子查询插入语句,一个次可以插入一个或多个元组。
 ● 插入一个元组的语句格式:
   INSERT INTO 表名[(列名[,列名]…)]
   VALUES(值[,值]…..)
  插入单个元组,按顺序在表名后给出表中每个列名,在VALUES后给出对应的每个列值。插入一个完整的新元组时,可省略表的列名。插入部分列值,必须在表名后给出要输入值的列名。
例题  例1,插入单个元组,按顺序给出表中每个列值。
  INSERT INTO DEPT VALUES( "CS","计算机","888", "10区" )
例题
 例2,插入一个学生的部分列值,必须在表名后给出要输入值的列名。
  INSERT INTO STUDENT (sno ,sname)
  VALUES( "J20045", "刘琉")

  在使用INSERT语句的时候,VALUES列表中的值或表达式必须匹配表中的列数,并和相应各列数据类型兼容。如果表格中存在某些列定义为NOT NULL,那么在插入时该列必须要出现在VALUES的列表中,否则插入会失败。

 ● 用子查询插入多个元组值的语句格式:
   INSERT INTO 表名[(列名[,列名]…)]
  子查询
  注意:在使用子查询的结果插入元组时,子查询的结果必须匹配待插入表中的列数,并和相应各列数据类型兼容。如果表格中存在某些列定义为NOT NULL,那么子查询的结果在该列上必须有值,否则插入会失败。
例题  例3,建立一个新表,存放每个学生的学号、姓名和平均成绩。把子查询结果插入新表中。
  CREATE TABLE savg( sno CHAR(8),sname CHAR(20), avage REAL )
  INSERT INTO savg (sno,sname,avage)
  ( SELECT sno,sname,AVG(grade)
  FROM SC,STUDENT
  WHERE SC.sno = STUDENT.sno
  GROUP BY sno )
例题
 例4,在表Studio中插入属性name,这些name是在表Movie中提到,但没有在表Studio中出现的studioName。
  INSERT INTO Studio(name)
  SELECT DISTINCT studioName
  FROM Movie
  WHERE studioName NOT IN
  (SELECT name FROM Studio);

  考虑上述例子如果去掉DISTINCT会是什么样子?和你想象的一样吗?