Exercice quotidien MySQL - Système d'administration de l'éducation sur le campus

1. Nom de la base de données : SchoolDB

2. Informations sur la table de base de données : table d'informations sur les rôles

Nom de la table:

t_role  

clé primaire:

débarrasser

numéro de série

Nom de domaine

description du champ

catégorie

nombre de chiffres

Les attributs

Remarque

1

débarrasser

numéro de rôle

int

incrémentation automatique de la clé primaire

2

r_name_FR

Nom du personnage (anglais)

Varchar

20

non vide

ne peut pas être répété

3

r_name_CH

Nom du personnage (chinois)

Varchar

20

non vide

ne peut pas être répété

4

r_remarque

Introduction

nvarchar

500

non vide

La valeur par défaut est "masculin".

Informations sur la table de base de données : table d'informations sur la classe

Nom de la table:

t_classe

clé primaire:

c_id

numéro de série

Nom de domaine

description du champ

catégorie

nombre de chiffres

Les attributs

Remarque

1

c_id

numéro de classe

int

incrémentation automatique de la clé primaire

2

nom_classe c

nom du cours

Varchar

20

non vide

ne peut pas être répété

Informations sur la table de base de données : table d'informations sur l'utilisateur

Nom de la table:

t_utilisateur

clé primaire:

u_id

numéro de série

Nom de domaine

description du champ

catégorie

nombre de chiffres

Les attributs

Remarque

1

u_id

ID de l'utilisateur

int

incrémentation automatique de la clé primaire

2

u_nom d'utilisateur

nom de connexion de l'utilisateur

Varchar

20

non vide

ne peut pas être répété

3

u_mot de passe

Mot de passe de connexion utilisateur

Varchar

20

non vide

4

ton nom

nom d'utilisateur

Varchar

20

non vide

5

u_sexe

genre

carboniser

2

non vide

La valeur par défaut est « Mâle ». Ne peut être qu'un homme ou une femme.

6

u_age

âge

int

non vide

L'âge ne peut varier que de 0 à 100

7

u_phoneNum

numéro de téléphone

Varchar

20

non vide

La longueur doit être de 11 chiffres

8

u_adresse

Adresse du domicile

Varchar

50

9

u_type

État

S'il faut désactiver

int

non vide

Ne peut être que 0 ou 1

1 normale 

0 désactivé

dix

débarrasser

Rôle

int

non vide

clé étrangère

11

c_id

classe

int

non vide

clé étrangère

3. Étapes de mise en œuvre

1. Ajoutez des données au tableau d'informations sur le rôle, au tableau d'informations sur la classe et au tableau d'informations sur l'utilisateur en insérant des données dans une ou plusieurs lignes. Et utilisez la requête complète pour interroger respectivement les données des trois tables.

Comme le montre la figure 1~ Figure 3 ci-dessous :

Figure 1

Figure 2

image 3

Exiger:

Le tableau d'informations sur le rôle utilise une seule ligne d'insertion de données pour terminer l'insertion des données.

La table d'informations sur la classe et la table d'informations sur l'utilisateur utilisent la méthode d'insertion sur plusieurs lignes pour terminer l'insertion des données.

2. Interrogez le tableau d'informations utilisateur comme indiqué dans la figure 4 ci-dessous :

Figure 4

Exiger:

       Alias ​​​​les champs pour afficher le tableau d'informations utilisateur

3. Complétez toutes les requêtes conditionnelles conformément aux exigences suivantes :

-- 一,	创建数据库SchoolDB
-- 1,删除数据库
	DROP DATABASE IF EXISTS SchoolDB;
-- 2,创建数据库
	CREATE DATABASE SchoolDB;
-- 3,修改数据库编码方式和字符集排列顺序
	ALTER DATABASE SchoolDB CHARACTER SET utf8 COLLATE utf8_bin;
-- 4,使用数据库
	USE SchoolDB;
