Mysql基础练习--实例
修改字段名:alter table 表名 change 旧字段名 新字段名 新数据类型;
--- 主键 ----------------------------------------------------------
-- 修改表结构 添加主键
alter table user4 add primary key(id);
-- 如何删除
alter table user4 drop primary key;
-- 使用modify修改字段,添加约束
alter table 表名 modify id int primary key;
--- 唯一约束 ----------------------------------------------------------
-- 第一种方式
create table user5(
	id int,
	name varchar(20),
	unique(name)
);
-- 两个键在一起不重复就行
create table user5(
	id int,
	name varchar(20),
	unique(id,name)
);
-- 后面补唯一键
alter table user5 add unique(name);
-- 删除唯一键约束
alter table user5 drop index name;
-- 通过modify添加
alter table 表名 modify name varchar(20) unique;
--- 外键约束 ----------------------------------------------------------
-- 设计两个表:父表,子表
-- 班级表
create classes(
	id int primary key,
	name varchar(20)	
);
-- 学生表
create table students(
	id int primary key,
	name varchar(20),
	class_id int,
	foreign key(class_id) references classes(id)
);
--注意:主表(父表) classes中没有的数据值,在副表(子表)中是不可以使用的
--2.主表中的记录被副表引用,是不可以被删除的
-- 数据库的三大设计范式.sql-----------------------------------------------
-- 1.第一范式
-- 1NF
-- 数据表中的所有字段都是不可分割的原子值
create table student2(
	id int primary key,
	name varchar(20),
	address varchar(20)
);
insert into student2 values(1,'张三','中国河南省新乡市获嘉县中和镇');
insert into student2 values(2,'李四','中国河南省郑州市获嘉县中和镇');
insert into student2 values(3,'王五','中国河南省三门峡市获嘉县中和镇');
-- 字段值还可以继续拆分的,就不满足第一范式
-- 2.第二范式
-- 必须是满足第一范式的前提下,第二范式要求,除主键外的每一列都必须完全依赖与主键
-- 如果要出现不完全依赖,只可能发生在联合主键的情况下
-- 3.第三范式
-- 3NF
-- 必须先满足第二范式,除开主键列的其他列之间不能有传递依赖关系
-- mysql查询练习 --------------------------------------------------------
--学生表
Student
学号
姓名
性别
出生年月日
所在班级
create table student(
	sno varchar(20) primary key comment '学生学号',
	sname varchar(20) not null comment '学生姓名',
	ssex varchar(10) not null comment '学生性别',
	sbirthday datetime comment '学生出生年月日',
	class varchar(20) comment '学生所在班级'
) comment '学生表';
--课程表
Course
课程号
课程名称
教师编号
create table course(
	cno varchar(20) primary key comment '课程号',
	cname varchar(20) not null comment '课程名称',
	tno varchar(20) not null comment '教师编号',
	foreign key(tno) references teacher(tno)
) comment '课程表';
--成绩表
Score
学号
课程号
成绩
create table score(
	sno varchar(20) primary key comment '学号',
	cno varchar(20) not null comment '课程号',
	degree decimal comment '成绩',
	foreign key(sno) references student(sno),
	foreign key(cno) references course(cno)
)comment '成绩表';
--教师表
Teacher
教师编号
教师名字
教师性别
出生年月日
职称
所在部门
create table teacher(
	tno varchar(20) primary key comment '教师编号',
	tname varchar(20) not null comment '教室名字',
	tsex varchar(10) not null comment '教师性别',
	tbirthday datetime comment '教师出生年月日',
	prof varchar(20) not null comment '教师职称',
	depart varchar(20) not null comment '教师所在部门'
) comment '教师表';
-- 往数据表中添加数据
#添加学生信息
insert into student values('101','曾华','男','1977-09-01','95033');
insert into student values('102','匡明','男','1975-10-02','95031');
insert into student values('103','王丽','女','1976-01-23','95033');
insert into student values('104','李军','男','1976-02-20','95033');
insert into student values('105','王芳','女','1975-02-10','95031');
insert into student values('106','陆君','男','1974-06-03','95031');
insert into student values('107','王尼玛','男','1976-02-20','95033');
insert into student values('108','张全蛋','男','1975-02-10','95031');
insert into student values('109','赵铁柱','男','1974-06-03','95031');
#添加教师表
insert into teacher values('804','李诚','男','1958-12-02','副教授','计算机系');
insert into teacher values('856','张旭','男','1969-03-12','讲师','电子工程系');
insert into teacher values('825','王萍','女','1972-05-05','助教','计算机系');
insert into teacher values('831','刘冰','女','1958-08-14','助教','电子工程系');
#添加课程表
insert into course values('3-105','计算机导论','825');
insert into course values('3-245','操作系统','804');
insert into course values('6-166','数字电路','856');
insert into course values('9-888','高等数学','831');
#添加成绩表
insert into score values('103','3-105','92');
insert into score values('103','3-245','86');
insert into score values('103','6-166','85');
insert into score values('105','3-105','88');
insert into score values('105','3-245','75');
insert into score values('105','6-166','79');
insert into score values('109','3-105','76');
insert into score values('109','3-245','68');
insert into score values('109','6-166','81');
-- 查询练习:
-- 1. 查询student表的所有记录
#select * from student;
-- 2. 查询student表中的所有记录的sname,ssex和class列
#select sname,ssex,class from student;
-- 3. 查询教师所有的单位即不重复的depart列
#select distinct depart from teacher;
-- 4. 查询score表中成绩在60到80之间的所有记录
-- 查询区间 between ... and ...
#select * from score where degree between 60 and 80;
-- 直接运算符比较
#select * from score where degree > 60 and degree < 80;
-- 5. 查询score表中成绩为85,86或88的记录
-- 表示 或者关系的查询 in
#select * from score where degree in(85,86,88);
-- 6. 查询student表中"95031"班或性别为"女"的同学记录
#select * from student where class='95031' or ssex='女';
-- 7. 以class降序查询student表的所有记录
-- 升序,降序  默认顺序是升序 所以不写asc也可以
#select * from student order by class desc;
#select * from student order by class [asc];
-- 8. 以cno升序,degree降序查询score表的所有记录
#select * from score order by cno asc,degree desc;
-- 9. 查询"95031"班的学生人数
-- 统计 count
#select count(*) from student where class='95031';
-- 10. 查询score表中的最高分的学生学号和课程号.(子查询或者排序)
-- 子查询的做法
#select sno,cno from score where degree=(select max(degree) from score);
分解理解:
-- 1. 找到最高分
	select max(degree) from score;
