You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
hutao/docs/MySQL/mysql是怎样使用的数据初始化7.0.sql

293 lines
10 KiB

6 months ago
USE hutao;
CREATE TABLE IF NOT EXISTS
student_info
(
number INT PRIMARY KEY COMMENT '学生ID信息表的主键',
name VARCHAR(5) NOT NULL COMMENT '学生姓名',
sex ENUM('', '') COMMENT '学生性别',
id_number CHAR(18) COMMENT '身份证',
department VARCHAR(30) COMMENT '学院',
major VARCHAR(30) COMMENT '专业',
enrollment_time DATE COMMENT '入学时间',
UNIQUE KEY id_number (id_number)
) COMMENT '学生信息表';
CREATE TABLE IF NOT EXISTS
student_score
(
number INT COMMENT '学生ID',
subject VARCHAR(30) COMMENT '学科',
score INT NOT NULL COMMENT '成绩',
PRIMARY KEY (number, subject),
CONSTRAINT FOREIGN KEY (number) REFERENCES student_info(number)
) COMMENT '学生成绩表';
SHOW CREATE TABLE student_info;
INSERT INTO
student_info(number, name, sex, id_number, department, major, enrollment_time)
VALUES
(20210101, '狗哥', '', '158177200301044792', '计算机学院', '计算机科学与工程', '2021-09-01'),
(20210102, '猫爷', '', '151008200201178529', '计算机学院', '计算机科学与工程', '2021-09-01'),
(20210103, '艾希', '', '17156320010116959X', '计算机学院', '软件工程', '2021-09-01'),
(20210104, '亚索', '', '141992200201078600', '计算机学院', '计算机科学与工程', '2021-09-01'),
(20210105, '莫甘娜', '', '181048200008156368', '航天学院', '飞行器设计', '2021-09-01'),
(20210106, '赵信', '', '197995200201078445', '航天学院', '电子信息', '2021-09-01');
INSERT INTO
student_score(number, subject, score)
VALUES
(20210101, '计算机是怎样运行的', 78),
(20210101, 'MySQL是怎样运行的', 88),
(20210102, '计算机是怎样运行的', 100),
(20210102, 'MySQL是怎样运行的', 98),
(20210103, '计算机是怎样运行的', 59),
(20210103, 'MySQL是怎样运行的', 61),
(20210104, '计算机是怎样运行的', 55),
(20210104, 'MySQL是怎样运行的', 46);
6 months ago
USE hutao;
SELECT * FROm student_info;
SELECT * FROM student_score;
# 查询单列
SELECT student_info.number FROM student_info;
# 列的别名
SELECT number '学号' FROM student_info;
# 查询多列
SELECT number, name, id_number, major FROM student_info;
SELECT number '学号', name '姓名', id_number '身份证号', major '专业' FROM student_info;
# 查询去重
SELECT DISTINCT department FROM student_info;
SELECT DISTINCT department, major FROM student_info;
# 分页
# 查询前两条
SELECT * FROM student_info LIMIT 2;
# 查询两条,从5+1开始
SELECT * FROM student_info LIMIT 5, 2;
# 排序
SELECT student_info.number FROM student_info ORDER BY student_info.number ASC;
SELECT * FROM student_info ORDER BY student_info.number ASC;
SELECT * FROM student_info ORDER BY student_info.number DESC;
# 多列排序
SELECT * FROM student_score ORDER BY subject, score DESC;
# 简单查询
# 查id等于20210101的学生的所有成绩
SELECT * FROM student_score WHERE number = 20210101;
# 查看除了这个学生的其他的学生的成绩
SELECT * FROM student_score WHERE number != 20210101;
SELECT * FROM student_score WHERE number <> 20210101;
-- 查成绩及格
SELECT * FROM student_score WHERE score >= 60;
# 查成绩不及格
SELECT * FROM student_score WHERE score < 60;
# 查成绩在60到80之间的成绩
SELECT * FROM student_score WHERE score BETWEEN 60 AND 80;
# 查成绩不在60到80之间的成绩
SELECT * FROM student_score WHERE score NOT BETWEEN 60 AND 80;
-- 匹配查询
SELECT * FROM student_info WHERE major IN ('软件工程', '飞行器设计');
SELECT * FROM student_info WHERE major NOT IN ('软件工程', '飞行器设计');
-- NULL
SELECT * FROM student_info WHERE name IS NULL;
SELECT * FROM student_info WHERE name IS NOT NULL;
-- 多条件查询
-- AND
SELECT * FROM student_info WHERE sex = '' AND department = '计算机学院';
-- OR
SELECT * FROM student_info WHERE sex = '' OR department = '计算机学院';
-- 复杂条件搜索
-- sorce < 60 + subject = 'MySQL是怎样运行的'
-- source > 90
SELECT * FROM student_score WHERE score > 90 OR score < 60 AND student_score.subject = 'MySQL是怎样运行的';
-- source > 90 + sorce < 60
-- subject = 'MySQL是怎样运行的'
SELECT * FROM student_score WHERE (score > 90 OR score < 60) AND student_score.subject = 'MySQL是怎样运行的';
-- 通配符
SELECT * FROM student_info WHERE name LIKE '狗%';
SELECT * FROM student_info WHERE name LIKE '%甘%';
SELECT * FROM student_info WHERE name LIKE '狗__';
-- 转义通配符
SELECT * FROM student_info WHERE name LIKE '狗\__';
SELECT * FROM student_info WHERE name LIKE '狗\%_';
-- 表达式
-- 放在SELECT中
SELECT number, subject, score + 100 FROM student_score;
SELECT number, subject, score + 100 AS `score` FROM student_score;
-- ``用来装列名,''用来装普通字符串
SELECT name, '我是一个装饰', `sex`, 'sex' FROM student_info;
-- 不能用``将不是列明的内容装起来
SELECT name, `` FROM student_info;
-- 计算器
SELECT 5 * 6 +128 -32;
-- 放在WHERE中
-- 假 查不出来数据
SELECT * FROM student_info WHERE 0;
SELECT * FROM student_info WHERE NULL;
SELECT * FROM student_info WHERE 2 - 2;
SELECT * FROM student_info WHERE 2 < 1;
-- 真 查出所有数据
SELECT * FROM student_info WHERE 2 > 1;
SELECT * FROM student_info WHERE 2 + 2;
SELECT * FROM student_info WHERE 2;
-- 表达式中的NULL
SELECT 1>NULL, 2-NULL;
SELECT NULL IS NULL;
-- 字符处理函数
-- LEFT
SELECT LEFT('abc123', 4); -- abc1
-- RIGHT
SELECT RIGHT('abc123',2); -- 23
-- LENGTH
SELECT LENGTH('何先生'); -- 9
-- LOWER
SELECT LOWER('ABCDEF'); -- abcdef
-- UPPER
SELECT UPPER('abcdef'); -- ABCDEF
-- LTRIM
SELECT LTRIM(' ABC'); -- 'ABC'
SELECT ' ABC'; -- ' ABC'
-- RTRIM
SELECT RTRIM(' ABC '); -- ' ABC'
-- TRIM
SELECT TRIM(' A B C '); -- 'A B C'
-- SUBSTRING
SELECT SUBSTRING('何先生abcdefg何先生', 2, 5); -- '先生abc'
-- CONCAT
SELECT CONCAT('a_', 'b', 'CD21', 'AA'); -- 'a_bCD21AA'
-- CHAR_LENGTH
SELECT CHAR_LENGTH('何先生abcdefg何先生'); -- 13
-- 和数据库结合使用
SELECT CONCAT('学号为', number, '的同学在《', subject, '》课程上的成绩是:', score) AS '成绩描述' FROM student_score;
-- 时间格式化
SELECT DATE_FORMAT(NOW(), '%Y年%m月%d日 %H:%i|%s 星期%w');
-- 2024年03月30日 06:07|31 星期6
-- 流程控制
SELECT
*,
CASE
WHEN score < 60 THEN '不及格'
WHEN score < 90 THEN '及格'
ELSE '优秀'
END AS '评价'
FROM
student_score;
SELECT
name, department, major,
CASE department
WHEN '计算机学院' THEN '一级学院'
WHEN '航天学院' THEN '二级学院'
ELSE '未设定'
END AS '学院类别'
FROM
student_info;
# 聚合函数、汇总函数
SELECT COUNT(number) AS '人数', MAX(student_score.score) AS '最高分', MIN(student_score.score) AS '最低分', AVG(student_score.score) AS '平均分', SUM(student_score.score) AS '总分' FROM student_score;
-- 分组查询
SELECT subject, COUNT(subject) AS '考试人数' FROM student_score GROUP BY subject;
-- 带有WHERE子句的分组查询
SELECT subject, COUNT(subject) AS '及格人数' FROM student_score WHERE score > 60 GROUP BY subject;
-- 作用于分组的过滤条件
SELECT subject, AVG(score) FROM student_score WHERE score > 60 GROUP BY subject HAVING MAX(score) > 90 AND AVG(score) > 80;
SELECT subject, AVG(score) FROM student_score GROUP BY subject HAVING MAX(score) > 90 AND AVG(score) > 70 AND subject != 'MySQL是怎样运行的';
SELECT subject, AVG(score) FROM student_score WHERE subject != 'MySQL是怎样运行的' GROUP BY subject HAVING MAX(score) > 90 AND AVG(score) > 70;
-- 分组排序
SELECT student_score.subject, AVG(student_score.score) FROM student_score GROUP BY student_score.subject ORDER BY AVG(score) DESC;
-- 多个分组列
SELECT department, major, COUNT(number) AS '人数' FROM student_info GROUP BY department, major;
-- 分组采用表达式
SELECT student_score.subject, COUNT(student_score.number) AS FROM student_score GROUP BY CONCAT('学科:', subject)
-- 普通连接 和内连接是等价的
SELECT * FROM student_info a, student_score b WHERE a.number = b.number;
-- 左外连接,以a表为基准查出所有
SELECT * FROM student_info a LEFT OUTER JOIN student_score b ON a.number = b.number;
-- 右外连接
SELECT * FROM student_info a RIGHT OUTER JOIN student_score b ON a.number = b.number;
-- 自连接,查看和狗哥专业相同的人员信息
SELECT * FROm student_info a JOIN student_info b ON a.major = b.major WHERE a.name = '狗哥';
-- 单表组合查询
SELECT name, student_info.department, student_info.major FROM student_info WHERE sex = '' OR number > 20210101;
SELECT name, student_info.department, student_info.major FROM student_info WHERE sex = '' UNION SELECT student_info.department, name, student_info.major FROM student_info WHERE number > 20210101;
-- 14章插入建表
CREATE table first_table(
first_column INT,
second_column VARCHAR(100)
);
-- 插入数据
-- 不写列明 默认按照建表的顺序 (每列必须明确写出值,可以用NULL替代)
INSERT INTO first_table VALUE (1, '哈哈');
-- 指定列名
INSERT INTO first_table(first_column, second_column) VALUE (2, '嘿嘿');
-- 可以调换列顺序
INSERT INTO first_table(second_column, first_column) VALUE ('嘿嘿嘿', 3);
-- 批量插入数据 VALUE => VALUES (VALUES也可以只插入一条数据)
INSERT INTO
first_table(second_column, first_column)
VALUE
('嘿哈', 5),
('嗯哼', 6),
('唉嘿', 7),
('嘻嘻', 8),
('呜呜呜', 9);
-- 插入其他表的数据
INSERT INTO first_table SELECT * FROM first_table LIMIT 4;
INSERT INTO first_table(first_column, second_column) SELECT first_column, second_column FROM first_table WHERE first_column = 3;
-- 删除记录
DELETE FROM first_table;
-- 创建存储函数
-- 设置分隔符
SET global log_bin_trust_function_creators = TRUE;
DELIMITER $
CREATE FUNCTION get_score_avg(subject_name VARCHAR(10))
RETURNS DOUBLE
BEGIN
RETURN (SELECT AVG(student_score.score) FROM student_score WHERE subject = subject_name);
END $
DELIMITER ;
SHOW FUNCTION STATUS ;