-- 二,	在数据库SchoolDB中创建3张表
-- 1,	角色信息表(t_role)
DROP TABLE IF EXISTS t_role;
CREATE TABLE t_role(
r_id INT PRIMARY KEY AUTO_INCREMENT,   -- 角色编号
r_name_EN VARCHAR(20) NOT NULL UNIQUE,  -- 角色名(英文)
r_name_CH VARCHAR(20) NOT NULL UNIQUE,  -- 角色名(中文)
r_remark NVARCHAR(500) NOT NULL DEFAULT '男'  -- 说明简介
);
-- 2,	班级信息表(t_class)
DROP TABLE IF EXISTS t_class;
CREATE TABLE t_class(
c_id INT PRIMARY KEY AUTO_INCREMENT,     -- 班级编号
c_classname VARCHAR(20) NOT NULL UNIQUE  -- 班级名
);
-- 3,	用户信息表(t_user)
DROP TABLE IF EXISTS t_user;
CREATE TABLE t_user(
u_id INT PRIMARY KEY AUTO_INCREMENT,   -- 用户编号
u_username VARCHAR(20) NOT NULL UNIQUE,  -- 用户登陆名
u_password VARCHAR(20) NOT NULL,          -- 用户登陆密码
u_name VARCHAR(20) NOT NULL,              -- 用户名
u_sex CHAR(2) NOT NULL DEFAULT '男',     -- 性别
u_age INT NOT NULL,                      -- 年龄
u_phoneNum VARCHAR(11) NOT NULL,         -- 电话号码
u_address VARCHAR(50),                   -- 家庭住址
u_type INT NOT NULL DEFAULT 1,           -- 状态是否禁用
r_id INT NOT NULL,                       -- 角色,外键
c_id INT,                       -- 班级,外键
FOREIGN KEY (r_id) REFERENCES t_role(r_id),
FOREIGN KEY (c_id) REFERENCES t_class(c_id)
);
-- 三添加数据
-- 1,添加角色信息表(t_role)数据		
INSERT INTO t_role VALUES(DEFAULT,'boss','超级管理员','可以管理所有数据操作');
INSERT INTO t_role VALUES(DEFAULT,'admin','管理员','可以管理大部分数据操作');
INSERT INTO t_role VALUES(DEFAULT,'stu','学生','说明');
INSERT INTO t_role VALUES(DEFAULT,'teacher','老师','说明');
SELECT * FROM t_role;
-- 2,添加班级信息表(t_class)数据
INSERT INTO t_class VALUES(DEFAULT,'物联网201401班');
INSERT INTO t_class VALUES(DEFAULT,'物联网201402班');
INSERT INTO t_class VALUES(DEFAULT,'物联网201403班');
INSERT INTO t_class VALUES(DEFAULT,'物联网201404班');
INSERT INTO t_class VALUES(DEFAULT,'物联网201405班');
SELECT * FROM  t_class;
-- 3,添加用户信息表(t_user)数据
INSERT INTO t_user VALUES(1001,'abc','abc','abc','男',70,110,'武汉湖北科职',1,1,NULL);
INSERT INTO t_user VALUES(1002,'admin','admin','admin','男',0,120,'武汉湖北科职',1,2,NULL);
INSERT INTO t_user VALUES(1003,'huangba','huang66ba','黄八','男',20,15122535477,'北京东城',0,3,3);
INSERT INTO t_user VALUES(1004,'jack','jklove','杰克','男',19,15011982675,'湖南长沙',1,3,4);
INSERT INTO t_user VALUES(1005,'lisi',123456,'李四','男',20,15002726555,'湖北武汉',1,3,1);
INSERT INTO t_user VALUES(1006,'tom','tomandjack','汤姆','女',20,13002766545,'湖南韶山',1,3,5);
INSERT INTO t_user VALUES(1007,'wangwu','wangwu520','王五','男',34,13645267654,'湖北黄冈',1,4,NULL);
INSERT INTO t_user VALUES(1008,'yanqi','yanyan112','燕七','女',28,13288625642,'北京海淀',1,4,NULL);
INSERT INTO t_user VALUES(1009,'zhangsan',123,'张三','女',19,13017656783,'湖北武汉',1,3,2);
INSERT INTO t_user VALUES(10010,'zhaoliu','01234567...','赵六','女',54,15524786722,'湖北黄冈',0,4,1);
SELECT * FROM  t_user;
-- 查询用户信息表 如下图4所示: 要求:给字段起别名,显示用户信息表
SELECT u_id AS '用户编号', 
       u_username AS '用户名',
       u_name AS '姓名', 
       u_sex AS '性别', 
       u_age AS '年龄', 
       u_phoneNum AS '电话', 
       u_address AS '地址', 
       CASE u_type WHEN 0 THEN '禁用' ELSE '正常' END AS '状态', 
       b.r_name_CH AS '角色名称',
       c.c_classname AS '班级名称'