-- 2. 找最高分的sno和cno
	select sno,cno from score where degree=(select max(degree) from score);
-- 排序的做法
select sno,cno,degree from score order by degree desc limit 0,1;
-- 11. 查询每门课的平均成绩
-- avg()
#select cno,avg(degree) from score group by cno;
-- 12. 查询score表中至少有2名学生选修的并以3开头的课程的平均分数
#select cno,avg(degree),count(*) from score group by cno having count(cno)>=2 and cno like '3%';
-- 13. 查询分时大于70,小于90的sno列
#select sno,degree from score where degree>70 and degree<90;
#select sno,degree from score where degree between 70 and 90;
-- 14. 查询所有学生的sname,cno和degree列   -- (多表查询)
#select sname,cno,degree from student,score where student.sno = score.sno;
-- 15. 查询所有学生的sno,cname和degree列
#select sno,cname,degree from course,score where course.cno = score.cno;
-- 16. 查询所有学生的sname,cname和degree列 -- (三表关联查询) --共同字段的相等
#select sname,cname,degree from student,course,score where student.sno=score.sno and course.cno=score.cno;
Mysql基础练习--实例的更多相关文章
- MYSQL基础语句
		
参考书籍< MySQL数据库基础与实例教程> --孔祥盛 SQL(structured query language)结构化查询语言,应用最为广泛的关系型数据库语言. MYSQL属于关系型 ...
 - MySQL基础操作命令
		
MySQL基础操作命令 1. 查看MySQL进程 ps -ef|grep mysql |grep -v grep 2. 查看MySQL端口 ss -lnt | grep 3306 3. MySQL的启 ...
 - MYSQL:基础—存储过程
		
MYSQL:基础-存储过程 快速入门 理解: 迄今为止,我们学过的大多数SQL语句都是针对一个或多个表的单条语句.但是并不是所有的操作都是可以用一条语句来完成的,经常有一些操作是需要多条语句配合才能完 ...
 - 服务管理之mysql基础
		
目录 mysql基础 1. 关系型数据库介绍 1.1 数据结构模型 1.2 RDBMS专业名词 2. mysql安装与配置 2.1 mysql安装 2.2 mysql配置 3. mysql的程序组成 ...
 - Mysql 之多实例 安装以及配置
		
