SQL语句实例
 
表操作 
 
例 1  对于表的教学管理数据库中的表 STUDENTS ,可以定义如下:
  CREATE  TABLE  STUDENTS
  (SNO      NUMERIC (6, 0) NOT NULL
  SNAME    CHAR (8) NOT NULL
  AGE      NUMERIC(3,0)
  SEX      CHAR(2)
  BPLACE  CHAR(20)
  PRIMARY KEY(SNO))
例 2  对于表的教学管理数据库中的表 ENROLLS ,可以定义如下:
        CREATE  TABLE  ENROLLS
        (SNO      NUMERIC(6,0)  NOT NULL
        CNO    CHAR(4)  NOT NULL
        GRADE  INT
        PRIMARY KEY(SNO,CNO)
        FOREIGN KEY(SNO) REFERENCES STUDENTS(SNO)
        FOREIGN KEY(CNO) REFERENCES COURSES(CNO)
        CHECK ((GRADE IS NULL) OR (GRADE BETWEEN 0 AND 100)))
例 3  根据表的 STUDENTS 表,建立一个只包含学号、姓名、年龄的女学生表。
        CREATE TABLE GIRL
        AS SELECT SNO, SNAME, AGE
        FROM STUDENTS
        WHERE SEX=' 女 ';

 
例 4  删除教师表 TEACHER 。
        DROP  TABLE  TEACHER
例 5  在教师表中增加住址列。
      ALTER TABLE TEACHERS
      ADD (ADDR CHAR(50))
例 6  把 STUDENTS 表中的 BPLACE 列删除,并且把引用 BPLACE 列的所有视图和约束也一起删除。
        ALTER TABLE STUDENTS
        DROP BPLACE CASCADE
例 7  补充定义 ENROLLS 表的主关键字。
       ALTER TABLE ENROLLS
      ADD PRIMARY KEY (SNO,CNO) ;
 
视图操作(虚表)
 
例 9  建立一个只包括教师号、姓名和年龄的视图 FACULTY 。 ( 在视图定义中不能包含 ORDER BY 子句 )
        CREATE VIEW FACULTY
        AS SELECT TNO, TNAME, AGE
        FROM TEACHERS
例 10  从学生表、课程表和选课表中产生一个视图 GRADE_TABLE , 它包括学生姓名、课程名和成绩。
        CREATE VIEW GRADE_TABLE
        AS SELECT  SNAME,CNAME,GRADE
        FROM  STUDENTS,COURSES,ENROLLS
        WHERE  STUDENTS.SNO = ENROLLS.SNO AND
        COURSES.CNO=ENROLLS.CNO
例 11  删除视图 GRADE_TABLE
        DROP VIEW GRADE_TABLE RESTRICT
 
索引操作
 
例 12  在学生表中按学号建立索引。
        CREATE  UNIQUE  INDEX  ST
        ON STUDENTS (SNO,ASC)
例 13  删除按学号所建立的索引。
        DROP INDEX ST
 
数据库模式操作
 
例 14  创建一个简易教学数据库的数据库模式  TEACHING_DB ,属主为 ZHANG 。
        CREATE SCHEMA TEACHING_DB  AUTHRIZATION  ZHANG
例 15  删除简易教学数据库模式 TEACHING_DB 。(( 1 )选用 CASCADE ,即当删除数据库模式时,则本数据库模式和其下属的基本表、视图、索引等全部被删除。( 2 )选用 RESTRICT ,即本数据库模式下属的基本表、视图、索引等事先已清除,才能删除本数据库模式,否则拒绝删除。)
        DROP SCHEMA TEACHING_DB CASCADE
单表操作
 
例 16  出 3 个学分的课程号和课程名。
        SELECT CNO, CNAME
        FROM  COURSES
        WHERE  CREDIT = 3
例 17  查询年龄大于 22 岁的学生情况。
        SELECT  *
        FROM  STUDENTS
        WHERE  AGE > 22
例 18  出籍贯为河北的男生的姓名和年龄。
        SELECT SNAME, AGE
        FROM  STUDENTS
        WHERE  BPLACE = ' 河北 '  AND  SEX = ' 男 '
例 19  出年龄在 20 ~ 23 岁之间的学生的学号、姓名和年龄,并按年龄升序排序。 (ASC (升序)或 DESC (降序)声明排序的方式,缺省为升序。 )
        SELECT SNO, SNAME, AGE
        FROM  STUDENTS
        WHERE  AGE BETWEEN 20 AND 23
        ORDER  BY  AGE
例 20  出年龄小于 23 岁、籍贯是湖南或湖北的学生的姓名和性别。(条件比较运算符=、< 和逻辑运算符 AND (与),此外还可以使用的运算符有:>(大于)、>=(大于等于)、<=(小于等于)、<>(不等于)、 NOT (非)、 OR (或)等。
谓词 LIKE 只能与字符串联用,常常是 “ <列名>  LIKE  pattern” 的格式。特殊字符 “_” 和 “%” 作为通配符。
谓词 IN 表示指定的属性应与后面的集合(括号中的值集或某个查询子句的结果)中的某个值相匹配,实际上是一系列的 OR (或)的缩写。谓词 NOT IN 表示指定的属性不与后面的集合中的某个值相匹配。
谓词 BETWEEN 是 “ 包含于 … 之中 ” 的意思。)
        SELECT SNAME, SEX
        FROM  STUDENTS
        WHERE  AGE < 23  AND  BPLACE  LIKE' 湖% '
        或
        SELECT SNAME, SEX
        FROM  STUDENTS
        WHERE  AGE < 23  AND  BPLACE  IN  ( ' 湖南 ' , ' 湖北 ' )
例 22  出学生表中籍贯是空值的学生的姓名和性别。(在 SQL 中不能使用条件:<列名>= NULL 。在 SQL 中只有一个特殊的查询条件允许查询 NULL 值:)
      SELECT SNAME, SEX
      FROM  STUDENTS
      WHERE  BPLACE IS NULL

 
多表操作
 
例 23  出成绩为 95 分的学生的姓名。(子查询)
        SELECT SNAME
        FROM  STUDENTS
        WHERE  SNO =
              (SELECT SNO
              FROM  ENROLLS
              WHERE  GRADE = 95)
例 24  出成绩在 90 分以上的学生的姓名。
        SELECT  SNAME
        FROM  STUDENTS
        WHERE  SNO IN
                (SELECT SNO
                FROM ENROLLS
                WHERE GRADE > 90)
        或
        SELECT  SNAME
        FROM  STUDENTS
        WHERE  SNO = ANY
                (SELECT SNO
                FROM ENROLLS
                WHERE GRADE > 90)
例 25  查询全部学生的学生名和所学课程号及成绩。(连接查询)
        SELECT  SNAME, CNO, GRADE
        FROM  STUDENTS, ENROLLS
        WHERE  STUDENTS.SNO = ENROLLS.SNO
例 26  出籍贯为山西或河北,成绩为 90 分以上的学生的姓名、籍贯和成绩。(当构造多表连接查询命令时,必须遵循两条规则。第一,连接条件数正好比表数少 1 (若有三个表,就有两个连接条件 ) ;第二,若一个表中的主关键字是由多个列组成,则对此主关键字中的每一个列都要有一个连接条件(也有少数例外情况))
sql统计每个系的学生人数