mysql中连接查询、表的管理、视图、字符集和校对集知识点笔记

#mysql中连接查询、表的管理、视图、字符集和校对集知识点笔记

/*
UNION用法
合并查询的结果(取select结果的并集)
对于重复的行,去掉
如果不去重复,可以用UNION ALL
UNION的要求:
各select查出的列数一致
如果子句中用了ORDER BY LIMIT,那么子句要用括号()包起来
如果子句只用ORDER BY没有LIMIT,ORDER BY被优化掉,不起作用

*/

/*
左连接,右连接,内连接
SELECT t1.列, t2.列 FROM
t1 LEFT/RIGHT/INNER JOIN t2
ON t1.列 = t2.列
WHERE
......
*/

/*
左连接与右连接可以相互转化
a LEFT JOIN b == b RIGHT JOIN a
*/

/*
内连接:INNER JOIN
左右连接的交集
两张表能相互匹配上的行
*/

/*
表的管理---->列的增删改
给表增加列
ALTER TABLE 表名 ADD 列声明[AFTER 列名/FIRST]

修改表的列
ALTER TABLE 表名 CHANGE 待修改列名 列声明

删除表的列
ALTER TABLE 表名 DROP 列名
*/

/*
视图 VIEW
视图是一张虚拟的表
没有真实的数据存在,只是与表的一种查询产生的关系
语法:
CREATE [ALGORITHM = MERGE/TEMPTABLE/UNDEFINED] VIEW 视图名 AS SELECT语句;
MERGE:当使用视图时,会把查询视图的语句和创建视图的语句合并起来,形成一条语
句,最后再从基表中查询

TEMPTABLE:当使用视图时,会把创建视图的语句的查询结果当成一张临时表,再从临时表中进行筛选

UNDEFINED:未定义,自动,让系统帮你选
*/

/*
mysql的字符集设置非常灵活
可以设置服务器默认字符集
数据库默认字符集
表默认字符集
列字符集
如果某一个级别没有指定字符集,则继承上一级

以表声明为utf8为例
存储的数据在表中,最终是utf8

*/

#mysql数据库中有字符集转换器

#查看字符集
SHOW VARIABLES LIKE '%charact%';

/*
1.告诉服务器我给你发送的数据是什么编码的?character_set_client


2.告诉转换器,转换成什么编码?character_set_connection


3.查询的结果用什么编码?character_set_results

如果以上3者都为字符集N,则可以简写为set names N;


*/

#
SHOW CHARACTER SET LIKE '%latin%';

/*
什么时候将会乱码?
character_set_client声明与实事不符
character_set_results与客户端页面不符的时候

什么时候将会丢失数据?
character_set_connection和服务器的字符集
比character_set_client小的时候

*/

#排序必须按某种规则排,这个规则就是校对集
/*
校对集:指字符集的排序规则
一种字符集下可以有一个或多个校对集(即一种字符集可以有一个或多个排序规则)

以utf8为例,我们默认使用utf8_general_ci规则,也可
以按二进制来排,utf8_bin

怎样声明校对集
CREATE TABLE 表名(列名 数据类型)charset utf8 COLLATE utf8_general_ci;

注意:声明的校对集必须是字符集合法的校对集

*/

#查看校对集
SHOW COLLATION;
SHOW COLLATION LIKE '%utf8%';


#查看数据库支持的所有字符集
show char set;
show character set;
#
SHOW CHARACTER SET;
SHOW CHARACTER SET LIKE '%utf8%';