美文网首页关系型数据库(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