数据库各种操作
各种实例
–创建数据库
create database StudentCourse
–1.建表
–建立学生表
CREATE TABLE Student(
Sno CHAR(9) PRIMARY KEY, /列级完整性约束性条件,Sno是主码/
Sname CHAR(20)UNIQUE, /Sname取唯一值/
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20)
);
–建立课程表
CREATE TABLE Course(
Cno CHAR(4) PRIMARY KEY, /列级完整性约束性条件,Cno是主码/
Cname CHAR(40) NOT NULL,
Cpno CHAR(4),
Ccredit SMALLINT,
FOREIGN KEY(Cpno) REFERENCES COurse(Cno)
/表级完整性约束条件,Cpno是外码,被参照表是Course,被参照列是Cno/
);
–建立学生选课表
CREATE TABLE SC(
Sno char(9),
Cno CHAR(4),
Grade SMALLINT,
PRIMARY KEY(Sno,Cno),
FOREIGN KEY(Sno) REFERENCES Student(Sno),
FOREIGN KEY(Cno) REFERENCES Course(Cno),
/主码有两个属性构成;表级完整性约束条件,Sno,Cno是外码,各有参照表/
);
–2.修改基本表
ALTER TABLE Student ADD S_entrance DATE;
ALTER TABLE Student ALTER COLUMN Sage INT;
ALTER TABLE Course ADD UNIQUE(Cname);
–3.删除基本表
DROP TABLE Student;
–4.建立索引
CREATE UNIQUE INDEX Stusno ON Student(Sno);
CREATE UNIQUE INDEX Coucno ON Course(Cno);
CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC);
ALTER INDEX SCno RENAME TO SCSno;
–5.删除索引
DROP INDEX Stusname;
–6.数据查询
SELECT Sno,Sname
FROM Student;
SELECT Sno,Sname,Sdept
FROM Student;
SELECT *
FROM Student;
SELECT Sname,2014-Sage
FROM Student;
SELECT Sname,‘Year of Birth:’,2014-Sage,LOWER(Sdept)
FROM Student;
SELECT Sno
FROM SC;
SELECT Sname
FROM Student
WHERE Sdept=‘CS’;
SELECT Sname,Sage
FROM Student
WHERE Sage<20;
SELECT DISTINCT Sno
FROM SC
WHERE Grade<60;
SELECT Sname,Sdept,Sage
FROM Student
WHERE Sage BETWEEN 20 AND 23;
SELECT Sname,Sdept,Sage
FROM Student
WHERE Sage NOT BETWEEN 20 AND 23;
SELECT Sname,Ssex
FROM Student
WHERE Sdept IN (‘CS’,‘MA’,‘IS’);
SELECT Sname,Ssex
FROM Student
WHERE Sdept NOT IN (‘CS’,‘MA’,‘IS’);
SELECT Sname,Sno,Ssex
FROM Student
WHERE Sname LIKE ‘刘%’;
SELECT Sname
FROM Student
WHERE Sname LIKE ‘欧阳_’;
SELECT Sname,Sno
FROM Student
WHERE Sname LIKE ‘_阳%’;
SELECT Sname,Sno,Ssex
FROM Student
WHERE Sname NOT LIKE ‘刘%’;
SELECT Sno,Cno
FROM SC
WHERE Grade IS NUll;
SELECT Sno,Cno
FROM SC
WHERE Grade IS NOT NUll;
SELECT Sname
FROM Student
WHERE Sdept=‘CS’ AND Sage<20;
SELECT Sname,Ssex
FROM Student
WHERE Sdept=‘CS’ OR Sdept=‘MA’ OR Sdept=‘IS’;
SELECT *
FROM Student
ORDER BY Sdept,Sage DESC;
–7.聚集函数
SELECT COUNT(*)
FROM Student;
SELECT COUNT(DISTINCT Sno)
FROM SC;
SELECT MAX(Grade)
FROM SC
WHERE Cno=‘1’;
SELECT SUM(Ccredit)
FROM SC,Course
WHERE Sno=‘201215121’ AND SC.Cno=Course.Cno;
SELECT Sno
FROM SC
GROUP BY Sno
HAVING COUNT(*)>3;
SELECT Sno,AVG(Grade)
FROM SC
GROUP BY Sno
HAVING AVG(Grade)>=90;
–8.连接查询(多个表连接)
SELECT Student.,SC.
FROM Student,SC
WHERE Student.Sno=SC.Sno;
SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade
FROM Student,SC
WHERE Student.Sno=SC.Sno;
–3.51
SELECT Student.Sno,Sname
FROM Student,SC
WHERE Student.Sno=SC.Sno AND /连接谓词/
SC.Cno=‘2’ AND SC.Grade>90;
–9.自身连接
SELECT FIRST.Cno,SECOND.Cpno
FROM Course FIRST,Course SECOND
WHERE FIRST.Cpno=SECOND.Cno;
–10.外连接
SELECT Student.Sno,Sname,Cname,Grade
FROM Student,Course,SC
WHERE Student.Sno=SC.Sno AND Course.Cno=SC.Cno;
SELECT Sno,Sname,Sdept
FROM Student
WHERE Sdept IN
(SELECT Sdept
FROM Student
WHERE Sname=‘刘晨’);
SELECT Student.Sno,Sname
FROM Student,SC,Course
WHERE Student.Sno=SC.Sno AND
SC.Cno=Course.Cno AND
Course.Cname=‘信息系统’;
SELECT Sno,Cno
FROM SC x
WHERE Grade>=(SELECT AVG(Grade)
FROM SC y
WHERE y.Sno=x.Sno);
SELECT Sname,Sage
FROM Student
WHERE Sage<ANY(SELECT Sage
FROM Student
WHERE Sdept=‘CS’)
AND Sdept<>‘CS’;
SELECT Sname,Sage
FROM Student
WHERE Sage<ALL(SELECT Sage
FROM Student
WHERE Sdept=‘CS’)
AND Sdept<>‘CS’;
SELECT Sname
FROM Student
WHERE EXISTS
(SELECT *
FROM SC
WHERE SNO =Student.Sno AND Cno=‘1’);
SELECT Sname
FROM Student
WHERE NOT EXISTS
(SELECT *
FROM SC
WHERE Sno =Student.Sno AND Cno=‘1’);
SELECT Sname
FROM Student
WHERE NOT EXISTS
(SELECT *
FROM Course
WHERE NOT EXISTS
(SELECT *
FROM SC
WHERE Sno=Student.Sno AND Cno=Course.Cno));
SELECT DISTINCT Sno
FROM SC SCX
WHERE NOT EXISTS
(SELECT *
FROM SC SCY
WHERE SCY.Sno=‘201215122’ AND
NOT EXISTS
(SELECT *
FROM SC SCZ
WHERE SCZ.Sno=SCX.Sno AND SCZ.Cno=SCY.Cno));
–11.集合查询
SELECT *
FROM Student
WHERE Sdept=‘CS’
UNION
SELECT *
FROM Student
WHERE Sage<=19;
SELECT Sno
FROM SC
WHERE Cno=‘1’
UNION
SELECT Sno
FROM SC
WHERE Cno=‘2’;
SELECT *
FROM Student
WHERE Sdept=‘CS’
INTERSECT
SELECT *
FROM Student
WHERE Sage<=19;
SELECT Sno
FROM SC
WHERE Cno=‘1’
INTERSECT
SELECT Sno
FROM SC
WHERE Cno=‘2’;
–3.68
SELECT *
FROM Student
WHERE Sdept=‘CS’
EXCEPT
SELECT *
FROM Student
WHERE Sage<=19;
–基于派生表的查询
–1.插入数据
–数据更新
INSERT
INTO Student(Sno,Sname,Ssex,Sdept,Sage)
VALUES(‘201215128’,‘张成明’,‘男’,‘IS’,18);
INSERT
INTO Student
VALUES(‘201215126’,‘张成明’,‘男’,18,‘IS’);
INSERT
INTO SC(Sno,Cno)
VALUES(‘201215128’,‘1’);
–插入子查询结果
CREATE TABLE Dept_age(
Sdept CHAR(15),
Avg_age SMALLINT);
INSERT
INTO Dept_age(Sdept,Avg_age)
SELECT Sdept,AVG(Sage)
FROM Student
GROUP BY Sdept;
–2.修改数据
UPDATE Student
SET Sage=22
WHERE Sno=-‘201215121’;
UPDATE Student
SET Sage=Sage+1;
UPDATE SC
SET Grade=0
WHERE Sno IN
(SELECT Sno
FROM Student
WHERE Sdept=‘CS’);
–3.删除数据
DELETE
FROM Student
WHERE Sno=‘201215128’;
DELETE
FROM SC;
DELETE
FROM SC
WHERE Sno IN
(SELECT Sno
FROM Student
WHERE Sdept=‘CS’);
–4.空值处理
INSERT INTO SC(Sno,Cno,Grade)
VALUES(‘201215126’,‘1’,NULL);
UPDATE Student
SET Sdept=NULL
WHERE Sno=‘201215200’;
SELECT *
FROM Student
WHERE Sname IS NULL OR Ssex IS NULL OR Sage IS NULL OR Sdept IS NULL;
SELECt Sno
FROM SC
WHERE Grade<60 AND Cno=‘1’;
SELECT Sno
FROM SC
WHERE Grade<63 AND Cno=‘1’
UNION
SELECT Sno
FROM SC
WHERE Grade IS NULL AND Cno=‘1’;
–或者
SELECT Sno
FROM SC
WHERE Cno=‘1’ AND (Grade<60 OR Grade IS NULl);
视图
–1.建立视图
CREATE VIEW IS_Student
AS
SELECT Sno,Sname,Sage
FROM Student
WHERE Sdept=‘IS’;
CREATE VIEW IS_Student
AS
SELECT Sno,Sname,Sage
FROM Student
WHERE Sdept=‘IS’
WITH CHECK OPTION;
CREATE VIEW IS_S1(Sno,Sname,Grade)
AS
SELECT Student.Sno,Sname,Sage
FROM Student,SC
WHERE Sdept='IS’AND
Student.Sno=SC.Sno AND
SC.Cno=‘1’;
CREATE VIEW IS_S2
AS
SELECT Sno,Sname,Grade
FROM IS_S1
WHERE Grade>=90;
CREATE VIEW BT_S(Sno,Sname,Sbirth)
AS
SELECT Sno,Sname,2014-Sage
FROM Student;
CREATE VIEW S_G(Sno,Gavg)
AS
SELECT Sno,AVG(Grade)
FROM SC
GROUP BY Sno;
CREATE VIEW F_Student(F_sno,name,sex,age,dept)
AS
SELECT *
FROM Student
WHERE Ssex=‘女’;
–2.删除视图
DROP VIEW BT_S;
DROP VIEW IS_S1;
–3.查询视图
SELECT Sno,Sage
FROM IS_Student
WHERE Sage<20;
SELECT IS_Student.Sno,Sname
FROM IS_Student,SC
WHERE IS_Student.Sno=SC.Sno AND SC.Cno=‘1’;