MySQL查询语句入门

目录

前言:

正文 :

1.SELECT * FROM 表名; 

2.SELECT  列名1,列名2,列名3    FROM 表名;

3.SELECT *  FROM 表名 WHERE 列名= '条件';

4.SELECT 列名1,列名2  FROM 表名 WHERE 列名= '条件';

5.JOIN的使用

5.1.1 INNER JOIN 可简写为JOIN ,在没有条件约束的情况下(ON  条件)代表表1和表2 笛卡尔积

5.1.2 INNER JOIN可简写为JOIN,在有约束条件(ON '条件')时,两个表中符合条件的一一对应起来(如果一个表中一条数据有这个元素,另一个表中没有这个元素,那么就这条数据不显示---5.1.3验证)

5.2 LEFT JOIN 在有约束条件(ON '条件')时,两个表中符合条件的一一对应起来 ,同时左边的表所有的记录都保留,哪怕是与右表条件不符合的记录,而右表中只有符合条件的保留

5.3 RIGHT JOIN 在有约束条件(ON '条件')时,两个表中符合条件的一一对应起来 ,同时右边的表所有的记录都保留,哪怕是与左表条件不符合的记录,而左表中只有符合条件的保留

6.UNION的使用

7.COUNT() 求和的使用

8.ORDER BY 排序的使用

9.CASE WHEN  ELSE END的使用

10.GROUP BY的使用

11.SUBSTR和CONCAT的使用

12.CAST和CONCAT的使用

13.LIMIT的使用

等有时间了接着写


前言:

本文操作环境:MySQL Workbench 

在MySQL中建一个test项目

test项目下面建三个表,一个是course,一个是user,一个是select_course

可以填上一些数据:

1.user表:学生用户表:学生id,姓名,年龄,国家

2.course表:课程表:课程id,课程名称,老师,地点

3.select_course表:选课表:选课行为id,学生id(user表的主键,select_course表的外键),课程id(课程表的主键,select_course表的外键)

再介绍下查询语义下:基础的关键字和特殊符

SELECT后面接列名,或者 *,或者其它 ,表示查询后返回的结果有哪些列
FROM后面接表名,表示从哪个表里选择
WHERE后面接条件,表示要符合什么样子的条件才会被选出来

正文 :

1.SELECT * FROM 表名; 

代表从某个表中查询所有列的数据

举例:course是test下面的一个表名

SELECT * FROM course;

执行语句:点击黄色的闪电按钮

结果:

2.SELECT  列名1,列名2,列名3    FROM 表名;

查询某个表中的某一列数据

SELECT NAME FROM course;

执行后结果:只显示course表中的NAME一列的所有数据

 查询course表中某两列数据,用英文输入下的逗号隔开,其他的依次类推

SELECT NAME,TEACHER FROM course;

执行结果:显示course表中NAME,TEACHER两列数据

 

3.SELECT *  FROM 表名 WHERE 列名= '条件';

查询某个 表 中某 列数据 符合 某个条件 的所有列数据

SELECT * FROM course WHERE NAME='JAVA';

执行后结果:显示NAME为‘JAVA’的这一条数据,包括JAVA的所有其他属性(列)值

4.SELECT 列名1,列名2  FROM 表名 WHERE 列名= '条件';

查询某个 表 中某 列数据 符合 某个条件 的列1数据,列2数据

SELECT NAME FROM course WHERE NAME='JAVA';

​

执行后结果:显示NAME为‘JAVA’的这一条数据,包括JAVA的NAME属性值

5.JOIN的使用

JOIN 是关键字,有三种JOIN:INNER JOIN, LEFT JOIN ,  RIGHT JOIN

5.1.1 INNER JOIN 可简写为JOIN ,在没有条件约束的情况下(ON  条件)代表表1和表2 笛卡尔积

代码:

SELECT * FROM user JOIN course;

结果:用户红红对应四个课程,每个用户都对应4个课程

5.1.2 INNER JOIN可简写为JOIN,在有约束条件(ON '条件')时,两个表中符合条件的一一对应起来(如果一个表中一条数据有这个元素,另一个表中没有这个元素,那么就这条数据不显示---5.1.3验证)

代码:表select_course 与表 user通过相同的idUSER连接起来,由于SELECT后面接的是 *,所以显示两个表中的所有列。

SELECT * FROM select_course JOIN user ON user.idUSER = select_course.idUSER;

结果:select_course表中的idUSER对应user表中的idUSER,即红红的idUSER是1,通过select_course表可以看出,idUSER是1的人选了两门课,课程id分别是2和3 

本来这些表里的信息是独立的,但是现在我们知道红红选了两门课,课程id分别是2和3,那么我们怎么找出红红选的两门课的课程名称呢 

接下来,我们来找出红红选的两门课的课程名称,课程名称在course表中,我们需要在刚刚查找的基础上,连接course表,通过idCOURSE来连接 

代码:由于select_course表和user表join后都有idUSER,会报重复idUSER的错误,所以之前的表中select后的数据进行了筛选,选择了select_course的所有列,以及user表的NAME列

接着把这张表重命名为A表,与course表通过相同的idCOURSE相连

SELECT * FROM 
(SELECT select_course.*,user.NAME FROM select_course JOIN user ON user.idUSER = select_course.idUSER) A 
JOIN 
course 
ON A.idCOURSE = course.idCOURSE;

