Ejercicio diario MySQL: sistema de administración educativa del campus

1. Nombre de la base de datos: SchoolDB

2. Información de la tabla de la base de datos: tabla de información de roles

Nombre de la tabla:

t_rol  

Clave primaria:

deshacerse

número de serie

Nombre del campo

campo Descripción

categoría

número de dígitos

Atributos

Observación

1

deshacerse

número de rol

En t

incremento automático de clave primaria

2

r_name_EN

Nombre del personaje (inglés)

varchar

20

no vacío

no se puede repetir

3

r_nombre_CH

Nombre del personaje (chino)

varchar

20

no vacío

no se puede repetir

4

r_observación

Introducción

nvarchar

500

no vacío

El valor predeterminado es "masculino"

Información de la tabla de la base de datos: tabla de información de clase

Nombre de la tabla:

t_clase

Clave primaria:

c_id

número de serie

Nombre del campo

campo Descripción

categoría

número de dígitos

Atributos

Observación

1

c_id

numero de clase

En t

incremento automático de clave primaria

2

c_nombreclase

nombre de la clase

varchar

20

no vacío

no se puede repetir

Información de la tabla de la base de datos: tabla de información del usuario

Nombre de la tabla:

t_usuario

Clave primaria:

u_id

número de serie

Nombre del campo

campo Descripción

categoría

número de dígitos

Atributos

Observación

1

u_id

ID de usuario

En t

incremento automático de clave primaria

2

u_nombre de usuario

nombre de inicio de sesión del usuario

varchar

20

no vacío

no se puede repetir

3

u_contraseña

Contraseña de inicio de sesión de usuario

varchar

20

no vacío

4

tu nombre

nombre de usuario

varchar

20

no vacío

5

u_sexo

género

carbonizarse

2

no vacío

El valor predeterminado es "Hombre". Sólo puede ser hombre o mujer.

6

TU edad

edad

En t

no vacío

La edad solo puede variar de 0 a 100

7

u_número de teléfono

número de teléfono

varchar

20

no vacío

La longitud debe ser de 11 dígitos.

8

dirección_u

Direccion de casa

varchar

50

9

tipo_u

estado

Si deshabilitar

En t

no vacío

Solo puede ser 0 o 1

1 normal 

0 discapacitado

10

deshacerse

Role

En t

no vacío

clave externa

11

c_id

clase

En t

no vacío

clave externa

3. Pasos de implementación

1. Agregue datos a la tabla de información de roles, la tabla de información de clases y la tabla de información de usuarios insertando datos en una sola fila o en varias filas. Y utilice la consulta completa para consultar los datos de las tres tablas respectivamente.

Como se muestra en la Figura 1 ~ Figura 3 a continuación:

Figura 1

Figura 2

imagen 3

Requerir:

La tabla de información de roles utiliza una sola fila de inserción de datos para completar la inserción de datos.

La tabla de información de clase y la tabla de información de usuario utilizan el método de inserción de varias filas para completar la inserción de datos.

2. Consulte la tabla de información del usuario como se muestra en la Figura 4 a continuación:

Figura 4

Requerir:

       Alias ​​los campos para mostrar la tabla de información del usuario

3. Complete todas las consultas condicionales de acuerdo con los siguientes requisitos:

-- 一,	创建数据库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;

Supongo que te gusta

Origin blog.csdn.net/m0_74293254/article/details/132474472
Recomendado
Clasificación