#主键约束:主键约束中主键不能为空
CREATE TABLE student(
stuNo INT PRIMARY KEY,
stuName VARCHAR(20),
age INT,
address VARCHAR(20)
);
INSERT INTO student(stuNo,stuName,age,address) VALUES(1001,‘艾克’,18,‘祖安的租安人’);
INSERT INTO student(stuNo,stuName,age,address) VALUES(1001,‘蒙多’,18,‘祖安’);
报错:> 1062 - Duplicate entry ‘1001’ for key ‘PRIMARY’
INSERT INTO student(stuNo,stuName,age,address) VALUES(NULL,‘坤坤’,18,‘养鸡场’);
报错:> 1048 - Column ‘stuNo’ cannot be null
语法:
CREATE TABLE student(
stuNo INT PRIMARY KEY,
stuName VARCHAR(20)
);

#联合主键
CREATE TABLE student(
stuNo INT,
classId VARCHAR(20),
stuName VARCHAR(20),
age INT,
address VARCHAR(20),
PRIMARY KEY (stuNo,classId)
);
INSERT INTO student(stuNo,classId,stuName,age,address) VALUES(1001,‘JAVA01’,‘艾克’,18,‘养鸡场’);
INSERT INTO student(stuNo,classId,stuName,age,address) VALUES(1002,‘JAVA01’,‘蒙多’,18,‘养鸡场’);
备注:联合主键的两个主键中,可以一个主键相同,但是不能两个主键都相同。

#唯一约束:数据不能重复,可以为null
CREATE TABLE person(
pId INT PRIMARY KEY,
pName VARCHAR(20),
cardNo VARCHAR(18) UNIQUE
);
INSERT INTO person(pId,pName,cardNo)VALUES(201,‘sunny’,1412312311231231);
INSERT INTO person(pId,pName,cardNo)VALUES(202,‘sunny’,NULL);

#自动增长:自动增长不能单独使用,一般需要和主键配合。
CREATE TABLE product(
pId INT PRIMARY KEY auto_increment,
pName VARCHAR(50),
price DECIMAL(8,2),
note VARCHAR(100)
)auto_increment=100;
INSERT INTO product(pName,price,note) VALUES(‘萨尔达荒野之息’,420.15,‘萨尔达天下第一’);
INSERT INTO product(pName,price,note) VALUES(‘只狼’,268,‘TGA2019年度最佳游戏’);
INSERT INTO product(pName,price,note) VALUES(20,‘GTA5’,99.5,‘老催’);
INSERT INTO product(pName,price,note) VALUES(‘英雄联盟’,0,‘真香’);

#外键约束:外键列的数据类型一定要与主键的类型一致
CREATE TABLE score(
id int PRIMARY KEY auto_increment,
course VARCHAR(20),
score DOUBLE(5,2),
stuNo INT,
CONSTRAINT FOREIGN KEY(stuNo) REFERENCES student(stuNo)
)

#连接查询

#笛卡尔积,交叉连接(有很多重复无用的数据)
SELECT * FROM emp,dept;

#交叉
SELECT * FROM emp JOIN dept;

#内连接查询:两个表是平等的,位置可以互换
#内连接的特点:查询结果必须满足条件
SELECT * FROM emp e INNER JOIN dept d ON e.deptno=d.deptno;
#表的位置可以任意互换
SELECT * FROM dept e INNER JOIN emp d ON e.deptno=d.deptno;

#外链接(两个表有主次之分)
#左外链接(以左表为主表)
SELECT * FROM emp LEFT OUTER JOIN dept ON emp.deptno=dept.deptno;
#右外链接(以右表为主表)
SELECT * FROM emp RIGHT OUTER JOIN dept on emp.deptno = dept.deptno WHERE emp.empno is NULL;
#子查询
SELECT * FROM emp WHERE sal > (SELECT sal FROM emp WHERE ename=‘JONES’);

SELECT * FROM emp WHERE sal > ALL (SELECT sal FROM emp WHERE deptno=30)

