vlambda博客
学习文章列表

Mysql:一文带你看懂数据库查询高级用法

老规矩,首先写出本文用到的两个表格,第一个表格为学生信息student_info,第二个表格为学生家庭状况student_family
表1 student_info
表2 student_family
Mysql:一文带你看懂数据库查询高级用法

1.子查询

子查询有一个重要运用,就是通过子查询连接两个关系表
1. 查找数学86分和65分的同学的国家:select country from student_family in (select id from student_info where math=(86,65));     注:在WHERE子句中使用子查询(如这里所示),应该保证SELECT语句具有与WHERE子句中相同数目的列。通常,子查询将返回单个并且与单个列匹配,但如果需要也可以使用多个列。子查询通常用IN连接而不是where;
2.下面再来看一条select语句的子句,select name ,(xxx) from student_family;    注:这种查询方式,是对每一行再进行了一次select,在select里嵌套的select一般必须是聚合计算;

2.联接查询

1.内联接,又称为等值联接,是通过等值的方式将两个表链接在一起:select student_info.id,student_info.name,from student_info,student_family where student_info.id=student_family.id;    连接通常是做一个笛卡尔积,需要通过where进行过滤;
2.内连接还有另一种书写方式,这种方式是推荐的书写方式:select student_info.id,student_info.name,from student_info inner jion student_family onstudent_info.id=student_family.id;   通过inner jion 和on关键字来达到同样的目的;
3.自联结就是将一个表自己进行连接,假如我们想要知道和amy相同年龄的人所在的国家:select country from student_family AS s1,student_family AS s2 where s1.age=s2.age and s2.name='amy';  这条语句用到了两个知识点:自联结为了区分两个相同的表,使用了表别名(表别名仅用于区分表格,不作为返回字段),第二个知识点是自联结语句通常比子查询性能要高很多;
4.左外联接:左外链接是以左边的表格作为所有检索数据全部显示,右边表格只显示符合条件的,不符合的以null显示;举例:select student_info.name from student_info left join student_family on student_info.name=student_family.name;    左外联接采用on关键字和left join来达到查询;
注:什么是外连接?https://zhidao.baidu.com/question/338244729.html

3.组合查询

1.使用uion关键字,将两个查询语句的结果采用"或"的形式合成一个,默认去除重复行;
2.如果相对采用uion的多条语句结果进行排序,应该把order by放在最后一条查询语句结尾;

4.全文本搜索

1.全文本搜索通常在创建表格的时候添加,使用"FULLTEXT()"来建立对某个关键字的全文本搜索,数据库会在底层维护一个数据结构用来记录索引。
Mysql:一文带你看懂数据库查询高级用法
2.使用索引进行查询的方法:这里match函数表示使用索引进行搜索,against表示匹配的内容;
Mysql:一文带你看懂数据库查询高级用法
3.match()和against()函数也可以作为结果显示出来,输入如下语句:
Mysql:一文带你看懂数据库查询高级用法
结果如下,可以看出match函数返回的是匹配的内容,against()函数会返回一个值,这个值根据所包含的关键词的位置靠前程度,关键词的数量增大:
Mysql:一文带你看懂数据库查询高级用法
4.全文本查询的布尔操作,查找有heavy而没有以rope开头的所有词
Mysql:一文带你看懂数据库查询高级用法
再举几个例子:
Mysql:一文带你看懂数据库查询高级用法
Mysql:一文带你看懂数据库查询高级用法
Mysql:一文带你看懂数据库查询高级用法

5.插入数据

1.插入操作如下,要把每一个值都列出来,如果没有值或不想填,必须用NULL进行代替,主键也需要填null,这时数据库系统会自动采用自增的方式填补主键;
Mysql:一文带你看懂数据库查询高级用法
2.上述操作非常不安全,一般是禁止使用的,因为这种插入操作高度依赖用户插入顺序和表格顺序的一致,不具有可扩展性,比如表格列进行了修改,则语句失效,应采用烈名的方式进行插入,如下所示,下图中,忽略的主键id行,因为系统会自增:
Mysql:一文带你看懂数据库查询高级用法
3.如果插入时想要省略某列,必须符合以下条件:
Mysql:一文带你看懂数据库查询高级用法
4.使用insert 和select语句,从别的表格中插入,记得插入时主键不可重复:
 
Mysql:一文带你看懂数据库查询高级用法
Mysql:一文带你看懂数据库查询高级用法

6.更新和删除

1.更改语句非常简单,采用UPDATE 关键字表示更改某个表,使用set关键字和键值的方式来修改数据,最后以where条件结束。但是一定要谨慎,如果条件写错了,可能将整个数据库都改了:
Mysql:一文带你看懂数据库查询高级用法
2.更新数据时,假如更新某一条出错了,则数据回滚到插入语句之前的状态,而不是停留在当前状态;
3.删除语句:使用DELETE关键字和where:
Mysql:一文带你看懂数据库查询高级用法

7.创建新表

1.创建表格:有以下注意事项:每一列都必须指定null或者not null(默认为null);其次要指定主键,主键列不能为null;
Mysql:一文带你看懂数据库查询高级用法
2.关于自增,将主键设为自增通常是一个好选择,如果此时你要插入一个指定的特殊主键,下一个自增数会从这个插入的开始;
3.有时候自增之后不知道现在值是多少了,此使可以使用函数:
Mysql:一文带你看懂数据库查询高级用法
4.使用DEFAULT插入默认值: