赞
踩
注意注意!本文使用MySQL数据库,其中database和schema是同意义。
create database s_c;
use s_c;
CREATE TABLE Student (
Sno CHAR(9) PRIMARY KEY,
Sname CHAR(20) UNIQUE,
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20)
);
CREATE TABLE Course (
Cno CHAR(4) PRIMARY KEY,
Cname CHAR(40),
Cpno CHAR(4),
Ccredit SMALLINT,
FOREIGN KEY (Cpno) REFERENCES 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)
);
修改基本表
ALTER TABLE Student ADD S_entrance DATE;
ALTER TABLE Student ALTER COLUMN Sage INT;
ALTER TABLE Course ADD UNIQUE(Cname);
删除基本表
DROP TABLE Student CASCADE ;
insert into student values('200215121','李勇','男',20,'CS');
insert into student values('200215122','刘晨','女',19,'CS');
insert into student values('200215123','王敏','女',18,'MA');
insert into student values('200215125','张立','男',19,'IS');
insert into course values('1','数据库',null,4);
insert into course values('2','数学',null,2);
insert into course values('3','信息系统',null,4);
insert into course values('4','操作系统',null,3);
insert into course values('5','数据结构',null,4);
insert into course values('6','数据处理',null,2);
insert into course values('7','PASCAL语言',null,4);
update course set cpno='5' where cno='1';
update course set cpno='1' where cno='3';
update course set cpno='6' where cno='4';
update course set cpno='7' where cno='5';
update course set cpno='6' where cno='7';
select * from course;
insert into sc values('200215121','1',92);
insert into sc values('200215121','2',85);
insert into sc values('200215121','3',88);
insert into sc values('200215122','2',90);
insert into sc values('200215122','3',80);
select * from sc;
SELECT Sno,Sname
FROM Student
SELECT Sname,Sno,Sdept
FROM Student
SELECT Sno,Sname,Ssex,Sage,Sdept
FROM Student
或
SELECT * FROM Student
SELECT Sname, 2014-Sage
FROM Student
SELECT Sname,'Year of Birth: ',2014-Sage birth_year,LOWER(Sdept)
FROM Student
SELECT Sname NAME,
'Year of Birth:' BIRTH,
2014-Sage BIRTHDAY,
LOWER(Sdept) DEPARTMENT
FROM Student
SELECT DISTINCT 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 ( 'IS','MA','CS' );
SELECT Sname,Ssex
FROM Student
WHERE Sdept NOT IN ( 'IS','MA','CS' )
SELECT *
FROM Student
WHERE Sno LIKE '200215121'
SELECT Sname,Sno,Ssex
FROM Student
WHERE Sname LIKE '李%'
SELECT Sname
FROM Student
WHERE Sname LIKE '欧阳__'
–[例17] 查询名字中第2个字为"阳"字的学生的姓名和学号。
SELECT Sname,Sno
FROM Student
WHERE Sname LIKE '__阳%'
SELECT Sname,Sno,Ssex
FROM Student
WHERE Sname NOT LIKE '刘%'
SELECT Cno,Ccredit
FROM Course
WHERE Cname LIKE 'DB\_Design' ESCAPE '\'
SELECT *
FROM Course
WHERE Cname LIKE 'DB\_%i_ _' ESCAPE '\'
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 Sno,Grade
FROM SC
WHERE Cno= ' 3 '
ORDER BY Grade DESC
SELECT *
FROM Student
ORDER BY Sdept ASC,Sage DESC
SELECT COUNT( * )
FROM Student
SELECT COUNT(DISTINCT Sno)
FROM SC
SELECT AVG(Grade)
FROM SC
WHERE Cno='1'
SELECT MAX(Grade)
FROM SC
WHERE Cno='1'
SELECT SUM(Ccredit)
FROM SC, Course
WHERE Sno='200215121' AND SC.Cno=Course.Cno
SELECT Cno,COUNT(Sno)
FROM SC
GROUP BY Cno
SELECT Sno
FROM SC
GROUP BY Sno
HAVING COUNT(*) >3
若一个查询同时涉及两个以上的表,则称之为连接查询
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
SELECT
Student.Sno, Sname
FROM
Student,
SC
WHERE
Student.Sno = SC.Sno AND SC.Cno = '2'
AND SC.Grade > 90
SELECT FIRST.Cno,SECOND.Cpno
FROM Course FIRST,Course SECOND
WHERE FIRST.Cpno = SECOND.Cno
SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade
FROM Student
LEFT OUT JOIN SC
ON (Student.Sno=SC.Sno)
SELECT
Student.Sno, Sname, Cname, Grade
FROM
Student,
SC,
Course
WHERE
Student.Sno = SC.Sno
AND SC.Cno = Course.Cno
SELECT
Sno, Sname, Sdept
FROM
Student
WHERE
Sdept IN
(SELECT
Sdept
FROM
Student
WHERE
Sname = '刘晨');
SELECT Sno, Sname FROM Student WHERE Sno IN (SELECT Sno FROM SC WHERE Cno IN (SELECT Cno FROM Course WHERE 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, SC
WHERE Student.Sno=SC.Sno AND SC.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 = ' 200215122' AND NOT EXISTS (SELECT * FROM SC SCZ WHERE SCZ.Sno = SCX.Sno AND SCZ.Cno = SCY.Cno) )
SELECT
*
FROM
Student
WHERE
Sdept = 'CS'
UNION
SELECT
*
FROM
Student
WHERE
Sage <= 19
方法二:
SELECT
DISTINCT *
FROM Student
WHERE Sdept= 'CS' OR 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'
SELECT *
FROM Student
WHERE Sdept='CS'
EXCEPT
SELECT *
FROM Student
WHERE Sage <=19
SELECT
*
FROM
Student s1
WHERE
s1.Sdept = 'CS'
AND NOT EXISTS( SELECT
*
FROM
Student s2
WHERE
s2.Sage <= 19 AND s1.sno = s2.sno)
INSERT
INTO Student (Sno,Sname,Ssex,Sdept,Sage)
VALUES ('200215128','陈冬','男','IS',18);
INSERT
INTO Student
VALUES ('200215126', '张成民', '男',18,'CS');
INSERT
INTO SC(Sno,Cno) //RDBMS将在新插入记录的Grade列上自动地赋空值
VALUES ('200215128','1');
INSERT
INTO SC
VALUES ('200215128','1',NULL);
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;
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');
DELETE
FROM Student
WHERE Sno= '200215128';
DELETE
FROM SC;
DELETE
FROM SC
WHERE Sno IN
( SELECT Sno
From Student
WHERE Sdept='CS');
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,Grade
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,2000-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='女';
DROP VIEW IS_S1;
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';
SELECT *
FROM S_G
WHERE Gavg>=90;
UPDATE IS_Student
SET Sname= '刘辰'
WHERE Sno= '201215125';
UPDATE Student
SET Sname= '刘辰'
WHERE Sno= '201215125'
AND Sdept= 'IS';
INSERT
INTO IS_Student
VALUES('200215111','赵新',20); //插入后基本表Student字段Sdept为空,视图表IS_Student无数据
INSERT
INTO Student(Sno,Sname,Sage,Sdept)
VALUES('200215129','赵新2',20,NULL);
DELETE
FROM IS_Student
WHERE Sno= '200215129';
DELETE
FROM Student
WHERE Sno= '200215129' AND Sdept= 'IS';
GRANT SELECT
ON TABLE Student
TO U1;
GRANT ALL PRIVILIGES
ON TABLE Student, Course
TO U2, U3;
GRANT SELECT
ON TABLE SC
TO PUBLIC;
GRANT UPDATE(Sno), SELECT
ON TABLE Student
TO U4;
GRANT INSERT
ON TABLE SC
TO U5
WITH GRANT OPTION;
REVOKE UPDATE(Sno)
ON TABLE Student
FROM U4;
REVOKE SELECT
ON TABLE SC
FROM PUBLIC;
REVOKE INSERT
ON TABLE SC
FROM U5 CASCADE ;
CREATE ROLE R1;
GRANT SELECT,UPDATE,INSERT
ON TABLE Student
TO R1
GRANT R1
TO 王平,张明,赵玲;
REVOKE R1
FROM 王平;
CREATE TABLE Student
(Sno CHAR(9) PRIMARY KEY,
Sname CHAR(20) NOT NULL,
Ssex CHAR(2) ,
Sage SMALLINT,
Sdept CHAR(20)
);
CREATE TABLE Student
(Sno CHAR(9),
Sname CHAR(20) NOT NULL,
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20),
PRIMARY KEY (Sno)
);
CREATE TABLE SC
(Sno CHAR(9) NOT NULL,
Cno CHAR(4) NOT NULL,
Grade SMALLINT,
PRIMARY KEY (Sno,Cno) /*只能在表级定义主码*/
);
CREATE TABLE SC
(Sno CHAR(9) NOT NULL,
Cno CHAR(4) NOT NULL,
Grade SMALLINT,
/*在表级定义实体完整性*/
PRIMARY KEY (Sno, Cno),
/*在表级定义参照完整性*/
FOREIGN KEY (Sno) REFERENCES Student(Sno),
/*在表级定义参照完整性*/
FOREIGN KEY (Cno) REFERENCES Course(Cno)
);
CREATE TABLE SC (Sno CHAR(9) NOT NULL, Cno CHAR(4) NOT NULL, Grade SMALLINT, PRIMARY KEY(Sno,Cno), FOREIGN KEY (Sno) REFERENCES Student(Sno) ON DELETE CASCADE /*级联删除SC表中相应的元组*/ ON UPDATE CASCADE, /*级联更新SC表中相应的元组*/ FOREIGN KEY (Cno) REFERENCES Course(Cno) /*当删除course 表中的元组造成了与SC表不一致时拒绝删除*/ ON DELETE NO ACTION /*当更新course表中的cno时,级联更新SC表中相应的元组*/ ON UPDATE CASCADE );
CREATE TABLE SC
(Sno CHAR(9) NOT NULL,
Cno CHAR(4) NOT NULL,
Grade SMALLINT NOT NULL,
PRIMARY KEY (Sno, Cno),
/*如果在表级定义实体完整性,隐含了Sno,Cno不允许取空值,则在列级不允许取空值的定义就不必写了*/
);
CREATE TABLE DEPT
(Deptno NUMERIC(2),
Dname CHAR(9) UNIQUE,/*要求Dname列值唯一*/
Location CHAR(10),
PRIMARY KEY (Deptno)
);
CREATE TABLE Student
(Sno CHAR(9) PRIMARY KEY,
Sname CHAR(8) NOT NULL,
Ssex CHAR(2) CHECK (Ssex IN (‘男’,‘女’)), /*性别属性Ssex只允许取'男'或'女' */
Sage SMALLINT,
Sdept CHAR(20)
);
CREATE TABLE Student
(Sno CHAR(9),
Sname CHAR(8) NOT NULL,
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20),
PRIMARY KEY (Sno),
CHECK (Ssex='女' OR Sname NOT LIKE 'Ms.%')
);
CREATE TABLE Student
(Sno NUMERIC(6)
CONSTRAINT C1 CHECK (Sno BETWEEN 90000 AND 99999),
Sname CHAR(20)
CONSTRAINT C2 NOT NULL,
Sage NUMERIC(3)
CONSTRAINT C3 CHECK (Sage < 30),
Ssex CHAR(2)
CONSTRAINT C4 CHECK (Ssex IN ( '男','女')),
CONSTRAINT StudentKey PRIMARY KEY(Sno)
);
ALTER TABLE Student
DROP CONSTRAINT C1;
ALTER TABLE Student
ADD CONSTRAINT C1 CHECK (Sno BETWEEN 900000 AND 999999);
ALTER TABLE Student
DROP CONSTRAINT C3;
ALTER TABLE Student
ADD CONSTRAINT C3 CHECK (Sage < 40);
MySQL不支持断言
CREATE ASSERTION ASSE_SC_DB_ NUM
CHECK ( 60>=(SELECT count(*)
FROM Course,SC
WHERE SC.Cno=Course.Cno AND Course.Cname=数据库)
);
CREATE ASSERTION ASSE_SC_CNUMI
CHECK( 60>=ALL(SELECT count (*)
FROM SC
GROUP by cno)
);
ALTER TABLE SC ADD TERM DATE;
CREATE ASSERTION ASSE_SC_CNUM2
CHECK( 60>=ALL(select count (*)
from SC
group by Cno,TERM )
);
DROP ASSERTION <断言名>;
CREATE TRIGGER Insert_Or_Update_Sal
BEFORE INSERT OR UPDATE ON Teacher
/*MySQL不需要进行引用*/
FOR EACH ROW /*行级触发器*/
BEGIN /*定义触发动作体,是PL/SQL过程块*/
IF (new.Job='教授') AND (new.Sal < 4000)
THEN new.Sal :=4000;
END IF;
END;
CREATE TABLE Sal_log
(Eno NUMERIC(4) references teacher(eno),
Sal NUMERIC(7,2),
Username char(10),
Date TIMESTAMP
);
CREATE TRIGGER Insert_Sal
AFTER INSERT ON Teacher /*触发事件是INSERT*/
FOR EACH ROW
BEGIN
INSERT
INTO Sal_log
VALUES(new.Eno,new.Sal,CURRENT_USER,CURRENT_TIMESTAMP);
END;
CREATE TRIGGER Update_Sal
AFTER UPDATE ON Teacher
FOR EACH ROW
BEGIN
IF (new.Sal <> old.Sal) THEN
INSERT
INTO Sal_log
VALUES(new.Eno,new.Sal,CURRENT_USER,CURRENT_TIMESTAMP);
END IF;
END;
DROP TRIGGER <触发器名> ON <表名>;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。