结果:显示了A表和course表的所有列的数据,我们可以成功地看到,idUSER为1的红红,选了idCOURSE为2和3的两门课,分别是计算机组成原理和软件工程,老师都是WANG,上课地点都在202 

由于我们不想看到很多重复列数据,为了提高看的效率,我们只要学生姓名,选择的课程名称,教师名称,上课地点

代码:在上面的基础上,把SELECT 后面的*(所有列数据)改为  A.NAME,course.NAME,course.TEACHER,course.LOCATION,即可

SELECT A.NAME,course.NAME,course.TEACHER,course.LOCATION FROM 
(SELECT select_course.*,user.NAME FROM select_course JOIN user ON user.idUSER = select_course.idUSER) A 
JOIN 
course 
ON A.idCOURSE = course.idCOURSE;

结果:

5.2 LEFT JOIN 在有约束条件(ON '条件')时,两个表中符合条件的一一对应起来 ,同时左边的表所有的记录都保留,哪怕是与右表条件不符合的记录,而右表中只有符合条件的保留

要给大家讲清楚这种情况,还需要在user表中新增一条数据,现在多了一个珍珍,这个珍珍并没有在select_course中选课。

INSERT INTO `user` (`idUSER`, `NAME`, `AGE`, `NATION`) VALUES ('6', '珍珍', '18', 'CHINA');

结果:

接着我们看看通过相同的idUser连user表和select_course表,这个时候,我们把user表放在 LEFT JOIN 左边,select_course表放在LEFT JOIN右边,这样的左连接查询应该可以查出所有人选了哪些课,如果这个入没有选课,也会显示出来,后面选课记录为空

代码:

SELECT user.idUSER,user.NAME,select_course.idCOURSE FROM user LEFT JOIN select_course ON user.idUSER = select_course.idUSER;

结果:我们显示user表中的idUSER和 NAME,以及select_course表的idCOURSE,我们可以看出,完全符合代码预期,红红选了课程2和课程3,艾艾选了课程1和课程3,珍珍什么都没选,课程id那里为null

因为说到要与INNER JOIN对比,那么我们用INNER JOIN 试一试,预期结果应该是不显示珍珍,因为珍珍没有选课,不符合连接条件,其他的都和上面一样

代码:

SELECT user.idUSER,user.NAME,select_course.idCOURSE FROM user INNER JOIN select_course ON user.idUSER = select_course.idUSER;

结果:

由此可见INNER JOIN 与 LEFT JOIN的区别:

INNER JOIN:符合条件的记录连接到一起,如果不符合,则记录不显示,两表皆是

LEFT JOIN: 符合条件的记录连接到一起,如果左表不符合,左表的记录仍然保留,但是连接的右表那一条记录为null,但是如果右表某条记录不符合,则不显示

RIGHT JOIN:符合条件的记录连接到一起,如果右表不符合,左表的记录仍然保留,但是连接的左表那一条记录为null,但是如果左表某条记录不符合,则不显示

5.3 RIGHT JOIN 在有约束条件(ON '条件')时,两个表中符合条件的一一对应起来 ,同时右边的表所有的记录都保留,哪怕是与左表条件不符合的记录,而左表中只有符合条件的保留

代码:由于user表中的珍珍没有选课,其他的都选了两门课,所以这次把user表作为右表,select_course表作为左表,预期结果应该是虽然珍珍没有选课,所以不符合user.idUSER = select_course.idUSER的条件,但是在RIGHT JOIN中,右表无论是否符合条件都会进行连接,保留所有行记录。

SELECT user.idUSER,user.NAME,select_course.idCOURSE FROM select_course RIGHT JOIN user ON user.idUSER = select_course.idUSER;

结果:如预期所示,保留了珍珍的idUSER,NAME,在select_course.idUSER一列数值为空(null)

 

如果把user作为左表的话,应该效果和INNER JOIN一样

代码: select_course作为右表,user作为左表,左表只有符合条件的记录才会显示,所以珍珍应该不会显示

SELECT user.idUSER,user.NAME,select_course.idCOURSE FROM user RIGHT JOIN select_course ON user.idUSER = select_course.idUSER;

结果:如期

6.UNION的使用

7.COUNT() 求和的使用

COUNT()是SQL中的函数方法,计算总和,()里可以填*,也可以填某个列名,一般不推荐COUNT(*)的写法,会降低效率,主要是计算某一列出现的个数

代码:先看看COUNT(*)这种不推荐的写法,它用来计算表中一共有多少条记录

SELECT COUNT(*) FROM user;

结果:列名就是COUNT(*) ,user表共有六个人,是对的,前面我们加上了珍珍,总共六个人。当然我们也可以对它进行重命名(重命名下面讲)

 

代码:计算user表中有多少个idUSER,同时将计算的结果命名为 TOTAL_NUM

SELECT COUNT(idUSER) AS TOTAL_NUM FROM user;

结果:

 

8.ORDER BY 排序的使用

9.CASE WHEN  ELSE END的使用

10.GROUP BY的使用

11.SUBSTR和CONCAT的使用

12.CAST和CONCAT的使用

13.LIMIT的使用

 

等有时间了接着写

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值