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 |
+-------+--------+------+------+-------+-------+-----+-------+
自身连接:一个表与自己进行连接
需要给表起别名以示区别,且必须使用前缀
//查询每门课的间接先修课
mysql> select first.cno,second.cpno from course first,course second where first.cpno=second.cno;
+-----+------+
| cno | cpno |
+-----+------+
| | |
| | |
| | NULL |
| | NULL |
| | |
+-----+------+
rows in set (0.05 sec) //查询没门课先修课的名称
mysql> select FIRST.cno,FIRST.cname,FIRST.cpno,SECOND.cname from course FIRST,course SECOND where FIRST.cpno=SECOND.cno;
+-----+--------------+------+--------------+
| cno | cname | cpno | cname |
+-----+--------------+------+--------------+
| | 数据库 | | 数据结构 |
| | 信息系统 | | 数据库 |
| | 操作系统 | | 数据处理 |
| | 数据结构 | | C语言 |
| | C语言 | | 数据处理 |
+-----+--------------+------+--------------+
多表连接:两个以上的表进行连接
mysql> select student.sno,sname,cname,grade from student,sc,course where student.sno=sc.sno and sc.cno=course.cno;
+-------+--------+--------------+-------+
| sno | sname | cname | grade |
+-------+--------+--------------+-------+
| | 李勇 | 数据库 | |
| | 刘军 | 数据库 | |
| | 李勇 | 高等数学 | |
| | 刘晨 | 高等数学 | |
| | 张立 | 高等数学 | |
| | 张三 | 高等数学 | |
| | 刘军 | 高等数学 | |
| | 李勇 | 信息系统 | |
| | 刘晨 | 信息系统 | |
| | 张立 | 信息系统 | NULL |
| | 刘军 | 信息系统 | |
| | 张立 | 操作系统 | NULL |
| | 张三 | 操作系统 | NULL |
| | 刘军 | 操作系统 | |
| | 李四 | 操作系统 | NULL |
| | 刘军 | 数据结构 | NULL |
| | 李四 | 数据结构 | NULL |
| | 刘军 | 数据处理 | NULL |
| | 刘军 | C语言 | |
+-------+--------+--------------+-------+
排序:
select [ ] from <表名> order by <列名> [desc/asc];
mysql> select sno,sname from student order by sno; //默认为升序
+-------+--------+
| sno | sname |
+-------+--------+
| | bgg |
| | 山寨 |
| | 李勇 |
| | 刘晨 |
| | 王敏 |
| | 张立 |
| | 张三 |
| | 刘军 |
| | 芙蓉 |
| | 李四 |
+-------+--------+ mysql> select sno,sname from student order by sno asc; //asc 修饰为升序
+-------+--------+
| sno | sname |
+-------+--------+
| | bgg |
| | 山寨 |
| | 李勇 |
| | 刘晨 |
| | 王敏 |
| | 张立 |
| | 张三 |
| | 刘军 |
| | 芙蓉 |
| | 李四 |
+-------+--------+
rows in set (0.05 sec) mysql> select sno,sname from student order by sno desc; //desc 修饰为降序
+-------+--------+
| sno | sname |
+-------+--------+
| | 李四 |
| | 芙蓉 |
| | 刘军 |
| | 张三 |
| | 张立 |
| | 王敏 |
| | 刘晨 |
| | 李勇 |
| | 山寨 |
| | 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 '' and '';
+-------+--------+------+------+-------+
| sno | sname | ssex | sage | sdept |
+-------+--------+------+------+-------+
| | 山寨 | 男 | | CS |
| | 李勇 | 男 | | CS |
| | 刘晨 | 女 | | IS |
| | 王敏 | 女 | | MA |
| | 张立 | 男 | | IS |
| | 张三 | 男 | | CS |
| | 刘军 | 男 | | 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模糊查询(LIKE)关键字:
% 替代一个或多个字符;
_ 仅替代一个字符;
[charlist] 字符列中的任何单一字符;
[!charlist] 或 [^charlist] 不在字符列中的任何单一字符;
//查询sno以95开头的学生信息
mysql> select * from student where sno like '95%';
+-------+--------+------+------+-------+
| sno | sname | ssex | sage | sdept |
+-------+--------+------+------+-------+
| | 李勇 | 男 | | CS |
| | 刘晨 | 女 | | IS |
| | 王敏 | 女 | | MA |
| | 张立 | 男 | | IS |
| | 张三 | 男 | | CS |
+-------+--------+------+------+-------+
rows in set (0.05 sec) //查询sno以01结尾的学生信息
mysql> select * from student where sno like '%01';
+-------+--------+------+------+-------+
| sno | sname | ssex | sage | sdept |
+-------+--------+------+------+-------+
| | bgg | M | | CS |
| | 山寨 | 男 | | CS |
| | 李勇 | 男 | | CS |
| | 刘军 | 男 | | IS |
| | 李四 | 男 | | EN |
+-------+--------+------+------+-------+
rows in set (0.05 sec)
//查询sno以01结尾的学生信息
//not like
mysql> select * from student where sno not like '%01';
+-------+--------+------+------+-------+
| sno | sname | ssex | sage | sdept |
+-------+--------+------+------+-------+
| 95002 | 刘晨 | 女 | 19 | IS |
| 95003 | 王敏 | 女 | 19 | MA |
| 95004 | 张立 | 男 | 20 | IS |
| 95005 | 张三 | 男 | 23 | CS |
| 96004 | 芙蓉 | 女 | 32 | CH |
+-------+--------+------+------+-------+
IN操作符:
IN操作符允许在WHERE子句中规定多个值;
// 查询 sdept为MA,CS的信息
mysql> select * from student where sdept in ('MA','CS');
+-------+--------+------+------+-------+
| sno | sname | ssex | sage | sdept |
+-------+--------+------+------+-------+
| | bgg | M | | CS |
| | 山寨 | 男 | | CS |
| | 李勇 | 男 | | CS |
| | 王敏 | 女 | | MA |
| | 张三 | 男 | | CS |
+-------+--------+------+------+-------+
2018-05-01 20:24:33
mysql/mariadb学习记录——查询的更多相关文章
- mysql/mariadb学习记录——查询2
Alias——使用一个列名别名AS 关键字: mysql> select sno as studentId,sname as studentName from student; +------- ...
- mysql/mariadb学习记录——查询3(AVG、SUM、COUNT)函数
AVG() 求平均数函数: //求emp表中的sal属性的平均值 mysql> select avg(sal) as salAverage from emp; +-------------+ | ...
- mysql/mariadb学习记录——连接查询(JOIN)
//本文使用的数据表格//persons表中id_p为主键//orders表中id_o为主键,id_p为外键参考persons表中的id_p mysql> select * from perso ...
- mysql/mariadb学习记录——limit
在mysql/mariadb 中可以用limit来限制查询的条数.例子如下: 1.limit后加一个参数 limit n: //选中查询所有结果中的前两条记录并返回 mysql> ; +---- ...
- mysql/mariadb学习记录——创建删除数据库、表的基本命令
查看已有的数据库: mysql> show databases; +--------------------+ | Database | +--------------------+ | inf ...
- MySQL/MariaDB数据库的查询缓存优化
MySQL/MariaDB数据库的查询缓存优化 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL架构 Connectors(MySQL对外提供的交互接口,API): ...
- MySQL/MariaDB学习笔记——mysql.user表中存在多个root用户问题理解
mysql.user表中存在多个root用户问题 问题描述:使用 SELECT host,user FROM mysql.user 发现mysql.user表中存在三个root用户,如下 持着对中几个 ...
- MariaDB学习记录
MariaDB的学习 MariaDB的学习 关于MariaDB的历史,不再概述 下面是mariadb的官网:https://mariadb.com/ 同样的,MariaDB一样有连接java的jar包 ...
- mysql的学习记录
1 MySQL -h localhost -u UserName -p Password-h不写,默认为localhost注意:最好先MySQL -h localhost -u UserName -p ...
随机推荐
- 10个经典的Android开源应用项目
Android开发又 将带来新一轮热潮,很多开发者都投入到这个浪潮中去了,创造了许许多多相当优秀的应用.其中也有许许多多的开发者提供了应用开源项目,贡献出他们的智慧和 创造力.学习开源代码是掌握技术的 ...
- 格式化字符串漏洞利用实战之 0ctf-easyprintf
前言 这是 0ctf 的一道比较简单的格式化串的题目. 正文 逻辑非常简单 do_read 可以打印内存地址的数据,可用来 泄露 got. leave 格式化字符串漏洞. printf(s) 直接调用 ...
- JSON学习笔记-3
JSON 对象 1.对象语法 JSON 对象使用在大括号({})中书写. 对象可以包含多个 key/value(键/值)对. key 必须是字符串,value 可以是合法的 JSON 数据类型(字符串 ...
- python学习手册中的一些易忘的点(第4部分)
1.python函数高聚合低耦合1)对于输入使用参数并且对于输出使用return2)只有在真正必要的情况下使用全局变量3)不要改变可变类型的参数,除非调用者希望这样做4)每个函数都应该有一个单一的.统 ...
- 开源一款私藏Management Studio插件,ProjkyAddin,送给所有使用SQLServer的园友们
ProjkyAddin 是一款Management Studio 插件,安装包才500多kb,兼容SSMS 2005.SSMS 2008.SSMS 2008 R2.SSMS 2012.SSMS 201 ...
- Redis学习---Redis操作之其他操作
全局有效的其他操作 save 强制将内存/缓存中的key刷到硬盘上 ------------------------------------------------------------------ ...
- Hadoop HBase概念学习系列之RowKey设计(二十九)
HBase里的RowKey设计,分为随机查询的RowKey设计和连续查询的RowKey设计.
- Hadoop HBase概念学习系列之HBase里的长表VS宽表VS窄表(十五)
有时候啊,HBase表的设计方案通常,还会考虑如下一些因素,当然,这只是考虑范围里的部分呢. 更多的行还是更多的版本?后者使用了HBase自带的功能.但是需要在列簇中定义最大版本数,这样做可能有风险. ...
- Log Structured Merge Trees (LSM)
1 概念 LSM = Log Structured Merge Trees 来源于google的bigtable论文. 2 解决问题 传统的数据库如MySql采用B+树存放数据,B ...
- D:\hunting2014\小题目\字符串倒序
#include<stdio.h>#include<string.h> char *revert(char *str){ char temp; char *p = str; c ...