FROM t_user a
INNER JOIN t_role b ON a.r_id = b.r_id
LEFT JOIN t_class c ON a.c_id = c.c_id;
-- 四,完成如下查询题目
-- 3、按照下列需求完成所有条件查询:
-- -------- 1,过滤重复记录(distinct) -------------- 
-- 过滤用户表重复的地址
SELECT DISTINCT u_address 家庭住址 FROM t_user;
-- 过滤用户表重复的年龄
SELECT DISTINCT u_age 年龄 FROM t_user
-- --- 2,显示若干条(top)---------------
-- 显示班级表前3条记录
SELECT * FROM t_class LIMIT 3;
-- 显示用户表前5条记录
SELECT * FROM t_user LIMIT 5;
-- --- 3,简单条件查询(where)---------------
-- 显示用户表所有"男"性的信息
SELECT * FROM t_user WHERE u_sex = '男';
-- 显示用户表中是 学生的信息
SELECT * FROM t_user WHERE u_type = 1;
-- 显示用户表中年龄在24到60岁之间的人的信息(提示:between and)
SELECT * FROM t_user WHERE u_age BETWEEN 24 AND 60;
-- 显示用户表中年龄不在24到60岁之间的人的信息
SELECT * FROM t_user WHERE u_age NOT BETWEEN 24 AND 60;
-- 显示角色表中 角色名(中文)为"管理员’、"学生"、"老师"的信息
SELECT * FROM t_role WHERE r_name_CH IN ('管理员', '学生', '老师');
-- 显示角色表中 角色名(中文)为"超级管理员"的信息
SELECT * FROM t_role WHERE r_name_CH = '超级管理员';
-- 显示用户表 班级为空的信息
SELECT * FROM t_user WHERE c_id IS NULL;
-- 显示用户表 班级不为空的信息
SELECT * FROM t_user WHERE c_id IS NOT NULL;
-- 4,模糊杳询(like /not like)
-- 查询用户表 电话号码是以15开头的所有人信息
SELECT * FROM t_user WHERE u_phoneNum LIKE '15%';
-- 查询用户表 地址是湖北或湖南的所有人信息
SELECT * FROM t_user WHERE u_address LIKE '%湖北%' OR u_address LIKE '%湖南%';
-- 查询用户表 地址除湖北或湖南之外的所有人信息
SELECT * FROM t_user WHERE u_address NOT LIKE '%湖北%' AND u_address NOT LIKE '%湖南%';
-- -----5,杳询排序(order by)
-- 对用户表 用户年龄升序排序
SELECT * FROM t_user ORDER BY u_age ASC;
-- 对用户表 用户年龄降序排序
SELECT * FROM t_user ORDER BY u_age DESC;
-- -----6,对查询结果进行计算(求和sum 求平均数avg统计行数count)---------------
-- 求用户表用户年龄的总和
SELECT SUM(u_age) 年龄的总和 FROM t_user;
-- 求用户表 用户年龄的平均数
SELECT AVG(u_age) 年龄的平均数 FROM t_user;
-- 求用户表 有多少个用户
SELECT COUNT(*) 用户人数 FROM t_user;
-- 求用户表 有多少个老师
SELECT COUNT(*) 老师人数 FROM t_user WHERE r_id=4;
-- ---7,分组(group by/having)	------	
-- 求各个角色的人数
SELECT r_name_CH 角色名(中文),COUNT(*) 人数 FROM t_user INNER JOIN t_role ON t_user.r_id = t_role.r_id GROUP BY t_role.r_id;
-- 求各个角色中 所有人总年龄超过100的角色有哪些
SELECT r_name_CH 角色名(中文) FROM t_role WHERE r_id IN (SELECT DISTINCT r_id FROM t_user GROUP BY r_id HAVING SUM(u_age) > 100);
-- 4、按照下列需求完成所有链接查询:
-- ---8,联接查询----
-- (1)内连接(inner join)
-- 查询所有用户信息显示用户信息及对应的角色名(中文)
SELECT t_user.*,r_name_CH 角色名(中文) FROM t_user INNER JOIN t_role ON t_user.r_id = t_role.r_id;
-- 查询所有用户信息显示用户信息及对应的班级名称
SELECT t_user.*,c_classname 班级名称 FROM t_user INNER JOIN t_class ON t_user.c_id = t_class.c_id;
-- 查询所有用户信息显示用户信息及对应的角色名(中文)和班级名称
SELECT t_user.*,r_name_CH '角色名(中文)',c_classname 班级名称
FROM t_user
INNER JOIN t_role ON t_user.r_id = t_role.r_id
INNER JOIN t_class ON t_user.c_id = t_class.c_id;
-- 查询所有"男,用户并且年龄在10到24的信息显示用户信息及对应的角色名(中文)和班级名称
SELECT t_user.*,r_name_CH '角色名(中文)',c_classname 班级名称
FROM t_user
INNER JOIN t_role ON t_user.r_id = t_role.r_id
INNER JOIN t_class ON t_user.c_id = t_class.c_id
WHERE u_sex= '男' AND u_age BETWEEN 10 AND 24;
-- (2)内联接的where写法
-- 查询所有"男’用户并且年龄在10到24的信息显示用户信息及对应的角色名(中文)和班级名称
SELECT t_user.*,r_name_CH '角色名(中文)',c_classname 班级名称
FROM t_user
INNER JOIN t_role ON t_user.r_id = t_role.r_id
INNER JOIN t_class ON t_user.c_id = t_class.c_id
WHERE u_sex= '男' AND u_age BETWEEN 10 AND 24;
-- (3)外联接(left/right [outer] join)
-- 查询所有用户信息显示用户信息及对应的角色名(中文)和班级名称,以主表为主
SELECT t_user.*,r_name_CH '角色名(中文)',c_classname 班级名称
FROM t_user 
LEFT JOIN t_role ON t_user.r_id = t_role.r_id 
LEFT JOIN t_class ON t_user.c_id = t_class.c_id;
-- 查询所有用户信息显示用户信息及对应的角色名(中文)和班级名称,以副表为主
SELECT t_user.*,r_name_CH,c_classname
FROM t_role 
RIGHT JOIN t_user ON t_user.r_id = t_role.r_id 
LEFT JOIN t_class ON t_user.c_id = t_class.c_id;

Je suppose que tu aimes

Origine blog.csdn.net/m0_74293254/article/details/132474472
conseillé
Classement