2020 1 08
# 创建一个表的sql语句
CREATE TABLE IF NOT EXISTS `eee`(
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
`name` VARCHAR(39) NOT NULL DEFAULT ' 匿名' COMMENT '姓名',
`pwd` VARCHAR(33) NOT NULL DEFAULT '123456' COMMENT '密码',
`sex` VARCHAR(2) NOT NULL DEFAULT '女' COMMENT '性别',
`birthday` VARCHAR(33) NOT NULL DEFAULT '没生日' COMMENT '出生日期',
`address` VARCHAR(44) NOT NULL DEFAULT '山东' COMMENT '家庭住址',
`email` VARBINARY(55) NOT NULL DEFAULT '网易邮箱' COMMENT '你夫人邮箱',
PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
-- primary key为主键,一般一个表只有一个
=============================================================================================================================
外键的用法
CREATE TABLE `grade`(
`gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年纪id',
`gradename` VARCHAR(50) NOT NULL COMMENT '年纪名称',
PRIMARY KEY (`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
-- 学生表的gradeid引用grade 的gradeid
-- 定义外键key
-- 给这个外键添加约束(执行引用)
CREATE TABLE IF NOT EXISTS `student`(
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
`name` VARCHAR(39) NOT NULL DEFAULT ' 匿名' COMMENT '姓名',
`pwd` VARCHAR(33) NOT NULL DEFAULT '123456' COMMENT '密码',
`sex` VARCHAR(2) NOT NULL DEFAULT '女' COMMENT '性别',
`birthday` VARCHAR(33) NOT NULL DEFAULT '没生日' COMMENT '出生日期',
`gradeid` INT(10) NOT NULL COMMENT '出生日期',
`address` VARCHAR(44) NOT NULL DEFAULT '山东' COMMENT '家庭住址',
`email` VARBINARY(55) NOT NULL DEFAULT '网易邮箱' COMMENT '你夫人邮箱',
PRIMARY KEY(`id`),
KEY `FK_gradeid` (`gradeid`) ,
CONSTRAINT `FK_gradeid` FOREIGN KEY(`gradeid`) REFERENCES `grade`(`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
-- primary key为主键,一般一个表只有一个
外键的用法2
-- 创建表的时候,没有外键关系
ALTER TABLE `student`
ADD CONSTRAINT `FK_gradeid` FOREIGN KEY(`gradeid`) REFERENCES `grade`(`gradeid`);
======================================================================================================================================
数据库的增改查
-- primary key为主键,一般一个表只有一个
-- 创建表的时候,没有外键关系
-- alter table `student`
-- add constraint `FK_gradeid` foreign key(`gradeid`) references `grade`(`gradeid`);
-- 插入语句
INSERT INTO `grade`(gradename) VALUES('大四')
-- 由于主键自增,我们可以省略
-- 插入语句,数据和字段一一对应!!!
INSERT INTO `grade` VALUES('大五')
-- 插入多个字段
INSERT INTO `grade`(`gradename`) VALUES('大一'),('大二'),('大三')
INSERT INTO `student`(`name`,`gradeid`) VALUES ('张三','7')
INSERT INTO `student`(`name`,`gradeid`,`pwd`) VALUES ('宋志远','7','的日日')
INSERT INTO `student`(`name`,`gradeid`,`pwd`,`sex`) VALUES ('宋志远','7','的日日','男')
-- 修改表,update
-- 格式:update 表名 set 字段名='' where 条件
UPDATE `student` SET `name`='林彪' WHERE id=1;
UPDATE `student` SET `name`='白崇禧' WHERE id=3;
-- 修改多个字段
UPDATE `student` SET `name`='白崇禧',`email`='233223334@344.com' WHERE id=2;
-- where条件
-- 通过多个条件的定位数据
-- 具体语法:
UPDATE `student` SET `email`='2343の顶顶顶顶@33' WHERE `email`= '233223334@344.com';
-- 删除数据
DELETE FROM `student` WHERE id=1;
-- 完全清空一个数据库表,表的结构和索引约束不会变
TRUNCATE `student`;
-- delete与truncate区别
-- 相同点:都能删除数据,都不会删除表的结构
-- 不同:
-- truncate 重新设置自增列,计数器会归零
-- truncate 不会影响事务()
-- 测试delete与truncate的区别
CREATE TABLE `test`(
`id` INT(4) NOT NULL AUTO_INCREMENT,
`coll` VARCHAR(20) NOT NULL,
PRIMARY KEY (`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
INSERT INTO `test`(`coll`) VALUES ('你大爷'),('他大爷'),('我大爷')
DELETE FROM `test`; -- 不会影响自增
TRUNCATE `test`; -- 自增会归零
=============================================================================================
查询
-- 查询有些同学参加了考试,成绩
SELECT * FROM result
-- 发现重复数据,去重
SELECT DISTINCT `studentno` FROM result
-- 查看系统版本(函数)
SELECT VERSION()
-- 计算结果
SELECT 100*2-1 AS 计算结果
-- 设置自增的步chang
SELECT @@auto_increment_inycrement --查询自增的步长
-- 数据库的列(表达式)
-- 学员考试成绩+1,查看
-- where条件操作符
-- 作用:
-- ===================================================
-- 查询成绩在95-100之间的
--
SELECT studentNo,`StudentResult` FROM result
WHERE studentresult>=3 && studentresult<=10
-- ========================================================
-- 模糊查询(区间)
SELECT studentNo,`studentresult` FROM result
WHERE studentresult BETWEEN 3 AND 4
-- ============================================================
-- 除了1000号学生之外的同学的成绩
SELECT studentno,`studentresult` FROM result
WHERE studentno=1000
===================================================================================================
--
SELECT studentNo,`StudentResult` FROM result
WHERE studentresult>=3 && studentresult<=10
-- ========================================================
-- 模糊查询(区间)
SELECT studentNo,`studentresult` FROM result
WHERE studentresult BETWEEN 3 AND 4
-- ============================================================
-- 除了1000号学生之外的同学的成绩
SELECT studentno,`studentresult` FROM result
WHERE studentno=1000
-- 查询姓刘的同学,名字后面只有一个字的
SELECT `StudentNo`,`studentname` FROM `student`
WHERE studentname LIKE '刘'
-- 查询名字中间有嘉字的
SELECT `studentno`, `studentname` FROM `student`
WHERE studentname LIKE '%空%'
-- ======= in =========================================、、
-- 查询1001,1002号学员
SELECT `studentno`,`studentname` FROM `student`
WHERE studentno IN (111,3344,44);
-- 查询在北京学生
SELECT `studentno`,`studentname` FROM `student`
WHERE `Address` IN('北京');
-- =============null not null ===================================================
SELECT `studentno`,`studentname` FROM `student`
WHERE address = '' OR address IS NULL
-- 查询有出生日期同学,不为空
SELECT `studentno`,`studentname` FROM `student`
WHERE `studentno` IS NOT NULL
SELECT `studentname`,`studentno` FROM `student`
WHERE studentno IN (33344,5,5)
-- ===============================================================================
SELECT s.studentno,studentname,subjectno,studentresult
FROM student AS s
INNER JOIN result AS r
ON s.studentno = r.studentno
-- =======右连接 ===========================================================================
SELECT s.studentno,studentname,subjectno,studentresult
FROM student AS s
RIGHT JOIN result AS r
ON s.studentno=r.studentno
-- =======左连接=====================================================================================
SELECT s.studentno,studentname,subjectno,studentresult
FROM student AS s
LEFT JOIN result AS r
ON s.studentno=r.studentno
-- 分析需求,分析查询的字段来自哪些表,student result subject(连接查询)
-- 确定使用哪种连接查询
-- 确定交叉点(这两个表那个数据是相同的)
SELECT s.studentno,studentname,subjectname,`Studentresult`
FROM student s
RIGHT JOIN result r
ON r.studentno = s.studentno
INNER JOIN `subject` sub
ON r.subjectno = sub.subjectNo
-- 我要查询哪些数据 select 。。。
-- 从那几个表from 表 XXX Join 链接的表 on 交叉条件
-- 左连接:left_join():以左边的表为主
-- 右连接:right_join():以右边的表为主