数据库02

-- sql基础补充
-- 1.条件语句的写法
-- 在SQL中可以通过 where 条件语句来对操作对象进行筛选 - 筛选
-- a. 比较运算符: =, <>, >, <, >=, <=
-- 注意: 判断一个字段的值是否为空不用使用=和<>, 而是使用is nullis not null
SELECT addr FROM t_student;
SELECT stuname FROM t_student WHERE addr is NULL;-- 判断是否为NULL(空)
SELECT stuname FROM t_student WHERE addr=''; -- 判断是否是空串
-- b. 逻辑运算符: and, or, not
-- c. where 字段名 between 值1 and 值2 -- 筛选指定的字段的值在值1和值2之间
SELECT stuname,birth FROM t_student WHERE birth BETWEEN '1990-1-1' AND '1999-12-31';
-- d. where 字段名 in 集合 -- 筛选出字段值是集合中的元素;(集合是使用括号括起来里面多个值)
SELECT * FROM t_student WHERE stuname in ('小花', '小明', '路飞');

-- 2.数据类型
-- varchar(size): 不定长字符串,size决定的是最大长度
-- char(size): 定长字符
-- text: 不限长度(最大是255个字符)
-- int/tinyint(-128~127)
-- FLOAT(size,d)/DOUBLE(size,d) - 这儿的size和d的值都有约束效果
-- bit: 只有0和1两个值
-- date/datetime/time: 值可以是时间函数的结果,也可以时间字符串;计算或者是比较的时候内部是按时间处理的
UPDATE t_student SET tel='1367819230';
ALTER TABLE t_student ADD COLUMN intro VARCHAR(10);
SELECT * FROM t_student;

-- 3.去重
SELECT DISTINCT addr FROM t_student;

-- ========================添加约束=========================
-- 1.创建表的时候添加约束

CREATE TABLE if not EXISTS t_college
(
collid int, 
collname VARCHAR(20) NOT NULL,   -- 创建表的时候添加约束
website VARCHAR(1024), 
intro VARCHAR(200),
PRIMARY KEY(collid)
);

-- 2.通过添加约束索引的方式添加约束
-- a.添加约束
-- alter table 表名 add constraint 索引名 约束 (字段名);
-- 说明: 索引名 - 自己随便命名,用来指向当前添加的约束; 约束 - 需要添加的约束(支持唯一约束、主键约束和外键约束)

ALTER TABLE t_college ADD CONSTRAINT con_website UNIQUE (website);
-- 给t_college表中的website添加unique约束,约束索引为con_website

-- b.删除约束
-- alter table 表名 drop index 约束索引;
ALTER TABLE t_college DROP index con_website;

-- ====================外键和E.R图================
-- 1.什么是外键:表中的某个字段的值是根据其他表中主键的值来确定的。那么这个字段就是外键
-- 1.1 多对一的外键的添加: 将外键添加到多的一方对应的表中
-- 一对一的外键的添加: 将外键随便添加到哪一方,同时添加值唯一约束
-- 多对多的外键的添加: 关系型数据库中,两张表没法实现多多的关系,需要一个中间表。(中间表有两个外键分别参照多多的两个表的主键)
-- 1.2 怎么添加外键:

-- a.添加外键对应的字段
alter TABLE tb_student add COLUMN collid int;

-- b.给设计好的外键对应的字段添加外键约束
-- alter table 表1 add constraint 索引名 foreign key (字段1) references 表2 (字段2);
-- - 将表1中的字段1设置为外键,并且让这个外键的值参照表2中的字段2

ALTER TABLE tb_student ADD CONSTRAINT fk_collid_stu 
FOREIGN KEY (collid) 
REFERENCES  tb_college (collid);

-- c. 删除外键约束
-- alter table 表名 drop foreign key 外键索引名; - 可以删除外键约束,但是外键索引还存在;需要额外的把索引删掉
-- 注意: 删除外键约束的时候直接删除约束的索引无效,必须先将约束删掉,然后再删除索引.
ALTER TABLE tb_student DROP FOREIGN KEY fk_collid_stu;
ALTER TABLE tb_student DROP INDEX fk_collid_stu;

-- d. 多对多的外键约束
-- 添加学生的外键约束

ALTER TABLE tb_score ADD CONSTRAINT fk_stuid_score 
FOREIGN KEY (stuid) 
REFERENCES tb_student (stuid);

-- 添加课程的外键约束

ALTER TABLE tb_score ADD CONSTRAINT fk_couid_score 
FOREIGN KEY (couid) 
REFERENCES tb_course (couid);

-- ==================查询的高级操作=================
-- 1.聚合:max()/min()/sum()/avg()/count()
-- SELECT 聚合函数(字段) FROM 表名 WHERE 条件; -- 按条件多表查询指定字段数据,然后将查询结果做相应的聚合运算。聚合运算的结果是最后结果

SELECT mark FROM tb_score;    -- 获取tb_score表中的所有分数值
SELECT max(mark) as maxmark FROM tb_score;      -- 获取tb_score表中所有分数的最大值
SELECT min(mark) FROM tb_score; 
SELECT sum(mark) FROM tb_score; 
SELECT avg(mark) FROM tb_score WHERE scoreid>=123;   -- 计算平均值的时候如果参与运算的对象的值为NULL,那么这个数据不会参与计算
SELECT count(mark) FROM tb_score WHERE mark>=90;

