mysql/mariadb学习记录——连接查询

Posted 这个昵称得改

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql/mariadb学习记录——连接查询相关的知识,希望对你有一定的参考价值。

连接查询:同时设计两个及以上的表的查询

连接条件或连接谓词:用来连接两个表的条件一般格式:

[<表名1>]<列名1> <比较运算符> [<表名2>]<列名2>

[<表名1>]<列名1> between [<表名2>]<列名2> and [<表名2>]<列名3>

等值连接:

连接运算符为=

查询每个学生以及选修课程的情况

mysql> select student.*, sc.* from student,sc where student.sno=sc.sno;
+-------+--------+------+------+-------+-------+-----+-------+
| sno   | sname  | ssex | sage | sdept | sno   | cno | grade |
+-------+--------+------+------+-------+-------+-----+-------+
| 95001 | 李勇    | 男   |   20 | CS    | 95001 | 1   |    92 |
| 95001 | 李勇    | 男   |   20 | CS    | 95001 | 2   |    85 |
| 95001 | 李勇    | 男   |   20 | CS    | 95001 | 3   |    88 |
| 95002 | 刘晨    | 女   |   19 | IS    | 95002 | 2   |    90 |
| 95002 | 刘晨    | 女   |   19 | IS    | 95002 | 3   |    80 |
| 95004 | 张立    | 男   |   20 | IS    | 95004 | 2   |    65 |
| 95004 | 张立    | 男   |   20 | IS    | 95004 | 3   |  NULL |
| 95004 | 张立    | 男   |   20 | IS    | 95004 | 4   |  NULL |
| 95005 | 张三    | 男   |   23 | CS    | 95005 | 2   |    84 |
| 95005 | 张三    | 男   |   23 | CS    | 95005 | 4   |  NULL |
| 96001 | 刘军    | 男   |   30 | IS    | 96001 | 1   |    87 |
| 96001 | 刘军    | 男   |   30 | IS    | 96001 | 2   |    80 |
| 96001 | 刘军    | 男   |   30 | IS    | 96001 | 3   |    90 |
| 96001 | 刘军    | 男   |   30 | IS    | 96001 | 4   |    95 |
| 96001 | 刘军    | 男   |   30 | IS    | 96001 | 5   |  NULL |
| 96001 | 刘军    | 男   |   30 | IS    | 96001 | 6   |  NULL |
| 96001 | 刘军    | 男   |   30 | IS    | 96001 | 7   |    86 |
| 97001 | 李四    | 男   |   26 | EN    | 97001 | 4   |  NULL |
| 97001 | 李四    | 男   |   26 | EN    | 97001 | 5   |  NULL |
+-------+--------+------+------+-------+-------+-----+-------+

排序:

select [ ] from <表名> order by <列名> [desc/asc];

mysql> select sno,sname from student order by sno; //默认为升序
+-------+--------+
| sno   | sname  |
+-------+--------+
| 12001 | bgg    |
| 94001 | 山寨   |
| 95001 | 李勇   |
| 95002 | 刘晨   |
| 95003 | 王敏   |
| 95004 | 张立   |
| 95005 | 张三   |
| 96001 | 刘军   |
| 96004 | 芙蓉   |
| 97001 | 李四   |
+-------+--------+

mysql> select sno,sname from student order by sno asc; //asc 修饰为升序
+-------+--------+
| sno   | sname  |
+-------+--------+
| 12001 | bgg    |
| 94001 | 山寨   |
| 95001 | 李勇   |
| 95002 | 刘晨   |
| 95003 | 王敏   |
| 95004 | 张立   |
| 95005 | 张三   |
| 96001 | 刘军   |
| 96004 | 芙蓉   |
| 97001 | 李四   |
+-------+--------+
10 rows in set (0.05 sec)

