2025-02-06
This commit is contained in:
@@ -0,0 +1,95 @@
|
||||
```sql
|
||||
/*
|
||||
40分
|
||||
1-4 创建表、修改表结构、添加主键外键、更新记录、删除记录
|
||||
5-6 单表、多表连接、条件、分组、排序、分页查询
|
||||
7 视图
|
||||
8 触发器
|
||||
9 存储过程、存储函数
|
||||
*/
|
||||
#1-4
|
||||
#创建表
|
||||
CREATE TABLE 表名(
|
||||
字段名 数据类型 约束 DEFAULT 默认值 COMMENT 备注,
|
||||
字段名 数据类型 约束 DEFAULT 默认值 COMMENT 备注
|
||||
);
|
||||
#修改表字段数据类型
|
||||
ALTER TABLE 表名 MODIFY 字段名 数据类型 约束;
|
||||
#修改表字段名+数据类型
|
||||
ALTER TABLE 表名 CHANGE 字段名 新字段名 数据类型 约束;
|
||||
#删除表字段
|
||||
ALTER TABLE 表名 DROP 字段名;
|
||||
#添加表字段
|
||||
ALTER TABLE 表名 ADD 字段名 数据类型 约束;
|
||||
#设置字段默认值
|
||||
ALTER TABLE 表名 ALTER 字段名 SET DEFAULT 默认值;
|
||||
#设置唯一约束
|
||||
ALTER TABLE 表名 MODIFY 字段名 数据类型 UNIQUE;
|
||||
ALTER TABLE 表名 ADD UNIQUE(字段名);
|
||||
#添加主键
|
||||
ALTER TABLE 表名 MODIFY 字段名 数据类型 PRIMARY KEY;
|
||||
ALTER TABLE 表名 ADD CONSTRAINT 主键名 PRIMARY KEY(字段名);
|
||||
#设置非主键字段自动增长
|
||||
ALTER TABLE 表名 MODIFY 字段名 数据类型 PRIMARY KEY AUTO_INCREMENT;
|
||||
#设置主键字段自动增长
|
||||
ALTER TABLE 表名 MODIFY 字段名 数据类型 AUTO_INCREMENT;
|
||||
#设置自动增长值
|
||||
ALTER TABLE 表名 AUTO_INCREMENT=数值;
|
||||
#添加外键
|
||||
ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY(字段名) REFERENCES 外键表(主键字段名) ON UPDATE CASCADE/SET NULL ON DELETE CASCADE/SET NULL;
|
||||
#记录更新
|
||||
UPDATE 表名
|
||||
SET 字段名 = 数值
|
||||
WHERE 条件;
|
||||
#记录删除
|
||||
DELETE FROM 表名
|
||||
WHERE 条件;
|
||||
|
||||
#5-7 查询+视图
|
||||
SELECT 字段名
|
||||
FROM 表名
|
||||
WHERE 条件
|
||||
GROUP BY 分组字段
|
||||
HAVING 分组后条件
|
||||
ORDER BY 排序字段
|
||||
LIMIT 起始位置, 记录个数;
|
||||
|
||||
#创建视图
|
||||
CREATE VIEW 视图名 AS
|
||||
查询;
|
||||
|
||||
#8 触发器
|
||||
DELIMITER $$
|
||||
DROP TRIGGER IF EXISTS 触发器名;
|
||||
CREATE TRIGGER 触发器名
|
||||
BEFORE/AFTER UPDATE/INSERT/DELETE ON 表名
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
#BEGIN END 之间写需要附带的操作
|
||||
END $$
|
||||
DELIMITER ;
|
||||
|
||||
#9 存储过程、存储函数
|
||||
DELIMTIER $$
|
||||
DROP PROCEDURE IF EXISTS 存储过程名;
|
||||
CREATE PROCEDURE 存储过程名(IN 参数名 数据类型, OUT 参数名 数据类型)
|
||||
BEGIN
|
||||
#BEGIN END 之间写需要执行的操作
|
||||
END $$
|
||||
DELIMITER ;
|
||||
|
||||
DELIMTIER $$
|
||||
DROP FUNCTION IF EXISTS 存储函数名;
|
||||
CREATE FUNCTION 存储函数名(参数名 数据类型)
|
||||
RETURNS 返回值类型
|
||||
DETERMINISTIC/NOT DETERMINISTIC
|
||||
BEGIN
|
||||
#BEGIN END 之间写需要执行的操作
|
||||
END $$
|
||||
DELIMITER ;
|
||||
|
||||
/*
|
||||
寒假作业:19+10套
|
||||
*/
|
||||
```
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
### MySQL-1
|
||||
|
||||
```sql
|
||||
#1.添加字段
|
||||
ALTER TABLE t_student ADD descr VARCHAR(200) DEFAULT '无';
|
||||
|
||||
#2.插入记录
|
||||
INSERT INTO t_student()
|
||||
VALUES(DEFAULT, '林小莉', '女', 8, 10005,'13971555555', '身体瘦弱,训练强度需要调整');
|
||||
|
||||
#3.简单查询 tj11
|
||||
SELECT c.id, c.`name`, CONCAT(YEAR(c.time),'年',MONTH(c.time),'月', DAY(c.time),'日')
|
||||
FROM t_class c;
|
||||
|
||||
|
||||
#4.排序、分页查询 tj12
|
||||
SELECT *
|
||||
FROM t_coach c
|
||||
ORDER BY c.salary
|
||||
LIMIT 1, 2;
|
||||
|
||||
#5.模糊、多表连接查询 tj13
|
||||
SELECT co.`name`, cl.`name`, cl.period
|
||||
FROM t_coach co, t_class cl
|
||||
WHERE co.id = cl.coachId AND co.`name` LIKE '何%';
|
||||
|
||||
#6.更新记录
|
||||
UPDATE t_coach c
|
||||
SET c.salary = c.salary + 200
|
||||
WHERE c.age >= 30;
|
||||
|
||||
#7.多表联查+视图
|
||||
CREATE VIEW v_swim AS
|
||||
SELECT s.`name` '学员姓名', co.`name` '教练姓名', cl.`name` '班级名称'
|
||||
FROM t_student s, t_class cl, t_coach co
|
||||
WHERE s.classId = cl.id AND cl.coachId = co.id;
|
||||
|
||||
#8.插入操作的触发器
|
||||
DELIMITER $$
|
||||
DROP TRIGGER IF EXISTS tri_familylog;
|
||||
CREATE TRIGGER tri_familylog
|
||||
AFTER DELETE ON t_family
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
INSERT INTO t_log()
|
||||
VALUES(DEFAULT, OLD.fid, '删除家庭', '2024-01-01');
|
||||
END $$
|
||||
DELIMITER ;
|
||||
|
||||
#9.条件查询+聚合函数 存储过程
|
||||
DELIMITER $$
|
||||
DROP PROCEDURE IF EXISTS pro_getStudentNumber;
|
||||
CREATE PROCEDURE pro_getStudentNumber(IN in_classId INT, OUT out_number INT)
|
||||
BEGIN
|
||||
SELECT COUNT(*) INTO out_number
|
||||
FROM t_student s
|
||||
WHERE s.classId = in_classId;
|
||||
END $$
|
||||
DELIMITER ;
|
||||
|
||||
#测试存储过程
|
||||
CALL pro_getStudentNumber(10002, @result);
|
||||
SELECT @result;
|
||||
```
|
||||
|
||||
@@ -0,0 +1,181 @@
|
||||
### C语言-1
|
||||
|
||||
```c
|
||||
/*------------------------------------------------------------------------------
|
||||
(1)【程序设计】定义一个大小为50的整型数组,将数字1~50存入该数组,利用指针将数组中的值输出,每行5个,每个数字占4个符号位,左对齐。
|
||||
------------------------------------------------------------------------------*/
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
int main()
|
||||
{
|
||||
int i,*p,array[50];
|
||||
for(i=0;i<50;i++)
|
||||
{
|
||||
array[i]=i+1;
|
||||
}
|
||||
p=array;
|
||||
/**********Program**********/
|
||||
for(i=0;i<50;i++){
|
||||
//p指针变量 存着数组array首元素地址
|
||||
printf("%-4d ", *(p+i));//*间接访问符 用来返回指针所指向数值
|
||||
if((i+1)%5==0){
|
||||
printf("\n");
|
||||
}
|
||||
}
|
||||
/********** End **********/
|
||||
}
|
||||
```
|
||||
|
||||
### C语言-2
|
||||
|
||||
```c
|
||||
/*----------------------------------------------------------------------
|
||||
【程序设计】
|
||||
------------------------------------------------------------------------
|
||||
题目:要求实现一个函数,能够合并两个整数数组,合并后进行降序排序并删除重复元素。
|
||||
示例1:
|
||||
输入输出如下所示:
|
||||
请输入第一个数组的6个元素,每个元素之间用空格隔开:1 3 5 7 10 6
|
||||
请输入第二个数组的6个元素,每个元素之间用空格隔开:10 4 2 6 11 30
|
||||
合并后降序排列的数组:30 11 10 7 6 5 4 3 2 1
|
||||
------------------------------------------------------------------------
|
||||
注意:请勿改动程序中的其他内容。
|
||||
----------------------------------------------------------------------*/
|
||||
#include <stdio.h>
|
||||
|
||||
int* mergeArrays(int *arr1, int size1, int *arr2, int size2,int *newLen);
|
||||
|
||||
int main() {
|
||||
|
||||
int size1=6;
|
||||
int size2=6;
|
||||
int arr1[6];
|
||||
int arr2[6];
|
||||
int i;
|
||||
|
||||
int newLen = 0;
|
||||
int* mergedArray;
|
||||
|
||||
printf("请输入第一个数组的6个元素,每个元素之间用空格隔开:");
|
||||
for ( i = 0; i < size1; i++) {
|
||||
scanf("%d", &arr1[i]);
|
||||
}
|
||||
printf("请输入第二个数组的6个元素,每个元素之间用空格隔开:");
|
||||
for ( i = 0; i < size2; i++) {
|
||||
scanf("%d", &arr2[i]);
|
||||
}
|
||||
|
||||
mergedArray = mergeArrays(arr1, size1, arr2, size2, &newLen);
|
||||
|
||||
printf("合并后降序排列的数组:");
|
||||
for (i = 0; i < newLen; i++) {
|
||||
printf("%d ", mergedArray[i]);
|
||||
}
|
||||
printf("\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int* mergeArrays(int *arr1,int size1,int *arr2,int size2,int *newLen) {
|
||||
static int mergedArray[20];
|
||||
/**********Program**********/
|
||||
//将两个数组中的元素合并到一个新的数组里
|
||||
int i, j=0, temp;
|
||||
*newLen = 1;
|
||||
//合并
|
||||
for(i=0;i<6;i++){
|
||||
mergedArray[j++] = arr1[i];
|
||||
mergedArray[j++] = arr2[i];
|
||||
}
|
||||
//排序
|
||||
for(i=0;i<size1*2-1;i++){
|
||||
for(j=0;j<size1*2-1-i;j++){
|
||||
if(mergedArray[j] < mergedArray[j+1]){
|
||||
temp = mergedArray[j];
|
||||
mergedArray[j] = mergedArray[j+1];
|
||||
mergedArray[j+1] = temp;
|
||||
}
|
||||
}
|
||||
}
|
||||
//去重
|
||||
for(i=1;i<size1*2;i++){
|
||||
if(mergedArray[(*newLen)- 1] != mergedArray[i]){
|
||||
mergedArray[(*newLen)++] = mergedArray[i];
|
||||
}
|
||||
}
|
||||
|
||||
/********** End **********/
|
||||
return mergedArray;
|
||||
}
|
||||
```
|
||||
|
||||
### 数据库-1
|
||||
|
||||
```sql
|
||||
#1. 设置字段主键+自动增长
|
||||
ALTER TABLE t_user MODIFY uid INT(11) PRIMARY KEY AUTO_INCREMENT;
|
||||
|
||||
#2. 插入记录
|
||||
INSERT INTO t_user()
|
||||
VALUES(DEFAULT, 'mike', 'mm123', '小明', DEFAULT);
|
||||
|
||||
#3. 更新记录
|
||||
UPDATE t_user u
|
||||
SET u.`password` = '888888'
|
||||
WHERE u.username = 'Dennis';
|
||||
|
||||
#4. tj11 条件查询+多表联查
|
||||
SELECT u.nickname, c.mid, c.score, c.content
|
||||
FROM t_user u, t_comment c
|
||||
WHERE u.uid = c.uid AND u.nickname = '白色';
|
||||
|
||||
#5. tj12 分组查询+多表联查
|
||||
SELECT m.mname, ROUND(AVG(c.score), 2)
|
||||
FROM t_movie m, t_comment c
|
||||
WHERE m.mid = c.mid
|
||||
GROUP BY m.mid;
|
||||
|
||||
#6. tj13 分组查询+多表联查
|
||||
SELECT m.mname, COUNT(*)
|
||||
FROM t_movie m, t_comment c
|
||||
WHERE m.mid = c.mid
|
||||
GROUP BY m.mid;
|
||||
|
||||
#7 视图 多表联查
|
||||
CREATE VIEW v_movie AS
|
||||
SELECT m.mname, u.nickname, c.score, c.content
|
||||
FROM t_user u, t_movie m , t_comment c
|
||||
WHERE u.uid = c.uid AND m.mid = c.mid;
|
||||
|
||||
#8 存储过程
|
||||
DELIMITER $$
|
||||
DROP PROCEDURE IF EXISTS pro_getUserNumber;
|
||||
CREATE PROCEDURE pro_getUserNumber(IN in_uid INT, OUT out_number INT)
|
||||
BEGIN
|
||||
SET out_number = (
|
||||
SELECT COUNT(*)
|
||||
FROM t_user u, t_comment c
|
||||
WHERE u.uid = c.uid AND u.uid = in_uid
|
||||
);
|
||||
END $$
|
||||
DELIMITER ;
|
||||
|
||||
#9 触发器
|
||||
DELIMITER $$
|
||||
DROP TRIGGER IF EXISTS tri_userlog;
|
||||
CREATE TRIGGER tri_userlog
|
||||
AFTER INSERT ON t_user
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
INSERT INTO t_log()
|
||||
VALUES(DEFAULT, NEW.uid, '新增用户', '2024-01-01');
|
||||
END $$
|
||||
DELIMITER ;
|
||||
```
|
||||
|
||||
### 数据库-2
|
||||
|
||||
```sql
|
||||
|
||||
```
|
||||
|
||||
@@ -0,0 +1,126 @@
|
||||
### 数据库-1
|
||||
|
||||
```sql
|
||||
#1 添加字段
|
||||
ALTER TABLE t_customer ADD integral INT(10) DEFAULT 0;
|
||||
|
||||
#2 插入记录
|
||||
INSERT INTO t_goods()
|
||||
VALUES(10011, '口香糖', 2.5, 10, '零食');
|
||||
|
||||
#3 tj11 排序+分页+子查询查询
|
||||
#先将第五个的库存数量查询出来 LIMIT 起始位置(从0开始), 取的个数;
|
||||
SELECT g1.gname, g1.stock
|
||||
FROM t_goods g1
|
||||
WHERE g1.stock <= (
|
||||
SELECT g2.stock
|
||||
FROM t_goods g2
|
||||
ORDER BY g2.stock
|
||||
LIMIT 4, 1
|
||||
)
|
||||
ORDER BY g1.stock;
|
||||
|
||||
#4 tj12 子查询
|
||||
SELECT g1.gname, g1.type, g1.price
|
||||
FROM t_goods g1
|
||||
WHERE g1.price = (
|
||||
SELECT MIN(g2.price)
|
||||
FROM t_goods g2
|
||||
WHERE g2.type = g1.type
|
||||
);
|
||||
|
||||
#5 tj13 分组查询
|
||||
SELECT o.ono, g.gname, o.num * g.price, o.otime
|
||||
FROM t_order o, t_goods g
|
||||
WHERE o.gno = g.gno;
|
||||
|
||||
#6 tj14 排序查询+连接查询
|
||||
SELECT c.cno, c.cname, o.ono, o.gno, o.num, o.otime
|
||||
FROM t_customer c, t_order o
|
||||
WHERE c.cno = o.cno AND c.cname = '龙睿'
|
||||
ORDER BY o.otime DESC;
|
||||
|
||||
#7 排序查询+分组查询+连接查询
|
||||
CREATE VIEW v_order AS
|
||||
SELECT o.ono, c.cname, g.gname, o.num, o.otime
|
||||
FROM t_customer c, t_order o, t_goods g
|
||||
WHERE c.cno = o.cno AND o.gno = g.gno
|
||||
ORDER BY o.otime DESC
|
||||
LIMIT 49, 31;
|
||||
|
||||
#8 触发器
|
||||
DELIMITER $$
|
||||
DROP TRIGGER IF EXISTS tri_customerlog;
|
||||
CREATE TRIGGER tri_customerlog
|
||||
AFTER UPDATE ON t_customer
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
INSERT INTO t_log()
|
||||
VALUES(DEFAULT, NEW.cno, '更新客户信息', '2024-06-06');
|
||||
END $$
|
||||
DELIMITER ;
|
||||
|
||||
#9 存储过程
|
||||
DELIMITER $$
|
||||
DROP PROCEDURE IF EXISTS pro_getSaleNumber;
|
||||
CREATE PROCEDURE pro_getSaleNumber(IN in_gno CHAR(10), OUT out_number INT)
|
||||
BEGIN
|
||||
SELECT COUNT(DISTINCT cno) INTO out_number
|
||||
FROM t_order
|
||||
WHERE gno = in_gno;
|
||||
END $$
|
||||
DELIMITER ;
|
||||
|
||||
#测试
|
||||
CALL pro_getSaleNumber(10001, @result);
|
||||
SELECT @result;
|
||||
```
|
||||
|
||||
|
||||
|
||||
### 数据库-2
|
||||
|
||||
```sql
|
||||
#1 插入记录
|
||||
INSERT INTO t_student()
|
||||
VALUES(DEFAULT, '赵十', '男', 17, '10006');
|
||||
|
||||
#2 添加字段
|
||||
ALTER TABLE t_student ADD notes VARCHAR(255);
|
||||
|
||||
#3 创建表
|
||||
CREATE TABLE t_teacher(
|
||||
tid CHAR(10) PRIMARY KEY,
|
||||
tname VARCHAR(20) NOT NULL,
|
||||
sex CHAR(2),
|
||||
age INT(2),
|
||||
subject VARCHAR(20),
|
||||
salary DECIMAL(10, 2)
|
||||
);
|
||||
|
||||
#4 设置薪资默认值
|
||||
#ALTER TABLE 表名 ALTER 字段名 SET DEFAULT 默认值;
|
||||
ALTER TABLE t_teacher ALTER salary SET DEFAULT 5000;
|
||||
|
||||
#5 插入记录
|
||||
INSERT INTO t_teacher()
|
||||
VALUES('t0001', '王老师', '男', 42, '数学', 6000);
|
||||
|
||||
#6 数据更新
|
||||
UPDATE t_class c
|
||||
SET c.address = '四层'
|
||||
WHERE c.cname = '高三2班';
|
||||
|
||||
#7 tj11 条件查询
|
||||
SELECT *
|
||||
FROM t_student s
|
||||
WHERE s.sex = '男';
|
||||
|
||||
#8 视图
|
||||
CREATE VIEW v_class AS
|
||||
SELECT c.cname, COUNT(IF(s.sex = '男', TRUE, NULL)), COUNT(IF(s.sex = '女', TRUE, NULL))
|
||||
FROM t_student s, t_class c
|
||||
WHERE s.cid = c.cid
|
||||
GROUP BY c.cid;
|
||||
```
|
||||
|
||||
@@ -0,0 +1,351 @@
|
||||
创建一个空数据库名字为`book_store_db`,字符集使用UTF8
|
||||
|
||||
## 创建表
|
||||
|
||||
目的:
|
||||
|
||||
(1)熟练掌握创建表结构的方法。
|
||||
|
||||
(2)掌握查看表信息的方法。
|
||||
|
||||
内容:
|
||||
|
||||
(1)使用 MySQL 创建会员表(如表 3-9 所示)、图书表(如表 3-10 所示)的表结构。
|
||||
|
||||
```sql
|
||||
#(1)会员表
|
||||
CREATE TABLE `user`(
|
||||
uid CHAR(4) PRIMARY KEY COMMENT '会员编号',
|
||||
uname VARCHAR(20) COMMENT '会员昵称',
|
||||
email VARCHAR(20) COMMENT '电子邮箱',
|
||||
tnum VARCHAR(15) COMMENT '联系电话',
|
||||
score INT COMMENT '积分'
|
||||
);
|
||||
|
||||
#(1)图书表 (先创建图书类别表再创建图书表)
|
||||
DROP TABLE book;
|
||||
CREATE TABLE book(
|
||||
bid INT PRIMARY KEY AUTO_INCREMENT COMMENT '图书编号',
|
||||
bname VARCHAR(50) NOT NULL COMMENT '图书名称',
|
||||
author CHAR(8) COMMENT '作者',
|
||||
price FLOAT COMMENT '价格',
|
||||
publisher VARCHAR(50) COMMENT '出版社',
|
||||
discount FLOAT COMMENT '折扣',
|
||||
cid INT COMMENT '图书类别'
|
||||
);
|
||||
|
||||
```
|
||||
|
||||
(2)使用 MySQL 创建图书类别表(如表 3-11 所示)、订购表(如表 3-12 所示)的表结构。
|
||||
|
||||
```sql
|
||||
#(2)图书类别表
|
||||
CREATE TABLE category(
|
||||
cid INT PRIMARY KEY AUTO_INCREMENT COMMENT '类别编号',
|
||||
cname VARCHAR(16) COMMENT '类别名称'
|
||||
);
|
||||
|
||||
#(2)订购表
|
||||
CREATE TABLE b_order(
|
||||
bid INT NOT NULL COMMENT '图书编号',
|
||||
uid CHAR(4) NOT NULL COMMENT '会员编号',
|
||||
ordernum INT DEFAULT 1 COMMENT '订购量',
|
||||
oderdate DATETIME COMMENT '订购日期',
|
||||
deliverydate DATETIME COMMENT '发货日期'
|
||||
);
|
||||
```
|
||||
|
||||
(3)使用 DROP TABLE 语句删除上述创建的表,然后使用 CREATE TABLE 语句再次创建上述表。
|
||||
|
||||
```sql
|
||||
#(3)删除上述所有的表
|
||||
DROP TABLE `user`;
|
||||
DROP TABLE book;
|
||||
DROP TABLE category;
|
||||
DROP TABLE b_order;
|
||||
```
|
||||
|
||||
(4)查看会员表的信息。
|
||||
|
||||
```sql
|
||||
#(4)查看会员表的信息
|
||||
DESC `user`;
|
||||
```
|
||||
|
||||
(5)修改会员表结构。添加字段「联系地址」,数据类型设置为 VARCHAR(50);更改「联系地址」为「联系方式」;删除添加的字段「联系地址」。
|
||||
|
||||
```sql
|
||||
#(5)修改会员表结构
|
||||
#添加联系地址字段
|
||||
ALTER TABLE `user` ADD taddress VARCHAR(50);
|
||||
|
||||
#修改联系地址字段名为联系方式
|
||||
ALTER TABLE `user` CHANGE taddress tmanner VARCHAR(50);
|
||||
|
||||
#删除联系方式字段
|
||||
ALTER TABLE `user` DROP tmanner;
|
||||
```
|
||||
|
||||
(6)使用创建表时添加约束和为已存在的表添加约束这两种方式给表添加约束。
|
||||
|
||||
```sql
|
||||
#(6)添加外键
|
||||
#1.创建表时添加外键
|
||||
CREATE TABLE book(
|
||||
bid INT PRIMARY KEY AUTO_INCREMENT COMMENT '图书编号',
|
||||
bname VARCHAR(50) NOT NULL COMMENT '图书名称',
|
||||
author CHAR(8) COMMENT '作者',
|
||||
price FLOAT COMMENT '价格',
|
||||
publisher VARCHAR(50) COMMENT '出版社',
|
||||
discount FLOAT COMMENT '折扣',
|
||||
cid INT COMMENT '图书类别',
|
||||
CONSTRAINT fk_cid FOREIGN KEY(cid) REFERENCES category(cid)
|
||||
);
|
||||
|
||||
#2.表创建之后添加外键
|
||||
DROP TABLE IF EXISTS book;
|
||||
CREATE TABLE book(
|
||||
bid INT PRIMARY KEY AUTO_INCREMENT COMMENT '图书编号',
|
||||
bname VARCHAR(50) NOT NULL COMMENT '图书名称',
|
||||
author CHAR(8) COMMENT '作者',
|
||||
price FLOAT COMMENT '价格',
|
||||
publisher VARCHAR(50) COMMENT '出版社',
|
||||
discount FLOAT COMMENT '折扣',
|
||||
cid INT COMMENT '图书类别'
|
||||
);
|
||||
ALTER TABLE `book` ADD CONSTRAINT fk_cid FOREIGN KEY(cid) REFERENCES category(cid);
|
||||
```
|
||||
|
||||
表 3-9 会员表(user)结构
|
||||
|
||||

