数据库 之基本操作--模式、表、索引、查询(实用版)

1、模式的定义与删除

定义模式

在CREATE SCHEMA中可以接受CREATE TABLE,CREATE VIEW和GRANT子句,语句如下:

CREATE SCHEMA <模式名> AUTHORIZATION <用户名>[<表定义子句>|<视图定义子句>|<授权定义子句>]

例子:为用户ZHANG创建了一个模式TEST,并且在其中定义一个表TAB1

CREATE SCHEMA TEST AUTHORIZATION ZHANG 
CREATE TABLE TAB1 (
  COL1 SMALLINT, 
  COL2 INT,
  COL3 CHAR(20),
  COL4 NUMERIC(10,3),
  COL5 DECIMAL(5,2)
);
删除模式

CASCADE:删除模式的同时把该模式中所有的数据库对象全部删除

DROP SCHEMA <模式名> <CASCADE|RESTRICT>

例子: 删除模式ZHANG, 同时该模式中定义的表TAB1也被删除

DROP SCHEMA ZHANG CASCADE;

2、基本表的定义、删除与修改

定义表
CREATE TABLE <表名>
(<列名> <数据类型>[ <列级完整性约束条件> ]
[,<列名> <数据类型>[ <列级完整性约束条件>] ][,<表级完整性约束条件> ] );

例子:

//建立一个“课程”表Course
CREATE TABLE  Course
   ( Cno  CHAR(4) PRIMARY KEY, //主键
  	 Cname  CHAR(40),            
   	 Cpno  CHAR(4),               	                      
     Ccredit  SMALLINTFOREIGN KEY (Cpno) REFERENCES  Course(Cno) //外键,Course(Cno)为被参照表(被参照列)
   ); 

//建立一个学生选课表SC	
CREATE TABLE  SC
  ( Sno  CHAR(9), 
    Cno  CHAR(4),  
    Grade  SMALLINTPRIMARY KEY (Sno,Cno), /* 主码由两个属性构成,必须作为表级完整性进行定义*/
    FOREIGN KEY (Sno) REFERENCES Student(Sno), /* 表级完整性约束条件,Sno是外码,被参照表是Student */
    FOREIGN KEY (Cno)REFERENCES Course(Cno) /* 表级完整性约束条件, Cno是外码,被参照表是Course*/
  ); 
定义表的所属模式

方法一:在表名中明显地给出模式名

Create table"S-T".Student(......);     /*模式名为 S-T*/
Create table "S-T".Cource(......);
Create table "S-T".SC(......); 

方法二:在创建模式语句中同时创建表

CREATE SCHEMA TEST AUTHORIZATION ZHANG 
CREATE TABLE TAB1 (
  COL1 SMALLINT, 
  COL2 INT,
  COL3 CHAR(20),
  COL4 NUMERIC(10,3),
  COL5 DECIMAL(5,2)
);

方法三:设置所属的模式
设置搜索路径,然后定义基本表,结果建立了S-T.Student基本表

  SET search_path TO "S-T",PUBLIC; //设置搜索路径
  Create table Student(......); //定义基本表 
修改表

(1)添加属性

ALTER TABLE Student ADD S_entrance DATE;

(2)属性的数据类型

ALTER TABLE Student ALTER COLUMN Sage INT;

(3)给属性添加约束条件

ALTER TABLE Course ADD UNIQUE(Cname); 
删除表

例子:删除Student表

DROP TABLE  Student  CASCADE; //基本表定义被删除,数据被删除,表上建立的索引、视图、触发器等一般也将被删除 
创建视图
CREATE VIEW IS_Student      
AS 
SELECT Sno,Sname,Sage
FROM  Student
WHERE Sdept='IS';

3、索引的建立与删除

创建索引
CREATE [UNIQUE] [CLUSTER] INDEX <索引名> 
ON <表名>(<列名>[<次序>][,<列名>[<次序>] ]);
修改索引
ALTER INDEX <旧索引名> RENAME TO <新索引名>
删除索引

删除索引时,系统会从数据字典中删去有关该索引的描述

DROP INDEX <索引名>;

4、查询操作

单表查询

1、查询指定列

SELECT Sno,Sname FROM Atudent;

2、查询全部列

SELECT * FROM Atudent;

3、查询经过计算的值:详情链接
4、使用列别名改变查询结果的列标题

SELECT Sname NAME FROM Student;SELECT Sname as NAME FROM Student;

5、消除取值重复的行:DISTINCT关键词

SELECT DISTINCT Sno FROM SC; //查询sno,并去掉sno重复的记录,只留下一条

6、模糊查询:详情链接
7、逻辑运算符:AND和 OR来连接多个查询条件

AND的优先级高于OR,可以用括号改变优先级

查询计算机科学系(CS)、数学系(MA)和信息系(IS)学生的姓名和性别

SELECT Sname, Ssex FROM Student
WHERE  Sdept= ' CS' OR Sdept= ' MA' OR Sdept= 'IS ';

8、order by 升序/降序排序一个或多个属性列(默认升序)

升序:ASC;降序:DESC;缺省值为升序

查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列

SELECT  *
FROM  Student
ORDER BY Sdept, Sage DESC; 
聚集函数

count sum avg max min

1、查询学生总人数

SELECT COUNT(*) FROM  Student; 

2、查询选修了课程的学生人数。

SELECT COUNT(DISTINCT Sno) FROM SC;

3、计算1号课程的学生平均成绩。

SELECT AVG(Grade)  FROM    SC WHERE Cno= ' 1 ';

4、查询选修1号课程的学生最高分数。

SELECT MAX(Grade) FROM SC WHERE Cno='1';

5、查询学生201215012选修课程的总学分数。

SELECT SUM(Ccredit) FROM  SC,Course
WHERE Sno='201215012' AND SC.Cno=Course.Cno; 
GROUP BY子句

细化聚集函数的作用对象

  • 如果未对查询结果分组,聚集函数将作用于整个查询结果
  • 对查询结果分组后,聚集函数将分别作用于每个组
  • 按指定的一列或多列值分组,值相等的为一组

求各个课程号及相应的选课人数。

SELECT Cno,COUNT(Sno) FROM    SC GROUP BY Cno; 
HAVING子句

HAVING短语与WHERE子句的区别:作用对象不同

  • WHERE子句作用于基表或视图,从中选择满足条件的元组
  • HAVING短语作用于组,从中选择满足条件的组

1、查询选修了3门以上课程的学生学号。

SELECT Sno FROM  SC
GROUP BY Sno
HAVING  COUNT(*) >3;    

2、查询平均成绩大于等于90分的学生学号和平均成绩

SELECT  Sno, AVG(Grade) FROM  SC
GROUP BY Sno
HAVING AVG(Grade)>=90;
发布了30 篇原创文章 · 获赞 3 · 访问量 3900

猜你喜欢

转载自blog.csdn.net/qq_41956139/article/details/104247069
今日推荐