mysql> select sno,sname from student order by sno desc; //desc 修饰为降序
+-------+--------+
| sno   | sname  |
+-------+--------+
| 97001 | 李四   |
| 96004 | 芙蓉   |
| 96001 | 刘军   |
| 95005 | 张三   |
| 95004 | 张立   |
| 95003 | 王敏   |
| 95002 | 刘晨   |
| 95001 | 李勇   |
| 94001 | 山寨   |
| 12001 | bgg    |
+-------+--------+

mysql> select sno,sname from student order by sno desc,sname asc; //先按sno降序 再按sname升序
+-------+--------+
| sno   | sname  |
+-------+--------+
| 97001 | 李四    |
| 96004 | 芙蓉    |
| 96001 | 刘军    |
| 95005 | 张三    |
| 95004 | 张立    |
| 95003 | 王敏    |
| 95002 | 刘晨    |
| 95001 | 李勇    |
| 94001 | 山寨    |
| 12001 | bgg    |
+-------+--------+
10 rows in set (0.05 sec)

 

选择的between操作(在mysql/mariadb中是闭区间):

select * from <表名>  where <列名> between ‘a‘ and ‘b‘;

mysql> select * from student where sno between 94001 and 96001;
+-------+--------+------+------+-------+
| sno   | sname  | ssex | sage | sdept |
+-------+--------+------+------+-------+
| 94001 | 山寨   | 男   |   29 | CS    |
| 95001 | 李勇   | 男   |   20 | CS    |
| 95002 | 刘晨   | 女   |   19 | IS    |
| 95003 | 王敏   | 女   |   19 | MA    |
| 95004 | 张立   | 男   |   20 | IS    |
| 95005 | 张三   | 男   |   23 | CS    |
| 96001 | 刘军   | 男   |   30 | IS    |
+-------+--------+------+------+-------+

//not between and

mysql> select * from student where sno not between ‘94001‘ and ‘96001‘;
+-------+--------+------+------+-------+
| sno   | sname  | ssex | sage | sdept |
+-------+--------+------+------+-------+
| 12001 | bgg    | M    | 26   | CS    |
| 96004 | 芙蓉    | 女   | 32   | CH    |
| 97001 | 李四    | 男   | 26   | EN    |
+-------+--------+------+------+-------+

mysql模糊查询:

% 替代一个或多个字符;

_ 仅替代一个字符;

[charlist] 字符列中的任何单一字符;

[!charlist] 或 [^charlist] 不在字符列中的任何单一字符; 

//查询sno以95开头的学生信息
mysql> select * from student where sno like 95%;
+-------+--------+------+------+-------+
| sno   | sname  | ssex | sage | sdept |
+-------+--------+------+------+-------+
| 95001 | 李勇   | 男   |   20 | CS    |
| 95002 | 刘晨   | 女   |   19 | IS    |
| 95003 | 王敏   | 女   |   19 | MA    |
| 95004 | 张立   | 男   |   20 | IS    |
| 95005 | 张三   | 男   |   23 | CS    |
+-------+--------+------+------+-------+
5 rows in set (0.05 sec)

//查询sno以01结尾的学生信息
mysql> select * from student where sno like %01;
+-------+--------+------+------+-------+
| sno   | sname  | ssex | sage | sdept |
+-------+--------+------+------+-------+
| 12001 | bgg    | M    |   26 | CS    |
| 94001 | 山寨   | 男   |   29 | CS    |
| 95001 | 李勇   | 男   |   20 | CS    |
| 96001 | 刘军   | 男   |   30 | IS    |
| 97001 | 李四   | 男   |   26 | EN    |
+-------+--------+------+------+-------+
5 rows in set (0.05 sec)

2018-05-01  20:24:33



























以上是关于mysql/mariadb学习记录——连接查询的主要内容,如果未能解决你的问题,请参考以下文章

mysql/mariadb学习记录——查询2

mysql/mariadb学习记录——查询3

mysql/mariadb学习记录——limit

如何使用自定义连接器正确终止 Django 中的 MySQL/MariaDB 连接

入门:如何从Linux命令行直接执行MySQL/MariaDB查询

数据库MySQL/mariadb知识点——查询缓存