作业:
1、
创建四张表 分别存储 学生信息 课程信息 分数 讲师信息表 存储相应数据
学生信息表 Student
字段名 字段类型 字段约束 含义
Sno varchar(3) Not null 学员编号
Sname varchar(4) Not null 学员姓名
Ssex varchar(2) Not null 性别
Sbirthday Datetime 生日
Classnum varchar(5) 班级号

课程信息表 course
字段名 字段类型 字段约束 含义
Cno varchar(5) Not null 课程编号
Cname varchar(10) Not null 课程名称
Tno varchar(10) Not null 授课老师编号

成绩表score
字段名 字段类型 字段约束 含义
Sno Varchar(3) Not null 学员编号
Cno Varchar(5) Not null 课程编号
Degree Double(3,1) Not null 分数

讲师表teacher
字段名 字段类型 字段约束 含义
Tno varchar(3) Not null 讲师编号
Tname varchar(4) Not null 讲师姓名
Tsex varchar(2) Not null 讲师性别
Tbirthday Datetime Not null 出生日期
Prof varchar(6) 等级
Depart varchar(10) 所属院系

#查询Student表中的所有记录的Sname、Ssex和Class列
SELECT Sname,Ssex,Class FROM student;
#查询教师所有的单位即不重复的Depart列
SELECT DISTINCT DEPART from teacher;
#查询Student表的所有记录
SELECT * FROM student;
#查询Score表中成绩在60到80之间的所有记录
SELECT * FROM Score WHERE DEGREE BETWEEN 60 and 80;
#查询Score表中成绩为85,86或88的记录
SELECT * FROM Score WHERE DEGREE in(85,86,88);
#查询Student表中“95031”班或性别为“女”的同学记录
SELECT * FROM student WHERE Class = 95031 or Ssex=‘女’;
#以Class降序查询Student表的所有记录
SELECT * FROM student order by class desc;
#以Cno升序、Degree降序查询Score表的所有记录
SELECT * FROM score order by Cno,degree desc;
#查询“95031”班的学生人数
SELECT COUNT(class) FROM student where class=95031;
#查询Score表中的最高分的学生学号和课程号
SELECT Sno,Cno FROM score WHERE degree=(SELECT MAX(degree)FROM score);
#查询‘3-105’号课程的平均分
SELECT cno,avg(degree) FROM score WHERE cno=‘3-105’ group by cno;
#查询Score表中至少有5名学生选修的并以3开头的课程的平均分数
SELECT AVG(degree) FROM score WHERE cno=(SELECT cno FROM score GROUP BY cno HAVING count(cno)>=5)and cno like ‘3%’;
#查询最低分大于70,最高分小于90的Sno列
SELECT sno FROM score GROUP BY sno HAVING min(degree)>70 AND max(degree)<90;
#查询所有学生的Sname、Cno和Degree列
SELECT sname,s.cno,s.degree FROM student,score s WHERE student.sno=s.sno;
#查询所有学生的Sno、Cname和Degree列
SELECT sno,cname,degree FROM course,score WHERE course.cno=score.cno;
#查询所有学生的Sname、Cname和Degree列。
SELECT sname,cname,degree FROM student,course,score WHERE student.sno=score.sno and score.cno=course.cno;
#查询“95033”班所选课程的平均分
SELECT avg(degree) FROM student,score WHERE student.sno=score.sno and class=‘95033’;

