生活随笔
收集整理的這篇文章主要介紹了
Mysql 小练习
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
設(shè)學(xué)校環(huán)境如下:一個(gè)系有若干個(gè)專業(yè),每個(gè)專業(yè)一年只招一個(gè)班,每個(gè)班有若干個(gè)學(xué)生。 現(xiàn)要建立關(guān)于系、學(xué)生、班級(jí)的數(shù)據(jù)庫(kù),關(guān)系模式為: 班CLASS (班號(hào)classid,專業(yè)名subject,系名deptname,入學(xué)年份enrolltime,人數(shù)num) 學(xué)生STUDENT (學(xué)號(hào)studentid,姓名name,年齡age,班號(hào)classid) 系 DEPARTMENT (系號(hào)departmentid,系名deptname) 試用SQL語(yǔ)言完成以下功能:??
--(1) 建表,在定義中要求聲明:
-- (1)每個(gè)表的主外碼。
-- (2)deptname是唯一約束。
-- (3)學(xué)生姓名不能為空。-- 創(chuàng)建表 系 DEPARTMENT (系號(hào)departmentid,系名deptname)
CREATE TABLE DEPARTMENT (departmentid VARCHAR(32) PRIMARY KEY,deptname VARCHAR(32) UNIQUE NOT NULL);-- 班CLASS (班號(hào)classid,專業(yè)名subject,系名deptname,入學(xué)年份enrolltime,人數(shù)num)
CREATE TABLE `class` (classid INT PRIMARY KEY,`subject` VARCHAR(32) NOT NULL DEFAULT '',deptname VARCHAR(32) , -- 外鍵字段,在表定義后指定enrolltime INT NOT NULL DEFAULT 2000,num INT NOT NULL DEFAULT 0,FOREIGN KEY (deptname) REFERENCES DEPARTMENT(deptname));-- 學(xué)生STUDENT (學(xué)號(hào)studentid,姓名name,年齡age,班號(hào)classid)
CREATE TABLE hsp_student (studentid INT PRIMARY KEY,`name` VARCHAR(32) NOT NULL DEFAULT '',age INT NOT NULL DEFAULT 0,classid INT, -- 外鍵FOREIGN KEY (classid) REFERENCES `class`(classid));-- 添加測(cè)試數(shù)據(jù)INSERT INTO department VALUES('001','數(shù)學(xué)');
INSERT INTO department VALUES('002','計(jì)算機(jī)');
INSERT INTO department VALUES('003','化學(xué)');
INSERT INTO department VALUES('004','中文');
INSERT INTO department VALUES('005','經(jīng)濟(jì)');INSERT INTO class VALUES(101,'軟件','計(jì)算機(jī)',1995,20);
INSERT INTO class VALUES(102,'微電子','計(jì)算機(jī)',1996,30);
INSERT INTO class VALUES(111,'無(wú)機(jī)化學(xué)','化學(xué)',1995,29);
INSERT INTO class VALUES(112,'高分子化學(xué)','化學(xué)',1996,25);
INSERT INTO class VALUES(121,'統(tǒng)計(jì)數(shù)學(xué)','數(shù)學(xué)',1995,20);
INSERT INTO class VALUES(131,'現(xiàn)代語(yǔ)言','中文',1996,20);
INSERT INTO class VALUES(141,'國(guó)際貿(mào)易','經(jīng)濟(jì)',1997,30);
INSERT INTO class VALUES(142,'國(guó)際金融','經(jīng)濟(jì)',1996,14);INSERT INTO student VALUES(8101,'張三',18,101);
INSERT INTO student VALUES(8102,'錢四',16,121);
INSERT INTO student VALUES(8103,'王玲',17,131);
INSERT INTO student VALUES(8105,'李飛',19,102);
INSERT INTO student VALUES(8109,'趙四',18,141);
INSERT INTO student VALUES(8110,'李可',20,142);
INSERT INTO student VALUES(8201,'張飛',18,111);
INSERT INTO student VALUES(8302,'周瑜',16,112);
INSERT INTO student VALUES(8203,'王亮',17,111);
INSERT INTO student VALUES(8305,'董慶',19,102);
INSERT INTO student VALUES(8409,'趙龍',18,101);SELECT * FROM department
SELECT * FROM class
SELECT * FROM student-- (3) 完成以下查詢功能-- 3.1 找出所有姓李的學(xué)生。
-- 查表 student , like
SELECT * FROM studentWHERE `name` LIKE '李%' -- 3.2 列出所有開(kāi)設(shè)超過(guò)1個(gè)專業(yè)的系的名字。
-- 1. 先查詢各個(gè)系有多少個(gè)專業(yè)
SELECT COUNT(*) AS nums, deptname FROM classGROUP BY deptname HAVING nums > 1-- 3.3 列出人數(shù)大于等于30的系的編號(hào)和名字。
-- 1. 先查出各個(gè)系有多少人, 并得到 >= 30 的系SELECT SUM(num) AS nums, deptname FROM class GROUP BY deptname HAVING nums >= 30-- 2. 將上面的結(jié)果看成一個(gè)臨時(shí)表 和 department 聯(lián)合查詢即可SELECT tmp.*, department.departmentidFROM department , (SELECT SUM(num) AS nums, deptname FROM class GROUP BY deptname HAVING nums >= 30) tmp WHERE department.deptname = tmp.deptname;-- (4) 學(xué)校又新增加了一個(gè)物理系,編號(hào)為006
-- 添加一條數(shù)據(jù)
INSERT INTO department VALUES('006','物理系');
-- (5) 學(xué)生張三退學(xué),請(qǐng)更新相關(guān)的表-- 分析:1. 張三所在班級(jí)的人數(shù)-1 2. 將張三從學(xué)生表刪除 3. 需要使用事務(wù)控制-- 開(kāi)啟事務(wù)
START TRANSACTION;
-- 張三所在班級(jí)的人數(shù)-1
UPDATE class SET num = num - 1WHERE classid = (SELECT classid FROM student WHERE NAME = '張三');DELETE FROM studentWHERE NAME = '張三';-- 提交事務(wù)
COMMIT;SELECT * FROM student;
SELECT * FROM class