-- 2.分组
-- SELECT 字段操作 FROM 表名 WHERE 条件 GROUP BY(字段2);
-- 将指定表中满足条件的记录按照字段2的进行分组(值是一样的在一个组里面), 然后再讲每个分组作为整体按照指定字段进行指定聚合操作
-- 求每个学生的平均成绩
SELECT stuid,avg(mark) FROM tb_score WHERE scoreid <= 115 GROUP BY(stuid) ;
-- 注意:a.字段操作的位置除了分组字段不用聚合,其他字段都必须聚合 b.分组的时候where要放到分组前对需要分组的数据进行筛选

-- having: 分组的时候,在分组后用having代替where来对分组后的数据进行筛选
-- 获取平均分数大于60分的学生的id
SELECT stuid,avg(mark) FROM tb_score GROUP BY(stuid) HAVING avg(mark)>60;

-- 3.子查询: 将一个查询操作的结果作为另外一个查询的数据源
-- 在tb_score表中获取成绩是大于90分的学生的id
SELECT stuid FROM tb_score WHERE mark>90 and stuid is not NULL;

-- 获取成绩大于90分的学生的名字
SELECT stuname FROM tb_student WHERE stuid in
(SELECT stuid FROM tb_score WHERE mark>90 and stuid is not NULL);

SELECT stuid,mark FROM tb_score WHERE mark > 90 and stuid is not NULL;
-- 将一个查询的结果作为查询对象提供给另外一个查询。但是第一个查询结果需要重命名
SELECT mark FROM (SELECT stuid,mark FROM tb_score WHERE mark > 90 and stuid is not NULL) as t2;

-- =============1.学生表===============
CREATE TABLE IF NOT EXISTS tb_student
(
stuid int not NULL auto_increment,
stuname VARCHAR(20) not NULL,
tel CHAR(11) not NULL,
birth date DEFAULT '2019-10-21',
addr VARCHAR(100),
PRIMARY key(stuid)
);

-- 添加学院的外键约束
ALTER TABLE tb_student ADD CONSTRAINT fk_collid_stu
FOREIGN KEY (collid)
REFERENCES tb_college (collid);

INSERT INTO tb_student (stuname, addr) VALUES
('王大锤', '北京'),
('张怀义', '江西'),
('张楚楠', '四川'),
('罗玉凤', '重庆'),
('王祖贤', '香港'),
('刘德华', '香港'),
('周杰伦', '台湾');

-- ===============2.课程表================
CREATE TABLE IF NOT EXISTS tb_course
(
couid int NOT NULL auto_increment,
couname VARCHAR(20) NOT NULL,
startdate date NOT NULL DEFAULT '2019-10-21',
intro VARCHAR(200),
credit int NOT NULL,
PRIMARY key(couid)
);

-- 添加老师的外键约束
ALTER TABLE tb_course ADD COLUMN teaid int COMMENT '老师外键字段';
ALTER TABLE tb_course ADD CONSTRAINT fk_teaid_course
FOREIGN KEY (teaid)
REFERENCES tb_teacher (teaid);

-- =================3.学院表====================
CREATE TABLE IF NOT EXISTS tb_college
(
collid int auto_increment,
website VARCHAR(200) UNIQUE,
collname VARCHAR(50),
PRIMARY KEY(collid)
);

-- =================4.老师表====================
CREATE TABLE IF NOT EXISTS tb_teacher
(
teaid int NOT NULL auto_increment,
teaname VARCHAR(20) NOT NULL,
teaage INT,
tel char(11),
PRIMARY KEY(teaid)
);

-- 添加学院的外键约束
ALTER TABLE tb_teacher ADD COLUMN collid int COMMENT '学院的外键';
ALTER TABLE tb_teacher ADD CONSTRAINT fk_collid_teacher
FOREIGN KEY (collid)
REFERENCES tb_college (collid);

-- ================分数表===================
CREATE TABLE if NOT EXISTS tb_score
(
scoreid int NOT NULL auto_increment,
mark FLOAT(4,1) COMMENT '分数',
stuid int COMMENT '学生外键',
couid int COMMENT '课程外键',
PRIMARY KEY (scoreid)
);

INSERT INTO tb_score (mark) VALUES (89),(45.5),(100),(95),(60),(77),(90),
(97),(49),(66),(56),(71),(80.5),(33),(87),(56),(74),(68),(80),(92),(34),(75);

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351

推荐阅读更多精彩内容

  • 1、count 使用 1.1 查询employee表中记录数: SELECT COUNT(*) FROM empl...
    四月四七日薄暮阅读 283评论 0 0
  • 花了3天时间学习MySql,考了个二级MySql 书籍参考:高等教育出版社《全国计算机等级考试二级教程-MySQL...
    如果仲有听日阅读 1,271评论 4 4
  • -- =================================sql基础补充==============...
    LittleBear_6c91阅读 152评论 0 0
  • MYSQL 基础知识 1 MySQL数据库概要 2 简单MySQL环境 3 数据的存储和获取 4 MySQL基本操...
    Kingtester阅读 7,790评论 5 116
  • 吃完早饭,朋友来约我逛街,我们仨人相约来到维客超市。才知道今天搞促销,来到生鲜区,买了鲜鱼,海虾,芋头和羊腿。真...
    苏筱瑜姥姥阅读 139评论 0 1