MySQL数据库之二、约束与查询相关推荐

  1. MySQL数据库实验二 数据基本查询

    ★观前提示:本篇内容为mysql数据库实验,代码内容经测试过,可能一小部分有所疏漏,也有会不符合每个人实验的要求的地方,因此以下内容建议仅做思路参考,. 一.实验目的 1.掌握SQL查询语句的一般格式 ...

  2. Mysql数据库(二)——mysql数据库管理

    Mysql数据库(二)--mysql数据库管理 一.常用数据类型 二.查看数据库结构 1.进入数据库 2.查看数据库的信息 3.查看数据库中表的信息 4.显示数据表的结构(字段) 三.SQL语句概述 ...

  3. MySQL数据库(二)高级

    MySQL数据库(二)高级 一.试图 1.创建试图 视图是一个虚拟表,是sql的查询结果,,本身是不具有数据的,占用很少的内存空间,它是 SQL 中的一个重要概念其内容由查询定义.同真实的表一样,视图 ...

  4. MySQL 数据库 like 语句通配符模糊查询小结

    MySQL 报错:Parameter index out of range (1 > number of parameters, which is 0)--MySQL 数据库 like 语句通配 ...

  5. MySQL学习记录 (二) ----- SQL数据查询语句(DQL)

    相关文章: <MySQL学习记录 (一) ----- 有关数据库的基本概念和MySQL常用命令> <MySQL学习记录 (二) ----- SQL数据查询语句(DQL)> &l ...

  6. mysql数据库表的多条件查询

    mysql数据库表的多条件查询 一.select语句基本查询 SELECT 字段1,字段2....FROM 表名[WHERE 条件] [LIMIT N][ OFFSET M] select可以返回多条 ...

  7. MySQL数据库中的多表查询含义以及练习~建议码友们点亮拇指+收藏呐~

    MySQL数据库中的多表查询含义以及练习 一. 多表查询含义 二. 多表查询练习 1. 已知表 2. 需求And代码 一. 多表查询含义 查询语法: select列名列表from表名列表where条件 ...

  8. 【如何通过汉字首字母拼写查询数据】mysql数据库汉字首字母获取查询或通过ES插件elasticsearch-analysis-pinyin进行汉字首拼查询

    一.mysql数据库汉字首字母获取查询 1.汉字提取首字母 get_first_pinyin_char: 此函数是将一个中文字符串的第一个汉字转成拼音字母 (例如:"李"-> ...

  9. MySQL数据库(二)

    MySQL数据库(一): https://blog.csdn.net/Veer_c/article/details/103844059 MySQL数据库(二): https://blog.csdn.n ...

  10. 毛毛Python进阶之路6——MySQL 数据库(二)

    毛毛Python进阶之路6--MySQL 数据库(二) 一.对于自增 show create table 表名; # 查看表是怎样创建的. show create table 表名\G; #将某个表旋 ...

最新文章

  1. Lucky Substrings
  2. js 单引号和双引号的使用注意事项
  3. linux轮询脚本,linux驱动的等待队列(阻塞操作)和轮询(poll),缓冲区笔记
  4. Flink + Iceberg 在去哪儿的实时数仓实践
  5. CF-547E(Mike and Friends)后缀数组+线段树 AC自动机+DFS序+树状数组
  6. Visio 方向工程连接 Oracle 10G
  7. 有道智能学习灯 初体验
  8. 【微服务学习】Polly:熔断降级组件
  9. 北大清华团队编写!200多个科学实验+视频,和爸爸一起在家做
  10. 洛谷P3195 [HNOI2008]玩具装箱TOY(单调队列优化DP)
  11. 34. Element textContent 属性
  12. 【Python】SciKit-Learn包安装问题
  13. Python爬虫错误重试,超时处理
  14. win10 配置flashbuilder debug
  15. Springboot实现拦截器与过滤器
  16. 淘宝开源网络框架tbnet之buffer
  17. jiacu的css,css 加粗(css font
  18. centos host在哪 local_centos怎么查看hostid
  19. QQ号被盗了申诉回来马上又被盗了怎么办
  20. 跳马问题C++递归调用

热门文章

  1. 「地表最强」C++核心编程(七)类和对象--友元
  2. 航海世纪服务器维护中,航海世纪求解
  3. 万维网(WWW)简介
  4. 3000元左右性价比最高的手机2023 3000元手机性价比排行榜2023
  5. 2021年全球赤藓糖醇市场规模大约为21亿元(人民币),预计2028年将达到23亿元,2022-2028期间年复合增长率(CAGR)为1.4%
  6. 计算机关机慢什么原因,电脑关机慢是什么原因?
  7. 遨游浏览器的操作技巧
  8. excel手机版_苹果换安卓手机如何同步手机自带备忘录便签?
  9. Objective-C基础学习心得(更新ing)
  10. 世界公认最健康的作息时间表,今后就照这个来