Mysql 学习记录 #01
表的基本操作
-- 创建表
CREATE TABLE IF NOT EXISTS `student`(
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '编号',
`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',
`sex` VARCHAR(2) NOT NULL DEFAULT '女' COMMENT '性别',
`birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
`adress` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',
`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY (`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
-- 修改表名字
ALTER TABLE teacher RENAME teachers
-- 增加表的字段
ALTER TABLE teachers ADD age INT(5)
-- 修改表的字段
ALTER TABLE teachers MODIFY age VARCHAR(5) -- 修改约束
ALTER TABLE teachers CHANGE age ages INT(4) -- 重命名
-- 删除表字段
ALTER TABLE teachers DROP ages
-- 删除表
DROP TABLE IF EXISTS teachers
表的查询
-- 指定查询所有的字段
SELECT * FROM student
SELECT * FROM result
-- 查询指定字段
SELECT `StudentNo`,`StudentName` FROM student
-- 别名,给结果取一个名字 as 可以给字段起别名也可以给表起别名
SELECT `StudentNo` AS 学号,`StudentName` AS 学生姓名 FROM student AS s
-- 函数 Concat(a,b)
SELECT CONCAT('姓名:',StudentName) AS 新名字 FROM student
-- 去重(查询有哪些同学参加了考试,成绩)
SELECT * FROM result -- 查询全部成绩
SELECT `studentno` FROM result
-- 发现重复
SELECT DISTINCT `studentno` FROM result -- distinct去除重复的数据
-- 查询系统版本号(函数)
SELECT VERSION()
SELECT 100*3-1 AS 计算结果 -- 表达式
SELECT @@auto_increment_increment -- 查询自增的步长 (变量)
-- 学员考试成绩加1
SELECT `studentno` AS 学号,`studentresult` +1 AS 成绩 FROM result
WHERE的常见用法
-- where用法
SELECT studentno,`studentresult` FROM result
-- 查询成绩在95~100的
SELECT studentno,`studentresult` FROM result WHERE `studentresult` BETWEEN 95 AND 100
-- 模糊查询(区间)
SELECT studentno,`studentresult` FROM result
WHERE `studentresult` BETWEEN 95 AND 100
-- 除了1000号学生之外的同学的成绩
SELECT `studentno`,`studentresult` FROM result
WHERE NOT `studentno`=1000
-- 模糊查询(比较运算符)
-- IS NULL IS NOT NULL BETWEEN
-- LIKE IN
-- 查询姓赵的同学 (%代表0到任意字符 _代表一个字符)
SELECT `studentno`,`studentname` FROM student
WHERE `studentname` LIKE '赵%'
-- IN 的用法 查询1001,1000学生 (具体的一个或多个值)
SELECT `studentno`,`studentname` FROM student
WHERE `studentno` IN(1001,1000)
-- 查询在北京的学生
SELECT `studentno`,`studentname` FROM student
WHERE `address` IN('北京朝阳')
-- NULL NOT NULL
-- 查询地址为空的学生
SELECT `studentno`,`studentname` FROM student
WHERE `address` IS NULL
联表查询 join
-- 联表查询
-- join on
-- 查询参加了考试的同学(学号,姓名,科目编号,分数)
SELECT s.`studentno`,`studentname`,`subjectno`,`studentresult`
FROM student AS s
INNER JOIN result AS r
WHERE s.`studentno` = r.`studentno`
-- RIGHT JOIN
SELECT s.`studentno`,`studentname`,`subjectno`,`studentresult`
FROM student AS s
RIGHT JOIN result AS r
ON s.`studentno` = r.`studentno`
-- LEFT JOIN
SELECT s.`studentno`,`studentname`,`subjectno`,`studentresult`
FROM student AS s
LEFT JOIN result AS r
ON s.`studentno` = r.`studentno`
-- 连接三张表
SELECT s.`studentno`,`studentname`,sub.`subjectname`,`studentresult`
FROM student AS s
RIGHT JOIN result AS r
ON s.`studentno`=r.`studentno`
INNER JOIN `subject` AS sub
ON r.`subjectno`=sub.`subjectno`
- INNER JOIN 如果表中至少有一个匹配,返回就行
- LEFT JOIN 即使右表中没有匹配,也会从左表中返回
- RIGHT JOIN 即使左表中没有匹配,也会从右表中返回