zoukankan      html  css  js  c++  java
  • select 语句1——模糊查询,联表查询

    首先来看一下数据库的设计首先是建表

        grade:

    CREATE TABLE `grade` (
      `gradeid` int(11) NOT NULL AUTO_INCREMENT COMMENT '年级编号',
      `gradename` varchar(50) NOT NULL COMMENT '年级名称',
      PRIMARY KEY (`gradeid`)
    ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8

          resul:

    CREATE TABLE `result` (
      `studentno` int(4) NOT NULL COMMENT '学号',
      `subjectno` int(4) NOT NULL COMMENT '课程编号',
      `examdate` datetime NOT NULL COMMENT '考试日期',
      `studentresult` int(4) NOT NULL COMMENT '考试成绩',
      KEY `subjectno` (`subjectno`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8

        student:

     

    CREATE TABLE `student` (
      `studentno` int(4) NOT NULL COMMENT '学号',
      `loginpwd` varchar(20) DEFAULT NULL,
      `studentname` varchar(20) DEFAULT NULL COMMENT '学生姓名',
      `sex` tinyint(1) DEFAULT NULL COMMENT '性别,0或1',
      `gradeid` int(11) DEFAULT NULL COMMENT '年级编号',
      `phone` varchar(50) NOT NULL COMMENT '联系电话,允许为空',
      `address` varchar(255) NOT NULL COMMENT '地址,允许为空',
      `borndate` datetime DEFAULT NULL COMMENT '出生时间',
      `email` varchar(50) NOT NULL COMMENT '邮箱账号允许为空',
      `identitycard` varchar(18) DEFAULT NULL COMMENT '身份证号',
      PRIMARY KEY (`studentno`),
      UNIQUE KEY `identitycard` (`identitycard`),
      KEY `email` (`email`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8

        subject:

    CREATE TABLE `subject` (
      `subjectno` int(11) NOT NULL AUTO_INCREMENT COMMENT '课程编号',
      `subjectname` varchar(50) DEFAULT NULL COMMENT '课程名称',
      `classhour` int(4) DEFAULT NULL COMMENT '学时',
      `gradeid` int(4) DEFAULT NULL COMMENT '年级编号',
      PRIMARY KEY (`subjectno`)
    ) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8

    接着是插入数据(也可以自己一边写,一边根据自己的操作,自己插入数据):

      subject表插入数据:

    insert into `subject`(`subjectno`,`subjectname`,`classhour`,`gradeid`)values
    (1,'高等数学-1',110,1),
    (2,'高等数学-2',110,2),
    (3,'高等数学-3',100,3),
    (4,'高等数学-4',130,4),
    (5,'C语言-1',110,1),
    (6,'C语言-2',110,2),
    (7,'C语言-3',100,3),
    (8,'C语言-4',130,4),
    (9,'Java程序设计-1',110,1),
    (10,'Java程序设计-2',110,2),
    (11,'Java程序设计-3',100,3),
    (12,'Java程序设计-4',130,4),
    (13,'数据库结构-1',110,1),
    (14,'数据库结构-2',110,2),
    (15,'数据库结构-3',100,3),
    (16,'数据库结构-4',130,4),
    (17,'C#基础',130,1);

       student插入数据

    insert into `student` (`studentno`,`loginpwd`,`studentname`,`sex`,`gradeid`,`phone`,`address`,`borndate`,`email`,`identitycard`)
    values
    (1000,'123456','张伟',0,2,'13800001234','北京朝阳','1980-1-1','text123@qq.com','123456198001011234'),
    (1001,'123456','赵强',1,3,'13800002222','广东深圳','1990-1-1','text111@qq.com','123456199001011233');insert into `student` (`studentno`,`loginpwd`,`studentname`,`sex`,`gradeid`,`phone`,`address`,`borndate`,`email`,`identitycard`)
    values
    (1000,'123456','张伟',0,2,'13800001234','北京朝阳','1980-1-1','text123@qq.com','123456198001011234'),
    (1001,'123456','赵强',1,3,'13800002222','广东深圳','1990-1-1','text111@qq.com','123456199001011233');

        result插入数据

    insert into `result`(`studentno`,`subjectno`,`examdate`,`studentresult`)
    values
    (1000,1,'2013-11-11 16:00:00',85),
    (1000,2,'2013-11-12 16:00:00',70),
    (1000,3,'2013-11-11 09:00:00',68),
    (1000,4,'2013-11-13 16:00:00',98),
    (1000,5,'2013-11-14 16:00:00',58);

        grade插入数据:

    insert into `grade` (`gradeid`,`gradename`) values(1,'大一'),(2,'大二'),(3,'大三'),(4,'大四'),(5,'预科班');

    查看当前mysql版本号
      select   version()


    可以用来计算:
      select 19*10-98  as 结果


    对选出的int型数据进行操作
      select studentresult+10 from result

    未操作之前:

    对操作数加10:


    模糊查询:比较运算符

        _       下划线通配符,代替匹配一个字符,(第二个字是东即可)
            select studentname from student  where studentname LIKE '_东%'
        


        %    百分号代表匹配任意个字符   (无论哪个,只要有东就好)
            select studentname from student  where studentname LIKE '%东%'

      


        in   取范围   里面需要的是一个具体的值(查询gradeid为1或者2的)
            select  subjectname,gradeid from subject   where gradeid in ("1","2")


        null  (注意的是null和“"是不一样的,这是查询loginpwd是Nul的)
            select studentname ,loginpwd from student  where  loginpwd is NULL


     联表查询 join(连接的表)    on(条件的判断)

        思路:所查询的字段来自于那些表
                     采用的连接方式(考虑是以那个表作为基准)
        inner join
        left join  从左表进行查询,即使右表没有
        right join
        

        三表联查:学生的姓名,学号,成绩,课程号(注意要查询学生的成绩,以result,成绩表为基准)
        SELECT studentname,a.studentno,studentresult,subjectname FROM student a RIGHT JOIN    
         result  b ON a.studentno=b.studentno  INNER JOIN `subject`  c ON b.subjectno=c.subjectno


        

  • 相关阅读:
    维克里拍卖 Vickrey auction
    弱占优策略--Weakly Dominant Strategy
    乱码电路(Garbled circuits)
    P和NP问题
    揭秘Facebook首个数据中心:全球15亿用户的账户信息都在这里
    数学符号“s.t.”的意义
    PKI系统深入介绍
    [转]公钥,私钥和数字签名这样最好理解
    Exif
    任我行 CRM 9.4
  • 原文地址:https://www.cnblogs.com/moxihuishou/p/13945619.html
Copyright © 2011-2022 走看看