美文网首页关系型数据库(RDBMS)及ORM框架
MySQL系列(3) 常见语法 & 问题

MySQL系列(3) 常见语法 & 问题

作者: suxin1932 | 来源:发表于2020-02-14 16:46 被阅读0次

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

相关文章

网友评论

    本文标题:MySQL系列(3) 常见语法 & 问题

    本文链接:https://www.haomeiwen.com/subject/mphjfhtx.html