SQL语句实例学习汇总

表操作 例1对于表的教学管理数据库中的表STUDENTS,可以定义如下:复制代码
代码如下:CreateTABLESTUDENTS(SNONUMERIC(6,0)NOTNULL SNAMECHAR(8)NOTNULL
AGENUMERIC(3,0) SEXCHAR(2) BPLACECHAR(20)
PRIMARYKEY(SNO))例2对于表的教学管理数据库中的表ENROLLS,可以定义如下:复制代码
代码如下:CreateTABLEENROLLS(SNONUMERIC(6,0)NOTNULL CNOCHAR(4)NOTNULL
GRADEINT PRIMARYKEY(SNO,CNO) FOREIGNKEY(SNO)REFERENCESSTUDENTS(SNO)
FOREIGNKEY(CNO)REFERENCESCOURSES(CNO)
CHECK((GRADEISNULL)or(GRADEBETWEEN0AND100)))例3根据表的STUDENTS表,建立一个只包含学号、姓名、年龄的女学生表。复制代码
代码如下:CreateTABLEGIRLASSelectSNO,SNAME,AGE
FROMSTUDENTSWhereSEX=’女’;例4删除教师表TEACHER。 DropTABLETEACHER
例5在教师表中增加住址列。 AlterTABLETEACHERSADD(ADDRCHAR(50))
例6把STUDENTS表中的BPLACE列删除,并且把引用BPLACE列的所有视图和约束也一起删除。
AlterTABLESTUDENTSDropBPLACECASCADE 例7补充定义ENROLLS表的主关键字。
AlterTABLEENROLLSADDPRIMARYKEY(SNO,CNO); 视图操作
例9建立一个只包括教师号、姓名和年龄的视图FACULTY。(在视图定义中不能包含orDERBY子句)
CreateVIEWFACULTYASSelectTNO,TNAME,AGEFROMTEACHERS
例10从学生表、课程表和选课表中产生一个视图GRADE_TABLE,它包括学生姓名、课程名和成绩。
CreateVIEWGRADE_TABLEASSelectSNAME,CNAME,GRADE
FROMSTUDENTS,COURSES,ENROLLS WhereSTUDENTS.SNO=ENROLLS.SNOAND
COURSES.CNO=ENROLLS.CNO 例11删除视图GRADE_TABLE
DropVIEWGRADE_TABLERESTRICT 索引操作 例12在学生表中按学号建立索引。
CreateUNIQUEINDEXSTONSTUDENTS(SNO,ASC) 例13删除按学号所建立的索引。
DropINDEXST 数据库模式操作
例14创建一个简易教学数据库的数据库模式TEACHING_DB,属主为ZHANG。
CreateSCHEMATEACHING_DBAUTHRIZATIONZHANG
例15删除简易教学数据库模式TEACHING_DB。
(1)选用CASCADE,即当删除数据库模式时,则本数据库模式和其下属的基本表、视图、索引等全部被删除。
(2)选用RESTRICT,即本数据库模式下属的基本表、视图、索引等事先已清除,才能删除本数据库模式,否则拒绝删除。
DropSCHEMATEACHING_DBCASCADE 123阅读全文

www.463.com 1 

表操作  

 

例 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 (或)等。

www.463.com,谓词 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 (若有三个表,就有两个连接条件 )
;第二,若一个表中的主关键字是由多个列组成,则对此主关键字中的每一个列都要有一个连接条件(也有少数例外情况))

        SELECT  SNAME, BPLACE, GRADE

        FROM   STUDENTS, ENROLLS

        WHERE  BPLACE IN (‘ 山西 ’ , ‘ 河北 ’)  AND  GRADE >= 90  AND
  STUDENTS.SNO=ENROLLS.SNO

例 28  查出课程成绩在 80 分以上的女学生的姓名、课程名和成绩。( FROM
子句中的子查询)

        SELECT  SNAME,CNAME, GRADE

        FROM   (SELECT SNAME, CNAME , GRADE

                        FROM  STUDENTS, ENROLLS,COURSES

                        WHERE  SEX = ‘ 女 ‘)

        AS TEMP (SNAME, CNAME,GRADE)

        WHERE  GRADE > 80

 

 

 

 

表达式与函数的使用

 

例 29  查询各课程的学时数。(算术表达式由算术运算符+、-、 *
、/与列名或数值常量所组成。)

        SELECT  CNAME,COURSE_TIME = CREDIT*16

        FROM   COURSES

例 30  找出教师的最小年龄。(内部函数: SQL 标准中只使用 COUNT 、 SUM
、 AVG 、 MAX 、 MIN 函数,称之为聚集函数( Set Function )。 COUNT
函数的结果是该列统计值的总数目, SUM 函数求该列统计值之和, AVG
函数求该列统计值之平均值, MAX 函数求该列最大值, MIN
函数求该列最小值。)

        SELECT  MIN(AGE)

        FROM   TEACHERS

例 31  统计年龄小于等于 22 岁的学生人数。(统计)

        SELECT  COUNT(*)

发表评论

电子邮件地址不会被公开。 必填项已用*标注