学习MySQL遇到的问题记录

 最近在学校mysql,所有开篇博客记录在学习的过程遇到的一些问题,使用的是Navicat

1.mysql存在外键时导入数据

创建一个数据表有外键约束,导致在插入数据时不成功,上网查找后发现可以先把外键约束关闭,插入完数据后,在把外键约束打开,

SET FOREIGN_KEY_CHECKS=0; //关闭

SET FOREIGN_KEY_CHECKS=1;//打开

2.设置外键约束

设置外键关系的两张表必须是相同的存储引擎,如都是InnoDB,而且相关联的两个字段的类型,长度都必须一致,外键的好处是出入的数据必须是存在的,避免插入不必要的数据 

3.一次性插入多组数据

INSERT INTO 

[表名]([列名],[列名]) 

 VALUES

([列值],[列值])),

([列值],[列值])),

([列值],[列值]));

使用Navicat用上面的语句批量的插入数据一直不成功,不知道是什么原因,心luilui

4.ORDER BY

ORDER BY子句对查询结果按照一个或多个属性列的升序(ASC)或降序(DESC)排列,默认为升序

查询选修了3号课程的学生学号以及成绩,查询结果按成绩降序排列

SELECT Sno,Grade FROM SC WHERE Cno='3' ORDER BY Grade DESC;

5.GROUP BY 

GROUP BY子句将查询结果按某一列或多列的值文组,值相等的为一组

求各个课程号以及相应的选课人数

SELECT Cno,COUNT(Sno) FROM SC GROUP BY Cno

该语句对查询结果按Cno的值分组,所有具有相同Cno值的元祖为一组,然后对每一组用聚集函数COUNT进行计算

如果分组后还要求按一定的条件对这些组进行筛选,最终只输出满足指定条件的组,则可以使用HAVING短语指定筛选条件

查询平均成绩大于等于90分的学生学号和平均学号

SELECT Sno,AVG(Grade) FROM SC GROUP BY Sno HAVING AVG(Grade)>=90;

WHERE子句作用于基本表或视图,从中选择满足条件的元组,HAVING短语作用于组,从中选择满足条件的组。

6.字符匹配

%代表任意长度的字符串,a%b表示以啊开头,以b结尾的任意长度的字符串 

_代表任意单个字符,a_b表示以a开头,以b结尾的长度为3的任意字符串

7.外连接

SELECT 字段名称 FROM 表名1 LEFT|RIGHT JOIN 表名2 ON 表1.字段名 1=表名2.属性名 2;

8.嵌套连接

嵌套连接的子查询的SELECT语句中不能使用ORDER BY子句,其只对最终查询结果排序

9.多表连接

a)内连接 

SELECT 列名... FROM 表一 INNER JOIN 表二 ON 表1.外键=表2.主键

b)外连接,左连接能取得两个表中键值一致的记录以及只在左边表中存在的记录,右连接与之相反

SELECT 列名... FROM 表一 LEFT OUTER JOIN 表二 ON 表1.外键=表2.主键//左连接


SELECT 列名... FROM 表一 RIGHT OUTER JOIN 表二 ON 表1.外键=表2.主键//右连接

猜你喜欢

转载自blog.csdn.net/qq_40866897/article/details/82905987