|
||||
|
||||
表 3-10 图书表(book)结构
|
||||
|
||||

|
||||
|
||||
表 3-11 图书类别表(category)结构
|
||||
|
||||

|
||||
|
||||
表 3-12 订购表(b_order)结构
|
||||
|
||||

|
||||
|
||||
## 插入、更新、删除数据
|
||||
|
||||
目的:熟练掌握使用 INSERT、DELETE、UPDATE 语句向表中添加、删除、修改记录。
|
||||
|
||||
内容:
|
||||
|
||||
(1)「网上书店」数据库中的数据分别如表 4-1 至表 4-4 所示。
|
||||
|
||||
表 4-1 user 表数据
|
||||
|
||||

|
||||
|
||||
表 4-2 book 表数据
|
||||
|
||||

|
||||
|
||||
表 4-3 category 表数据
|
||||
|
||||

|
||||
|
||||
表 4-4 b_order 表数据
|
||||
|
||||

|
||||
|
||||
(2)使用 SQL 语句分别向 user 表(表 4-1)、book 表(表 4-2)、category 表(表 4-3)、b_order 表(表 4-4)插入记录。
|
||||
|
||||
```sql
|
||||
#(2)插入记录
|
||||
INSERT INTO `user`()
|
||||
VALUES
|
||||
('1001', '何仙姑', 'Hxg18@163.com', 13320101991, 20),
|
||||
('1002', '平平人生', 'Lp011@126.com', 13545158219, 300),
|
||||
('1003', '四十不惑', '12345@qq.com', 18688168818, 10000),
|
||||
('1004', '桃花岛主', '810124@qq.com', 13068011234, 600),
|
||||
('1005', '水灵', 'zs123@371.com', 15838182503, 150),
|
||||
('1006', '感动心灵', 'gandong@tome.com', 13641151234, 500);
|
||||
|
||||
INSERT INTO book()
|
||||
VALUES
|
||||
(1, '中国时代', '师永刚', 39.0, '作家出版社', 27.8, 1),
|
||||
(2, '中国历史的屈辱', '王重旭', 26.0, '华夏出版社', 18.2, 2),
|
||||
(3, '择业要趁早', '海文', 28.0, '海天出版社', 19.3, 3),
|
||||
(4, '房间', '爱玛', 37.6, '人民文学出版社', 26.3, 4),
|
||||
(5, '平凡的世界', '路遥', 75, '北京出版社', 63.75, 4),
|
||||
(6, '心灵鸡汤', '关然', 27.0, '大豫出版社', 20.0, 3),
|
||||
(7, '蜕', '赵婷', 32.0, '上海出版社', 28.5, 3);
|
||||
|
||||
INSERT INTO category()
|
||||
VALUES
|
||||
(1, '历史'),
|
||||
(2, '家教'),
|
||||
(3, '文化'),
|
||||
(4, '小说');
|
||||
|
||||
INSERT INTO b_order()
|
||||
VALUES
|
||||
(1001, 1, 2, '2016-03-12', DEFAULT),
|
||||
(1001, 3, 1, '2016-04-15', DEFAULT),
|
||||
(1001, 1, 1, '2016-09-15', DEFAULT),
|
||||
(1003, 7, 1, '2015-12-14', DEFAULT),
|
||||
(1003, 3, 1, '2016-10-10', DEFAULT),
|
||||
(1005, 5, 1, '2015-08-17', DEFAULT),
|
||||
(1005, 7, 3, '2016-11-12', DEFAULT),
|
||||
(1006, 5, 1, '2016-09-18', DEFAULT),
|
||||
(1006, 1, 2, '2016-10-21', DEFAULT),
|
||||
(1006, 7, 2, '2015-11-21', DEFAULT);
|
||||
```
|
||||
|
||||
(3)使用 SQL 语句修改表中记录。
|
||||
|
||||
① 把 user 表中 uid 字段值为 1001 的记录的 uname 字段值修改为「何大姑」。
|
||||
|
||||
```sql
|
||||
|
||||
```
|
||||
|
||||
② 把 b_order 表中 uid 字段值为 1003 且 bid 字段值为 3 的记录的 ordernum 字段值改为「10」,并把该记录的 orderdate 字段值改为「2016-10-01」,deliverydate 字段值设为「2016-10-03」。
|
||||
|
||||
```sql
|
||||
|
||||
```
|
||||
|
||||
(4)使用 SQL 语句删除表中记录。
|
||||
|
||||
① 删除 2015 年的订单信息。
|
||||
|
||||
```sql
|
||||
|
||||
```
|
||||
|
||||
② 清空 book 表。
|
||||
|
||||
```sql
|
||||
|
||||
```
|
||||
|
||||
## 简单查询
|
||||
|
||||
目的:掌握 SELECT 语句中 DISTINCT 子句、LIMIT 子句、WHERE 子句以及 ORDER BY 子句的使用。
|
||||
|
||||
内容如下。
|
||||
|
||||
(1)查询会员表,输出积分高于 500 分的会员昵称和联系电话。
|
||||
|
||||
(2)查询会员表,输出积分低于 200 分的会员昵称和联系电话,分别用英文 username、telephone 指定别名。
|
||||
|
||||
(3)查询会员表,输出 E-mail 是 QQ 邮箱的会员昵称及其 E-mail。
|
||||
|
||||
(4)查询订购表,输出订购日期是 2016 年 10 月的订单的详细信息。
|
||||
|
||||
(5)查询订购表,输出订货的会员编号,要求删除重复行。
|
||||
|
||||
(6)查询图书表,输出图书的名称和价格,并把查询结果按价格降序排列。
|
||||
|
||||
(7)查询图书表,输出价格最高的三种图书的名称和价格。
|
||||
|
||||
## 分组查询
|
||||
|
||||
目的:掌握集合函数、GROUP BY 子句、HAVING 子句。
|
||||
|
||||
内容如下。
|
||||
|
||||
(1)查询图书表,输出所有图书的最高价格、最低价格、平均价格。
|
||||
|
||||
(2)查询图书表,输出每一类图书的数量。
|
||||
|
||||
(3)查询图书表,输出每一类图书的最高价格、最低价格、平均价格。
|
||||
|
||||
(4)查询订购表,输出订购数量超过 3 本的会员编号和订购数量。
|
||||
|
||||
## 多表连接查询、子查询
|
||||
|
||||
目的:掌握连接查询和子查询
|
||||
|
||||
内容如下。
|
||||
|
||||
(1)输出所有图书的图书名称、价格以及所属类别名称。
|
||||
|
||||
(2)输出订购了《平凡的世界》的会员昵称、联系电话、订购数量。
|
||||
|
||||
(3)输出订购了图书的会员昵称和联系电话。
|
||||
|
||||
(4)输出无人订购的图书名称和价格。
|
||||
|
||||
(5)输出详细订购信息,包括订购图书的会员呢称、联系电话、所订图书名称、数量、价格、折扣价。
|
||||
|
||||
## 存储过程
|
||||
|
||||
目的:掌握存储过程的创建和执行。掌握存储过程中输入、输出参数的使用。
|
||||
|
||||
内容:
|
||||
|
||||
(1)在「网上书店」数据库中创建一个名为 proc_1 的存储过程,实现查询所有会员信息的功能。
|
||||
|
||||
(2)在「网上书店」数据库中创建一个名为 proc_2 的存储过程,要求实现如下功能:根据会员昵称查询会员的积分情况。并调用存储过程,查询「平平人生」和「感动心灵」的积分。
|
||||
|
||||
(3)在「网上书店」数据库中创建一个名为 proc_3 的存储过程,要求实现如下功能:根据会员昵称查询会员的订购信息,如果该会员没有订购任何图书,则输出「某某会员没有订购图书」的信息;否则输出订购图书的相关信息。调用存储过程,显示会员「四十不惑」订购图书的情况。
|
||||
|
||||
## 视图
|
||||
|
||||
目的:掌握视图的定义、维护、使用。
|
||||
|
||||
内容:
|
||||
|
||||
(1)定义基于图书表的视图(包含图书编号、图书名称、作者、价格、出版社、图书类别)。
|
||||
|
||||
(2)查询图书表视图,输出图书的名称和价格,并把查询结果按价格降序排列。
|
||||
|
||||
(3)查询图书表视图,输出价格最高的三种图书的名称和价格。
|
||||
|
||||
## 触发器
|
||||
|
||||
### 创建
|
||||
|
||||
目的:掌握触发器的创建和执行。
|
||||
|
||||
内容:在「网上书店」数据库中创建一个名为 tri_1 的触发器,当向订购表中插入记录时,如果订购量 <=0,就将订购量设置为 1。
|
||||
|
||||
### 使用
|
||||
|
||||
目的:掌握触发器的使用。
|
||||
|
||||
内容:
|
||||
|
||||
(1)在「网上书店」数据库中创建一个名为 tri_2 的触发器,要求实现如下功能:当删除图书类别表中的某个图书类别时,将图书表中对应的图书类别的值设置为 NULL。
|
||||
|
||||
(2)在「网上书店」数据库中创建一个名为 tri_3 的触发器,要求实现如下功能:当删除某个会员的时候,自动删除该会员的订购信息。
|
||||
|
||||
### 删除
|
||||
|
||||
目的:掌握触发器的删除
|
||||
|
||||
内容:删除网上书店数据库中的触发器 tri_1。
|
||||
|
||||
## 用户管理
|
||||
|
||||
### 创建新用户
|
||||
|
||||
目的:掌握使用 SQL 语句进行用户的创建、查看和删除操作。
|
||||
|
||||
内容:
|
||||
|
||||
(1)使用 SQL 语句创建 test 用户。
|
||||
|
||||
(2)使用 SQL 语句查看创建的 test 用户的信息。
|
||||
|
||||
(3)使用 SQL 语句删除 test 用户。
|
||||
|
||||
### 用户权限授予和回收
|
||||
|
||||
目的:掌握使用 SQL 语句授予和收回用户权限。
|
||||
|
||||
内容:
|
||||
|
||||
(1)使用 SQL 语句授予 test 用户对「学生选课」数据库中 studentInfo 表、teacher 表的查询、插入、更新和删除数据的权限。
|
||||
|
||||
(2)使用 SQL 语句收回 test 用户的全部权限。
|
||||
@@ -0,0 +1,68 @@
|
||||
```sql
|
||||
#1 创建表
|
||||
CREATE TABLE t_family(
|
||||
fno INT(11) PRIMARY KEY AUTO_INCREMENT,
|
||||
eno INT(11) NOT NULL COMMENT '职工编号',
|
||||
ename VARCHAR(255) NOT NULL COMMENT '职工姓名',
|
||||
faname VARCHAR(255),
|
||||
moname VARCHAR(255)
|
||||
);
|
||||
|
||||
#2 添加字段
|
||||
ALTER TABLE t_salary ADD grade VARCHAR(255) COMMENT '评级';
|
||||
|
||||
#3 修改字段数据类型
|
||||
ALTER TABLE t_employee MODIFY sex ENUM('男', '女');
|
||||
|
||||
#4 更新记录
|
||||
UPDATE t_department d
|
||||
SET d.tel = '128'
|
||||
WHERE d.dname = '法务部';
|
||||
|
||||
#5 条件、排序查询
|
||||
SELECT e.ename, e.sex, e.birthday
|
||||
FROM t_employee e
|
||||
WHERE e.birthday >= '2000-1-1'
|
||||
ORDER BY e.birthday DESC;
|
||||
|
||||
#6 分组、多表连接查询
|
||||
SELECT d.dname, SUM(s.basepay + s.overtime + s.allowance + s.insurance)
|
||||
FROM t_employee e, t_department d, t_salary s
|
||||
WHERE e.dno = d.dno AND e.eno = s.eno
|
||||
GROUP BY d.dno;
|
||||
|
||||
#7 分组+排序 视图
|
||||
CREATE VIEW v_jobcount AS
|
||||
SELECT j.jobtitle, COUNT(*)
|
||||
FROM t_employee e, t_job j
|
||||
WHERE e.jobno = j.jno
|
||||
GROUP BY j.jno
|
||||
ORDER BY 2;
|
||||
|
||||
#8 触发器
|
||||
CREATE TRIGGER tri_updateGrade
|
||||
BEFORE UPDATE ON t_salary FOR EACH ROW
|
||||
BEGIN
|
||||
IF NEW.basepay < 6000 THEN
|
||||
SET NEW.grade = 'C';
|
||||
ELSEIF NEW.basepay < 8000 THEN
|
||||
SET NEW.grade = 'B';
|
||||
ELSEIF NEW.basepay >= 8000 THEN
|
||||
SET NEW.grade = 'A';
|
||||
END IF;
|
||||
END;
|
||||
|
||||
#9 存储过程
|
||||
CREATE PROCEDURE `pro_getDepartmentTel`(in `in_dno` int,OUT dept_phone VARCHAR(100))
|
||||
BEGIN
|
||||
|
||||
SELECT CONCAT('部门名称-', dname, ',电话-', tel) INTO dept_phone
|
||||
FROM t_department
|
||||
WHERE dno = in_dno limit 1;
|
||||
|
||||
IF dept_phone IS NULL THEN
|
||||
SET dept_phone = '没有找到相应的部门';
|
||||
END IF;
|
||||
END
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user