MySQL多实例 1.什么是MySQL多实例 简单地说,Mysql多实例就是在一台服务器上同时开启多个不同的服务端口(3306.3307),同时运行多个Mysql服务进程,这些服务进程通过不同的soc ...
 - (3.12)mysql基础深入——mysql日志文件/其他文件(socket/pid/表结构/Innodb)
		
(3.12)mysql基础深入——mysql日志文件/其他文件(socket/pid/表结构/Innodb) 关键词:mysql日志文件,mysqldumpslow分析工具 目录:日志文件的分类 1. ...
 - (3.11)mysql基础深入——mysql文件分类与配置文件管理
		
(3.11)mysql基础深入——mysql文件分类与管理 关键词:mysql配置文件,mysql参数文件,mysql中的my.cnf 目录:mysql数据库文件分类: [1]参数文件:my.cnf ...
 - (3.4)mysql基础深入——mysql.server启动脚本源码阅读与分析
		
(3.4)mysql基础深入——mysql.server启动脚本源码阅读与分析 my.server主要分为3大部分 [1]变量初始化部分 [2]函数声明部分 [3]具体执行部分 #!/bin/sh # ...
 - Linux系统——MySQL基础(二)
		
# MySQL数据库完全备份与恢复## 数据库备份的分类1. 从物理与逻辑的角度,备份可以分为物理备份和逻辑备份.(1)物理备份:对数据库操作系统的物理文件(数据文件.日志文件)的备份.物理备份又可分 ...
 
随机推荐
- ElasticSearch 9200  9300 端口
			
9300端口: ES节点之间通讯使用 9200端口: ES节点 和 外部 通讯使用 9300是TCP协议端口号,ES集群之间通讯端口号 9200端口号,暴露ES RESTful接口端口号
 - 《Java多线程编程实战指南(核心篇)》阅读笔记
			
<Java多线程编程实战指南(核心篇)>阅读笔记 */--> <Java多线程编程实战指南(核心篇)>阅读笔记 Table of Contents 1. 线程概念 1.1 ...
 - HBase Shell Get 操作常用小技巧
			
在工作中,有时候只是想简单看下HBase表某些关键指标的值,这个时候总不能现写Java代码去查看,以下几个小技巧你可能会经常用到. 1. 某行有许多列,只想获取指定2~3列的数据 hbase> ...
 - 不可被忽视的操作系统( FreeRTOS )【2】
			
本文章总结基于官方FreeRTOS手册,测试系统为ESP32的IDF 4.0 本篇续上一篇<不可被忽视的操作系统( FreeRTOS )[1]> 其中上一篇主要内容为: FreeRTOS介 ...
 - Zookeeper是如何实现分布式锁的
			
[toc] Zookeeper是如何实现分布式锁的 标签 : Zookeeper 分布式 实现分布式锁要考虑的重要问题 1. 三个核心要素 加锁, 解锁, 锁超时 2. 三个问题 要保证原子性操作, ...
 - 1049 Counting Ones (30分)
			
The task is simple: given any positive integer N, you are supposed to count the total number of 1's ...
 - web日志分析的重要性
			
虽然不可能对庞大的日志文件进行逐条的阅读,但是在这些日志文件中,确实会包含一些非常重要的信息.例如,在什么时间.有哪些ip地址访问了网站中的什么资源,等等. 通过对日志文件的分析,可以获得如下信息. ...
 - pip 命令参数以及如何配置国内镜像源
			
文章更新于:2020-04-05 注:如果 pip 命令不可以用,参见:python pip命令不能用 文章目录 一.参数详解 1.命令列表 2.通用参数列表 二.实际应用 1.常用命令 2.`pip ...
 - MTK Android 设置-选择日期格式 [管理和组织首选项,ListPreference,CheckBoxPreference,EditTextPreference,RingtonePreference]
			
###android.preference.ListPreference的一些特性 android:key 选项的名称或键 android:title 选项的标题 android:summary ...
 - Linux服务器架设篇,Windows中的虚拟机linux上不了外网怎么办?
			
1.将电脑的网线口直连路由器内网接口(确保该路由器可以直接正常上网,切记不可以使用宽带连接和无线网连接). 2.在实体机电脑可以上网的前提下,在命令框窗口输入 ipconfig 3.记录下电脑以太网的 ...