mysql 综合练习
???
-- 設環境如下 : 一個系有多個專業,一個專業一年只招一個班,一個班有多個學生
-- 建立 系,班級,學生的數據庫
-- 關系模式為:班:CLASS (班號classid,專業名subject,系名deptname
-- 入學年份enrolltime,人數num)
-- 學生:STUDENT (學號studentid,姓名name,年齡age,班號classid)
-- 系:DEPARTMENT(系號departmentid,系名deptname)
-- 完成以下功能
-- 建表聲明主外碼,department是唯一約束,學生姓名不能空,自行插入數據
CREATE TABLE department (
?? ?departmentid VARCHAR(32) PRIMARY KEY ,
?? ?deptname VARCHAR(32)? UNIQUE NOT NULL);
DROP TABLE department
CREATE TABLE class(
?? ?classid INT PRIMARY KEY ,
?? ?`subject` VARCHAR(32) NOT NULL,
?? ?deptname VARCHAR(32),
?? ?enrolltime YEAR,
?? ?num INT NOT NULL DEFAULT 0,
FOREIGN KEY (deptname) REFERENCES department(deptname));
DROP TABLE class
CREATE TABLE student (
?? ?studentid INT PRIMARY KEY ,
?? ?`name` VARCHAR(32) NOT NULL DEFAULT '',
?? ?age INT,
?? ?classid INT ,
FOREIGN KEY(classid) REFERENCES class(classid));
DROP TABLE student
INSERT INTO class VALUES
?? ?(101,'軟件','計算機','1995',20),
?? ?(102,'微電子','計算機','1996',30),
?? ?(111,'無機化學','化學','1995',29),
?? ?(112,'高分子化學','化學','1996',25),
?? ?(121,'統計數學','數學','1995',20),
?? ?(131,'現代語言','中文','1996',20),
?? ?(141,'國際貿易','經濟','1997',30),
?? ?(142,'國際金融','經濟','1996',14);
?? ?
INSERT INTO student VALUES
?? ?(8101,'張三',18,101),
?? ?(8102,'錢四',16,121),
?? ?(8103,'王玲',17,131),
?? ?(8105,'李飛',19,102),
?? ?(8109,'趙四',18,141),
?? ?(8110,'李可',20,142),
?? ?(8201,'張飛',18,111),
?? ?(8302,'周瑜',16,112),
?? ?(8203,'王亮',17,111),
?? ?(8305,'董慶',19,102),
?? ?(8409,'趙龍',18,101),
?? ?(8510,'李麗',20,142);
INSERT INTO department VALUES
?? ?('001','數學'),('002','計算機'),
?? ?('003','化學'),('004','中文'),
?? ?('005','經濟');
?? ?
-- 找出所有姓李的學生
SELECT * FROM student
?? ?WHERE `name` LIKE '李%';
-- 列出所有開設超過一個專業的系的名字
SELECT deptname,COUNT(*) AS c FROM class
?? ?GROUP BY deptname
?? ?HAVING c > 1;
-- 列出人數>=30的系的編號和名字(先查各個系多少人做成臨時表,使用聯合查詢)
SELECT departmentid,department.deptname ,tem.nums
?? ?FROM department ,(SELECT deptname,SUM(num)AS nums FROM class
?? ??? ??? ??? ?GROUP BY deptname
?? ??? ??? ??? ?HAVING nums >= 30) tem
?? ?WHERE department.deptname = tem.deptname
-- 學校又新增加了一個物理系,編號為006
INSERT INTO department VALUES(006,'物理');
-- 張三退學,更新相關表 人數減一,兩個語句,用事務保持一致
START TRANSACTION ;#開始事務
# 人數減少
UPDATE? class SET num = num - 1
?? ?WHERE classid = (SELECT classid FROM student
#刪除學生?? ??? ??? ??? ?where `name` = '張三');
DELETE FROM student
?? ?WHERE `name` = '張三';
SELECT * FROM class
SELECT * FROM student
COMMIT;#提交事務
總結
以上是生活随笔為你收集整理的mysql 综合练习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【技术快报】9.26-10.2
- 下一篇: jekyll 完整安装教程