作用,将表与表建立关系 一个主键只能被一个表的外键引用 创建外键 方法1:创建表的时候创建外键 方法2:创建表之后创建外键
#创建表的时候创建外键 CREATE TABLE IF NOT EXISTS student1( stuID INT(10) PRIMARY KEY AUTO_INCREMENT, stuname VARCHAR(20) NOT NULL DEFAULT'匿名', sex TINYINT(1) NOT NULL DEFAULT'1', gradeid INT(4), photo VARCHAR(50) NOT NULL, address VARCHAR(100), brondate DATETIME, emile VARCHAR(50), IDcard VARCHAR(18) NOT NULL, #创建表的时候创建外键 CONSTRAINT FK_gradeid FOREIGN KEY(gradeid) REFERENCES grade(gradeID) ); #创建表之后创建外键 CREATE TABLE IF NOT EXISTS student2( stuID INT(10) PRIMARY KEY AUTO_INCREMENT, stuname VARCHAR(20) NOT NULL DEFAULT'匿名', sex TINYINT(1) NOT NULL DEFAULT'1', gradeid INT(4), photo VARCHAR(50) NOT NULL DEFAULT'110', address VARCHAR(100), brondate DATETIME, emile VARCHAR(50), IDcard VARCHAR(18) NOT NULL DEFAULT'1211' ); ALTER TABLE student2 ADD CONSTRAINT FK_gradeid FOREIGN KEY(gradeid) REFERENCES grade(gradeID);删除表 删除具有主外键关系的表时,要先删除子表,后删主表 删除外键 步骤1.删除外键 步骤2.删除索引
#删除外键 ALTER TABLE student2 DROP FOREIGN KEY FK_gradeid; ALTER TABLE student2 DROP INDEX FK_gradeid;删除表的全部数据 DELETE FROM grade 在添加值时,自增值从原有基础上进行 TRUNCATE TABLE grade; 在添加值时,自增值从初始值进行(完全清空表数据,不能被恢复) 重启数据库服务之后 DELETE FROM grade INNODB的表,自增列从初始值开始 MYISAM的表,自增列从上一次自增数据基础上开始
查询取别名
#取别名 SELECT StudentNo AS 学号,studentname 姓名 FROM student; #表取别名 SELECT StudentNo AS 学号,studentname 姓名 FROM student AS s;#使用AS为查询结果取一个新名字
SELECT CONCAT(‘姓名’,studentname) AS 新name FROM student ;
查询去除重复项
#查询哪些学生参加考试的(学号)-去除重复项(distinct) SELECT DISTINCT studentno FROM result;查询中使用表达式 SELECT @@auto_increment_increment AS 步长 SELECT VERSION() AS 版本; SELECT 100*9-88 AS 计算;
like
#like结合使用通配符:%(0到任意个字符)_(一个字符) SELECT studentno,Studentname FROM student WHERE studentname LIKE '李%'; SELECT studentno,Studentname FROM student WHERE studentname LIKE '李_'; SELECT studentno,Studentname FROM student WHERE studentname LIKE '李__'; SELECT studentno,Studentname FROM student WHERE studentname LIKE '%文%'; #自定义转移符 SELECT studentno,studentname FROM student WHERE studentname LIKE '%:%%' ESCAPE ':';between and
SELECT studentno,studentresult FROM result WHERE StudentResult BETWEEN 95 AND 100;in
SELECT studentno,studentname FROM student WHERE studentno IN(1000,1001)null
#null is null #空的出生日期 SELECT studentno,studentname FROM student WHERE BornDate IS NULL SELECT studentno,studentname FROM student WHERE BornDate IS NOT NULL #查询空字符串和null SELECT studentno,studentname FROM student WHERE address =' ';内连接 inner join 查询两个表中的结果集中的交集
#查询参加考试学生信息(学号,学员姓名,科目编号,分数) /* 思路:(1)分析需求:结果来源于两个表 student result 连接查询 (2)确定使用哪一种连接? */ #内连接 SELECT s.`StudentNo`,studentname,subjectno,studentresult FROM student AS s INNER JOIN result AS r ON r.`StudentNo`=s.`StudentNo **外连接 out join 左外连接lift join 以左表为基准,右边一一匹配,匹配不上的,返回左表记录,右边以null填充(left左边的为左表)
**
#左连接 SELECT s.`StudentNo`,studentname,subjectno,studentresult FROM student AS s LEFT JOIN result AS r ON r.`StudentNo`=s.`StudentNo`右外连接 right join 以右表为基准,左边一一匹配,匹配不上的,返回右表记录,左边以null填充(right右边的表为右表)
#右连接 SELECT s.`StudentNo`,studentname,subjectno,studentresult FROM student AS s RIGHT JOIN result AS r ON r.`StudentNo`=s.`StudentNo`自连接:必须起别名 一个表中查询
#自连接必须取别名 CREATE TABLE IF NOT EXISTS category( categoryid INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, pid INT(10) NOT NULL, categoryname VARCHAR(10) NOT NULL, PRIMARY KEY(categoryid) ) SELECT * FROM category INSERT INTO category VALUES (2,1,'美术设计'), (3,1,'软件开发'), (4,3,'数据库基础'), (5,2,'PS设计'), (6,2,'色彩搭配'), (7,3,'JAVA基础'); SELECT a.categoryname AS '父栏目',b.categoryname AS '子栏目' FROM category AS a,category AS b WHERE a.`categoryid`=b.`pid`等值连接
#等值连接等同内连接 SELECT s.`StudentNo`,studentname,subjectno,studentresult FROM student AS s,result AS r 非等值连接 返回m*n行【三表查询】
#三表查询 SELECT s.studentno,studentname,subjectname,studentresult FROM student AS s INNER JOIN result AS r ON s.studentno=r.studentno INNER JOIN SUBJECT AS sub ON r.subjectno=sub.`SubjectNo`ORDER BY 排序 默认ASC 升序 DESC #降序
分页(只使用mySQL数据库
LIMIT (当前页数-1)页容量,页容量
#查询(C语言-1)前5名学生信息:姓名,学号,成绩 SELECT student.studentno,studentname,StudentResult FROM student INNER JOIN result ON student.`StudentNo`=result.`StudentNo` INNER JOIN SUBJECT ON result.`SubjectNo`=subject.`SubjectNo` WHERE subjectname='C语言-1' ORDER BY StudentResult DESC LIMIT 0,5;子查询
**
五月 23, 2019. Created by XMind