使用MySQL
本章将学习如何连接和登陆到MySQL,如何执行MySQL语句,以及如何获得数据库和表的信息。
1 连接
step1.在Nacicat中建立用户,连接SQL。
step2.打开cmd,进入MySQL的安装目录下cd "C:\Program Files\MySQL\MySQL Workbench 8.0 CE"
step3.执行mysql -u root -p
2 选择,了解数据库和表
例如,使用crashcourse数据库,应该出入以下内容:USE crashcourse;
如果你不知道可以使用的数据库名时怎么办?这时,可以通过MySQL的SHOW命令来显示这些信息:SHOW DATABASES;
获取一个数据库内的表的列表操作:SHOW TABLES;
SHOW命令也可以用来显示表列中的具体规则:SHOW COLUMNS FROM customers;
(显示表:SELECT * FROM 表名
)
-
所支持的其他SHOW语句还有:
- 1)SHOW STATUS,用于显示广泛的服务器状态信息;
- 2)SHOW CREATE DATABASE和SHOW CREATE TABLE,分别来显示创建特定的数据库或表的MySQL语句;
- 3)SHOW GRANTS,用来显示授予用户的安全权限;
- 4)SHOW ERRORS和SHOW WARNINGS,用来显示服务器错误或警告消息。
3 使用数据处理函数
COUNT()
函数 —COUNT(*)
不管是否为空,都算入。COUNT(指定列)
空值不计入。
…
4 数据分组
通过上一节可知道SQL聚集函数可以用来汇总数据。所有计算都是在表的所有数据或特定WHERE子句中进行。但是如果要返回多个组别的统计那怎么办?
这里引入了分组概念,分组允许把数据分成多个逻辑组,以便能对每个组进行聚集运算。
4.1 创建分组
GROUP BY(列名)
按指定的某列排序并分组数据。而不是整个表计算一次。如果分组列中具有NULL值,那么NULL将作为一个分组返回。GROUP BY( )
必须出现在WHERE
之后,ORDER BY
之前。
例题:有一个courses 表 ,有: student (学生) 和 class (课程)。请列出所有超过或等于5名学生的课。
±--------±-----------+
| student | class |
±--------±-----------+
| A | Math |
| B | English |
| C | Math |
| D | Biology |
| E | Math |
| F | Computer |
| G | Math |
| H | Math |
| I | Math |
±--------±-----------+
解决办法:
SELECT class FROM courses
GROUP BY class
HAVING COUNT(DISTINCT STUDENT) >= 5;
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/classes-more-than-5-students
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
4.2 过滤分组
HAVING
.
特点:
- HAVING是个类似于WHERE的句子。但是WHERE不能过滤分组,它只能过滤指定的行。
- 在HAVING中可以使用函数。
- WHERE和HAVING可以同时使用。
也可以理解为WHERE在数据分组前进行过滤,HAVING在数据分组后进行过滤。
即—> WHERE
>GROUP BY
>HAVING
>ORDER BY
5 联结表
ANSI SQL 规范首选INNER JOIN
语法(内部/等值联结),虽然WHERE
句子可以简单实现。其格式为:
SELECT ---,---,----,FROM 表1 INNER JOIN 表2 ON 表1.某列=表2.某列
联结多个表时使用WHERE
与AND
的组合。
需要注意的是有时候多表联结查找比嵌套查询更加简捷。
创建高级联结:
自联结、自然联结和外部联结。
- 自联结
查询中需要的两个表实际上是相同的表。所以需要采用AS
为表取别名,如针对表A,....FROM A AS b1,A AS b2
自联结通常替代从相同表中检索数据时使用的子查询语句。速度有时相对较快。 - 自然联结
在SELECT
中手动选择需要检索出的列,然后用WHERE
将各表简单联结。 - 外部联结
外部联结它的联结包含了那些在关联表中没有关联行的行(两表的行数不同)。与INNER JOIN
类似,但是它的格式为:
SELECT ... FROM 某表 [LEFT|RIGHT] JOIN 某表
必须使用LEFT或RIGHT其中一个来定位句中的左侧,或右侧的一个表为基准联结。称为左外部联结和右外部联结。 - 使用带聚集函数的联结
聚集函数可以在SELECT
中使用,然后在FROM
中进行联结处理。
需要注意的是,当需要检索出包含0个或者没有数据的项则需要使用LEFT或RIGHT
外联结来处理。
6 组合查询 UNION
使用规则:
1.必须由两条或两条以上的SELECT语句组成,语句之间用关键字UNION
分隔。
2.UNION
中的每个查询必须包含相同的列,表达式或聚集函数(次序可以不同)。
UNION
默认自动除去重复的行,想要显示所有的匹配行需要使用UNION ALL
。
6 全文本搜索FULLTEXT()
可以在创建表时指定FULLTEXT
,或者在稍后指定。在索引之后,使用两个函数Match()
和Against()
执行全文本搜索。其中Match()
指定被搜索的列(要与FULLTEXT(列)
的列相同),Against()
指定要使用的搜索表达式。
与LIKE
不同的是:全文本搜索会对结果排序。具有较高等级的(文本中词靠前的)行,先返回。而且由于数据是索引的,全文本搜索还相当的快。
注意:
1.如果表中的行数少于三行,则使用全文本搜索不返回结果。
2.仅在MyISAM数据库引擎中支持全文本搜索。
6.1 使用查询扩展
例如要找出所有提到‘anvild’
的注释。只有一个注释包含词‘anvild’
,但你还想找出可能与你搜索有关的其他行,即使他们不包含词‘anvild’
。
SELECT 表.列 FROM 表 WHERE Match(表.列) Against(‘anvild’ WITH QUERY EXPANSION);
查询扩展可以极大的增加返回的行数。
6.2 布尔文本搜索
可以支持更多的细节,比如指定要排斥的词,指定排列的等级(但是不按等级值降序排序返回行),表达式分组等。
Match(某列) + Against(‘需要匹配的内容 匹配细节’ IN BOOLEAN MODE)
匹配细节是由全文本布尔操作符(具体省略)来控制。