1.MySQL查询字段区不区分大小写?
MySQL默认的字符检索策略:utf8_general_ci,表示不区分大小写。
1.1 解决方案一
可以使用utf8_general_cs,表示区分大小写,也可以使用utf8_bin,表示二进制比较,同样也区分大小写 。
#注意:
在Mysql5.6.10版本中,不支持utf8_genral_cs
>> 创建表时,直接设置表的collate属性为utf8_general_cs或者utf8_bin;
- 创建表:
CREATE TABLE testt(
id INT PRIMARY KEY,
name VARCHAR(32) NOT NULL
) ENGINE = INNODB COLLATE =utf8_bin;
>> 如果已经创建表,则直接修改字段的Collation属性为utf8_general_cs或者utf8_bin。
-- 修改表结构的Collation属性
ALTER TABLE TABLENAME MODIFY COLUMN COLUMNNAME VARCHAR(50) BINARY CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL;
1.2 解决方案二
直接修改sql语句,在要查询的字段前面加上binary关键字
-- 在每一个条件前加上binary关键字
select * from user where binary username = 'admin' and binary password = 'admin';
-- 将参数以binary('')包围
select * from user where username like binary('admin') and password like binary('admin');
2. 各种 join 的意思
/*
SQL 脚本
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for score
-- ----------------------------
DROP TABLE IF EXISTS `score`;
CREATE TABLE `score` (
`score_id` int(11) NOT NULL AUTO_INCREMENT,
`score` double NOT NULL,
`stu_id` int(11) NOT NULL,
`subject` varchar(255) NOT NULL,
PRIMARY KEY (`score_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4;
-- ----------------------------
-- Records of score
-- ----------------------------
INSERT INTO `score` VALUES ('1', '90', '1', '语文');
INSERT INTO `score` VALUES ('2', '80', '6', '语文');
-- ----------------------------
-- Table structure for stu
-- ----------------------------
DROP TABLE IF EXISTS `stu`;
CREATE TABLE `stu` (
`stu_id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`stu_id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4;
-- ----------------------------
-- Records of stu
-- ----------------------------
INSERT INTO `stu` VALUES ('1', 'tom1');
INSERT INTO `stu` VALUES ('2', 'tom2');
INSERT INTO `stu` VALUES ('3', 'tom3');
2.1 inner join (内连接)
内连接是一种一一映射关系,就是两张表都有的才能显示出来
内连接.png
内连接示例查询.png
2.2 left join (左连接)
左连接是左边表的所有数据都有显示出来,右边的表数据只显示共同有的那部分,没有对应的部分只能补空显示,
所谓的左边表其实就是指放在left join的左边的表
左连接.png
左连接示例查询.png
2.3 right join (右连接)
右连接正好是和左连接相反的,这里的右边也是相对right join来说的,在这个右边的表就是右表
右连接.png
右连接示例查询.png
2.4 外连接或全连接
查询出左表和右表所有数据,但是去除两表的重复数据.
MySQL 没有 FULL JOIN, 用 UNION 替代.
外连接或全连接.png
外连接或全连接示例查询.png
参考资料
https://mp.weixin.qq.com/s/oh__jOBfqt4IWDK7X2xUcg
网友评论